Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
erjac77 opened this issue Apr 13, 2024 · 3 comments
Open
Labels
question Further information is requested

Comments

@erjac77
Copy link

erjac77 commented Apr 13, 2024

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.

@dhruvmanila
Copy link
Member

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 .)?

@dhruvmanila dhruvmanila added the question Further information is requested label Apr 24, 2024
@dhruvmanila
Copy link
Member

Ok, that actually doesn't work either.

@dhruvmanila
Copy link
Member

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;
});
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants