diff --git a/crates/dap/src/adapters.rs b/crates/dap/src/adapters.rs index ebab0ecb1b..73e2881521 100644 --- a/crates/dap/src/adapters.rs +++ b/crates/dap/src/adapters.rs @@ -375,9 +375,10 @@ pub trait DebugAdapter: 'static + Send + Sync { ) -> Result { let map = config.as_object().context("Config isn't an object")?; - let request_variant = map["request"] - .as_str() - .ok_or_else(|| anyhow!("request is not valid"))?; + let request_variant = map + .get("request") + .and_then(|val| val.as_str()) + .context("request argument is not found or invalid")?; match request_variant { "launch" => Ok(StartDebuggingRequestArgumentsRequest::Launch), diff --git a/crates/dap_adapters/src/go.rs b/crates/dap_adapters/src/go.rs index 8971605a5c..699b9f8ee8 100644 --- a/crates/dap_adapters/src/go.rs +++ b/crates/dap_adapters/src/go.rs @@ -289,7 +289,10 @@ impl DebugAdapter for GoDebugAdapter { ) -> Result { let map = config.as_object().context("Config isn't an object")?; - let request_variant = map["request"].as_str().context("request is not valid")?; + let request_variant = map + .get("request") + .and_then(|val| val.as_str()) + .context("request argument is not found or invalid")?; match request_variant { "launch" => Ok(StartDebuggingRequestArgumentsRequest::Launch), diff --git a/crates/dap_adapters/src/php.rs b/crates/dap_adapters/src/php.rs index 1d787d9a68..cfb31c5bd5 100644 --- a/crates/dap_adapters/src/php.rs +++ b/crates/dap_adapters/src/php.rs @@ -2,6 +2,7 @@ use adapters::latest_github_release; use anyhow::Context as _; use anyhow::bail; use dap::StartDebuggingRequestArguments; +use dap::StartDebuggingRequestArgumentsRequest; use dap::adapters::{DebugTaskDefinition, TcpArguments}; use gpui::{AsyncApp, SharedString}; use language::LanguageName; @@ -46,6 +47,13 @@ impl PhpDebugAdapter { }) } + fn validate_config( + &self, + _: &serde_json::Value, + ) -> Result { + Ok(StartDebuggingRequestArgumentsRequest::Launch) + } + async fn get_installed_binary( &self, delegate: &Arc, @@ -93,7 +101,7 @@ impl PhpDebugAdapter { envs: HashMap::default(), request_args: StartDebuggingRequestArguments { configuration: task_definition.config.clone(), - request: dap::StartDebuggingRequestArgumentsRequest::Launch, + request: self.validate_config(&task_definition.config)?, }, }) } diff --git a/crates/dap_adapters/src/python.rs b/crates/dap_adapters/src/python.rs index 1f0fdb7c3f..f9112d4137 100644 --- a/crates/dap_adapters/src/python.rs +++ b/crates/dap_adapters/src/python.rs @@ -201,7 +201,10 @@ impl DebugAdapter for PythonDebugAdapter { ) -> Result { let map = config.as_object().context("Config isn't an object")?; - let request_variant = map["request"].as_str().context("request is not valid")?; + let request_variant = map + .get("request") + .and_then(|val| val.as_str()) + .context("request is not valid")?; match request_variant { "launch" => Ok(StartDebuggingRequestArgumentsRequest::Launch),