/ queries / typescript / destructures.scm
destructures.scm
 1  ;; ═════════════════════════════════════════════════════════════════
 2  ;; TypeScript Destructuring Pattern Queries (from identifiers)
 3  ;; ═════════════════════════════════════════════════════════════════
 4  ;; These patterns capture destructuring from arbitrary identifiers,
 5  ;; allowing tracking like: const env = process.env; const { VAR } = env;
 6  ;;
 7  ;; Note: Direct destructuring from process.env is handled in bindings.scm
 8  
 9  ;; ───────────────────────────────────────────────────────────────────
10  ;; const { VAR } = identifier (shorthand destructuring from alias)
11  ;; ───────────────────────────────────────────────────────────────────
12  (variable_declarator
13    name: (object_pattern
14      (shorthand_property_identifier_pattern) @destructure_target @destructure_key)
15    value: (identifier) @destructure_source) @destructure
16  
17  ;; ───────────────────────────────────────────────────────────────────
18  ;; const { KEY: alias } = identifier (renamed destructuring from alias)
19  ;; ───────────────────────────────────────────────────────────────────
20  (variable_declarator
21    name: (object_pattern
22      (pair_pattern
23        key: (property_identifier) @destructure_key
24        value: (identifier) @destructure_target))
25    value: (identifier) @destructure_source) @destructure
26  
27  ;; ───────────────────────────────────────────────────────────────────
28  ;; const { KEY: alias = default } = identifier (with default value)
29  ;; ───────────────────────────────────────────────────────────────────
30  (variable_declarator
31    name: (object_pattern
32      (pair_pattern
33        key: (property_identifier) @destructure_key
34        value: (assignment_pattern
35          left: (identifier) @destructure_target
36          right: (_))))
37    value: (identifier) @destructure_source) @destructure
38  
39  ;; ───────────────────────────────────────────────────────────────────
40  ;; const { VAR = default } = identifier (shorthand with default)
41  ;; ───────────────────────────────────────────────────────────────────
42  (variable_declarator
43    name: (object_pattern
44      (object_assignment_pattern
45        (shorthand_property_identifier_pattern) @destructure_target @destructure_key
46        (_)))
47    value: (identifier) @destructure_source) @destructure
48  
49  ;; ───────────────────────────────────────────────────────────────────
50  ;; TypeScript: const { VAR } = obj as EnvType
51  ;; ───────────────────────────────────────────────────────────────────
52  (variable_declarator
53    name: (object_pattern
54      (shorthand_property_identifier_pattern) @destructure_target @destructure_key)
55    value: (as_expression
56      (identifier) @destructure_source)) @destructure
57  
58  ;; ───────────────────────────────────────────────────────────────────
59  ;; TypeScript: const { KEY: alias } = obj as EnvType
60  ;; ───────────────────────────────────────────────────────────────────
61  (variable_declarator
62    name: (object_pattern
63      (pair_pattern
64        key: (property_identifier) @destructure_key
65        value: (identifier) @destructure_target))
66    value: (as_expression
67      (identifier) @destructure_source)) @destructure
68  
69  ;; ───────────────────────────────────────────────────────────────────
70  ;; TypeScript: const { VAR } = obj!
71  ;; ───────────────────────────────────────────────────────────────────
72  (variable_declarator
73    name: (object_pattern
74      (shorthand_property_identifier_pattern) @destructure_target @destructure_key)
75    value: (non_null_expression
76      (identifier) @destructure_source)) @destructure