From a69ebf038aff56be94e6ec5f35b7448dfafaa37f Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Tue, 17 Jun 2025 15:22:32 +0200 Subject: [PATCH] debugger: Prevent port collision when attaching to existing node debugger (#32862) We were translating port configuration incorrectly, using it for both attach target and debugger port. This however meant that we were spawning a 2nd process that'd listen on the same port as the existing debugger. Closes #32836 Release Notes: - debugger: Fixed issues with auto-translated Visual Studio Code debug configs for attaching to existing node debugger instances. --- crates/dap_adapters/src/javascript.rs | 3 +++ crates/task/src/vscode_debug_format.rs | 12 ++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/crates/dap_adapters/src/javascript.rs b/crates/dap_adapters/src/javascript.rs index 45400fc5be..838e39258e 100644 --- a/crates/dap_adapters/src/javascript.rs +++ b/crates/dap_adapters/src/javascript.rs @@ -96,6 +96,9 @@ impl JsDebugAdapter { .or_insert(delegate.worktree_root_path().to_string_lossy().into()); configuration.entry("type").and_modify(normalize_task_type); + configuration + .entry("console") + .or_insert("externalTerminal".into()); } Ok(DebugAdapterBinary { diff --git a/crates/task/src/vscode_debug_format.rs b/crates/task/src/vscode_debug_format.rs index 3b8a0cde53..32177a4842 100644 --- a/crates/task/src/vscode_debug_format.rs +++ b/crates/task/src/vscode_debug_format.rs @@ -26,14 +26,14 @@ struct VsCodeDebugTaskDefinition { } impl VsCodeDebugTaskDefinition { - fn try_to_zed(self, replacer: &EnvVariableReplacer) -> anyhow::Result { + fn try_to_zed(mut self, replacer: &EnvVariableReplacer) -> anyhow::Result { let label = replacer.replace(&self.name); let mut config = replacer.replace_value(self.other_attributes); let adapter = task_type_to_adapter_name(&self.r#type); if let Some(config) = config.as_object_mut() { if adapter == "JavaScript" { config.insert("type".to_owned(), self.r#type.clone().into()); - if let Some(port) = self.port { + if let Some(port) = self.port.take() { config.insert("port".to_owned(), port.into()); } } @@ -103,7 +103,7 @@ fn task_type_to_adapter_name(task_type: &str) -> String { mod tests { use serde_json::json; - use crate::{DebugScenario, DebugTaskFile, TcpArgumentsTemplate}; + use crate::{DebugScenario, DebugTaskFile}; use super::VsCodeDebugTaskFile; @@ -154,11 +154,7 @@ mod tests { "type": "node", "port": 17, }), - tcp_connection: Some(TcpArgumentsTemplate { - port: Some(17), - host: None, - timeout: None, - }), + tcp_connection: None, build: None }]) );