gitnexus 1.6.12-rc.35 → 1.6.12-rc.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,7 +11,7 @@ export declare const PHP_QUERIES = "\n; \u2500\u2500 Namespace \u2500\u2500\u250
11
11
  export declare const RUBY_QUERIES = "\n; \u2500\u2500 Modules \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(module\n name: (constant) @name) @definition.module\n\n; Namespaced module: module Baz::Qux (name field is a scope_resolution node).\n; Separate top-level pattern (not a [...] alternation) so neither branch is\n; silently dropped \u2014 see #1975. The full scope_resolution text keys the node so\n; it matches the HAS_METHOD owner id derived from the same name field.\n(module\n name: (scope_resolution) @name) @definition.module\n\n; \u2500\u2500 Classes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(class\n name: (constant) @name) @definition.class\n\n; Namespaced class: class Foo::Bar (name field is a scope_resolution node).\n(class\n name: (scope_resolution) @name) @definition.class\n\n; \u2500\u2500 Instance methods \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(method\n name: (identifier) @name) @definition.method\n\n; \u2500\u2500 Singleton (class-level) methods \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(singleton_method\n name: (identifier) @name) @definition.method\n\n; \u2500\u2500 All calls (require, include, attr_*, and regular calls routed in JS) \u2500\u2500\u2500\u2500\u2500\n(call\n method: (identifier) @call.name) @call\n\n; \u2500\u2500 Constant assignment: MAX_SIZE = 100, ITEMS = [...] \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(assignment\n left: (constant) @name) @definition.const\n\n; \u2500\u2500 Bare calls without parens (identifiers at statement level are method calls) \u2500\n; NOTE: This may over-capture variable reads as calls (e.g. 'result' at\n; statement level). Ruby's grammar makes bare identifiers ambiguous \u2014 they\n; could be local variables or zero-arity method calls. Post-processing via\n; provider.isBuiltInName and symbol resolution filtering suppresses most false\n; positives, but a variable name that coincidentally matches a method name\n; elsewhere may produce a false CALLS edge.\n(body_statement\n (identifier) @call.name @call)\n\n; Write access: obj.field = value (Ruby setter \u2014 syntactically a method call to field=)\n(assignment\n left: (call\n receiver: (_) @assignment.receiver\n method: (identifier) @assignment.property)\n right: (_)) @assignment\n\n; Write access: obj.field += value (compound assignment \u2014 operator_assignment node, not assignment)\n(operator_assignment\n left: (call\n receiver: (_) @assignment.receiver\n method: (identifier) @assignment.property)\n right: (_)) @assignment\n\n; \u2500\u2500 Closure bindings (#2693) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; A name bound to a closure literal IS a callable, so it emits Function rather\n; than a value label \u2014 matching TS/JS and the languages #2687 already covered.\n; The callable node is what callable-value-flow joins the binding to (by file,\n; line and name), which is what makes handler.call(1) resolve. Overlap with the value\n; rules above is collapsed by the parse-worker dedup, which ranks callable\n; highest (#2687).\n(assignment\n left: (identifier) @name\n right: (lambda)) @definition.function\n\n; The (lambda) rule above covers the stabby forms only. lambda do...end,\n; proc do...end and Proc.new are (call) nodes, so without these the scope\n; channel declared a closure the graph channel never gave a node to, and the\n; call fell through to the enclosing method. Same two-channel lockstep Rust\n; needed. Receiver constraints mirror ruby/query.ts exactly: bare for\n; lambda/proc, Proc-constant for new \u2014 otherwise every block-taking call\n; (items.map { }) would mint a Function node.\n(assignment\n left: (identifier) @name\n right: (call\n !receiver\n method: (identifier) @_lam\n block: [(block) (do_block)])\n (#eq? @_lam \"lambda\")) @definition.function\n\n(assignment\n left: (identifier) @name\n right: (call\n !receiver\n method: (identifier) @_prc\n block: [(block) (do_block)])\n (#eq? @_prc \"proc\")) @definition.function\n\n(assignment\n left: (identifier) @name\n right: (call\n receiver: (constant) @_pc\n method: (identifier) @_nw\n block: [(block) (do_block)])\n (#eq? @_pc \"Proc\")\n (#eq? @_nw \"new\")) @definition.function\n";
