Platform specific runnables env

This commit is contained in:
vsrs 2023-07-18 17:51:57 +07:00
parent cc2f0ec32c
commit 3468b093bd
3 changed files with 28 additions and 6 deletions

View File

@ -325,6 +325,15 @@
"items": { "items": {
"type": "object", "type": "object",
"properties": { "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": { "mask": {
"type": "string", "type": "string",
"description": "Runnable name mask" "description": "Runnable name mask"

View File

@ -6,10 +6,12 @@ import type { Env } from "./client";
import { log } from "./util"; import { log } from "./util";
import { expectNotUndefined, unwrapUndefinable } from "./undefinable"; import { expectNotUndefined, unwrapUndefinable } from "./undefinable";
export type RunnableEnvCfg = export type RunnableEnvCfgItem = {
| undefined mask?: string;
| Record<string, string> env: Record<string, string>;
| { mask?: string; env: Record<string, string> }[]; platform?: string | string[];
};
export type RunnableEnvCfg = undefined | Record<string, string> | RunnableEnvCfgItem[];
export class Config { export class Config {
readonly extensionId = "rust-lang.rust-analyzer"; readonly extensionId = "rust-lang.rust-analyzer";

View File

@ -5,8 +5,9 @@ import * as tasks from "./tasks";
import type { CtxInit } from "./ctx"; import type { CtxInit } from "./ctx";
import { makeDebugConfig } from "./debug"; import { makeDebugConfig } from "./debug";
import type { Config, RunnableEnvCfg } from "./config"; import type { Config, RunnableEnvCfg, RunnableEnvCfgItem } from "./config";
import { unwrapUndefinable } from "./undefinable"; import { unwrapUndefinable } from "./undefinable";
import { string } from "vscode-languageclient/lib/common/utils/is";
const quickPickButtons = [ const quickPickButtons = [
{ iconPath: new vscode.ThemeIcon("save"), tooltip: "Save as a launch.json configuration." }, { 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 }); 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 (runnableEnvCfg) {
if (Array.isArray(runnableEnvCfg)) { if (Array.isArray(runnableEnvCfg)) {
for (const it of 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); Object.assign(env, it.env);
} }
} }