{"record":{"id":"13096450fe334061","repo":"windmill-labs/windmill","slug":"error-setting-ruby-as-language-e","errorCode":null,"errorMessage":"Error setting Ruby as language: {e}","messagePattern":"Error setting Ruby as language: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/parsers/windmill-parser-ruby/src/lib.rs","lineNumber":21,"sourceCode":"#[cfg(target_arch = \"wasm32\")]\npub mod wasm_libc;\n\nuse anyhow::anyhow;\nuse anyhow::bail;\nuse regex::Regex;\nuse serde_json::Value;\nuse tree_sitter::Node;\nuse tree_sitter::Range;\nuse windmill_parser::json_to_typ;\nuse windmill_parser::Arg;\nuse windmill_parser::MainArgSignature;\n\npub fn parse_ruby_sig_meta(code: &str) -> anyhow::Result<MainArgSignature> {\n    let mut parser = tree_sitter::Parser::new();\n    let language = tree_sitter_ruby::LANGUAGE;\n    parser\n        .set_language(&language.into())\n        .map_err(|e| anyhow!(\"Error setting Ruby as language: {e}\"))?;\n\n    // Parse code\n    let tree = parser\n        .parse(code, None)\n        .ok_or(anyhow!(\"Failed to parse code\"))?;\n    let root_node = tree.root_node();\n\n    root_node.clone().to_string();\n    // Traverse the AST to find the Main method signature\n    let args = find_main_signature(root_node, code)?;\n    let auto_kind = if args.is_none() {\n        Some(\"lib\".to_string())\n    } else {\n        None\n    };\n\n    let main_sig = MainArgSignature {\n        star_args: false,","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/parsers/windmill-parser-ruby/src/lib.rs#L3-L39","documentation":"`parse_ruby_sig_meta` configures a tree-sitter parser with the Ruby grammar. `parser.set_language` returns Err when the grammar's ABI version is incompatible with the tree-sitter runtime; the library surfaces it as \"Error setting Ruby as language: {e}\".","triggerScenarios":"Any call to `parse_ruby_sig_meta` (exposed through `parse_ruby_signature`) where `tree_sitter_ruby::LANGUAGE.into()` is rejected due to tree-sitter runtime/grammar version mismatch.","commonSituations":"`tree-sitter` crate upgraded without upgrading `tree-sitter-ruby` (or the reverse); a lockfile re-resolve pulling mismatched versions; vendored grammar built with an older tree-sitter CLI.","solutions":["Check `cargo tree -i tree-sitter` for multiple versions in backend/parsers/windmill-parser-ruby","Bump `tree-sitter-ruby` to match the tree-sitter runtime generation","Pin both crates to compatible versions in the workspace and regenerate the lockfile","Rebuild clean (`cargo clean -p windmill-parser-ruby`) if the error persists after version alignment"],"exampleFix":"// before (Cargo.toml)\ntree-sitter = \"0.20\"\ntree-sitter-ruby = \"0.23\"\n// after\ntree-sitter = \"0.25\"\ntree-sitter-ruby = \"0.23\"  # updated to ABI compatible with 0.25","handlingStrategy":"try-catch","validationCode":"// Verify single resolved tree-sitter version in the build:\n// cargo tree -i tree-sitter --package windmill-parser-ruby","typeGuard":null,"tryCatchPattern":"match parse_ruby_sig_meta(code) {\n    Ok(sig) => sig,\n    Err(e) if e.to_string().contains(\"Error setting Ruby as language\") => {\n        // dependency/ABI issue: surface as build-environment error\n        Err(anyhow!(\"Ruby grammar incompatible with tree-sitter runtime: {e}\"))\n    }\n    Err(e) => Err(e),\n}","preventionTips":["Align tree-sitter and tree-sitter-ruby versions in the workspace lockfile","Re-run cargo update deliberately and inspect the diff for tree-sitter crates","Keep grammar crates grouped so version bumps happen atomically"],"tags":["rust","tree-sitter","ruby","dependency-version"],"backgroundTag":"tree-sitter-language-version-mismatch","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}