debugger: Use JS adapter's suggested names for child sessions (#32474)
Also introduces an extension point for other adapters to do this if it turns out they also send this information. Release Notes: - N/A (JS locator is still gated)
This commit is contained in:
parent
02dfaf7799
commit
e0ca4270b4
3 changed files with 30 additions and 5 deletions
|
@ -369,6 +369,10 @@ pub trait DebugAdapter: 'static + Send + Sync {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn dap_schema(&self) -> serde_json::Value;
|
async fn dap_schema(&self) -> serde_json::Value;
|
||||||
|
|
||||||
|
fn label_for_child_session(&self, _args: &StartDebuggingRequestArguments) -> Option<String> {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
|
|
|
@ -431,4 +431,9 @@ impl DebugAdapter for JsDebugAdapter {
|
||||||
self.get_installed_binary(delegate, &config, user_installed_path, cx)
|
self.get_installed_binary(delegate, &config, user_installed_path, cx)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn label_for_child_session(&self, args: &StartDebuggingRequestArguments) -> Option<String> {
|
||||||
|
let label = args.configuration.get("name")?.as_str()?;
|
||||||
|
Some(label.to_owned())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,13 +10,13 @@ use crate::{
|
||||||
};
|
};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use command_palette_hooks::CommandPaletteFilter;
|
use command_palette_hooks::CommandPaletteFilter;
|
||||||
use dap::StartDebuggingRequestArguments;
|
|
||||||
use dap::adapters::DebugAdapterName;
|
use dap::adapters::DebugAdapterName;
|
||||||
use dap::debugger_settings::DebugPanelDockPosition;
|
use dap::debugger_settings::DebugPanelDockPosition;
|
||||||
use dap::{
|
use dap::{
|
||||||
ContinuedEvent, LoadedSourceEvent, ModuleEvent, OutputEvent, StoppedEvent, ThreadEvent,
|
ContinuedEvent, LoadedSourceEvent, ModuleEvent, OutputEvent, StoppedEvent, ThreadEvent,
|
||||||
client::SessionId, debugger_settings::DebuggerSettings,
|
client::SessionId, debugger_settings::DebuggerSettings,
|
||||||
};
|
};
|
||||||
|
use dap::{DapRegistry, StartDebuggingRequestArguments};
|
||||||
use gpui::{
|
use gpui::{
|
||||||
Action, App, AsyncWindowContext, Context, DismissEvent, Entity, EntityId, EventEmitter,
|
Action, App, AsyncWindowContext, Context, DismissEvent, Entity, EntityId, EventEmitter,
|
||||||
FocusHandle, Focusable, MouseButton, MouseDownEvent, Point, Subscription, Task, WeakEntity,
|
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 dap_store_handle = self.project.read(cx).dap_store().clone();
|
||||||
let mut label = parent_session.read(cx).label().clone();
|
let label = self.label_for_child_session(&parent_session, request, cx);
|
||||||
if !label.ends_with("(child)") {
|
|
||||||
label = format!("{label} (child)").into();
|
|
||||||
}
|
|
||||||
let adapter = parent_session.read(cx).adapter().clone();
|
let adapter = parent_session.read(cx).adapter().clone();
|
||||||
let mut binary = parent_session.read(cx).binary().clone();
|
let mut binary = parent_session.read(cx).binary().clone();
|
||||||
binary.request_args = request.clone();
|
binary.request_args = request.clone();
|
||||||
|
@ -1039,6 +1036,25 @@ impl DebugPanel {
|
||||||
cx.emit(PanelEvent::ZoomIn);
|
cx.emit(PanelEvent::ZoomIn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn label_for_child_session(
|
||||||
|
&self,
|
||||||
|
parent_session: &Entity<Session>,
|
||||||
|
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(
|
async fn register_session_inner(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue