[Priroda] Add DAP initialized and launch handshake
diff --git a/src/tools/miri/priroda/src/frontend/dap.rs b/src/tools/miri/priroda/src/frontend/dap.rs index 31a1447..9d6d77f 100644 --- a/src/tools/miri/priroda/src/frontend/dap.rs +++ b/src/tools/miri/priroda/src/frontend/dap.rs
@@ -1,7 +1,7 @@ use std::io::{self, BufReader, BufWriter}; use emmy_dap_types::prelude::types::Capabilities; -use emmy_dap_types::prelude::{Command, Request, ResponseBody, Server}; +use emmy_dap_types::prelude::{Command, Event, Request, ResponseBody, Server}; use miri::{InterpResult, interp_ok}; use crate::debugger::PrirodaContext; @@ -68,10 +68,17 @@ fn dispatch_request(&mut self, request: Request) -> ServerResult<DispatchOutcome match &request.command { Command::Initialize(_) => self.handle_initialize(request).map(|()| DispatchOutcome::Continue), + Command::Launch(_) => self.handle_launch(request).map(|()| DispatchOutcome::Continue), _ => self.handle_unsupported_request(request).map(|()| DispatchOutcome::Exit), } } + /// FIXME: connect launch arguments to Priroda's session model. + fn handle_launch(&mut self, request: Request) -> ServerResult { + let response = request.success(ResponseBody::Launch); + self.server.respond(response) + } + /// FIXME: grow capabilities as Priroda adds DAP features. fn handle_initialize(&mut self, request: Request) -> ServerResult { // Advertise configurationDone support ahead of its handler so VS Code @@ -80,7 +87,8 @@ fn handle_initialize(&mut self, request: Request) -> ServerResult { supports_configuration_done_request: Some(true), ..Capabilities::default() })); - self.server.respond(response) + self.server.respond(response)?; + self.server.send_event(Event::Initialized) } fn handle_unsupported_request(&mut self, request: Request) -> ServerResult {
diff --git a/src/tools/miri/priroda/tests/ui/dap_initialize.stdout b/src/tools/miri/priroda/tests/ui/dap_initialize.stdout index 4773b87..595a84f 100644 --- a/src/tools/miri/priroda/tests/ui/dap_initialize.stdout +++ b/src/tools/miri/priroda/tests/ui/dap_initialize.stdout
@@ -1,3 +1,5 @@ Content-Length: 143 -{"seq":1,"type":"response","request_seq":1,"success":true,"command":"initialize","body":{"supportsConfigurationDoneRequest":true},"error":null} \ No newline at end of file +{"seq":1,"type":"response","request_seq":1,"success":true,"command":"initialize","body":{"supportsConfigurationDoneRequest":true},"error":null}Content-Length: 46 + +{"seq":2,"type":"event","event":"initialized"} \ No newline at end of file
diff --git a/src/tools/miri/priroda/tests/ui/dap_initialize_launch.rs b/src/tools/miri/priroda/tests/ui/dap_initialize_launch.rs new file mode 100644 index 0000000..c1f1ed6 --- /dev/null +++ b/src/tools/miri/priroda/tests/ui/dap_initialize_launch.rs
@@ -0,0 +1,3 @@ +//@ compile-flags: --dap + +fn main() {}
diff --git a/src/tools/miri/priroda/tests/ui/dap_initialize_launch.stdin b/src/tools/miri/priroda/tests/ui/dap_initialize_launch.stdin new file mode 100644 index 0000000..ae4ee94 --- /dev/null +++ b/src/tools/miri/priroda/tests/ui/dap_initialize_launch.stdin
@@ -0,0 +1,5 @@ +Content-Length: 85 + +{"seq":1,"type":"request","command":"initialize","arguments":{"adapterID":"priroda"}}Content-Length: 60 + +{"seq":2,"type":"request","command":"launch","arguments":{}} \ No newline at end of file
diff --git a/src/tools/miri/priroda/tests/ui/dap_initialize_launch.stdout b/src/tools/miri/priroda/tests/ui/dap_initialize_launch.stdout new file mode 100644 index 0000000..1bf9732 --- /dev/null +++ b/src/tools/miri/priroda/tests/ui/dap_initialize_launch.stdout
@@ -0,0 +1,7 @@ +Content-Length: 143 + +{"seq":1,"type":"response","request_seq":1,"success":true,"command":"initialize","body":{"supportsConfigurationDoneRequest":true},"error":null}Content-Length: 46 + +{"seq":2,"type":"event","event":"initialized"}Content-Length: 90 + +{"seq":3,"type":"response","request_seq":2,"success":true,"command":"launch","error":null} \ No newline at end of file