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.