use super::fallback::Language;
use super::queries;
pub fn grammar_for(lang: Language, ext: &str) -> Option<tree_sitter::Language> {
match lang {
Language::Rust => Some(tree_sitter_rust::LANGUAGE.into()),
Language::JsTs => match ext {
"ts" => Some(tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into()),
"tsx" => Some(tree_sitter_typescript::LANGUAGE_TSX.into()),
_ => Some(tree_sitter_javascript::LANGUAGE.into()),
},
Language::Python => Some(tree_sitter_python::LANGUAGE.into()),
Language::Go => Some(tree_sitter_go::LANGUAGE.into()),
Language::Java => Some(tree_sitter_java::LANGUAGE.into()),
Language::CSharp => Some(tree_sitter_c_sharp::LANGUAGE.into()),
Language::Kotlin => Some(tree_sitter_kotlin_ng::LANGUAGE.into()),
Language::Generic => None,
}
}
pub fn import_query(lang: Language, _ext: &str) -> Option<&'static str> {
match lang {
Language::Rust => Some(queries::RUST_IMPORTS),
Language::JsTs => Some(queries::JS_IMPORTS),
Language::Python => Some(queries::PYTHON_IMPORTS),
Language::Go => Some(queries::GO_IMPORTS),
Language::Java => Some(queries::JAVA_IMPORTS),
Language::CSharp => Some(queries::CSHARP_IMPORTS),
Language::Kotlin => Some(queries::KOTLIN_IMPORTS),
Language::Generic => None,
}
}
pub fn complexity_queries(lang: Language, ext: &str) -> (&'static str, Option<&'static str>) {
match lang {
Language::Rust => (
queries::RUST_COMPLEXITY,
Some(queries::RUST_COMPLEXITY_OPERATORS),
),
Language::JsTs => match ext {
"ts" | "tsx" => (
queries::JS_COMPLEXITY,
Some(queries::JS_COMPLEXITY_OPERATORS),
),
_ => (
queries::JS_COMPLEXITY,
Some(queries::JS_COMPLEXITY_OPERATORS),
),
},
Language::Python => (queries::PYTHON_COMPLEXITY, None),
Language::Go => (
queries::GO_COMPLEXITY,
Some(queries::GO_COMPLEXITY_OPERATORS),
),
Language::Java => (
queries::JAVA_COMPLEXITY,
Some(queries::JAVA_COMPLEXITY_OPERATORS),
),
Language::CSharp => (
queries::CSHARP_COMPLEXITY,
Some(queries::CSHARP_COMPLEXITY_OPERATORS),
),
Language::Kotlin => (
queries::KOTLIN_COMPLEXITY,
Some(queries::KOTLIN_COMPLEXITY_OPERATORS),
),
Language::Generic => (queries::RUST_COMPLEXITY, None), }
}
pub fn function_query(lang: Language, _ext: &str) -> Option<&'static str> {
match lang {
Language::Rust => Some(queries::RUST_FUNCTIONS),
Language::JsTs => Some(queries::JS_FUNCTIONS),
Language::Python => Some(queries::PYTHON_FUNCTIONS),
Language::Go => Some(queries::GO_FUNCTIONS),
Language::Java => Some(queries::JAVA_FUNCTIONS),
Language::CSharp => Some(queries::CSHARP_FUNCTIONS),
Language::Kotlin => Some(queries::KOTLIN_FUNCTIONS),
Language::Generic => None,
}
}
pub fn nesting_query(lang: Language, _ext: &str) -> Option<&'static str> {
match lang {
Language::Rust => Some(queries::RUST_NESTING),
Language::JsTs => Some(queries::JS_NESTING),
Language::Python => Some(queries::PYTHON_NESTING),
Language::Go => Some(queries::GO_NESTING),
Language::Java => Some(queries::JAVA_NESTING),
Language::CSharp => Some(queries::CSHARP_NESTING),
Language::Kotlin => Some(queries::KOTLIN_NESTING),
Language::Generic => None,
}
}
pub fn comment_query(lang: Language, ext: &str) -> &'static str {
match lang {
Language::Rust => queries::RUST_COMMENTS,
Language::JsTs => match ext {
"ts" | "tsx" => queries::JS_COMMENTS,
_ => queries::JS_COMMENTS,
},
Language::Python => queries::PYTHON_COMMENTS,
Language::Go => queries::GO_COMMENTS,
Language::Java => queries::JAVA_COMMENTS,
Language::CSharp => queries::CSHARP_COMMENTS,
Language::Kotlin => queries::KOTLIN_COMMENTS,
Language::Generic => queries::RUST_COMMENTS, }
}