Auto merge of #15308 - vsrs:runnable_env_per_platform, r=HKalbasi

Runnable env per platform

This PR adds an option to specify runnables `env` per platform (win32, linux, etc.):
```
{
    "rust-analyzer.runnables.extraEnv": [
            {
                "platform": "win32",
                "env": {
                    "SCITER_BIN_FOLDER": "C:\\Projects\\3rd\\sciter-js-sdk\\bin\\windows\\x64",
                }
            },
            {
                "platform":["linux","darwin"],
                "env": {
                    "SCITER_BIN_FOLDER": "/home/vit/Projects/sciter/sciter-js-sdk/bin/linux/x64",
                }
            }
        ]
}
```
This commit is contained in:
bors 2023-07-28 07:03:09 +00:00
commit bc1b0bfa7f
4 changed files with 50 additions and 6 deletions

View file

@ -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";

View file

@ -5,7 +5,7 @@ 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";
const quickPickButtons = [
@ -112,11 +112,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);
}
}