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