/ queries / cpp / bindings.scm
bindings.scm
 1  ;; ═════════════════════════════════════════════════════════════════════════
 2  ;; C++ Environment Variable Binding Queries
 3  ;; ═════════════════════════════════════════════════════════════════════════
 4  
 5  ;; ───────────────────────────────────────────────────────────────────────────
 6  ;; auto x = getenv("VAR");
 7  ;; const char* x = getenv("VAR");
 8  ;; ───────────────────────────────────────────────────────────────────────────
 9  (declaration
10    declarator: (init_declarator
11      declarator: (identifier) @binding_name
12      value: (call_expression
13        function: (identifier) @_func
14        arguments: (argument_list
15          (string_literal
16            (string_content) @bound_env_var))))
17    (#any-of? @_func "getenv" "secure_getenv")) @env_binding
18  
19  ;; ───────────────────────────────────────────────────────────────────────────
20  ;; auto x = std::getenv("VAR");
21  ;; ───────────────────────────────────────────────────────────────────────────
22  (declaration
23    declarator: (init_declarator
24      declarator: (identifier) @binding_name
25      value: (call_expression
26        function: (qualified_identifier
27          scope: (namespace_identifier) @_ns
28          name: (identifier) @_func)
29        arguments: (argument_list
30          (string_literal
31            (string_content) @bound_env_var))))
32    (#eq? @_ns "std")
33    (#eq? @_func "getenv")) @env_binding
34  
35  ;; ───────────────────────────────────────────────────────────────────────────
36  ;; char* x = getenv("VAR"); (pointer declarator)
37  ;; ───────────────────────────────────────────────────────────────────────────
38  (declaration
39    declarator: (init_declarator
40      declarator: (pointer_declarator
41        declarator: (identifier) @binding_name)
42      value: (call_expression
43        function: (identifier) @_func
44        arguments: (argument_list
45          (string_literal
46            (string_content) @bound_env_var))))
47    (#any-of? @_func "getenv" "secure_getenv")) @env_binding