/ queries / javascript / bindings.scm
bindings.scm
 1  ;; ═════════════════════════════════════════════════════════════════
 2  ;; JavaScript Environment Variable Binding Queries
 3  ;; ═════════════════════════════════════════════════════════════════
 4  
 5  ;; ───────────────────────────────────────────────────────────────────
 6  ;; const/let/var x = process.env.VAR
 7  ;; ───────────────────────────────────────────────────────────────────
 8  (variable_declarator
 9    name: (identifier) @binding_name
10    value: (member_expression
11      object: (member_expression
12        object: (identifier) @_object
13        property: (property_identifier) @_property)
14      property: (property_identifier) @bound_env_var)
15    (#eq? @_object "process")
16    (#eq? @_property "env")) @env_binding
17  
18  ;; ───────────────────────────────────────────────────────────────────
19  ;; const/let/var x = process.env["VAR"]
20  ;; ───────────────────────────────────────────────────────────────────
21  (variable_declarator
22    name: (identifier) @binding_name
23    value: (subscript_expression
24      object: (member_expression
25        object: (identifier) @_object
26        property: (property_identifier) @_property)
27      index: (string
28        (string_fragment) @bound_env_var))
29    (#eq? @_object "process")
30    (#eq? @_property "env")) @env_binding
31  
32  ;; ───────────────────────────────────────────────────────────────────
33  ;; const { VAR } = process.env (destructuring)
34  ;; ───────────────────────────────────────────────────────────────────
35  (variable_declarator
36    name: (object_pattern
37      (shorthand_property_identifier_pattern) @binding_name @bound_env_var)
38    value: (member_expression
39      object: (identifier) @_object
40      property: (property_identifier) @_property)
41    (#eq? @_object "process")
42    (#eq? @_property "env")) @env_binding
43  
44  ;; ───────────────────────────────────────────────────────────────────
45  ;; const { VAR: myVar } = process.env (renamed destructuring)
46  ;; ───────────────────────────────────────────────────────────────────
47  (variable_declarator
48    name: (object_pattern
49      (pair_pattern
50        key: (property_identifier) @bound_env_var
51        value: (identifier) @binding_name))
52    value: (member_expression
53      object: (identifier) @_object
54      property: (property_identifier) @_property)
55    (#eq? @_object "process")
56    (#eq? @_property "env")) @env_binding
57  
58  ;; ───────────────────────────────────────────────────────────────────
59  ;; const { VAR: myVar = "default" } = process.env (with default)
60  ;; ───────────────────────────────────────────────────────────────────
61  (variable_declarator
62    name: (object_pattern
63      (pair_pattern
64        key: (property_identifier) @bound_env_var
65        value: (assignment_pattern
66          left: (identifier) @binding_name
67          right: (_))))
68    value: (member_expression
69      object: (identifier) @_object
70      property: (property_identifier) @_property)
71    (#eq? @_object "process")
72    (#eq? @_property "env")) @env_binding
73  
74  ;; ───────────────────────────────────────────────────────────────────
75  ;; const env = process.env (object alias)
76  ;; ───────────────────────────────────────────────────────────────────
77  (variable_declarator
78    name: (identifier) @binding_name
79    value: (member_expression
80      object: (identifier) @_object
81      property: (property_identifier) @_property)
82    (#eq? @_object "process")
83    (#eq? @_property "env")) @env_object_binding