Skip to main content

tree_sitter_kotlin_sqry/
lib.rs

1//! Tree-sitter grammar for Kotlin (vendored for sqry)
2//!
3//! This is a first-party binding maintained in the sqry repository.
4//!
5//! **Source Grammar**: <https://github.com/fwcd/tree-sitter-kotlin>
6//! **Commit**: f3a1ea74304adad67164a0a6ffe729428748a7a7
7//! **License**: MIT
8
9use tree_sitter::Language;
10
11unsafe extern "C" {
12    fn tree_sitter_kotlin() -> Language;
13}
14
15/// Returns the tree-sitter Language for Kotlin
16#[must_use = "Language handles must be registered with tree-sitter consumers"]
17pub fn language() -> Language {
18    let lang = unsafe { tree_sitter_kotlin() };
19    sqry_tree_sitter_support::validate_language_or_panic(lang, "Kotlin")
20}
21
22/// Fallible alternative to [`language()`]
23#[allow(clippy::missing_errors_doc)] // Vendored tree-sitter binding
24pub fn try_language() -> Result<Language, sqry_tree_sitter_support::TreeSitterError> {
25    let lang = unsafe { tree_sitter_kotlin() };
26    sqry_tree_sitter_support::validate_language(lang)
27}
28
29/// The content of the node-types.json file for this grammar.
30pub const NODE_TYPES: &str = include_str!("../grammar-src/node-types.json");
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35
36    #[test]
37    fn test_can_load_grammar() {
38        let lang = language();
39        assert!(lang.abi_version() > 0);
40    }
41
42    #[test]
43    fn test_try_language_succeeds() {
44        assert!(try_language().is_ok());
45    }
46
47    #[test]
48    #[allow(clippy::const_is_empty)]
49    fn test_node_types_not_empty() {
50        assert!(!NODE_TYPES.is_empty());
51    }
52}