scope_engine/language/
typescript.rs1use 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}