{"record":{"id":"86989fdb1368cc6e","repo":"helix-editor/helix","slug":"no-debug-adapter-available-for-language","errorCode":null,"errorMessage":"No debug adapter available for language","messagePattern":"No debug adapter available for language","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"helix-term/src/commands/dap.rs","lineNumber":137,"sourceCode":"    socket: Option<std::net::SocketAddr>,\n    params: Option<Vec<std::borrow::Cow<str>>>,\n) -> Result<(), anyhow::Error> {\n    // Refuse to spawn a debug adapter in workspace trust restricted mode.\n    let workspace = doc!(cx.editor).workspace_root().to_path_buf();\n    if !cx\n        .editor\n        .workspace_trust\n        .query(&workspace, helix_loader::workspace_trust::TrustQuery::Dap)\n        .is_trusted()\n    {\n        bail!(\"Workspace is not trusted. Run `:workspace-trust` to enable the debug adapter.\");\n    }\n\n    let doc = doc!(cx.editor);\n    let config = doc\n        .language_config()\n        .and_then(|config| config.debugger.as_ref())\n        .ok_or_else(|| anyhow!(\"No debug adapter available for language\"))?;\n\n    let id = cx\n        .editor\n        .debug_adapters\n        .start_client(socket, config)\n        .map_err(|e| anyhow!(\"Failed to start debug client: {}\", e))?;\n\n    // TODO: avoid refetching all of this... pass a config in\n    let template = match name {\n        Some(name) => config.templates.iter().find(|t| t.name == name),\n        None => config.templates.first(),\n    }\n    .ok_or_else(|| anyhow!(\"No debug config with given name\"))?;\n\n    let mut args: HashMap<&str, Value> = if let Some(params) = params.as_ref() {\n        let preprocessed_params = prepare_dap_params(template, params);\n        template\n            .args","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/helix-editor/helix/blob/079a789e8cb08ead67f19e1971a1b7438b37354b/helix-term/src/commands/dap.rs#L119-L155","documentation":"dap_start_impl (commands/dap.rs) resolves the current document's language config and requires a `debugger` section (with templates) from languages.toml: doc.language_config().and_then(|c| c.debugger.as_ref()). A scratch/unnamed buffer, an unrecognized file type, or a language whose entry has no debugger configuration makes this None, so :debug-start/:debug-remote fail before any adapter process is spawned. A separate workspace-trust bail fires earlier if the workspace is untrusted.","triggerScenarios":"`:debug-start` in a new scratch buffer, a Markdown/log file, or a language whose languages.toml entry has no [language.debugger] block — most languages ship none by default.","commonSituations":"Assuming IDE-style debugging works out of the box; forgetting that DAP configs are per-language and largely user-supplied; running the command in a buffer whose file type was not detected.","solutions":["Run `hx --health <lang>` — it shows the configured debug adapters; no adapter listed means no DAP config exists.","Add a `[language.debugger]` block with at least one `[[language.debugger.templates]]` entry to your languages.toml override for that language.","Make sure the buffer is recognized: `:set-language <lang>` for a scratch file, or open the real file from disk."],"exampleFix":"# ~/.config/helix/languages.toml — after (before: no debugger block)\n[language.debugger]\ncommand = \"lldb-dap\"\ntransport = \"stdio\"\n[[language.debugger.templates]]\nname = \"binary\"\nrequest = \"launch\"\n","handlingStrategy":"type-guard","validationCode":"let has_dap = doc\n    .language_config()\n    .and_then(|c| c.debugger.as_ref())\n    .map(|d| !d.templates.is_empty())\n    .unwrap_or(false);\nif !has_dap { /* skip :debug-start, show hint instead */ }","typeGuard":"fn has_debugger(doc: &helix_view::Document) -> bool {\n    doc.language_config()\n        .and_then(|c| c.debugger.as_ref())\n        .is_some()\n}","tryCatchPattern":null,"preventionTips":["Check `hx --health <lang>` for debug-adapter entries before binding :debug-start.","Keep debugger config per-language in languages.toml overrides and test after edits."],"tags":["dap","debugging","language-config"],"backgroundTag":null,"analyzedSha":"079a789e8cb08ead67f19e1971a1b7438b37354b","analyzedAt":"2026-08-16T09:09:59.668Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}