aboutsummaryrefslogtreecommitdiff
path: root/helix-dap/src/client.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-dap/src/client.rs')
-rw-r--r--helix-dap/src/client.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/helix-dap/src/client.rs b/helix-dap/src/client.rs
index f6d8a069..ff727d00 100644
--- a/helix-dap/src/client.rs
+++ b/helix-dap/src/client.rs
@@ -33,6 +33,7 @@ pub struct Client {
server_tx: UnboundedSender<Payload>,
request_counter: AtomicU64,
connection_type: Option<ConnectionType>,
+ starting_request_args: Option<Value>,
pub caps: Option<DebuggerCapabilities>,
// thread_id -> frames
pub stack_frames: HashMap<ThreadId, Vec<StackFrame>>,
@@ -87,6 +88,7 @@ impl Client {
request_counter: AtomicU64::new(0),
caps: None,
connection_type: None,
+ starting_request_args: None,
stack_frames: HashMap::new(),
thread_states: HashMap::new(),
thread_id: None,
@@ -158,6 +160,10 @@ impl Client {
)
}
+ pub fn starting_request_args(&self) -> &Option<Value> {
+ &self.starting_request_args
+ }
+
pub async fn tcp_process(
cmd: &str,
args: Vec<&str>,
@@ -356,14 +362,25 @@ impl Client {
pub fn launch(&mut self, args: serde_json::Value) -> impl Future<Output = Result<Value>> {
self.connection_type = Some(ConnectionType::Launch);
+ self.starting_request_args = Some(args.clone());
self.call::<requests::Launch>(args)
}
pub fn attach(&mut self, args: serde_json::Value) -> impl Future<Output = Result<Value>> {
self.connection_type = Some(ConnectionType::Attach);
+ self.starting_request_args = Some(args.clone());
self.call::<requests::Attach>(args)
}
+ pub fn restart(&self) -> impl Future<Output = Result<Value>> {
+ let args = if let Some(args) = &self.starting_request_args {
+ args.clone()
+ } else {
+ Value::Null
+ };
+ self.call::<requests::Restart>(args)
+ }
+
pub async fn set_breakpoints(
&self,
file: PathBuf,