Skip to content

Commit d75f996

Browse files
committed
Fix debug configuration querying not inheriting environment
1 parent b65911d commit d75f996

File tree

4 files changed

+42
-154
lines changed

4 files changed

+42
-154
lines changed

editors/code/src/config.ts

+22-5
Original file line numberDiff line numberDiff line change
@@ -261,21 +261,38 @@ export class Config {
261261
return this.get<boolean | undefined>("testExplorer");
262262
}
263263

264-
get runnablesExtraEnv() {
264+
runnablesExtraEnv(label: string): Record<string, string> | undefined {
265265
const item = this.get<any>("runnables.extraEnv") ?? this.get<any>("runnableEnv");
266-
if (!item) return item;
266+
if (!item) return undefined;
267267
const fixRecord = (r: Record<string, any>) => {
268268
for (const key in r) {
269269
if (typeof r[key] !== "string") {
270270
r[key] = String(r[key]);
271271
}
272272
}
273273
};
274+
275+
const platform = process.platform;
276+
const checkPlatform = (it: RunnableEnvCfgItem) => {
277+
if (it.platform) {
278+
const platforms = Array.isArray(it.platform) ? it.platform : [it.platform];
279+
return platforms.indexOf(platform) >= 0;
280+
}
281+
return true;
282+
};
283+
274284
if (item instanceof Array) {
275-
item.forEach((x) => fixRecord(x.env));
276-
} else {
277-
fixRecord(item);
285+
const env = {};
286+
for (const it of item) {
287+
const masked = !it.mask || new RegExp(it.mask).test(label);
288+
if (masked && checkPlatform(it)) {
289+
Object.assign(env, it.env);
290+
}
291+
}
292+
fixRecord(env);
293+
return env;
278294
}
295+
fixRecord(item);
279296
return item;
280297
}
281298

editors/code/src/debug.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,16 @@ async function getDebugConfiguration(
148148
return path.normalize(p).replace(wsFolder, `\${workspaceFolder${workspaceQualifier}}`);
149149
}
150150

151-
const env = prepareEnv(inheritEnv, runnable.label, runnableArgs, config.runnablesExtraEnv);
152-
const executable = await getDebugExecutable(runnableArgs, env);
151+
const executable = await getDebugExecutable(
152+
runnableArgs,
153+
prepareEnv(true, {}, config.runnablesExtraEnv(runnable.label)),
154+
);
155+
156+
const env = prepareEnv(
157+
inheritEnv,
158+
runnableArgs.environment,
159+
config.runnablesExtraEnv(runnable.label),
160+
);
153161
let sourceFileMap = debugOptions.sourceFileMap;
154162

155163
if (sourceFileMap === "auto") {

editors/code/src/run.ts

+10-25
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import * as tasks from "./tasks";
55

66
import type { CtxInit } from "./ctx";
77
import { makeDebugConfig } from "./debug";
8-
import type { Config, RunnableEnvCfg, RunnableEnvCfgItem } from "./config";
8+
import type { Config } from "./config";
99
import type { LanguageClient } from "vscode-languageclient/node";
1010
import { unwrapUndefinable, type RustEditor } from "./util";
1111

@@ -81,32 +81,13 @@ export function prepareBaseEnv(
8181

8282
export function prepareEnv(
8383
inheritEnv: boolean,
84-
label: string,
85-
runnableArgs: ra.CargoRunnableArgs,
86-
runnableEnvCfg?: RunnableEnvCfg,
84+
runnableEnv?: Record<string, string>,
85+
runnableEnvCfg?: Record<string, string>,
8786
): Record<string, string> {
88-
const env = prepareBaseEnv(inheritEnv, runnableArgs.environment);
89-
const platform = process.platform;
90-
91-
const checkPlatform = (it: RunnableEnvCfgItem) => {
92-
if (it.platform) {
93-
const platforms = Array.isArray(it.platform) ? it.platform : [it.platform];
94-
return platforms.indexOf(platform) >= 0;
95-
}
96-
return true;
97-
};
87+
const env = prepareBaseEnv(inheritEnv, runnableEnv);
9888

9989
if (runnableEnvCfg) {
100-
if (Array.isArray(runnableEnvCfg)) {
101-
for (const it of runnableEnvCfg) {
102-
const masked = !it.mask || new RegExp(it.mask).test(label);
103-
if (masked && checkPlatform(it)) {
104-
Object.assign(env, it.env);
105-
}
106-
}
107-
} else {
108-
Object.assign(env, runnableEnvCfg);
109-
}
90+
Object.assign(env, runnableEnvCfg);
11091
}
11192

11293
return env;
@@ -140,7 +121,11 @@ export async function createTaskFromRunnable(
140121
};
141122
options = {
142123
cwd: runnableArgs.workspaceRoot || ".",
143-
env: prepareEnv(true, runnable.label, runnableArgs, config.runnablesExtraEnv),
124+
env: prepareEnv(
125+
true,
126+
runnableArgs.environment,
127+
config.runnablesExtraEnv(runnable.label),
128+
),
144129
};
145130
} else {
146131
const runnableArgs = runnable.args;

editors/code/tests/unit/runnable_env.test.ts

-122
This file was deleted.

0 commit comments

Comments
 (0)