infiniloom_engine/parser/
queries.rs

1//! Tree-sitter query strings for symbol extraction
2//!
3//! This module contains the tree-sitter queries used to extract symbols
4//! from source code in various programming languages.
5
6/// Python symbol extraction query
7pub const PYTHON: &str = r#"
8    (function_definition
9      name: (identifier) @name) @function
10
11    (class_definition
12      name: (identifier) @name) @class
13
14    (class_definition
15      body: (block
16        (function_definition
17          name: (identifier) @name))) @method
18"#;
19
20/// JavaScript/JSX symbol extraction query
21pub const JAVASCRIPT: &str = r#"
22    (function_declaration
23      name: (_) @name) @function
24
25    (class_declaration
26      name: (identifier) @name) @class
27
28    (method_definition
29      name: (property_identifier) @name) @method
30
31    (arrow_function) @function
32
33    (variable_declarator
34      name: (identifier) @name
35      value: (arrow_function)) @function
36
37    (export_statement
38      (function_declaration
39        name: (identifier) @name)) @function
40"#;
41
42/// TypeScript symbol extraction query
43pub const TYPESCRIPT: &str = r#"
44    (function_declaration
45      name: (identifier) @name) @function
46
47    (class_declaration
48      name: (type_identifier) @name) @class
49
50    (method_definition
51      name: (property_identifier) @name) @method
52
53    (interface_declaration
54      name: (type_identifier) @name) @interface
55
56    (type_alias_declaration
57      name: (type_identifier) @name) @type
58
59    (arrow_function) @function
60
61    (variable_declarator
62      name: (identifier) @name
63      value: (arrow_function)) @function
64"#;
65
66/// Rust symbol extraction query
67pub const RUST: &str = r#"
68    (function_item
69      name: (identifier) @name) @function
70
71    (struct_item
72      name: (type_identifier) @name) @struct
73
74    (enum_item
75      name: (type_identifier) @name) @enum
76
77    (impl_item
78      type: (type_identifier) @name) @impl
79
80    (trait_item
81      name: (type_identifier) @name) @trait
82
83    (mod_item
84      name: (identifier) @name) @module
85
86    (macro_definition
87      name: (identifier) @name) @macro
88"#;
89
90/// Go symbol extraction query
91pub const GO: &str = r#"
92    (function_declaration
93      name: (identifier) @name) @function
94
95    (method_declaration
96      name: (field_identifier) @name) @method
97
98    (type_declaration
99      (type_spec
100        name: (type_identifier) @name)) @type
101
102    (type_declaration
103      (type_spec
104        name: (type_identifier) @name
105        type: (struct_type))) @struct
106
107    (type_declaration
108      (type_spec
109        name: (type_identifier) @name
110        type: (interface_type))) @interface
111"#;
112
113/// Java symbol extraction query
114pub const JAVA: &str = r#"
115    (method_declaration
116      name: (identifier) @name) @method
117
118    (class_declaration
119      name: (identifier) @name) @class
120
121    (interface_declaration
122      name: (identifier) @name) @interface
123
124    (enum_declaration
125      name: (identifier) @name) @enum
126
127    (constructor_declaration
128      name: (identifier) @name) @constructor
129"#;
130
131/// C symbol extraction query
132pub const C: &str = r#"
133    (function_definition
134      declarator: (function_declarator
135        declarator: (identifier) @name)) @function
136
137    (declaration
138      declarator: (function_declarator
139        declarator: (identifier) @name)) @function
140
141    (struct_specifier
142      name: (type_identifier) @name) @struct
143
144    (enum_specifier
145      name: (type_identifier) @name) @enum
146
147    (type_definition
148      declarator: (type_identifier) @name) @type
149"#;
150
151/// C++ symbol extraction query
152pub const CPP: &str = r#"
153    (function_definition
154      declarator: (function_declarator
155        declarator: (identifier) @name)) @function
156
157    (function_definition
158      declarator: (function_declarator
159        declarator: (qualified_identifier
160          name: (identifier) @name))) @function
161
162    (class_specifier
163      name: (type_identifier) @name) @class
164
165    (struct_specifier
166      name: (type_identifier) @name) @struct
167
168    (enum_specifier
169      name: (type_identifier) @name) @enum
170
171    (namespace_definition
172      name: (identifier) @name) @namespace
173
174    (template_declaration
175      (function_definition
176        declarator: (function_declarator
177          declarator: (identifier) @name))) @function
178"#;
179
180/// C# symbol extraction query
181pub const CSHARP: &str = r#"
182    (method_declaration
183      name: (identifier) @name) @method
184
185    (class_declaration
186      name: (identifier) @name) @class
187
188    (interface_declaration
189      name: (identifier) @name) @interface
190
191    (struct_declaration
192      name: (identifier) @name) @struct
193
194    (enum_declaration
195      name: (identifier) @name) @enum
196
197    (property_declaration
198      name: (identifier) @name) @property
199
200    (namespace_declaration
201      name: (identifier) @name) @namespace
202"#;
203
204/// Ruby symbol extraction query
205pub const RUBY: &str = r#"
206    (method
207      name: (identifier) @name) @method
208
209    (singleton_method
210      name: (identifier) @name) @method
211
212    (class
213      name: (constant) @name) @class
214
215    (module
216      name: (constant) @name) @module
217
218    (alias
219      name: (identifier) @name) @alias
220"#;
221
222/// Bash/Shell symbol extraction query
223pub const BASH: &str = r#"
224    (function_definition
225      name: (word) @name) @function
226"#;
227
228/// PHP symbol extraction query
229pub const PHP: &str = r#"
230    (function_definition
231      name: (name) @name) @function
232
233    (method_declaration
234      name: (name) @name) @method
235
236    (class_declaration
237      name: (name) @name) @class
238
239    (interface_declaration
240      name: (name) @name) @interface
241
242    (trait_declaration
243      name: (name) @name) @trait
244"#;
245
246/// Kotlin symbol extraction query
247pub const KOTLIN: &str = r#"
248    (function_declaration
249      (simple_identifier) @name) @function
250
251    (class_declaration
252      (type_identifier) @name) @class
253
254    (object_declaration
255      (type_identifier) @name) @class
256
257    (interface_declaration
258      (type_identifier) @name) @interface
259"#;
260
261/// Swift symbol extraction query
262pub const SWIFT: &str = r#"
263    (function_declaration
264      name: (simple_identifier) @name) @function
265
266    (class_declaration
267      name: (type_identifier) @name) @class
268
269    (struct_declaration
270      name: (type_identifier) @name) @struct
271
272    (enum_declaration
273      name: (type_identifier) @name) @enum
274
275    (protocol_declaration
276      name: (type_identifier) @name) @protocol
277"#;
278
279/// Scala symbol extraction query
280pub const SCALA: &str = r#"
281    (function_definition
282      name: (identifier) @name) @function
283
284    (class_definition
285      name: (identifier) @name) @class
286
287    (object_definition
288      name: (identifier) @name) @object
289
290    (trait_definition
291      name: (identifier) @name) @trait
292"#;
293
294/// Haskell symbol extraction query
295pub const HASKELL: &str = r#"
296    (function
297      name: (variable) @name) @function
298
299    (signature
300      name: (variable) @name) @signature
301
302    (type_synomym
303      name: (type) @name) @type
304
305    (newtype
306      name: (type) @name) @newtype
307
308    (adt
309      name: (type) @name) @data
310
311    (class
312      name: (type) @name) @class
313"#;
314
315/// Elixir symbol extraction query
316pub const ELIXIR: &str = r#"
317    (call
318      target: (identifier) @keyword
319      (arguments
320        (call
321          target: (identifier) @name)))
322
323    (call
324      target: (identifier) @keyword
325      (arguments
326        (identifier) @name))
327
328    (call
329      target: (identifier) @keyword
330      (arguments
331        (alias) @name))
332"#;
333
334/// Clojure symbol extraction query
335pub const CLOJURE: &str = r#"
336    (list_lit
337      (sym_lit) @keyword
338      (sym_lit) @name)
339"#;
340
341/// OCaml symbol extraction query
342pub const OCAML: &str = r#"
343    (value_definition
344      (let_binding
345        pattern: (value_name) @name)) @function
346
347    (type_definition
348      (type_binding
349        name: (type_constructor) @name)) @type
350
351    (module_definition
352      (module_binding
353        name: (module_name) @name)) @module
354"#;
355
356/// Lua symbol extraction query
357pub const LUA: &str = r#"
358    (function_declaration
359      name: (identifier) @name) @function
360
361    (function_declaration
362      name: (dot_index_expression
363        field: (identifier) @name)) @function
364
365    (local_function_declaration
366      name: (identifier) @name) @function
367
368    (function_definition_statement
369      name: (identifier) @name) @function
370"#;
371
372/// R symbol extraction query
373pub const R: &str = r#"
374    (left_assignment
375      name: (identifier) @name
376      value: (function_definition)) @function
377
378    (equals_assignment
379      name: (identifier) @name
380      value: (function_definition)) @function
381"#;
382
383#[cfg(test)]
384mod tests {
385    use super::*;
386
387    // These are compile-time constant strings; verifying they're non-empty
388    // documents the expectation even if clippy optimizes it away.
389    #[allow(clippy::const_is_empty)]
390    #[test]
391    fn test_query_strings_not_empty() {
392        assert!(!PYTHON.is_empty());
393        assert!(!JAVASCRIPT.is_empty());
394        assert!(!TYPESCRIPT.is_empty());
395        assert!(!RUST.is_empty());
396        assert!(!GO.is_empty());
397        assert!(!JAVA.is_empty());
398        assert!(!C.is_empty());
399        assert!(!CPP.is_empty());
400        assert!(!CSHARP.is_empty());
401        assert!(!RUBY.is_empty());
402        assert!(!BASH.is_empty());
403        assert!(!PHP.is_empty());
404        assert!(!KOTLIN.is_empty());
405        assert!(!SWIFT.is_empty());
406        assert!(!SCALA.is_empty());
407        assert!(!HASKELL.is_empty());
408        assert!(!ELIXIR.is_empty());
409        assert!(!CLOJURE.is_empty());
410        assert!(!OCAML.is_empty());
411        assert!(!LUA.is_empty());
412        assert!(!R.is_empty());
413    }
414}