12
12
  export declare const KOTLIN_QUERIES = "\n; \u2500\u2500 Interfaces \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; tree-sitter-kotlin (fwcd) has no interface_declaration node type.\n; Interfaces are class_declaration nodes with an anonymous \"interface\" keyword child.\n(class_declaration\n \"interface\"\n (type_identifier) @name) @definition.interface\n\n; \u2500\u2500 Classes (regular, data, sealed, enum) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; All have the anonymous \"class\" keyword child. enum class has both\n; \"enum\" and \"class\" children \u2014 the \"class\" child still matches.\n(class_declaration\n \"class\"\n (type_identifier) @name) @definition.class\n\n; \u2500\u2500 Object declarations (Kotlin singletons) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(object_declaration\n (type_identifier) @name) @definition.class\n\n; \u2500\u2500 Companion objects (named only) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(companion_object\n (type_identifier) @name) @definition.class\n\n; \u2500\u2500 Functions (top-level, member, extension) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(function_declaration\n (simple_identifier) @name) @definition.function\n\n; \u2500\u2500 Secondary constructors (F49 sibling F48, issue #1919) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; \"constructor(...) { }\" inside a class body is a secondary_constructor with\n; no name child \u2014 its only identity token is the anonymous \"constructor\"\n; keyword, captured here as @name so the node is named \"constructor\"\n; (matching kotlinMethodConfig.extractName). Multiple secondary constructors\n; share that name but get distinct ids via the worker's #<arity> suffix.\n(secondary_constructor\n \"constructor\" @name) @definition.constructor\n\n; \u2500\u2500 Properties \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(property_declaration\n (variable_declaration\n (simple_identifier) @name)) @definition.property\n\n; Lambda bindings: `val f = { x -> x }` binds a CALLABLE, so it emits Function\n; rather than Property, matching TS/JS. This aligns the LABEL only \u2014 call\n; resolution runs off the scope-resolution query, which still models the binding\n; as a value, so `f()` does not resolve here yet. Overlap with the property\n; pattern above is collapsed by the parse-worker dedup (#2687).\n(property_declaration\n (variable_declaration\n (simple_identifier) @name)\n (lambda_literal)) @definition.function\n\n; \u2500\u2500 Destructuring declarations (F51, issue #1919) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; \"val (a, b) = pair\" binds several names through a multi_variable_declaration\n; (NOT a variable_declaration), which the property rule above misses. Emit one\n; @definition.property per bound name \u2014 the SAME label every other Kotlin val/var\n; gets (KOTLIN_QUERIES has no @definition.variable rule, so a single \"val x\"\n; is already a Property; matching that keeps destructured names consistent and\n; out of the block-scope local-symbol pruner that drops Variable/Const/Static).\n; The Kotlin \"_\" discard placeholder is filtered out here via (#not-eq? @name \"_\")\n; \u2014 these locals have no enclosing class, so the field-extractor enrichment path\n; never runs and cannot do the filtering itself. Each rule is a standalone\n; pattern (NOT a top-level [...] alternation), so the predicate is safe under\n; tree-sitter 0.21.1 (no sibling-branch drop). Loop destructuring\n; \"for ((k, v) in m)\" nests the SAME multi_variable_declaration directly under the\n; for_statement (no property_declaration wrapper); the scope-path loop binding only\n; handles the single variable_declaration form, so this rule does not double-emit.\n((property_declaration\n (multi_variable_declaration\n (variable_declaration\n (simple_identifier) @name))) @definition.property\n (#not-eq? @name \"_\"))\n\n((for_statement\n (multi_variable_declaration\n (variable_declaration\n (simple_identifier) @name))) @definition.property\n (#not-eq? @name \"_\"))\n\n; Primary constructor val/var parameters (data class, value class, regular class)\n; binding_pattern_kind contains \"val\" or \"var\" \u2014 without it, the param is not a property\n(class_parameter\n (binding_pattern_kind)\n (simple_identifier) @name) @definition.property\n\n; \u2500\u2500 Enum entries \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(enum_entry\n (simple_identifier) @name) @definition.enum\n\n; \u2500\u2500 Type aliases \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(type_alias\n (type_identifier) @name) @definition.type\n\n; \u2500\u2500 Imports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(import_header\n (identifier) @import.source) @import\n\n; \u2500\u2500 Function calls (direct) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(call_expression\n (simple_identifier) @call.name) @call\n\n; \u2500\u2500 Method calls (via navigation: obj.method()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(call_expression\n (navigation_expression\n (navigation_suffix\n (simple_identifier) @call.name))) @call\n\n; \u2500\u2500 Constructor invocations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(constructor_invocation\n (user_type\n (type_identifier) @call.name)) @call\n\n; \u2500\u2500 Infix function calls (e.g., a to b, x until y) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; tree-sitter-kotlin models infix_expression as three UNNAMED-FIELD children:\n; (operand) (operator) (operand) \u2014 all three are simple_identifier for\n; \"a to b\". The old rule \"(infix_expression (simple_identifier) @call.name)\"\n; matched EVERY simple_identifier child, so it captured the operands a/b as\n; spurious @call.name calls (F49, issue #1919). There is no operator: field to\n; anchor on, so anchor positionally: the operator is the middle child, flanked\n; by an operand on each side. End-anchored on both sides so only the lone\n; middle simple_identifier (the infix function) is captured; chained\n; \"a to b to c\" still matches each nested infix_expression's own operator.\n(infix_expression\n .\n (_)\n .\n (simple_identifier) @call.name\n .\n (_)\n .) @call\n\n; Write access: obj.field = value\n(assignment\n (directly_assignable_expression\n (_) @assignment.receiver\n (navigation_suffix\n (simple_identifier) @assignment.property))\n (_)) @assignment\n\n";
