mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-24 18:36:18 +04:00
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
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -393,6 +393,7 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"which",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -411,6 +412,7 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-stream",
|
"tokio-stream",
|
||||||
|
"which",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -19,6 +19,7 @@ serde = { version = "1.0", features = ["derive"] }
|
|||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
thiserror = "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"] }
|
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]
|
[dev-dependencies]
|
||||||
fern = "0.6"
|
fern = "0.6"
|
||||||
|
@ -105,6 +105,9 @@ pub fn stdio(
|
|||||||
args: Vec<&str>,
|
args: Vec<&str>,
|
||||||
id: usize,
|
id: usize,
|
||||||
) -> Result<(Self, UnboundedReceiver<Payload>)> {
|
) -> 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)
|
let process = Command::new(cmd)
|
||||||
.args(args)
|
.args(args)
|
||||||
.stdin(Stdio::piped())
|
.stdin(Stdio::piped())
|
||||||
|
@ -25,3 +25,4 @@ serde_json = "1.0"
|
|||||||
thiserror = "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 = { version = "1.17", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot", "sync"] }
|
||||||
tokio-stream = "0.1.8"
|
tokio-stream = "0.1.8"
|
||||||
|
which = "4.2"
|
||||||
|
@ -43,6 +43,9 @@ pub fn start(
|
|||||||
root_markers: Vec<String>,
|
root_markers: Vec<String>,
|
||||||
id: usize,
|
id: usize,
|
||||||
) -> Result<(Self, UnboundedReceiver<(usize, Call)>, Arc<Notify>)> {
|
) -> 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)
|
let process = Command::new(cmd)
|
||||||
.args(args)
|
.args(args)
|
||||||
.stdin(Stdio::piped())
|
.stdin(Stdio::piped())
|
||||||
|
@ -479,32 +479,13 @@ pub async fn handle_debugger_message(&mut self, payload: helix_dap::Payload) {
|
|||||||
Payload::Response(_) => unreachable!(),
|
Payload::Response(_) => unreachable!(),
|
||||||
Payload::Request(request) => match request.command.as_str() {
|
Payload::Request(request) => match request.command.as_str() {
|
||||||
RunInTerminal::COMMAND => {
|
RunInTerminal::COMMAND => {
|
||||||
let mut arguments: dap::requests::RunInTerminalArguments =
|
let arguments: dap::requests::RunInTerminalArguments =
|
||||||
serde_json::from_value(request.arguments.unwrap_or_default()).unwrap();
|
serde_json::from_value(request.arguments.unwrap_or_default()).unwrap();
|
||||||
// TODO: no 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")
|
let process = std::process::Command::new("tmux")
|
||||||
.arg("split-window")
|
.arg("split-window")
|
||||||
.arg(arguments.args.join(" ")) // TODO: first arg is wrong, it uses current dir
|
.arg(arguments.args.join(" "))
|
||||||
.spawn()
|
.spawn()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user