diff options
| author | Jonas Schievink <jonas.schievink@ferrous-systems.com> | 2022-08-23 15:45:02 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonas.schievink@ferrous-systems.com> | 2022-08-23 15:45:02 +0200 |
| commit | 16a0eb1829b569e2d1e1046a60fd7e25aa35bfcf (patch) | |
| tree | bfdea20462adb3f71e839ecbe847b1eac5f0a53d | |
| parent | f045f146263b1816f0b3472b528841b5877c020f (diff) | |
| download | rust-16a0eb1829b569e2d1e1046a60fd7e25aa35bfcf.tar.gz rust-16a0eb1829b569e2d1e1046a60fd7e25aa35bfcf.zip | |
Avoid error popup when using in Live Share
| -rw-r--r-- | editors/code/src/main.ts | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index a9847dd2a65..ae145234792 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts @@ -33,7 +33,7 @@ export function outputChannel() { } export interface RustAnalyzerExtensionApi { - client: lc.LanguageClient; + client?: lc.LanguageClient; } export async function activate( @@ -48,6 +48,23 @@ export async function activate( } async function tryActivate(context: vscode.ExtensionContext): Promise<RustAnalyzerExtensionApi> { + // We only support local folders, not eg. Live Share (`vlsl:` scheme), so don't activate if + // only those are in use. + // (r-a still somewhat works with Live Share, because commands are tunneled to the host) + const folders = (vscode.workspace.workspaceFolders || []).filter((folder) => + folder.uri.scheme == "file" + ); + const rustDocuments = vscode.workspace.textDocuments.filter((document) => + isRustDocument(document) + ); + + if (folders.length == 0 && rustDocuments.length == 0) { + // FIXME: Ideally we would choose not to activate at all (and avoid registering + // non-functional editor commands), but VS Code doesn't seem to have a good way of doing + // that + return {}; + } + const config = new Config(context); const state = new PersistentState(context.globalState); const serverPath = await bootstrap(context, config, state).catch((err) => { @@ -60,18 +77,11 @@ async function tryActivate(context: vscode.ExtensionContext): Promise<RustAnalyz throw new Error(message); }); - if ((vscode.workspace.workspaceFolders || []).length === 0) { - const rustDocuments = vscode.workspace.textDocuments.filter((document) => - isRustDocument(document) - ); - if (rustDocuments.length > 0) { - ctx = await Ctx.create(config, context, serverPath, { - kind: "Detached Files", - files: rustDocuments, - }); - } else { - throw new Error("no rust files are opened"); - } + if (folders.length === 0) { + ctx = await Ctx.create(config, context, serverPath, { + kind: "Detached Files", + files: rustDocuments, + }); } else { // Note: we try to start the server before we activate type hints so that it // registers its `onDidChangeDocument` handler before us. |