13
13
  export declare const SWIFT_QUERIES = "\n; Classes\n(class_declaration \"class\" name: (type_identifier) @name) @definition.class\n\n; Structs\n(class_declaration \"struct\" name: (type_identifier) @name) @definition.struct\n\n; Enums\n(class_declaration \"enum\" name: (type_identifier) @name) @definition.enum\n\n; Extensions (mapped to class \u2014 no dedicated label in schema)\n(class_declaration \"extension\" name: (user_type (type_identifier) @name)) @definition.class\n\n; Actors\n(class_declaration \"actor\" name: (type_identifier) @name) @definition.class\n\n; Protocols (mapped to interface)\n(protocol_declaration name: (type_identifier) @name) @definition.interface\n\n; Type aliases\n(typealias_declaration name: (type_identifier) @name) @definition.type\n\n; Functions (top-level and methods)\n(function_declaration name: (simple_identifier) @name) @definition.function\n\n; Protocol method declarations\n(protocol_function_declaration name: (simple_identifier) @name) @definition.method\n\n; Initializers\n(init_declaration) @definition.constructor\n\n; Properties (stored and computed)\n(property_declaration (pattern (simple_identifier) @name)) @definition.property\n\n; Closure bindings: `let f = { ... }` binds a CALLABLE, so it emits Function\n; rather than Property, matching TS/JS. This aligns the LABEL only \u2014 call\n; resolution runs off the scope-resolution query, which still models the binding\n; as a value, so `f()` does not resolve here yet. Overlap with the property\n; pattern above is collapsed by the parse-worker dedup (#2687).\n(property_declaration\n name: (pattern (simple_identifier) @name)\n value: (lambda_literal)) @definition.function\n\n; Protocol property requirements (F75): \"var title: String { get }\" parses to a\n; protocol_property_declaration (NOT property_declaration). Its name is a\n; \"name:\" pattern field wrapping a value_binding_pattern + the bound\n; simple_identifier; match the inner identifier so the requirement is emitted\n; as a property symbol of the protocol.\n(protocol_property_declaration (pattern (simple_identifier) @name)) @definition.property\n\n; Enum cases\n(enum_entry (simple_identifier) @name) @definition.property\n\n; Imports\n(import_declaration (identifier (simple_identifier) @import.source)) @import\n\n; Calls - direct function calls\n(call_expression (simple_identifier) @call.name) @call\n\n; Calls - member/navigation calls (obj.method())\n(call_expression (navigation_expression (navigation_suffix (simple_identifier) @call.name))) @call\n\n; Write access: obj.field = value (tree-sitter-swift 0.7.1 uses named fields)\n(assignment\n target: (directly_assignable_expression\n (navigation_expression\n target: (_) @assignment.receiver\n suffix: (navigation_suffix\n suffix: (simple_identifier) @assignment.property)))\n result: (_)) @assignment\n\n";
