diff --git a/editors/vscode/src/browser.ts b/editors/vscode/src/browser.ts index ce66bce85..d6982f28a 100644 --- a/editors/vscode/src/browser.ts +++ b/editors/vscode/src/browser.ts @@ -24,7 +24,25 @@ function startClient( //let args = vscode.workspace.getConfiguration('slint').get<[string]>('lsp-args'); // Options to control the language client - const clientOptions = common.languageClientOptions(telemetryLogger); + // Note: This works with way more schemes than the native LSP as it goes + // through VSCode to open files by necessity. + // https://github.com/microsoft/vscode/blob/main/src/vs/base/common/network.ts + // lists all the known schemes in VSCode (without extensions). I err on the + // side of allowing too much here I think... + const clientOptions = common.languageClientOptions( + [ + "file", + "http", + "https", + "inmemory", + "vscode-file", + "vscode-remote", + "vscode-remote-resource", + "vscode-vfs", // github.dev uses this + "vsls", + ], + telemetryLogger, + ); clientOptions.synchronize = {}; clientOptions.initializationOptions = {}; diff --git a/editors/vscode/src/common.ts b/editors/vscode/src/common.ts index dc8a23960..dbb0dd7d0 100644 --- a/editors/vscode/src/common.ts +++ b/editors/vscode/src/common.ts @@ -100,10 +100,17 @@ export function setServerStatus( // as needed and makes the triggering side so much simpler! export function languageClientOptions( + schemes: string[], telemetryLogger: vscode.TelemetryLogger, ): LanguageClientOptions { + var document_selector = []; + for (var scheme of schemes) { + document_selector.push({ scheme: scheme, language: "slint" }); + document_selector.push({ scheme: scheme, language: "rust" }); + } + return { - documentSelector: [{ language: "slint" }, { language: "rust" }], + documentSelector: document_selector, middleware: { async provideCodeActions( document: vscode.TextDocument, diff --git a/editors/vscode/src/extension.ts b/editors/vscode/src/extension.ts index aeec7118c..812abc6da 100644 --- a/editors/vscode/src/extension.ts +++ b/editors/vscode/src/extension.ts @@ -195,7 +195,7 @@ function startClient( "slint-lsp", "Slint", serverOptions, - common.languageClientOptions(telemetryLogger), + common.languageClientOptions(["file"], telemetryLogger), ); common.prepare_client(cl);