diff --git a/extension.toml b/extension.toml index 3291148..d6e1cab 100644 --- a/extension.toml +++ b/extension.toml @@ -74,3 +74,4 @@ command = "gem" args = ["update", "--norc", "*"] [debug_adapters.rdbg] +[debug_locators.ruby] diff --git a/languages/ruby/config.toml b/languages/ruby/config.toml index 26692a8..49bbab8 100644 --- a/languages/ruby/config.toml +++ b/languages/ruby/config.toml @@ -61,7 +61,7 @@ collapsed_placeholder = "# ..." tab_size = 2 scope_opt_in_language_servers = ["tailwindcss-language-server"] word_characters = ["?", "!"] -debuggers = ["RDBG"] +debuggers = ["rdbg"] [overrides.string] completion_query_characters = ["-", "."] diff --git a/src/ruby.rs b/src/ruby.rs index 536455c..987655e 100644 --- a/src/ruby.rs +++ b/src/ruby.rs @@ -315,6 +315,47 @@ impl zed::Extension for RubyExtension { } } } + + fn dap_locator_create_scenario( + &mut self, + locator_name: String, + build_task: zed_extension_api::TaskTemplate, + resolved_label: String, + debug_adapter_name: String, + ) -> Option { + if debug_adapter_name != "rdbg" || locator_name != "ruby" { + return None; + } + + let config = RubyDebugConfig { + script_or_command: None, + script: None, + command: Some(build_task.command), + args: build_task.args, + env: HashMap::from_iter(build_task.env), + cwd: build_task.cwd, + }; + + let config = match serde_json::to_value(config) { + Ok(mut value) => { + if let Some(obj) = value.as_object_mut() { + obj.entry("request").or_insert("launch".into()); + value.to_string() + } else { + return None; + } + } + Err(_) => return None, + }; + + Some(DebugScenario { + adapter: debug_adapter_name, + label: resolved_label, + config, + tcp_connection: None, + build: None, + }) + } } zed_extension_api::register_extension!(RubyExtension);