14
- export declare const DART_QUERIES = "\n; \u2500\u2500 Classes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(class_definition\n name: (identifier) @name) @definition.class\n\n; \u2500\u2500 Mixins \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(mixin_declaration\n (identifier) @name) @definition.trait\n\n; \u2500\u2500 Extensions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(extension_declaration\n name: (identifier) @name) @definition.class\n\n; \u2500\u2500 Enums \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(enum_declaration\n name: (identifier) @name) @definition.enum\n\n; \u2500\u2500 Type aliases \u2014 new-style (typedef Pred = bool Function(int);) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Anchor \"=\" after the name to avoid capturing the RHS type. The name is the\n; first type_identifier (the alias), the RHS function_type follows the \"=\".\n(type_alias\n (type_identifier) @name\n \"=\") @definition.type\n\n; \u2500\u2500 Type aliases \u2014 old-style (typedef int Cmp(int a, int b);) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; The old-style function typedef has NO \"=\" \u2014 it parses as a type_alias whose\n; children are: return type_identifier, NAME type_identifier, formal_parameter_list.\n; Anchor @name as the type_identifier immediately before the parameter list so we\n; capture the alias name (Cmp), not the leading return type (int).\n(type_alias\n (type_identifier) @name\n .\n (formal_parameter_list)) @definition.type\n\n; \u2500\u2500 Type aliases \u2014 generic old-style (typedef int Cmp<T>(T a, T b);) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; #1919 review CF2: a generic <T> inserts a type_parameters node between the\n; NAME and the parameter list, so the non-generic adjacency above misses it.\n; Standalone pattern (NOT an alternation arm) anchoring @name immediately before\n; type_parameters, which is immediately before the parameter list. The new-style\n; \"=\" rule above is unanchored and already covers generic new-style (Mapper<T>).\n(type_alias\n (type_identifier) @name\n .\n (type_parameters)\n .\n (formal_parameter_list)) @definition.type\n\n; \u2500\u2500 Top-level functions (parent is program, not method_signature) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(program\n (function_signature\n name: (identifier) @name) @definition.function)\n\n; \u2500\u2500 Abstract method declarations (function_signature inside class body declaration) \u2500\u2500\n(declaration\n (function_signature\n name: (identifier) @name)) @definition.method\n\n; \u2500\u2500 Methods (inside class/mixin/extension bodies) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(method_signature\n (function_signature\n name: (identifier) @name)) @definition.method\n\n; \u2500\u2500 Constructors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(constructor_signature\n name: (identifier) @name) @definition.constructor\n\n; \u2500\u2500 Factory constructors (anchor before param list to capture variant name, not class) \u2500\u2500\n(method_signature\n (factory_constructor_signature\n (identifier) @name . (formal_parameter_list))) @definition.constructor\n\n; \u2500\u2500 Field declarations (String name = '', Address address = Address()) \u2500\u2500\u2500\u2500\u2500\u2500\n(declaration\n (type_identifier)\n (initialized_identifier_list\n (initialized_identifier\n (identifier) @name))) @definition.property\n\n; \u2500\u2500 Nullable field declarations (String? name) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(declaration\n (nullable_type)\n (initialized_identifier_list\n (initialized_identifier\n (identifier) @name))) @definition.property\n\n; \u2500\u2500 static const / static final / const class fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; A \"static const a = 1;\" / \"static final String b = ..., c = ...;\" field parses\n; with a static_final_declaration_list (NOT an initialized_identifier_list), so\n; the field rules above miss them. One @name per static_final_declaration, so a\n; multi-name declaration yields a Property per name. Anchored on declaration (not\n; class_body) so top-level final/const variables \u2014 whose\n; static_final_declaration_list is a direct child of program, not wrapped in a\n; declaration \u2014 never match here.\n(declaration\n (static_final_declaration_list\n (static_final_declaration\n (identifier) @name))) @definition.property\n\n; \u2500\u2500 Getters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(method_signature\n (getter_signature\n name: (identifier) @name)) @definition.property\n\n; \u2500\u2500 Setters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(method_signature\n (setter_signature\n name: (identifier) @name)) @definition.property\n\n; \u2500\u2500 Top-level variable declarations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Top-level Dart variables are NOT wrapped in a declaration node (that wrapper\n; only occurs for class-body members). They sit as loose siblings under program:\n; var name = 'x'; int x = 5; \u2192 initialized_identifier_list\n; final int count = 3; const a = 1, b = 2; \u2192 static_final_declaration_list\n; Anchor both rules under (program) so class-body fields (which reuse the same\n; inner node types) are never matched here. One @name per declared name so\n; multi-name forms (const a = 1, b = 2;) yield a Variable per name.\n(program\n (initialized_identifier_list\n (initialized_identifier\n (identifier) @name)) @definition.variable)\n; Closure bindings: `var f = (x) => x;` binds a CALLABLE, so it emits Function\n; rather than Variable, matching TS/JS. Overlap with the pattern above is\n; collapsed by the parse-worker dedup (#2687). Since #2693 this node is also\n; what makes `f()` resolve: the scope-resolution query declares the binding as\n; a value, and callable-value-flow admits it as a call target precisely because\n; the node it resolves to is a Function.\n(program\n (initialized_identifier_list\n (initialized_identifier\n (identifier) @name\n (function_expression))) @definition.function)\n\n; \u2500\u2500 Top-level final/const closure bindings (#2693) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; `final handler = (x) => x;` parses as a static_final_declaration_list, not an\n; initialized_identifier_list, so the rules above never reach it \u2014 `final` is\n; the idiomatic top-level binding keyword and was the one closure form getting\n; neither the callable label nor resolution.\n(program\n (static_final_declaration_list\n (static_final_declaration\n (identifier) @name\n (function_expression))) @definition.function)\n\n; \u2500\u2500 Function-local closure bindings (#2693) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; `void m() { var f = (x) => x; }` \u2014 locals parse as initialized_variable_\n; definition, which the top-level rules above never reach, so a local closure\n; had no graph node at all and `f()` could not resolve. Restricted to a\n; function_expression value: ordinary locals stay unindexed, as before.\n(initialized_variable_definition\n name: (identifier) @name\n value: (function_expression)) @definition.function\n\n; Second and later declarators of a multi-name local (`var f = .., g = ..;`)\n; are initialized_identifier children NESTED INSIDE the same\n; initialized_variable_definition, which the `name:`/`value:` field rule above\n; only reaches for the FIRST name \u2014 so `g` silently had no node. Anchored on the\n; inner node so each name gets its own range; the top-level form lives under\n; initialized_identifier_list instead, so these never double-match.\n(initialized_variable_definition\n (initialized_identifier\n (identifier) @name\n (function_expression)) @definition.function)\n(program\n (static_final_declaration_list\n (static_final_declaration\n (identifier) @name)) @definition.variable)\n\n; \u2500\u2500 Imports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(import_or_export\n (library_import\n (import_specification\n (configurable_uri) @import.source))) @import\n\n; \u2500\u2500 Calls: direct function/constructor calls (identifier immediately before argument_part) \u2500\u2500\n(expression_statement\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: method calls (obj.method()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(expression_statement\n (selector\n (unconditional_assignable_selector\n (identifier) @call.name))) @call\n\n; \u2500\u2500 Calls: in return statements (return User()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(return_statement\n (identifier) @call.name\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: in variable assignments (var x = getUser()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(initialized_variable_definition\n value: (identifier) @call.name\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: member calls in variable assignments (var x = obj.method()) \u2500\u2500\u2500\u2500\u2500\u2500\n(initialized_variable_definition\n (selector\n (unconditional_assignable_selector\n (identifier) @call.name))\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: await direct (await doSomething()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(await_expression\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: await method chain (await obj.method()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Requires argument_part to distinguish method calls from field access (await obj.field)\n(await_expression\n (selector\n (unconditional_assignable_selector\n (identifier) @call.name))\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: named argument (foo(child: buildX())) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(named_argument\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: inside list literals ([buildA(), buildB()]) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(list_literal\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: cascade (obj..add(x)..sort()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Note: cascade_selector contains identifier directly (no unconditional_assignable_selector\n; wrapper in Dart grammar), so inferCallForm() classifies these as free calls rather than\n; member calls. Cross-file resolution still benefits from the call being recorded.\n(cascade_section\n (cascade_selector (identifier) @call.name)\n (argument_part)) @call\n\n; \u2500\u2500 Calls: static final field initializers (static final _svc = MyService()) \u2500\u2500\n(static_final_declaration\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: arrow function body (=> buildWidget()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(function_body \"=>\"\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: lambda body (() => doSomething()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(function_expression_body\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Re-exports (export 'foo.dart') \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(import_or_export\n (library_export\n (configurable_uri) @import.source)) @import\n\n; \u2500\u2500 Write access: obj.field = value \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(assignment_expression\n left: (assignable_expression\n (identifier) @assignment.receiver\n (unconditional_assignable_selector\n (identifier) @assignment.property))\n right: (_)) @assignment\n\n; \u2500\u2500 Write access: this.field = value \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(assignment_expression\n left: (assignable_expression\n (this) @assignment.receiver\n (unconditional_assignable_selector\n (identifier) @assignment.property))\n right: (_)) @assignment\n";
14
+ export declare const DART_QUERIES = "\n; \u2500\u2500 Classes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(class_definition\n name: (identifier) @name) @definition.class\n\n; \u2500\u2500 Mixins \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(mixin_declaration\n (identifier) @name) @definition.trait\n\n; \u2500\u2500 Extensions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(extension_declaration\n name: (identifier) @name) @definition.class\n\n; \u2500\u2500 Enums \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(enum_declaration\n name: (identifier) @name) @definition.enum\n\n; \u2500\u2500 Type aliases \u2014 new-style (typedef Pred = bool Function(int);) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Anchor \"=\" after the name to avoid capturing the RHS type. The name is the\n; first type_identifier (the alias), the RHS function_type follows the \"=\".\n(type_alias\n (type_identifier) @name\n \"=\") @definition.type\n\n; \u2500\u2500 Type aliases \u2014 old-style (typedef int Cmp(int a, int b);) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; The old-style function typedef has NO \"=\" \u2014 it parses as a type_alias whose\n; children are: return type_identifier, NAME type_identifier, formal_parameter_list.\n; Anchor @name as the type_identifier immediately before the parameter list so we\n; capture the alias name (Cmp), not the leading return type (int).\n(type_alias\n (type_identifier) @name\n .\n (formal_parameter_list)) @definition.type\n\n; \u2500\u2500 Type aliases \u2014 generic old-style (typedef int Cmp<T>(T a, T b);) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; #1919 review CF2: a generic <T> inserts a type_parameters node between the\n; NAME and the parameter list, so the non-generic adjacency above misses it.\n; Standalone pattern (NOT an alternation arm) anchoring @name immediately before\n; type_parameters, which is immediately before the parameter list. The new-style\n; \"=\" rule above is unanchored and already covers generic new-style (Mapper<T>).\n(type_alias\n (type_identifier) @name\n .\n (type_parameters)\n .\n (formal_parameter_list)) @definition.type\n\n; \u2500\u2500 Top-level functions (parent is program, not method_signature) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(program\n (function_signature\n name: (identifier) @name) @definition.function)\n\n; \u2500\u2500 Abstract method declarations (function_signature inside class body declaration) \u2500\u2500\n(declaration\n (function_signature\n name: (identifier) @name)) @definition.method\n\n; \u2500\u2500 Methods (inside class/mixin/extension bodies) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(method_signature\n (function_signature\n name: (identifier) @name)) @definition.method\n\n; \u2500\u2500 Constructors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(constructor_signature\n name: (identifier) @name) @definition.constructor\n\n; \u2500\u2500 Factory constructors (anchor before param list to capture variant name, not class) \u2500\u2500\n(method_signature\n (factory_constructor_signature\n (identifier) @name . (formal_parameter_list))) @definition.constructor\n\n; \u2500\u2500 Field declarations (String name = '', Address address = Address()) \u2500\u2500\u2500\u2500\u2500\u2500\n; @name is ANCHORED to the first named child. An initialized_identifier whose\n; value is a constructor call parses the callee as a SECOND (identifier) sibling\n; of the name \u2014 `final TextEditingController _t = TextEditingController();` is\n; initialized_identifier[identifier \"_t\", identifier \"TextEditingController\",\n; selector]. Unanchored, `(identifier) @name` matched both and minted a phantom\n; Property named after the TYPE alongside the real field. The same shape applies\n; to static_final_declaration (class static and top-level final/const), so every\n; rule below anchors. languages/dart/query.ts already anchors its mirror rules.\n(declaration\n (type_identifier)\n (initialized_identifier_list\n (initialized_identifier\n . (identifier) @name))) @definition.property\n\n; \u2500\u2500 Nullable field declarations (String? name) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(declaration\n (nullable_type)\n (initialized_identifier_list\n (initialized_identifier\n . (identifier) @name))) @definition.property\n\n; \u2500\u2500 static const / static final / const class fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; A \"static const a = 1;\" / \"static final String b = ..., c = ...;\" field parses\n; with a static_final_declaration_list (NOT an initialized_identifier_list), so\n; the field rules above miss them. One @name per static_final_declaration, so a\n; multi-name declaration yields a Property per name. Anchored on declaration (not\n; class_body) so top-level final/const variables \u2014 whose\n; static_final_declaration_list is a direct child of program, not wrapped in a\n; declaration \u2014 never match here.\n(declaration\n (static_final_declaration_list\n (static_final_declaration\n . (identifier) @name))) @definition.property\n\n; \u2500\u2500 Getters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(method_signature\n (getter_signature\n name: (identifier) @name)) @definition.property\n\n; \u2500\u2500 Setters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(method_signature\n (setter_signature\n name: (identifier) @name)) @definition.property\n\n; \u2500\u2500 Top-level variable declarations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Top-level Dart variables are NOT wrapped in a declaration node (that wrapper\n; only occurs for class-body members). They sit as loose siblings under program:\n; var name = 'x'; int x = 5; \u2192 initialized_identifier_list\n; final int count = 3; const a = 1, b = 2; \u2192 static_final_declaration_list\n; Anchor both rules under (program) so class-body fields (which reuse the same\n; inner node types) are never matched here. One @name per declared name so\n; multi-name forms (const a = 1, b = 2;) yield a Variable per name.\n(program\n (initialized_identifier_list\n (initialized_identifier\n . (identifier) @name)) @definition.variable)\n; Closure bindings: `var f = (x) => x;` binds a CALLABLE, so it emits Function\n; rather than Variable, matching TS/JS. Overlap with the pattern above is\n; collapsed by the parse-worker dedup (#2687). Since #2693 this node is also\n; what makes `f()` resolve: the scope-resolution query declares the binding as\n; a value, and callable-value-flow admits it as a call target precisely because\n; the node it resolves to is a Function.\n(program\n (initialized_identifier_list\n (initialized_identifier\n (identifier) @name\n (function_expression))) @definition.function)\n\n; \u2500\u2500 Top-level final/const closure bindings (#2693) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; `final handler = (x) => x;` parses as a static_final_declaration_list, not an\n; initialized_identifier_list, so the rules above never reach it \u2014 `final` is\n; the idiomatic top-level binding keyword and was the one closure form getting\n; neither the callable label nor resolution.\n(program\n (static_final_declaration_list\n (static_final_declaration\n (identifier) @name\n (function_expression))) @definition.function)\n\n; \u2500\u2500 Function-local closure bindings (#2693) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; `void m() { var f = (x) => x; }` \u2014 locals parse as initialized_variable_\n; definition, which the top-level rules above never reach, so a local closure\n; had no graph node at all and `f()` could not resolve. Restricted to a\n; function_expression value: ordinary locals stay unindexed, as before.\n(initialized_variable_definition\n name: (identifier) @name\n value: (function_expression)) @definition.function\n\n; Second and later declarators of a multi-name local (`var f = .., g = ..;`)\n; are initialized_identifier children NESTED INSIDE the same\n; initialized_variable_definition, which the `name:`/`value:` field rule above\n; only reaches for the FIRST name \u2014 so `g` silently had no node. Anchored on the\n; inner node so each name gets its own range; the top-level form lives under\n; initialized_identifier_list instead, so these never double-match.\n(initialized_variable_definition\n (initialized_identifier\n (identifier) @name\n (function_expression)) @definition.function)\n(program\n (static_final_declaration_list\n (static_final_declaration\n . (identifier) @name)) @definition.variable)\n\n; \u2500\u2500 Imports \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(import_or_export\n (library_import\n (import_specification\n (configurable_uri) @import.source))) @import\n\n; \u2500\u2500 Calls: direct function/constructor calls (identifier immediately before argument_part) \u2500\u2500\n(expression_statement\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: method calls (obj.method()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(expression_statement\n (selector\n (unconditional_assignable_selector\n (identifier) @call.name))) @call\n\n; \u2500\u2500 Calls: in return statements (return User()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(return_statement\n (identifier) @call.name\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: in variable assignments (var x = getUser()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(initialized_variable_definition\n value: (identifier) @call.name\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: member calls in variable assignments (var x = obj.method()) \u2500\u2500\u2500\u2500\u2500\u2500\n(initialized_variable_definition\n (selector\n (unconditional_assignable_selector\n (identifier) @call.name))\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: await direct (await doSomething()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(await_expression\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: await method chain (await obj.method()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Requires argument_part to distinguish method calls from field access (await obj.field)\n(await_expression\n (selector\n (unconditional_assignable_selector\n (identifier) @call.name))\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: named argument (foo(child: buildX())) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(named_argument\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: inside list literals ([buildA(), buildB()]) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(list_literal\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: cascade (obj..add(x)..sort()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n; Note: cascade_selector contains identifier directly (no unconditional_assignable_selector\n; wrapper in Dart grammar), so inferCallForm() classifies these as free calls rather than\n; member calls. Cross-file resolution still benefits from the call being recorded.\n(cascade_section\n (cascade_selector (identifier) @call.name)\n (argument_part)) @call\n\n; \u2500\u2500 Calls: static final field initializers (static final _svc = MyService()) \u2500\u2500\n(static_final_declaration\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: arrow function body (=> buildWidget()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(function_body \"=>\"\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Calls: lambda body (() => doSomething()) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(function_expression_body\n (identifier) @call.name\n .\n (selector (argument_part))) @call\n\n; \u2500\u2500 Re-exports (export 'foo.dart') \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(import_or_export\n (library_export\n (configurable_uri) @import.source)) @import\n\n; \u2500\u2500 Write access: obj.field = value \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(assignment_expression\n left: (assignable_expression\n (identifier) @assignment.receiver\n (unconditional_assignable_selector\n (identifier) @assignment.property))\n right: (_)) @assignment\n\n; \u2500\u2500 Write access: this.field = value \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(assignment_expression\n left: (assignable_expression\n (this) @assignment.receiver\n (unconditional_assignable_selector\n (identifier) @assignment.property))\n right: (_)) @assignment\n";
15
15
  export declare const ZIG_QUERIES = "\n; Functions (top-level + methods inside struct/enum/union containers)\n(function_declaration\n name: (identifier) @name) @definition.function\n\n; Struct: const Foo = struct { ... }\n(variable_declaration\n (identifier) @name\n (struct_declaration)) @definition.struct\n\n; Enum: const Foo = enum { ... }\n(variable_declaration\n (identifier) @name\n (enum_declaration)) @definition.enum\n\n; Union: const Foo = union { ... } (and tagged-union union(enum) { ... })\n(variable_declaration\n (identifier) @name\n (union_declaration)) @definition.union\n\n; File-struct: a file whose top level declares a container field IS a struct\n; named after the file (`Page.zig` declares `Page`; `@typeName` agrees).\n; The anchor is the whole file; the name comes from the class extractor\n; (`zigContainerName(source_file, filePath)` \u2014 the file stem), not from a\n; capture, since no node spells it. One match per top-level field \u2014 the\n; definition phase dedupes by (node, name). Namespace-only files (no fields)\n; never match and keep their Function ids.\n((source_file (container_field name: (identifier) @_field)) @definition.struct\n (#not-eq? @_field \"\"))\n; A FIELDLESS file-struct \u2014 `Empty.zig`: no field, but a top-level fn whose\n; first parameter is typed as the file's own type (`self: *@This()`, or\n; `self: *Self` beside `const Self = @This();`). Zero-sized types are still\n; constructed (`Empty{}`) and dispatched on, and keyed on fields alone the\n; file lost its Struct node and every `e.ping()` edge (PR #1432 review,\n; 8.12). The two rules over-match on purpose \u2014 any `@This` in a first\n; parameter, any top-level `@This()` alias \u2014 and the provider's\n; `shouldSkipDefinitionCapture` keeps only what `isZigFileStruct` (the\n; single predicate the owner walk and the scope side use) admits.\n((source_file (function_declaration (parameters . (parameter type: (_) @_recv))))\n @definition.struct\n (#match? @_recv \"@This\"))\n((source_file (variable_declaration (identifier) (builtin_function (builtin_identifier) @_this)))\n @definition.struct\n (#eq? @_this \"@This\"))\n\n; Opaque: const Handle = opaque { ... } \u2014 the FFI handle type. It is a\n; container (it may declare methods, never fields), so it is labelled Struct:\n; the owner of a HAS_METHOD edge must be class-like, and there is no closer\n; label. It is NOT a TypeAlias \u2014 an opaque type is a distinct nominal type,\n; deliberately incompatible with whatever it wraps.\n(variable_declaration\n (identifier) @name\n (opaque_declaration)) @definition.struct\n\n; Generic type constructors: `pub fn List(comptime T: type) type { return\n; struct { \u2026 }; }` \u2014 Zig's only spelling of a generic type. The returned\n; container is anonymous in the grammar; the definition anchor is the\n; container node and its name is the enclosing function's (`List`), which\n; is what every caller writes (`List(u8)`). Only the direct `return\n; <container>` of a fn whose return type is `type` qualifies (see\n; `zigTypeConstructorOf`). The Function node `List` coexists: `List` is\n; both a callable and a type.\n((function_declaration\n name: (identifier) @name\n type: (builtin_type) @_ret\n body: (block (expression_statement (return_expression\n (struct_declaration) @definition.struct))))\n (#eq? @_ret \"type\"))\n((function_declaration\n name: (identifier) @name\n type: (builtin_type) @_ret\n body: (block (expression_statement (return_expression\n (union_declaration) @definition.union))))\n (#eq? @_ret \"type\"))\n((function_declaration\n name: (identifier) @name\n type: (builtin_type) @_ret\n body: (block (expression_statement (return_expression\n (enum_declaration) @definition.enum))))\n (#eq? @_ret \"type\"))\n\n; Function-local and anonymous containers (F8): `fn string() { const R =\n; struct { fn get \u2026 }; }` (Lightpanda's reflection.zig declares one `R` per\n; builder fn), `std.sort.pdq(T, items, {}, struct { fn lessThan \u2026 }.lessThan)`,\n; `const cmp = struct { fn lt \u2026 }.lt;`, a field typed `?struct { min: u32 }`.\n; No name child spells their identity, so these rules match EVERY container\n; and the class extractor names the node from `zigContainerName` (`string$R`,\n; `build$1`) \u2014 the same function the owner walk uses for their fns, which\n; were ownerless, colliding Methods before. The bound shapes above match too;\n; the provider's `shouldSkipDefinitionCapture` keeps exactly one rule per\n; container (`zigContainerAnchor`).\n(struct_declaration) @definition.struct\n(enum_declaration) @definition.enum\n(union_declaration) @definition.union\n(opaque_declaration) @definition.struct\n\n; Container fields (struct fields, enum variants, union variants) \u2014 all are\n; `container_field` in the grammar and all become Property (C labels its\n; enumerators Const; Rust captures no variants; Zig's own vocabulary is\n; \"field\" for all three, so one label keeps the query honest).\n; #not-eq? guard: tree-sitter-zig 1.1.2 recovers an EMPTY container body\n; (`struct {}`, `opaque {}`) as a container_field whose identifier is a\n; zero-width MISSING placeholder \u2014 a parser artefact, not a field, and\n; without the guard it minted a Property with an empty name.\n((container_field\n name: (identifier) @name) @definition.property\n (#not-eq? @name \"\"))\n\n; Named tests: test \"description\" { ... }. The name is the string node WITH\n; its quotes, so `test \"add\"` next to `fn add` (the idiomatic layout) does\n; not collide on Function:<file>:add. Anonymous `test {}` and decl-tests\n; `test add {}` have no name of their own and are not graph nodes; their\n; bodies' calls attribute to the File.\n(test_declaration\n (string) @name) @definition.function\n\n; const / var bindings that are neither a container nor an @import (those two\n; are skipped by the provider's `shouldSkipDefinitionCapture` so the Struct /\n; import binding is the only node for that name). The literal keyword is\n; load-bearing: tree-sitter-zig 1.1.2 parses statement assignments (`x = 5;`,\n; `x += 1;`, `_ = expr;`) as `variable_declaration` WITHOUT a keyword\n; child, and a keyword-less rule would mint a Const per assignment and a\n; Variable named `_` per discard.\n(variable_declaration\n \"const\" . (identifier) @name) @definition.const\n(variable_declaration\n \"var\" . (identifier) @name) @definition.variable\n\n; @import(\"path\") \u2014 capture the string argument as @import.source, in\n; EVERY position: the value of a const/var (`const std = @import(\"std\")`),\n; a member chain (`const X = @import(\"x.zig\").X`), `pub usingnamespace\n; @import(\"path\")`, a tuple element (`pub const Interfaces = .{\n; @import(\"a.zig\"), @import(\"b.zig\") }`), a call argument, a comparison\n; operand, the receiver of a member call (`try @import(\"dump.zig\").root(...)`).\n; Zig has no import statement \u2014 the builtin IS the import, wherever it sits,\n; and every occurrence is a file dependency. The #eq? predicate keeps the\n; other builtins (@sizeOf, @TypeOf, @as, \u2026) out. One rule, one match per\n; builtin: the structure phase only skips import matches (IMPORTS edges come\n; from the scope phase \u2014 `emitZigScopeCaptures`, whose `@import.inline`\n; rule is this rule's twin, decides which occurrences bind a name).\n((builtin_function\n (builtin_identifier) @builtin\n (arguments\n (string) @import.source))\n (#eq? @builtin \"@import\")) @import\n\n; Free calls: foo(...)\n(call_expression\n function: (identifier) @call.name) @call\n\n; Member calls: obj.method(...) and namespace.fn(...) (e.g. std.debug.print).\n(call_expression\n function: (field_expression\n member: (identifier) @call.name)) @call\n";
