diff --git a/crates/languages/src/python.rs b/crates/languages/src/python.rs index fcd0ddcab1..84877b50c7 100644 --- a/crates/languages/src/python.rs +++ b/crates/languages/src/python.rs @@ -357,6 +357,9 @@ const PYTHON_TEST_TARGET_TASK_VARIABLE: VariableName = const PYTHON_ACTIVE_TOOLCHAIN_PATH: VariableName = VariableName::Custom(Cow::Borrowed("PYTHON_ACTIVE_ZED_TOOLCHAIN")); +const PYTHON_ACTIVE_TOOLCHAIN_PATH_RAW: VariableName = + VariableName::Custom(Cow::Borrowed("PYTHON_ACTIVE_ZED_TOOLCHAIN_RAW")); + const PYTHON_MODULE_NAME_TASK_VARIABLE: VariableName = VariableName::Custom(Cow::Borrowed("PYTHON_MODULE_NAME")); @@ -378,24 +381,25 @@ impl ContextProvider for PythonContextProvider { let worktree_id = location.buffer.read(cx).file().map(|f| f.worktree_id(cx)); cx.spawn(async move |cx| { - let active_toolchain = if let Some(worktree_id) = worktree_id { + let raw_toolchain = if let Some(worktree_id) = worktree_id { toolchains .active_toolchain(worktree_id, Arc::from("".as_ref()), "Python".into(), cx) .await .map_or_else( - || "python3".to_owned(), - |toolchain| format!("\"{}\"", toolchain.path), + || String::from("python3"), + |toolchain| toolchain.path.to_string(), ) } else { String::from("python3") }; + let active_toolchain = format!("\"{raw_toolchain}\""); let toolchain = (PYTHON_ACTIVE_TOOLCHAIN_PATH, active_toolchain); - + let raw_toolchain = (PYTHON_ACTIVE_TOOLCHAIN_PATH_RAW, raw_toolchain); Ok(task::TaskVariables::from_iter( test_target .into_iter() .chain(module_target.into_iter()) - .chain([toolchain]), + .chain([toolchain, raw_toolchain]), )) }) } diff --git a/crates/project/src/debugger/locators/python.rs b/crates/project/src/debugger/locators/python.rs index d331d0258e..4af0d0b40d 100644 --- a/crates/project/src/debugger/locators/python.rs +++ b/crates/project/src/debugger/locators/python.rs @@ -5,7 +5,7 @@ use async_trait::async_trait; use dap::{DapLocator, DebugRequest, adapters::DebugAdapterName}; use gpui::SharedString; -use task::{DebugScenario, SpawnInTerminal, TaskTemplate}; +use task::{DebugScenario, SpawnInTerminal, TaskTemplate, VariableName}; pub(crate) struct PythonLocator; @@ -35,6 +35,13 @@ impl DapLocator for PythonLocator { // We cannot debug selections. return None; } + let command = if build_config.command + == VariableName::Custom("PYTHON_ACTIVE_ZED_TOOLCHAIN".into()).template_value() + { + VariableName::Custom("PYTHON_ACTIVE_ZED_TOOLCHAIN_RAW".into()).template_value() + } else { + build_config.command.clone() + }; let module_specifier_position = build_config .args .iter() @@ -68,7 +75,7 @@ impl DapLocator for PythonLocator { } let mut config = serde_json::json!({ "request": "launch", - "python": build_config.command, + "python": command, "args": args, "cwd": build_config.cwd.clone() });