pub fn extension(ext: &str) -> Option<Language> {
    match ext.to_lowercase().as_str() {
        "rs" => Some(tree_sitter_rust::LANGUAGE.into()),
        "py" => Some(tree_sitter_python::LANGUAGE.into()),
        "cpp" | "cc" | "cxx" | "c++" => Some(tree_sitter_cpp::LANGUAGE.into()),
        "css" => Some(tree_sitter_css::LANGUAGE.into()),
        "go" => Some(tree_sitter_go::LANGUAGE.into()),
        "java" => Some(tree_sitter_java::LANGUAGE.into()),
        "rb" => Some(tree_sitter_ruby::LANGUAGE.into()),
        "scala" => Some(tree_sitter_scala::LANGUAGE.into()),
        "ts" | "js" => Some(tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into()),
        "tsx" => Some(tree_sitter_typescript::LANGUAGE_TSX.into()),
        _ => None,
    }
}
Maps file extensions to their corresponding Tree-sitter language parsers.

This function takes a file extension as input and returns the appropriate
Tree-sitter language parser if supported.

# Arguments
* `ext` - The file extension to get a language parser for

# Returns
* `Some(Language)` - If the extension is supported
* `None` - If the extension is not supported

# Supported Languages
* Rust (.rs)
* JavaScript/TypeScript (.js, .jsx, .ts, .tsx)
* Python (.py)
crates/forge_services/src/tool_services/syn/validate.rs