Unnamed repository; edit this file 'description' to name the repository.
Platform specific runnables env
vsrs 2023-07-18
parent cc2f0ec · commit 3468b09
-rw-r--r--editors/code/package.json9
-rw-r--r--editors/code/src/config.ts10
-rw-r--r--editors/code/src/run.ts15
3 files changed, 28 insertions, 6 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index ffb5dd9079..6913841b3f 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -325,6 +325,15 @@
"items": {
"type": "object",
"properties": {
+ "platform": {
+ "type": [
+ "null",
+ "string",
+ "array"
+ ],
+ "default": null,
+ "markdownDescription": "Platform(s) filter like \"win32\" or [\"linux\", \"win32\"]. See [process.platform](https://nodejs.org/api/process.html#processplatform) values."
+ },
"mask": {
"type": "string",
"description": "Runnable name mask"
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index a047f9659a..0e64054c11 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -6,10 +6,12 @@ import type { Env } from "./client";
import { log } from "./util";
import { expectNotUndefined, unwrapUndefinable } from "./undefinable";
-export type RunnableEnvCfg =
- | undefined
- | Record<string, string>
- | { mask?: string; env: Record<string, string> }[];
+export type RunnableEnvCfgItem = {
+ mask?: string;
+ env: Record<string, string>;
+ platform?: string | string[];
+};
+export type RunnableEnvCfg = undefined | Record<string, string> | RunnableEnvCfgItem[];
export class Config {
readonly extensionId = "rust-lang.rust-analyzer";
diff --git a/editors/code/src/run.ts b/editors/code/src/run.ts
index c893d39055..8d468141d5 100644
--- a/editors/code/src/run.ts
+++ b/editors/code/src/run.ts
@@ -5,8 +5,9 @@ import * as tasks from "./tasks";
import type { CtxInit } from "./ctx";
import { makeDebugConfig } from "./debug";
-import type { Config, RunnableEnvCfg } from "./config";
+import type { Config, RunnableEnvCfg, RunnableEnvCfgItem } from "./config";
import { unwrapUndefinable } from "./undefinable";
+import { string } from "vscode-languageclient/lib/common/utils/is";
const quickPickButtons = [
{ iconPath: new vscode.ThemeIcon("save"), tooltip: "Save as a launch.json configuration." },
@@ -112,11 +113,21 @@ export function prepareEnv(
}
Object.assign(env, process.env as { [key: string]: string });
+ const platform = process.platform;
+
+ const checkPlatform = (it: RunnableEnvCfgItem) => {
+ if (it.platform) {
+ const platforms = Array.isArray(it.platform) ? it.platform : [it.platform];
+ return platforms.indexOf(platform) >= 0;
+ }
+ return true;
+ };
if (runnableEnvCfg) {
if (Array.isArray(runnableEnvCfg)) {
for (const it of runnableEnvCfg) {
- if (!it.mask || new RegExp(it.mask).test(runnable.label)) {
+ const masked = !it.mask || new RegExp(it.mask).test(runnable.label);
+ if (masked && checkPlatform(it)) {
Object.assign(env, it.env);
}
}