aboutsummaryrefslogtreecommitdiff
path: root/editors/code/src
diff options
context:
space:
mode:
Diffstat (limited to 'editors/code/src')
-rw-r--r--editors/code/src/commands.ts5
-rw-r--r--editors/code/src/debug.ts12
-rw-r--r--editors/code/src/lsp_ext.ts1
3 files changed, 14 insertions, 4 deletions
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index c21e5597c..d0faf4745 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -190,6 +190,7 @@ export function ssr(ctx: Ctx): Cmd {
190 if (!editor || !client) return; 190 if (!editor || !client) return;
191 191
192 const position = editor.selection.active; 192 const position = editor.selection.active;
193 const selections = editor.selections;
193 const textDocument = { uri: editor.document.uri.toString() }; 194 const textDocument = { uri: editor.document.uri.toString() };
194 195
195 const options: vscode.InputBoxOptions = { 196 const options: vscode.InputBoxOptions = {
@@ -198,7 +199,7 @@ export function ssr(ctx: Ctx): Cmd {
198 validateInput: async (x: string) => { 199 validateInput: async (x: string) => {
199 try { 200 try {
200 await client.sendRequest(ra.ssr, { 201 await client.sendRequest(ra.ssr, {
201 query: x, parseOnly: true, textDocument, position, 202 query: x, parseOnly: true, textDocument, position, selections,
202 }); 203 });
203 } catch (e) { 204 } catch (e) {
204 return e.toString(); 205 return e.toString();
@@ -215,7 +216,7 @@ export function ssr(ctx: Ctx): Cmd {
215 cancellable: false, 216 cancellable: false,
216 }, async (_progress, _token) => { 217 }, async (_progress, _token) => {
217 const edit = await client.sendRequest(ra.ssr, { 218 const edit = await client.sendRequest(ra.ssr, {
218 query: request, parseOnly: false, textDocument, position 219 query: request, parseOnly: false, textDocument, position, selections,
219 }); 220 });
220 221
221 await vscode.workspace.applyEdit(client.protocol2CodeConverter.asWorkspaceEdit(edit)); 222 await vscode.workspace.applyEdit(client.protocol2CodeConverter.asWorkspaceEdit(edit));
diff --git a/editors/code/src/debug.ts b/editors/code/src/debug.ts
index bd92c5b6d..925126a16 100644
--- a/editors/code/src/debug.ts
+++ b/editors/code/src/debug.ts
@@ -87,9 +87,17 @@ async function getDebugConfiguration(ctx: Ctx, runnable: ra.Runnable): Promise<v
87 debugOutput.show(true); 87 debugOutput.show(true);
88 } 88 }
89 89
90 const wsFolder = path.normalize(vscode.workspace.workspaceFolders![0].uri.fsPath); // folder exists or RA is not active. 90 const isMultiFolderWorkspace = vscode.workspace.workspaceFolders!.length > 1;
91 const firstWorkspace = vscode.workspace.workspaceFolders![0]; // folder exists or RA is not active.
92 const workspace = !isMultiFolderWorkspace || !runnable.args.workspaceRoot ?
93 firstWorkspace :
94 vscode.workspace.workspaceFolders!.find(w => runnable.args.workspaceRoot?.includes(w.uri.fsPath)) || firstWorkspace;
95
96 const wsFolder = path.normalize(workspace.uri.fsPath);
97 const workspaceQualifier = isMultiFolderWorkspace ? `:${workspace.name}` : '';
91 function simplifyPath(p: string): string { 98 function simplifyPath(p: string): string {
92 return path.normalize(p).replace(wsFolder, '${workspaceRoot}'); 99 // see https://github.com/rust-analyzer/rust-analyzer/pull/5513#issuecomment-663458818 for why this is needed
100 return path.normalize(p).replace(wsFolder, '${workspaceFolder' + workspaceQualifier + '}');
93 } 101 }
94 102
95 const executable = await getDebugExecutable(runnable); 103 const executable = await getDebugExecutable(runnable);
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts
index 149f9a0d6..494d51c83 100644
--- a/editors/code/src/lsp_ext.ts
+++ b/editors/code/src/lsp_ext.ts
@@ -95,6 +95,7 @@ export interface SsrParams {
95 parseOnly: boolean; 95 parseOnly: boolean;
96 textDocument: lc.TextDocumentIdentifier; 96 textDocument: lc.TextDocumentIdentifier;
97 position: lc.Position; 97 position: lc.Position;
98 selections: lc.Range[];
98} 99}
99export const ssr = new lc.RequestType<SsrParams, lc.WorkspaceEdit, void>('experimental/ssr'); 100export const ssr = new lc.RequestType<SsrParams, lc.WorkspaceEdit, void>('experimental/ssr');
100 101