diff --git a/crates/dap/src/adapters.rs b/crates/dap/src/adapters.rs index ce42a9776d..9ff51859bf 100644 --- a/crates/dap/src/adapters.rs +++ b/crates/dap/src/adapters.rs @@ -369,6 +369,10 @@ pub trait DebugAdapter: 'static + Send + Sync { } async fn dap_schema(&self) -> serde_json::Value; + + fn label_for_child_session(&self, _args: &StartDebuggingRequestArguments) -> Option { + None + } } #[cfg(any(test, feature = "test-support"))] diff --git a/crates/dap_adapters/src/javascript.rs b/crates/dap_adapters/src/javascript.rs index ba0f0ccff3..9d5e904d33 100644 --- a/crates/dap_adapters/src/javascript.rs +++ b/crates/dap_adapters/src/javascript.rs @@ -431,4 +431,9 @@ impl DebugAdapter for JsDebugAdapter { self.get_installed_binary(delegate, &config, user_installed_path, cx) .await } + + fn label_for_child_session(&self, args: &StartDebuggingRequestArguments) -> Option { + let label = args.configuration.get("name")?.as_str()?; + Some(label.to_owned()) + } } diff --git a/crates/debugger_ui/src/debugger_panel.rs b/crates/debugger_ui/src/debugger_panel.rs index ac0611dbfa..ae080948fc 100644 --- a/crates/debugger_ui/src/debugger_panel.rs +++ b/crates/debugger_ui/src/debugger_panel.rs @@ -10,13 +10,13 @@ use crate::{ }; use anyhow::Result; use command_palette_hooks::CommandPaletteFilter; -use dap::StartDebuggingRequestArguments; use dap::adapters::DebugAdapterName; use dap::debugger_settings::DebugPanelDockPosition; use dap::{ ContinuedEvent, LoadedSourceEvent, ModuleEvent, OutputEvent, StoppedEvent, ThreadEvent, client::SessionId, debugger_settings::DebuggerSettings, }; +use dap::{DapRegistry, StartDebuggingRequestArguments}; use gpui::{ Action, App, AsyncWindowContext, Context, DismissEvent, Entity, EntityId, EventEmitter, FocusHandle, Focusable, MouseButton, MouseDownEvent, Point, Subscription, Task, WeakEntity, @@ -445,10 +445,7 @@ impl DebugPanel { }; let dap_store_handle = self.project.read(cx).dap_store().clone(); - let mut label = parent_session.read(cx).label().clone(); - if !label.ends_with("(child)") { - label = format!("{label} (child)").into(); - } + let label = self.label_for_child_session(&parent_session, request, cx); let adapter = parent_session.read(cx).adapter().clone(); let mut binary = parent_session.read(cx).binary().clone(); binary.request_args = request.clone(); @@ -1039,6 +1036,25 @@ impl DebugPanel { cx.emit(PanelEvent::ZoomIn); } } + + fn label_for_child_session( + &self, + parent_session: &Entity, + request: &StartDebuggingRequestArguments, + cx: &mut Context<'_, Self>, + ) -> SharedString { + let adapter = parent_session.read(cx).adapter(); + if let Some(adapter) = DapRegistry::global(cx).adapter(&adapter) { + if let Some(label) = adapter.label_for_child_session(request) { + return label.into(); + } + } + let mut label = parent_session.read(cx).label().clone(); + if !label.ends_with("(child)") { + label = format!("{label} (child)").into(); + } + label + } } async fn register_session_inner(