Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions debug_adapter_schemas/Dart.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,35 @@
"properties": {
"adapter": {
"type": "string",
"enum": ["Dart"]
"enum": [
"Dart"
]
},
"type": {
"type": "string",
"enum": ["dart", "flutter"],
"enum": [
"dart",
"flutter"
],
"description": "Debug Flutter or Dart file"
},
"label": {
"type": "string",
"description": "Human-readable name for this debug configuration",
"examples": ["Launch Dart App", "Debug Main", "Dart Console"]
"examples": [
"Launch Dart App",
"Debug Main",
"Dart Console"
]
},
"program": {
"type": "string",
"description": "Path to the Dart file to debug",
"examples": ["lib/main.dart", "bin/main.dart", "test/example_test.dart"]
"examples": [
"lib/main.dart",
"bin/main.dart",
"test/example_test.dart"
]
},
"cwd": {
"type": "string",
Expand All @@ -40,18 +53,43 @@
},
"device_id": {
"type": "string",
"examples": ["chrome", "edge", "<android-id>", "<ios-id>"]
"examples": [
"chrome",
"edge",
"<android-id>",
"<ios-id>"
]
},
"platform": {
"type": "string",
"examples": ["web", "desktop"]
"examples": [
"web",
"desktop"
]
},
"request": {
"type": "string",
"enum": [
"launch",
"attach"
],
"description": "The debug request type",
"default": "launch"
},
"vmServiceUri": {
"type": "string",
"description": "The VM Service URI to attach to (for attach mode)"
},
"stopOnEntry": {
"type": "boolean",
"description": "Pause debugger on entry.",
"default": false
}
},
"required": ["program", "type", "adapter"],
"required": [
"program",
"type",
"adapter"
],
"additionalProperties": false
}
}
28 changes: 24 additions & 4 deletions src/dart.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,17 @@ impl zed::Extension for DartExtension {
.map(|s| s.to_string())
.or_else(|| Some(worktree.root_path()));

let request = user_config
.get("request")
.and_then(|v| v.as_str())
.unwrap_or("launch");

let vm_service_uri = user_config.get("vmServiceUri").and_then(|v| v.as_str());

let config_json = json!({
"type": tool,
"request": "launch",
"request": request,
"vmServiceUri": vm_service_uri,
"program": program,
"cwd": cwd.clone().unwrap_or_default(),
"args": args,
Expand All @@ -152,7 +160,10 @@ impl zed::Extension for DartExtension {
connection: None,
request_args: StartDebuggingRequestArguments {
configuration: config_json,
request: StartDebuggingRequestArgumentsRequest::Launch,
request: match request {
"attach" => StartDebuggingRequestArgumentsRequest::Attach,
_ => StartDebuggingRequestArgumentsRequest::Launch,
},
}, // request_args: StartDebuggingRequestArguments:,
};
Result::Ok(debug_adapter_binary)
Expand All @@ -161,9 +172,18 @@ impl zed::Extension for DartExtension {
fn dap_request_kind(
&mut self,
_adapter_name: String,
_config: serde_json::Value,
config: serde_json::Value,
) -> Result<StartDebuggingRequestArgumentsRequest, String> {
Ok(StartDebuggingRequestArgumentsRequest::Launch)
match config.get("request") {
Some(v) if v == "launch" => Ok(StartDebuggingRequestArgumentsRequest::Launch),
Some(v) if v == "attach" => Ok(StartDebuggingRequestArgumentsRequest::Attach),
Some(value) => Err(format!(
"Unexpected value for `request` key in Dart debug adapter configuration: {value:?}"
)),
None => {
Err("Missing required `request` field in Dart debug adapter configuration".into())
}
}
}

fn language_server_command(
Expand Down