Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #15779 - Veykril:open-docs, r=Veykril
Add command for only opening external docs and attempt to fix vscode-remote issue opening URI in a remote env causes vscode to ask the OS to handle `vscode-remote` URIs as there is no handler registered for such a scheme. This attempts to instruct vscode to handle those. This is untested, as I can't figure out how to open a debug session on WSL rn.
bors 2023-10-18
parent 7f1e6fd · parent 4296fe5 · commit 4586a6b
-rw-r--r--editors/code/package.json9
-rw-r--r--editors/code/src/commands.ts46
-rw-r--r--editors/code/src/lsp_ext.ts8
-rw-r--r--editors/code/src/main.ts1
4 files changed, 47 insertions, 17 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index fc6597a0d4..2dde66c970 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -249,6 +249,11 @@
"category": "rust-analyzer"
},
{
+ "command": "rust-analyzer.openExternalDocs",
+ "title": "Open External Docs",
+ "category": "rust-analyzer"
+ },
+ {
"command": "rust-analyzer.openCargoToml",
"title": "Open Cargo.toml",
"category": "rust-analyzer"
@@ -260,12 +265,12 @@
},
{
"command": "rust-analyzer.moveItemUp",
- "title": "Move item up",
+ "title": "Move Item Up",
"category": "rust-analyzer"
},
{
"command": "rust-analyzer.moveItemDown",
- "title": "Move item down",
+ "title": "Move Item Down",
"category": "rust-analyzer"
},
{
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index 4d5c3cf457..7e24de664e 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -948,27 +948,51 @@ export function openDocs(ctx: CtxInit): Cmd {
const position = editor.selection.active;
const textDocument = { uri: editor.document.uri.toString() };
- const doclinks = await client.sendRequest(ra.openDocs, { position, textDocument });
+ const docLinks = await client.sendRequest(ra.openDocs, { position, textDocument });
+ log.debug(docLinks);
let fileType = vscode.FileType.Unknown;
- if (typeof doclinks.local === "string") {
+ if (docLinks.local !== undefined) {
try {
- fileType = (await vscode.workspace.fs.stat(vscode.Uri.parse(doclinks.local))).type;
+ fileType = (await vscode.workspace.fs.stat(vscode.Uri.parse(docLinks.local))).type;
} catch (e) {
log.debug("stat() threw error. Falling back to web version", e);
}
}
- let doclink;
- if (fileType & vscode.FileType.File) {
- // file does exist locally
- doclink = doclinks.local;
- } else {
- doclink = doclinks.web;
+ let docLink = fileType & vscode.FileType.File ? docLinks.local : docLinks.web;
+ if (docLink) {
+ // instruct vscode to handle the vscode-remote link directly
+ if (docLink.startsWith("vscode-remote://")) {
+ docLink = docLink.replace("vscode-remote://", "vscode://vscode-remote/");
+ }
+ const docUri = vscode.Uri.parse(docLink);
+ await vscode.env.openExternal(docUri);
+ }
+ };
+}
+
+export function openExternalDocs(ctx: CtxInit): Cmd {
+ return async () => {
+ const editor = vscode.window.activeTextEditor;
+ if (!editor) {
+ return;
}
+ const client = ctx.client;
+
+ const position = editor.selection.active;
+ const textDocument = { uri: editor.document.uri.toString() };
- if (doclink != null) {
- await vscode.env.openExternal(vscode.Uri.parse(doclink));
+ const docLinks = await client.sendRequest(ra.openDocs, { position, textDocument });
+
+ let docLink = docLinks.web;
+ if (docLink) {
+ // instruct vscode to handle the vscode-remote link directly
+ if (docLink.startsWith("vscode-remote://")) {
+ docLink = docLink.replace("vscode-remote://", "vscode://vscode-remote/");
+ }
+ const docUri = vscode.Uri.parse(docLink);
+ await vscode.env.openExternal(docUri);
}
};
}
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts
index a1cd88b89c..f959a76639 100644
--- a/editors/code/src/lsp_ext.ts
+++ b/editors/code/src/lsp_ext.ts
@@ -74,8 +74,8 @@ export interface FetchDependencyListParams {}
export interface FetchDependencyListResult {
crates: {
- name: string | undefined;
- version: string | undefined;
+ name?: string;
+ version?: string;
path: string;
}[];
}
@@ -136,8 +136,8 @@ export const openCargoToml = new lc.RequestType<OpenCargoTomlParams, lc.Location
"experimental/openCargoToml",
);
export interface DocsUrls {
- local: string | void;
- web: string | void;
+ local?: string;
+ web?: string;
}
export const openDocs = new lc.RequestType<lc.TextDocumentPositionParams, DocsUrls, void>(
"experimental/externalDocs",
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index ee5e5b1b80..5de5aabc39 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -170,6 +170,7 @@ function createCommands(): Record<string, CommandFactory> {
debug: { enabled: commands.debug },
newDebugConfig: { enabled: commands.newDebugConfig },
openDocs: { enabled: commands.openDocs },
+ openExternalDocs: { enabled: commands.openExternalDocs },
openCargoToml: { enabled: commands.openCargoToml },
peekTests: { enabled: commands.peekTests },
moveItemUp: { enabled: commands.moveItemUp },