Skip to content

Scoped ${workspaceFolder:<folder>} doesn't resolve named folders in multi-root workspace #22452

@OmeGak

Description

@OmeGak

Behaviour

Potentially related to #18650.

Expected vs. Actual

I have a multi-root workspace and I name the folders for clarity in the file explorer and search results. The ${workspaceFolder} variable, however, doesn't seem to be resolved correctly when scoped by folder name in Python settings like python.defaultInterpreterPath. Given the following folders definition in my .code-workspace file:

{
    "folders": [
        {
            "name": "named-folder",
            "path": "org/projects/project-folder"
        }
    ]
}

I expect to be able to use ${workspaceFolder:named-folder} in python.defaultInterpreterPath:

{
    "settings": {
        "python.defaultInterpreterPath": "${workspaceFolder:named-folder}/.venv/bin/python",
    }
}

Instead, ${workspaceFolder:named-folder} is not resolved at all and I'm forced to use the implicit folder name as derived from its path:

{
    "settings": {
        "python.defaultInterpreterPath": "${workspaceFolder:project-folder}/.venv/bin/python",
    }
}

This is inconsistent with how ${workspaceFolder:<folder>} is resolved in other places. For instance, ${workspaceFolder:project-folder} will not resolve in a task when the folder is named like in my example above:

{
    "tasks": {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "echo",
                "type": "shell",
                "command": "echo ${workspaceFolder:project-folder}",
            }
        ]
    },
}
Variable ${workspaceFolder:project-folder} can not be resolved. No such folder 'project-folder'.

Steps to reproduce:

  1. Create a multi-root workspace with at least one explicitly named folder, like in my example above.
  2. Set the defaultInterpreterPath to ${workspaceFolder:<explicit-folder-name>}/<relative-path-to-python-interpreter>
  3. Observe in the Python output that the ${workspaceFolder} was not resolved and, thus, no interpreter is found.
  • Python version (& distribution if applicable, e.g. Anaconda): 3.9.16
  • Type of virtual environment used (e.g. conda, venv, virtualenv, etc.): Unknown
  • Value of the python.languageServer setting: Pylance
Output for Python in the Output panel (ViewOutput, change the drop-down the upper-right of the Output panel to Python)

2023-11-09 12:16:51.050 [warning] Identifier for virt-virtualenv failed to identify /Users/ome/Code/org/projects/project-folder/${workspaceFolder:named-folder}/.venv/bin/python [Error: ENOENT: no such file or directory, scandir '/Users/ome/Code/org/projects/project-folder/${workspaceFolder:named-folder}/.venv/bin'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'scandir',
  path: '/Users/ome/Code/org/projects/project-folder/${workspaceFolder:named-folder}/.venv/bin'
}

Metadata

Metadata

Assignees

Labels

area-environmentsFeatures relating to handling interpreter environmentsfeature-requestRequest for new features or functionalityverification-neededVerification of issue is requestedverifiedVerification succeeded

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions