mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 05:53:45 +00:00
Avoid error popup when using in Live Share
This commit is contained in:
parent
f045f14626
commit
16a0eb1829
1 changed files with 23 additions and 13 deletions
|
@ -33,7 +33,7 @@ export function outputChannel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RustAnalyzerExtensionApi {
|
export interface RustAnalyzerExtensionApi {
|
||||||
client: lc.LanguageClient;
|
client?: lc.LanguageClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function activate(
|
export async function activate(
|
||||||
|
@ -48,6 +48,23 @@ export async function activate(
|
||||||
}
|
}
|
||||||
|
|
||||||
async function tryActivate(context: vscode.ExtensionContext): Promise<RustAnalyzerExtensionApi> {
|
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 config = new Config(context);
|
||||||
const state = new PersistentState(context.globalState);
|
const state = new PersistentState(context.globalState);
|
||||||
const serverPath = await bootstrap(context, config, state).catch((err) => {
|
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);
|
throw new Error(message);
|
||||||
});
|
});
|
||||||
|
|
||||||
if ((vscode.workspace.workspaceFolders || []).length === 0) {
|
if (folders.length === 0) {
|
||||||
const rustDocuments = vscode.workspace.textDocuments.filter((document) =>
|
ctx = await Ctx.create(config, context, serverPath, {
|
||||||
isRustDocument(document)
|
kind: "Detached Files",
|
||||||
);
|
files: rustDocuments,
|
||||||
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");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Note: we try to start the server before we activate type hints so that it
|
// Note: we try to start the server before we activate type hints so that it
|
||||||
// registers its `onDidChangeDocument` handler before us.
|
// registers its `onDidChangeDocument` handler before us.
|
||||||
|
|
Loading…
Reference in a new issue