Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/src/commands.ts')
-rw-r--r--editors/code/src/commands.ts29
1 files changed, 28 insertions, 1 deletions
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index f4a4579a92..8a953577e9 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -3,7 +3,7 @@ import * as lc from "vscode-languageclient";
import * as ra from "./lsp_ext";
import * as path from "path";
-import { Ctx, Cmd, CtxInit } from "./ctx";
+import { Ctx, Cmd, CtxInit, discoverWorkspace } from "./ctx";
import { applySnippetWorkspaceEdit, applySnippetTextEdits } from "./snippets";
import { spawnSync } from "child_process";
import { RunnableQuickPick, selectRunnable, createTask, createArgs } from "./run";
@@ -749,6 +749,33 @@ export function reloadWorkspace(ctx: CtxInit): Cmd {
return async () => ctx.client.sendRequest(ra.reloadWorkspace);
}
+export function addProject(ctx: CtxInit): Cmd {
+ return async () => {
+ const discoverProjectCommand = ctx.config.discoverProjectCommand;
+ if (!discoverProjectCommand) {
+ return;
+ }
+
+ const workspaces: JsonProject[] = await Promise.all(
+ vscode.workspace.workspaceFolders!.map(async (folder): Promise<JsonProject> => {
+ const rustDocuments = vscode.workspace.textDocuments.filter(isRustDocument);
+ return discoverWorkspace(rustDocuments, discoverProjectCommand, {
+ cwd: folder.uri.fsPath,
+ });
+ })
+ );
+
+ ctx.addToDiscoveredWorkspaces(workspaces);
+
+ // this is a workaround to avoid needing writing the `rust-project.json` into
+ // a workspace-level VS Code-specific settings folder. We'd like to keep the
+ // `rust-project.json` entirely in-memory.
+ await ctx.client?.sendNotification(lc.DidChangeConfigurationNotification.type, {
+ settings: "",
+ });
+ };
+}
+
async function showReferencesImpl(
client: LanguageClient | undefined,
uri: string,