debugger: Fix debug scenario's defined in debug.json not using passed in build task (#29973)

There were two bugs that caused user-defined debug scenarios from being
able to run a build task.

1. DebugRequest would be deserialized to `Attach` even when `process_id`
wasn't defined in a user's configuration file. This has been fixed by
adding our own deserializer that defaults to None if there are no fields
present instead of `Attach`, and I added tests to prevent regressions.
2. Debug scenario resolve phase never got the active buffer when
spawning a debug session from the new session modal. This has been
worked around by passing in the worktree_id of a debug scenario in the
scenario picker and the active worktree_id otherwise.

Release Notes:

- N/A
This commit is contained in:
Anthony Eid 2025-05-06 08:54:57 +02:00 committed by GitHub
parent 52ea501f4f
commit a0bfe4d293
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 97 additions and 12 deletions

View file

@ -22,8 +22,8 @@ use gpui::{
};
use language::Buffer;
use project::Fs;
use project::debugger::session::{Session, SessionStateEvent};
use project::{Fs, WorktreeId};
use project::{Project, debugger::session::ThreadStatus};
use rpc::proto::{self};
use settings::Settings;
@ -208,6 +208,7 @@ impl DebugPanel {
scenario: DebugScenario,
task_context: TaskContext,
active_buffer: Option<Entity<Buffer>>,
worktree_id: Option<WorktreeId>,
window: &mut Window,
cx: &mut Context<Self>,
) {
@ -233,6 +234,7 @@ impl DebugPanel {
scenario,
task_context,
active_buffer,
worktree_id,
window,
cx,
)
@ -1283,7 +1285,7 @@ impl workspace::DebuggerProvider for DebuggerProvider {
) {
self.0.update(cx, |_, cx| {
cx.defer_in(window, |this, window, cx| {
this.start_session(definition, context, buffer, window, cx);
this.start_session(definition, context, buffer, None, window, cx);
})
})
}