16
16
  import { SupportedLanguages } from '../../_shared/index.js';
17
17
  export declare const LANGUAGE_QUERIES: Record<SupportedLanguages, string>;
@@ -2228,18 +2228,26 @@ export const DART_QUERIES = `
2228
2228
  (identifier) @name . (formal_parameter_list))) @definition.constructor
2229
2229
 
2230
2230
  ; ── Field declarations (String name = '', Address address = Address()) ──────
2231
+ ; @name is ANCHORED to the first named child. An initialized_identifier whose
2232
+ ; value is a constructor call parses the callee as a SECOND (identifier) sibling
2233
+ ; of the name — \`final TextEditingController _t = TextEditingController();\` is
2234
+ ; initialized_identifier[identifier "_t", identifier "TextEditingController",
2235
+ ; selector]. Unanchored, \`(identifier) @name\` matched both and minted a phantom
2236
+ ; Property named after the TYPE alongside the real field. The same shape applies
2237
+ ; to static_final_declaration (class static and top-level final/const), so every
2238
+ ; rule below anchors. languages/dart/query.ts already anchors its mirror rules.
2231
2239
  (declaration
2232
2240
  (type_identifier)
2233
2241
  (initialized_identifier_list
2234
2242
  (initialized_identifier
2235
- (identifier) @name))) @definition.property
2243
+ . (identifier) @name))) @definition.property
2236
2244
 
2237
2245
  ; ── Nullable field declarations (String? name) ──────────────────────────────
2238
2246
  (declaration
2239
2247
  (nullable_type)
2240
2248
  (initialized_identifier_list
2241
2249
  (initialized_identifier
2242
- (identifier) @name))) @definition.property
2250
+ . (identifier) @name))) @definition.property
2243
2251
 
2244
2252
  ; ── static const / static final / const class fields ────────────────────────
2245
2253
  ; A "static const a = 1;" / "static final String b = ..., c = ...;" field parses
@@ -2252,7 +2260,7 @@ export const DART_QUERIES = `
2252
2260
  (declaration
2253
2261
  (static_final_declaration_list
2254
2262
  (static_final_declaration
2255
- (identifier) @name))) @definition.property
2263
+ . (identifier) @name))) @definition.property
2256
2264
 
