Skip to main content

scope_engine/language/
typescript.rs

1use super::{LanguageAdapter, LanguageQueries};
2use tree_sitter::Language;
3
4pub struct TypeScriptAdapter;
5
6impl TypeScriptAdapter {
7    #[must_use]
8    pub const fn new() -> Self {
9        Self
10    }
11}
12
13impl LanguageAdapter for TypeScriptAdapter {
14    fn language_name(&self) -> &'static str {
15        "typescript"
16    }
17
18    fn extensions(&self) -> &[&'static str] {
19        &["ts"]
20    }
21
22    fn language(&self) -> Language {
23        tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into()
24    }
25
26    fn queries(&self) -> LanguageQueries {
27        Self::ts_queries()
28    }
29}
30
31pub struct TsxAdapter;
32
33impl TsxAdapter {
34    #[must_use]
35    pub const fn new() -> Self {
36        Self
37    }
38}
39
40impl LanguageAdapter for TsxAdapter {
41    fn language_name(&self) -> &'static str {
42        "typescript"
43    }
44
45    fn extensions(&self) -> &[&'static str] {
46        &["tsx"]
47    }
48
49    fn language(&self) -> Language {
50        tree_sitter_typescript::LANGUAGE_TSX.into()
51    }
52
53    fn queries(&self) -> LanguageQueries {
54        TypeScriptAdapter::ts_queries()
55    }
56}
57
58pub struct JavaScriptAdapter;
59
60impl JavaScriptAdapter {
61    #[must_use]
62    pub const fn new() -> Self {
63        Self
64    }
65}
66
67impl Default for JavaScriptAdapter {
68    fn default() -> Self {
69        Self::new()
70    }
71}
72
73impl LanguageAdapter for JavaScriptAdapter {
74    fn language_name(&self) -> &'static str {
75        "javascript"
76    }
77
78    fn extensions(&self) -> &[&'static str] {
79        &["js", "jsx"]
80    }
81
82    fn language(&self) -> Language {
83        tree_sitter_typescript::LANGUAGE_TSX.into()
84    }
85
86    fn queries(&self) -> LanguageQueries {
87        TypeScriptAdapter::ts_queries()
88    }
89}
90
91impl TypeScriptAdapter {
92    #[must_use]
93    pub const fn ts_queries() -> LanguageQueries {
94        LanguageQueries {
95            definitions: r"
96                (function_declaration name: (identifier) @name) @def
97                (function_signature name: (identifier) @name) @def
98                (variable_declarator name: (identifier) @name value: (arrow_function)) @def
99                (variable_declarator name: (identifier) @name value: (function_expression)) @def
100                (class_declaration name: (type_identifier) @name) @def
101                (interface_declaration name: (type_identifier) @name) @def
102                (type_alias_declaration name: (type_identifier) @name) @def
103                (enum_declaration name: (identifier) @name) @def
104                (method_definition name: (property_identifier) @name) @def
105            ",
106            references: r"
107                (call_expression function: (identifier) @ref) @call
108                (call_expression function: (member_expression property: (property_identifier) @ref)) @call
109                (new_expression constructor: (identifier) @ref) @call
110                (type_identifier) @ref
111            ",
112        }
113    }
114}
115
116impl Default for TypeScriptAdapter {
117    fn default() -> Self {
118        Self::new()
119    }
120}
121
122impl Default for TsxAdapter {
123    fn default() -> Self {
124        Self::new()
125    }
126}