Debugger: Add pretty printers for Cargo-located tasks (#27979)
Closes #ISSUE Release Notes: - N/A
This commit is contained in:
parent
501b539286
commit
ee950f5bc4
@ -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| {
|
||||
|
@ -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);
|
||||
|
@ -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<()>;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user