2257
2265
  ; ── Getters ──────────────────────────────────────────────────────────────────
2258
2266
  (method_signature
@@ -2275,7 +2283,7 @@ export const DART_QUERIES = `
2275
2283
  (program
2276
2284
  (initialized_identifier_list
2277
2285
  (initialized_identifier
2278
- (identifier) @name)) @definition.variable)
2286
+ . (identifier) @name)) @definition.variable)
2279
2287
  ; Closure bindings: \`var f = (x) => x;\` binds a CALLABLE, so it emits Function
2280
2288
  ; rather than Variable, matching TS/JS. Overlap with the pattern above is
2281
2289
  ; collapsed by the parse-worker dedup (#2687). Since #2693 this node is also
@@ -2321,7 +2329,7 @@ export const DART_QUERIES = `
2321
2329
  (program
2322
2330
  (static_final_declaration_list
2323
2331
  (static_final_declaration
2324
- (identifier) @name)) @definition.variable)
2332
+ . (identifier) @name)) @definition.variable)
2325
2333
 
2326
2334
  ; ── Imports ──────────────────────────────────────────────────────────────────
2327
2335
  (import_or_export
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitnexus",
3
- "version": "1.6.12-rc.35",
3
+ "version": "1.6.12-rc.37",
4
4
  "description": "Graph-powered code intelligence for AI agents. Index any codebase, query via MCP or CLI.",
5
5
  "author": "Abhigyan Patwari",
6
6
  "license": "PolyForm-Noncommercial-1.0.0",