/ queries / javascript / destructures.scm
destructures.scm
 1  ;; ═════════════════════════════════════════════════════════════════
 2  ;; JavaScript 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  ;; let { VAR } = identifier (also for let/var declarations)
51  ;; ───────────────────────────────────────────────────────────────────
52  ;; Note: The above patterns already match const/let/var because
53  ;; variable_declarator is used regardless of the declaration keyword.