debugger_ui: Update new process modal to include more context about its source (#36650)

Closes #36280

Release Notes:
  - Added additional context to debug task selection

Adding additional context when selecting a debug task to help with
projects that have multiple config files with similar names for tasks.

I think there is room for improvement, especially adding context for a
LanguageTask type. I started but it looked like it would need to add a
path value to that and wanted to make sure this was a good idea before
working on that.

Also any thoughts on the wording if you do like this format? 

---

<img width="1246" height="696" alt="image"
src="https://github.com/user-attachments/assets/b42e3f45-cfdb-4cb1-8a7a-3c37f33f5ee2"
/>

---------

Co-authored-by: Anthony <anthony@zed.dev>
Co-authored-by: Anthony <hello@anthonyeid.me>
This commit is contained in:
Matt
2025-09-18 16:05:55 -04:00
committed by GitHub
co-authored by Anthony Anthony
parent 6b8ed5bf28
commit fc0eb882f7
5 changed files with 216 additions and 55 deletions
@@ -10,6 +10,7 @@ use text::Point;
use util::path;
use crate::NewProcessMode;
use crate::new_process_modal::NewProcessModal;
use crate::tests::{init_test, init_test_workspace};
#[gpui::test]
@@ -178,13 +179,7 @@ async fn test_save_debug_scenario_to_file(executor: BackgroundExecutor, cx: &mut
workspace
.update(cx, |workspace, window, cx| {
crate::new_process_modal::NewProcessModal::show(
workspace,
window,
NewProcessMode::Debug,
None,
cx,
);
NewProcessModal::show(workspace, window, NewProcessMode::Debug, None, cx);
})
.unwrap();
@@ -192,7 +187,7 @@ async fn test_save_debug_scenario_to_file(executor: BackgroundExecutor, cx: &mut
let modal = workspace
.update(cx, |workspace, _, cx| {
workspace.active_modal::<crate::new_process_modal::NewProcessModal>(cx)
workspace.active_modal::<NewProcessModal>(cx)
})
.unwrap()
.expect("Modal should be active");
@@ -281,6 +276,73 @@ async fn test_save_debug_scenario_to_file(executor: BackgroundExecutor, cx: &mut
pretty_assertions::assert_eq!(expected_content, debug_json_content);
}
#[gpui::test]
async fn test_debug_modal_subtitles_with_multiple_worktrees(
executor: BackgroundExecutor,
cx: &mut TestAppContext,
) {
init_test(cx);
let fs = FakeFs::new(executor.clone());
fs.insert_tree(
path!("/workspace1"),
json!({
".zed": {
"debug.json": r#"[
{
"adapter": "fake-adapter",
"label": "Debug App 1",
"request": "launch",
"program": "./app1",
"cwd": "."
},
{
"adapter": "fake-adapter",
"label": "Debug Tests 1",
"request": "launch",
"program": "./test1",
"cwd": "."
}
]"#
},
"main.rs": "fn main() {}"
}),
)
.await;
let project = Project::test(fs.clone(), [path!("/workspace1").as_ref()], cx).await;
let workspace = init_test_workspace(&project, cx).await;
let cx = &mut VisualTestContext::from_window(*workspace, cx);
workspace
.update(cx, |workspace, window, cx| {
NewProcessModal::show(workspace, window, NewProcessMode::Debug, None, cx);
})
.unwrap();
cx.run_until_parked();
let modal = workspace
.update(cx, |workspace, _, cx| {
workspace.active_modal::<NewProcessModal>(cx)
})
.unwrap()
.expect("Modal should be active");
cx.executor().run_until_parked();
let subtitles = modal.update_in(cx, |modal, _, cx| {
modal.debug_picker_candidate_subtitles(cx)
});
assert_eq!(
subtitles.as_slice(),
[path!(".zed/debug.json"), path!(".zed/debug.json")]
);
}
#[gpui::test]
async fn test_dap_adapter_config_conversion_and_validation(cx: &mut TestAppContext) {
init_test(cx);