Skip to main content

scope_engine/language/
rust.rs

1use super::{LanguageAdapter, LanguageQueries};
2use tree_sitter::Language;
3
4pub struct RustAdapter;
5
6impl RustAdapter {
7    #[must_use]
8    pub const fn new() -> Self {
9        Self
10    }
11}
12
13impl Default for RustAdapter {
14    fn default() -> Self {
15        Self::new()
16    }
17}
18
19impl LanguageAdapter for RustAdapter {
20    fn language_name(&self) -> &'static str {
21        "rust"
22    }
23
24    fn extensions(&self) -> &[&'static str] {
25        &["rs"]
26    }
27
28    fn language(&self) -> Language {
29        tree_sitter_rust::LANGUAGE.into()
30    }
31
32    fn queries(&self) -> LanguageQueries {
33        LanguageQueries {
34            definitions: r"
35                (function_item name: (identifier) @name) @def
36                (struct_item name: (type_identifier) @name) @def
37                (enum_item name: (type_identifier) @name) @def
38                (impl_item type: (type_identifier) @name) @def
39                (trait_item name: (type_identifier) @name) @def
40            ",
41            references: r"
42                (call_expression function: (identifier) @ref) @call
43                (call_expression function: (scoped_identifier name: (identifier) @ref)) @call
44                (type_identifier) @ref
45            ",
46        }
47    }
48}