Debugger: Add pretty printers for Cargo-located tasks (#27979)

Closes #ISSUE

Release Notes:

- N/A
This commit is contained in:
Piotr Osiewicz 2025-04-03 01:40:08 +02:00 committed by GitHub
parent 501b539286
commit ee950f5bc4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 4 deletions

View File

@ -358,7 +358,14 @@ impl DapStore {
let task = cx.spawn(async move |this, cx| {
if config.locator.is_some() {
locator_store.resolve_debug_config(&mut config).await?;
config = cx
.background_spawn(async move {
locator_store
.resolve_debug_config(&mut config)
.await
.map(|_| config)
})
.await?;
}
let start_client_task = this.update(cx, |this, cx| {

View File

@ -2,13 +2,14 @@ use super::DapLocator;
use anyhow::{Result, anyhow};
use async_trait::async_trait;
use dap::DebugAdapterConfig;
use serde_json::Value;
use serde_json::{Value, json};
use smol::{
io::AsyncReadExt,
process::{Command, Stdio},
};
use util::maybe;
pub(super) struct CargoLocator {}
pub(super) struct CargoLocator;
#[async_trait]
impl DapLocator for CargoLocator {
@ -79,6 +80,37 @@ impl DapLocator for CargoLocator {
}
}
if debug_config.adapter == "LLDB" && debug_config.initialize_args.is_none() {
// Find Rust pretty-printers in current toolchain's sysroot
let cwd = launch_config.cwd.clone();
debug_config.initialize_args = maybe!(async move {
let cwd = cwd?;
let output = Command::new("rustc")
.arg("--print")
.arg("sysroot")
.current_dir(cwd)
.output()
.await
.ok()?;
if !output.status.success() {
return None;
}
let sysroot_path = String::from_utf8(output.stdout).ok()?;
let sysroot_path = sysroot_path.trim_end();
let first_command = format!(
r#"command script import "{sysroot_path}/lib/rustlib/etc/lldb_lookup.py"#
);
let second_command =
format!(r#"command source -s 0 '{sysroot_path}/lib/rustlib/etc/lldb_commands"#);
Some(json!({"initCommands": [first_command, second_command]}))
})
.await;
}
launch_config.args.clear();
if let Some(test_name) = test_name {
launch_config.args.push(test_name);

View File

@ -3,6 +3,6 @@ use async_trait::async_trait;
use dap::DebugAdapterConfig;
#[async_trait]
pub(super) trait DapLocator {
pub(super) trait DapLocator: Send + Sync {
async fn run_locator(&self, debug_config: &mut DebugAdapterConfig) -> Result<()>;
}