aboutsummaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
authorvsrs <[email protected]>2021-04-22 13:27:56 +0100
committervsrs <[email protected]>2021-04-22 13:27:56 +0100
commit8f781e782c7e16aa323672620753ec31526d2b90 (patch)
treeacc48eaf35c2794483c9c95591357b71711883d7 /editors
parentd1c9bd134df23aadc7d3fea7907269d841db9063 (diff)
Autodetect rust library source file map
Diffstat (limited to 'editors')
-rw-r--r--editors/code/src/debug.ts12
-rw-r--r--editors/code/src/toolchain.ts21
2 files changed, 31 insertions, 2 deletions
diff --git a/editors/code/src/debug.ts b/editors/code/src/debug.ts
index 3889a2773..fe8ec1be4 100644
--- a/editors/code/src/debug.ts
+++ b/editors/code/src/debug.ts
@@ -3,7 +3,7 @@ import * as vscode from 'vscode';
3import * as path from 'path'; 3import * as path from 'path';
4import * as ra from './lsp_ext'; 4import * as ra from './lsp_ext';
5 5
6import { Cargo } from './toolchain'; 6import { Cargo, sysrootForDir as getSysroot } from './toolchain';
7import { Ctx } from "./ctx"; 7import { Ctx } from "./ctx";
8import { prepareEnv } from "./run"; 8import { prepareEnv } from "./run";
9 9
@@ -104,7 +104,15 @@ async function getDebugConfiguration(ctx: Ctx, runnable: ra.Runnable): Promise<v
104 104
105 const executable = await getDebugExecutable(runnable); 105 const executable = await getDebugExecutable(runnable);
106 const env = prepareEnv(runnable, ctx.config.runnableEnv); 106 const env = prepareEnv(runnable, ctx.config.runnableEnv);
107 const debugConfig = knownEngines[debugEngine.id](runnable, simplifyPath(executable), env, debugOptions.sourceFileMap); 107 let sourceFileMap = debugOptions.sourceFileMap;
108 if ( !sourceFileMap || Object.keys(sourceFileMap).length === 0 ) {
109 // let's try to use the default toolchain
110 const sysroot = await getSysroot(wsFolder);
111 const rustlib_src = path.normalize(sysroot + "/lib/rustlib/src/rust");
112 sourceFileMap = { "/rustc/*": rustlib_src };
113 }
114
115 const debugConfig = knownEngines[debugEngine.id](runnable, simplifyPath(executable), env, sourceFileMap);
108 if (debugConfig.type in debugOptions.engineSettings) { 116 if (debugConfig.type in debugOptions.engineSettings) {
109 const settingsMap = (debugOptions.engineSettings as any)[debugConfig.type]; 117 const settingsMap = (debugOptions.engineSettings as any)[debugConfig.type];
110 for (var key in settingsMap) { 118 for (var key in settingsMap) {
diff --git a/editors/code/src/toolchain.ts b/editors/code/src/toolchain.ts
index a5dc3cf0c..b746da1d9 100644
--- a/editors/code/src/toolchain.ts
+++ b/editors/code/src/toolchain.ts
@@ -121,6 +121,27 @@ export class Cargo {
121 } 121 }
122} 122}
123 123
124/** Mirrors `project_model::sysroot::discover_sysroot_dir()` implementation*/
125export function sysrootForDir(dir: string): Promise<string> {
126 const rustc_path = getPathForExecutable("rustc");
127
128 return new Promise((resolve, reject) => {
129 cp.exec(`${rustc_path} --print sysroot`, { cwd: dir }, (err, stdout, stderr) => {
130 if (err) {
131 reject(err);
132 return;
133 }
134
135 if (stderr) {
136 reject(new Error(stderr));
137 return;
138 }
139
140 resolve(stdout.trimEnd());
141 });
142 });
143}
144
124/** Mirrors `toolchain::cargo()` implementation */ 145/** Mirrors `toolchain::cargo()` implementation */
125export function cargoPath(): string { 146export function cargoPath(): string {
126 return getPathForExecutable("cargo"); 147 return getPathForExecutable("cargo");