diff --git a/src/utils/resolveVariables.ts b/src/utils/resolveVariables.ts index 2134a56bd7..484d7510c2 100644 --- a/src/utils/resolveVariables.ts +++ b/src/utils/resolveVariables.ts @@ -10,6 +10,7 @@ import { cloneObject } from '../utils/cloneObject'; const variableMatcher: RegExp = /\$\{[a-z.\-_:]+\}/ig; const configVariableMatcher: RegExp = /\$\{config:([a-z.\-_]+)\}/i; +const envVariableMatcher: RegExp = /\$\{env:([\w\d]+)\}/i; export function resolveVariables(target: T, folder?: WorkspaceFolder, additionalVariables?: { [key: string]: string }): T { if (!target) { @@ -50,14 +51,14 @@ function resolveSingleVariable(variable: string, folder?: WorkspaceFolder, addit } } - // Replace additional variables + // Replace additional variables as specified by the caller const variableNameOnly = variable.replace(/[${}]/ig, ''); const replacement = additionalVariables?.[variable] ?? additionalVariables?.[variableNameOnly]; if (replacement !== undefined) { return replacement; } - // Replace config variables + // Replace config variables, e.g. ${config:foo.bar} const configMatch = configVariableMatcher.exec(variable); if (configMatch && configMatch.length > 1) { const configName: string = configMatch[1]; // Index 1 is the "something.something" group of "${config:something.something}" @@ -72,6 +73,17 @@ function resolveSingleVariable(variable: string, folder?: WorkspaceFolder, addit } } + // Replace environment variables, e.g. ${env:FOO} + const envMatch = envVariableMatcher.exec(variable); + if (envMatch && envMatch.length > 1) { + const envVarName: string = envMatch[1]; // Index 1 is the "FOO" group of "${env:FOO}" + const envVarValue = process.env[envVarName]; + + if (envVarValue) { + return envVarValue; + } + } + // Replace other variables switch (variable) { case '${file}':