From 650e3ffcc3f142425fa2e244b8446e646afaf242 Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Mon, 27 Apr 2026 10:40:41 +0200 Subject: [PATCH] python: Respect user settings for toolchain discovery over the toolchain set in Zed (#48262) Closes #46754 Release Notes: - python: User settings now take precedence over toolchain set in Zed for pyright/basedpyright --- crates/languages/src/python.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/crates/languages/src/python.rs b/crates/languages/src/python.rs index 17a1d24be7..dd059313b6 100644 --- a/crates/languages/src/python.rs +++ b/crates/languages/src/python.rs @@ -658,8 +658,22 @@ impl LspAdapter for PyrightLspAdapter { .and_then(|s| s.settings.clone()) .unwrap_or_default(); - // If we have a detected toolchain, configure Pyright to use it + // If we have a detected toolchain, configure Pyright to use it - unless the user sets it themselves. + let should_insert_toolchain = || { + user_settings.as_object().is_none_or(|object| { + [ + "venvPath", + "venv", + "python", + "pythonPath", + "defaultInterpreterPath", + ] + .into_iter() + .any(|known_key| object.contains_key(known_key)) + }) + }; if let Some(toolchain) = toolchain + && should_insert_toolchain() && let Ok(env) = serde_json::from_value::(toolchain.as_json.clone()) { @@ -2075,7 +2089,21 @@ impl LspAdapter for BasedPyrightLspAdapter { .unwrap_or_default(); // If we have a detected toolchain, configure Pyright to use it + let should_insert_toolchain = || { + user_settings.as_object().is_none_or(|object| { + [ + "venvPath", + "venv", + "python", + "pythonPath", + "defaultInterpreterPath", + ] + .into_iter() + .any(|known_key| object.contains_key(known_key)) + }) + }; if let Some(toolchain) = toolchain + && should_insert_toolchain() && let Ok(env) = serde_json::from_value::< pet_core::python_environment::PythonEnvironment, >(toolchain.as_json.clone())