aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA-Walrus2023-04-17 20:36:04 +0000
committerGitHub2023-04-17 20:36:04 +0000
commit8839eb0af47b99511956d81a6dbb32e948d2076c (patch)
tree91c19ea13a5a7de4731c37e9cc728a30c177fb63
parent1b016a89d546fb84d3c737d7c4bacb9e26c8b893 (diff)
Fix unwrap bug in DAP (#6786)
-rw-r--r--helix-dap/src/client.rs10
-rw-r--r--helix-dap/src/transport.rs46
-rw-r--r--helix-view/src/handlers/dap.rs1
3 files changed, 33 insertions, 24 deletions
diff --git a/helix-dap/src/client.rs b/helix-dap/src/client.rs
index 7efb72d8..acdfc5b7 100644
--- a/helix-dap/src/client.rs
+++ b/helix-dap/src/client.rs
@@ -62,12 +62,10 @@ impl Client {
if command.is_empty() {
return Result::Err(Error::Other(anyhow!("Command not provided")));
}
- if transport == "tcp" && port_arg.is_some() {
- Self::tcp_process(command, args, port_arg.unwrap(), id).await
- } else if transport == "stdio" {
- Self::stdio(command, args, id)
- } else {
- Result::Err(Error::Other(anyhow!("Incorrect transport {}", transport)))
+ match (transport, port_arg) {
+ ("tcp", Some(port_arg)) => Self::tcp_process(command, args, port_arg, id).await,
+ ("stdio", _) => Self::stdio(command, args, id),
+ _ => Result::Err(Error::Other(anyhow!("Incorrect transport {}", transport))),
}
}
diff --git a/helix-dap/src/transport.rs b/helix-dap/src/transport.rs
index dd03e568..0f646b6a 100644
--- a/helix-dap/src/transport.rs
+++ b/helix-dap/src/transport.rs
@@ -230,38 +230,48 @@ impl Transport {
}
}
- async fn recv(
+ async fn recv_inner(
transport: Arc<Self>,
mut server_stdout: Box<dyn AsyncBufRead + Unpin + Send>,
client_tx: UnboundedSender<Payload>,
- ) {
+ ) -> Result<()> {
let mut recv_buffer = String::new();
loop {
- match Self::recv_server_message(&mut server_stdout, &mut recv_buffer).await {
- Ok(msg) => {
- transport
- .process_server_message(&client_tx, msg)
- .await
- .unwrap();
- }
- Err(err) => {
- error!("err: <- {:?}", err);
- break;
- }
- }
+ let msg = Self::recv_server_message(&mut server_stdout, &mut recv_buffer).await?;
+ transport.process_server_message(&client_tx, msg).await?;
}
}
- async fn send(
+ async fn recv(
+ transport: Arc<Self>,
+ server_stdout: Box<dyn AsyncBufRead + Unpin + Send>,
+ client_tx: UnboundedSender<Payload>,
+ ) {
+ if let Err(err) = Self::recv_inner(transport, server_stdout, client_tx).await {
+ error!("err: <- {:?}", err);
+ }
+ }
+
+ async fn send_inner(
transport: Arc<Self>,
mut server_stdin: Box<dyn AsyncWrite + Unpin + Send>,
mut client_rx: UnboundedReceiver<Payload>,
- ) {
+ ) -> Result<()> {
while let Some(payload) = client_rx.recv().await {
transport
.send_payload_to_server(&mut server_stdin, payload)
- .await
- .unwrap()
+ .await?;
+ }
+ Ok(())
+ }
+
+ async fn send(
+ transport: Arc<Self>,
+ server_stdin: Box<dyn AsyncWrite + Unpin + Send>,
+ client_rx: UnboundedReceiver<Payload>,
+ ) {
+ if let Err(err) = Self::send_inner(transport, server_stdin, client_rx).await {
+ error!("err: <- {:?}", err);
}
}
diff --git a/helix-view/src/handlers/dap.rs b/helix-view/src/handlers/dap.rs
index 107c29be..3da01494 100644
--- a/helix-view/src/handlers/dap.rs
+++ b/helix-view/src/handlers/dap.rs
@@ -321,6 +321,7 @@ impl Editor {
}
}
None => {
+ self.debugger = None;
self.set_status(
"Terminated debugging session and disconnected debugger.",
);