astral-sh/ruff-vscode

Environment variables are not expanded in "ruff.path" VSCode settings

erjac77 opened this issue · 4 comments

Ruff: 0.3.7
VSCode: 1.88.0
OS: Ubuntu 22.04
Python: 3.11.8

If I specify a path to a custom ruff executable containing environment variables:

"ruff.path": [
  "${workspaceFolder}/dist/export/python/virtualenvs/ruff/${env:PYTHON_VERSION}/bin/ruff"
]

I get the following error message:

Interpreter executable (/workspace/dist/export/python/virtualenvs/ruff/${env:PYTHON_VERSION}/bin/ruff) not found

Seems like predefined variables are expanded, but not the environment variables.

Related to #413.

Thank you.

I'm unsure where VS Code retrieves the environment variables from. Is it possible that the environment variable isn't defined in the environment where VS Code is launched? Could you try opening VS Code via the shell in which the environment variable is defined (like code .)?

Ok, that actually doesn't work either.

I looked into this a bit more and it seems that the extension only substitutes certain variables which I assume is just a side effect of inheriting from the Python extension template:

function resolveVariables(value: string[], workspace?: WorkspaceFolder): string[] {
const substitutions = new Map<string, string>();
const home = process.env.HOME || process.env.USERPROFILE;
if (home) {
substitutions.set("${userHome}", home);
}
if (workspace) {
substitutions.set("${workspaceFolder}", workspace.uri.fsPath);
}
substitutions.set("${cwd}", process.cwd());
getWorkspaceFolders().forEach((w) => {
substitutions.set("${workspaceFolder:" + w.name + "}", w.uri.fsPath);
});
return value.map((s) => {
for (const [key, value] of substitutions) {
s = s.replace(key, value);
}
return s;
});
}