Use which to resolve lsp/dap binaries
This resolves the following issue: https://github.com/helix-editor/helix/discussions/962#discussioncomment-1580046
This commit is contained in:
parent
4526216139
commit
9712bbb23b
6 changed files with 12 additions and 21 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -393,6 +393,7 @@ dependencies = [
|
|||
"serde_json",
|
||||
"thiserror",
|
||||
"tokio",
|
||||
"which",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -411,6 +412,7 @@ dependencies = [
|
|||
"thiserror",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"which",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -19,6 +19,7 @@ serde = { version = "1.0", features = ["derive"] }
|
|||
serde_json = "1.0"
|
||||
thiserror = "1.0"
|
||||
tokio = { version = "1", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot", "net", "sync"] }
|
||||
which = "4.2"
|
||||
|
||||
[dev-dependencies]
|
||||
fern = "0.6"
|
||||
|
|
|
@ -105,6 +105,9 @@ impl Client {
|
|||
args: Vec<&str>,
|
||||
id: usize,
|
||||
) -> Result<(Self, UnboundedReceiver<Payload>)> {
|
||||
// Resolve path to the binary
|
||||
let cmd = which::which(cmd).map_err(|err| anyhow::anyhow!(err))?;
|
||||
|
||||
let process = Command::new(cmd)
|
||||
.args(args)
|
||||
.stdin(Stdio::piped())
|
||||
|
|
|
@ -25,3 +25,4 @@ serde_json = "1.0"
|
|||
thiserror = "1.0"
|
||||
tokio = { version = "1.17", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot", "sync"] }
|
||||
tokio-stream = "0.1.8"
|
||||
which = "4.2"
|
||||
|
|
|
@ -43,6 +43,9 @@ impl Client {
|
|||
root_markers: Vec<String>,
|
||||
id: usize,
|
||||
) -> Result<(Self, UnboundedReceiver<(usize, Call)>, Arc<Notify>)> {
|
||||
// Resolve path to the binary
|
||||
let cmd = which::which(cmd).map_err(|err| anyhow::anyhow!(err))?;
|
||||
|
||||
let process = Command::new(cmd)
|
||||
.args(args)
|
||||
.stdin(Stdio::piped())
|
||||
|
|
|
@ -479,32 +479,13 @@ impl Application {
|
|||
Payload::Response(_) => unreachable!(),
|
||||
Payload::Request(request) => match request.command.as_str() {
|
||||
RunInTerminal::COMMAND => {
|
||||
let mut arguments: dap::requests::RunInTerminalArguments =
|
||||
let arguments: dap::requests::RunInTerminalArguments =
|
||||
serde_json::from_value(request.arguments.unwrap_or_default()).unwrap();
|
||||
// TODO: no unwrap
|
||||
|
||||
log::error!("run_in_terminal {:?}", arguments);
|
||||
|
||||
// HAXX: lldb-vscode uses $CWD/lldb-vscode which is wrong
|
||||
let program = arguments.args[0]
|
||||
.strip_prefix(
|
||||
std::env::current_dir()
|
||||
.expect("Couldn't get current working directory")
|
||||
.as_path()
|
||||
.to_str()
|
||||
.unwrap(),
|
||||
)
|
||||
.and_then(|arg| arg.strip_prefix('/'))
|
||||
.map(|arg| arg.to_owned())
|
||||
.unwrap_or_else(|| arguments.args[0].clone());
|
||||
arguments.args[0] = program;
|
||||
|
||||
log::error!("{}", arguments.args.join(" "));
|
||||
|
||||
// TODO: handle cwd
|
||||
let process = std::process::Command::new("tmux")
|
||||
.arg("split-window")
|
||||
.arg(arguments.args.join(" ")) // TODO: first arg is wrong, it uses current dir
|
||||
.arg(arguments.args.join(" "))
|
||||
.spawn()
|
||||
.unwrap();
|
||||
|
||||
|
|
Loading…
Reference in a new issue