Repository navigation
Language server caching over-disposes LS instances, breaks on interpreter change #11317
Description
Activity
- addedbugIssue identified by VS Code Team member as probable bugIssue identified by VS Code Team member as probable bugtriage-neededNeeds assignment to the proper sub-teamNeeds assignment to the proper sub-team
on Apr 22, 2020 - ghost removedtriage-neededNeeds assignment to the proper sub-teamNeeds assignment to the proper sub-team
on Apr 22, 2020 Are there any advancements on this bug ? This is actually a major painpoint for me, as it prevents me from being able to use MLPS on my main Python project at work (which uses multi-root workspaces).
Unless you deem this is a really advanced bugfix, I would love to help on it. Any guidance on where to start working ? 😃
Reacted by Sondre Wangenstein Baugstø and NikEyXI have the same issue actually. Any progress or workarounds for this?
I'm also facing this issue in my multi-root python workspace. Interested in any fix / workaround!
Same problem here. It makes multi-root workspaces completely unusable for python, you might've as well not bothered implementing it.
- addedregressionBug didn't exist in a previous releaseBug didn't exist in a previous releaseand removed
on Jul 3, 2020 Has anyone tried the new Pylance extension? So far it seems to be working with multi-root workspaces for me.
Reacted by Erwan de Lépinau, Microdog and Luciana AbudIs this still an issue once Microsoft Language Server is gone?
No it’s fixed
jakebailey commented
on Oct 23, 2021 MemberAuthorMore actionsI worked around this for Pylance, but I think the bad code is still there for notebooks. Would have to check (but with recent notebook and LS planning, it shouldn't be a problem).
Reacted by Kartik Raj- locked as resolved and limited conversation to collaborators
on Nov 26, 2021
#8815 introduced LS caching and ref counting, such that the interactive window can reference the same language server as the regular code and keep it around until it's no longer needed. The keys are resource scoped, which are good for ensuring things are shared and the minimum number of LSs are spawned.
Unfortunately, the
activeServerandresourceproperties are essentially "globals" to the extension as a whole. The current code kills LSs as the user moves around different files to save resources, however this breaks multi-root workspaces which rely on being able to navigate around and still get code completions. (e.g., I open two files, one in each workspace, and switch between them)Additionally, I believe the current code over-disposes, leading to a scenario where on the first active LS change, the next spawned server cannot be killed and isn't configured correctly, leading both to #5132 (comment) and a related bug where the next-spawned server's interpreter doesn't change.
The solution here is to eliminate
activeServerandresourceand make LSs fully resource-scoped (only accessible by key). Once a LS is no longer referenced (no handles from the interactive window, and its workspace no longer exists), the LS can be thrown away.