Skip to main content

scope_engine/language/
cpp.rs

1use super::{LanguageAdapter, LanguageQueries};
2use tree_sitter::Language;
3
4pub struct CppAdapter;
5
6impl CppAdapter {
7    pub fn new() -> Self {
8        Self
9    }
10}
11
12impl Default for CppAdapter {
13    fn default() -> Self {
14        Self::new()
15    }
16}
17
18impl LanguageAdapter for CppAdapter {
19    fn language_name(&self) -> &'static str {
20        "cpp"
21    }
22    fn extensions(&self) -> &[&'static str] {
23        &["cpp", "cxx", "cc", "hpp", "hxx", "hh"]
24    }
25    fn language(&self) -> Language {
26        tree_sitter_cpp::LANGUAGE.into()
27    }
28    fn queries(&self) -> LanguageQueries {
29        LanguageQueries {
30            definitions: r#"
31                (function_definition declarator: (function_declarator declarator: (identifier) @name)) @def
32                (class_specifier name: (type_identifier) @name) @def
33                (struct_specifier name: (type_identifier) @name) @def
34                (declaration declarator: (init_declarator declarator: (identifier) @name)) @def
35            "#,
36            references: r#"
37                (call_expression function: (identifier) @ref) @call
38                (call_expression function: (field_identifier) @ref) @call
39                (type_identifier) @ref
40            "#,
41        }
42    }
43}