From 90b126d4bc38749b760b42d3bd02c54e1e291cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Sun, 7 Jun 2026 20:47:57 +0900 Subject: [PATCH] runtime: Scan through member access queries and fix ordering --- runtime/queries/bicep/highlights.scm | 8 +++++++- runtime/queries/c-sharp/highlights.scm | 4 ++++ runtime/queries/cairo/highlights.scm | 8 ++++---- runtime/queries/cue/highlights.scm | 3 ++- runtime/queries/cython/highlights.scm | 7 +++++-- runtime/queries/d/highlights.scm | 9 +++++++-- runtime/queries/elm/highlights.scm | 10 +++++----- runtime/queries/freebasic/highlights.scm | 3 ++- runtime/queries/gren/highlights.scm | 2 +- runtime/queries/gren/locals.scm | 2 +- runtime/queries/groovy/highlights.scm | 6 ++++++ runtime/queries/haxe/highlights.scm | 4 ++++ runtime/queries/hcl/highlights.scm | 3 +++ runtime/queries/java/highlights.scm | 6 ++++++ runtime/queries/koto/locals.scm | 2 +- runtime/queries/meson/highlights.scm | 9 +++++++-- runtime/queries/move/highlights.scm | 4 ++++ runtime/queries/nickel/highlights.scm | 2 ++ runtime/queries/nim/highlights.scm | 5 +++++ runtime/queries/pkl/highlights.scm | 2 ++ runtime/queries/r/highlights.scm | 3 +++ runtime/queries/rescript/highlights.scm | 8 ++++++++ runtime/queries/ripple/highlights.scm | 18 ++++++++++++------ runtime/queries/sourcepawn/highlights.scm | 3 ++- runtime/queries/v/highlights.scm | 12 +++++++----- runtime/queries/vala/highlights.scm | 8 +++++++- runtime/queries/vim/highlights.scm | 1 + runtime/queries/wesl/highlights.scm | 5 +++-- runtime/queries/wgsl/highlights.scm | 9 ++++++++- 29 files changed, 129 insertions(+), 37 deletions(-) diff --git a/runtime/queries/bicep/highlights.scm b/runtime/queries/bicep/highlights.scm index faff8253..086aa2be 100644 --- a/runtime/queries/bicep/highlights.scm +++ b/runtime/queries/bicep/highlights.scm @@ -36,7 +36,13 @@ ":" @punctuation.delimiter (_)) -(property_identifier) @function.method +; Property access `obj.field` is member access; the call rule below restores +; @function.method for an invoked property like `az.resourceId(...)`. +(property_identifier) @variable.other.member + +(call_expression + function: (member_expression + property: (property_identifier) @function.method)) ; Attributes (decorator diff --git a/runtime/queries/c-sharp/highlights.scm b/runtime/queries/c-sharp/highlights.scm index 23c70601..ce00f9eb 100644 --- a/runtime/queries/c-sharp/highlights.scm +++ b/runtime/queries/c-sharp/highlights.scm @@ -246,6 +246,10 @@ (type_parameter_constraints_clause (identifier) @type.parameter) +;; Member access. Before the method-call rules below so `obj.Method()` reclaims +;; @function, while a plain `obj.field` stays a member. +(member_access_expression name: (identifier) @variable.other.member) + ;; Method calls (invocation_expression (member_access_expression name: (identifier) @function)) diff --git a/runtime/queries/cairo/highlights.scm b/runtime/queries/cairo/highlights.scm index fb62c505..2f2f29c6 100644 --- a/runtime/queries/cairo/highlights.scm +++ b/runtime/queries/cairo/highlights.scm @@ -5,6 +5,10 @@ ; overrides are unnecessary. ; ------- +(type_identifier) @type +(identifier) @variable +(field_identifier) @variable.other.member + ; ------- ; Types ; ------- @@ -366,7 +370,3 @@ ; ------- "?" @special - -(type_identifier) @type -(identifier) @variable -(field_identifier) @variable.other.member diff --git a/runtime/queries/cue/highlights.scm b/runtime/queries/cue/highlights.scm index 4168036b..fc887db6 100644 --- a/runtime/queries/cue/highlights.scm +++ b/runtime/queries/cue/highlights.scm @@ -1,3 +1,5 @@ +(identifier) @variable + ; Includes [ "package" @@ -81,7 +83,6 @@ (builtin_function) @function.builtin ; Variables -(identifier) @variable ; Types (primitive_type) @type.builtin diff --git a/runtime/queries/cython/highlights.scm b/runtime/queries/cython/highlights.scm index 3fdd7f1c..b6780572 100644 --- a/runtime/queries/cython/highlights.scm +++ b/runtime/queries/cython/highlights.scm @@ -16,6 +16,11 @@ ((identifier) @constant (#match? @constant "^[A-Z][A-Z_]*$")) +; Member access. Placed before the call rules below so a method call +; `obj.m()` is reclaimed as @function.method, while a plain `obj.attr` +; access stays a member. +(attribute attribute: (identifier) @variable.other.member) + ; Function calls (decorator) @function @@ -69,8 +74,6 @@ ((identifier) @function)) (c_function_definition)) -(attribute attribute: (identifier) @variable.other.member) - ; Literals [ diff --git a/runtime/queries/d/highlights.scm b/runtime/queries/d/highlights.scm index e32cd883..6c4d8ea9 100644 --- a/runtime/queries/d/highlights.scm +++ b/runtime/queries/d/highlights.scm @@ -8,6 +8,8 @@ ; (See accompanying file LICENSE.txt or https://opensource.org/licenses/MIT) ; SPDX-License-Identifier: MIT +(identifier) @variable + ; these are listed first, because they override keyword queries (identity_expression (in) @operator) (identity_expression (is) @operator) @@ -19,6 +21,11 @@ (call_expression (identifier) @function) (call_expression (type (identifier) @function)) +; Member access `o.field`: the trailing identifier of a property expression +; (anchored so the receiver isn't captured). Method calls parse as a +; call_expression and keep @function above. +(property_expression (identifier) @variable.other.member .) + (module_fqn) @namespace [ @@ -220,8 +227,6 @@ (cfloat) ] @warning ; these types are deprecated -(identifier) @variable - ; Named arguments `foo(name: value)` (D named-args proposal). (named_argument (identifier) @variable.parameter) diff --git a/runtime/queries/elm/highlights.scm b/runtime/queries/elm/highlights.scm index 490e8938..7803cbfd 100644 --- a/runtime/queries/elm/highlights.scm +++ b/runtime/queries/elm/highlights.scm @@ -60,13 +60,13 @@ (type_ref) @type (type_alias_declaration name: (upper_case_identifier) @type) -(union_pattern constructor: (upper_case_qid (upper_case_identifier) @label (dot) (upper_case_identifier) @variable.other.member)) -(union_pattern constructor: (upper_case_qid (upper_case_identifier) @variable.other.member)) +(union_pattern constructor: (upper_case_qid (upper_case_identifier) @label (dot) (upper_case_identifier) @constructor)) +(union_pattern constructor: (upper_case_qid (upper_case_identifier) @constructor)) -(union_variant(upper_case_identifier) @variable.other.member) +(union_variant(upper_case_identifier) @constructor) (value_expr name: (value_qid (upper_case_identifier) @label)) -(value_expr (upper_case_qid (upper_case_identifier) @label (dot) (upper_case_identifier) @variable.other.member)) -(value_expr(upper_case_qid(upper_case_identifier)) @variable.other.member) +(value_expr (upper_case_qid (upper_case_identifier) @label (dot) (upper_case_identifier) @constructor)) +(value_expr(upper_case_qid(upper_case_identifier)) @constructor) ; comments (line_comment) @comment diff --git a/runtime/queries/freebasic/highlights.scm b/runtime/queries/freebasic/highlights.scm index f7015e44..c3463e7f 100644 --- a/runtime/queries/freebasic/highlights.scm +++ b/runtime/queries/freebasic/highlights.scm @@ -1,3 +1,5 @@ +(identifier) @variable + ; Keywords [ "DIM" @@ -93,4 +95,3 @@ ] @punctuation.delimiter ; Variables -(identifier) @variable diff --git a/runtime/queries/gren/highlights.scm b/runtime/queries/gren/highlights.scm index aef763a2..d4e2777a 100644 --- a/runtime/queries/gren/highlights.scm +++ b/runtime/queries/gren/highlights.scm @@ -63,7 +63,7 @@ (field name: (lower_case_identifier) @variable.other.member) (field_type name: (lower_case_identifier) @variable.other.member) -(field_access_expr(lower_case_identifier) @variable) +(field_access_expr(lower_case_identifier) @variable.other.member) (type_declaration(upper_case_identifier) @type) (type_declaration typeName: (lower_type_name) @type.parameter) diff --git a/runtime/queries/gren/locals.scm b/runtime/queries/gren/locals.scm index 63d31ba5..ecf7a36f 100644 --- a/runtime/queries/gren/locals.scm +++ b/runtime/queries/gren/locals.scm @@ -6,7 +6,7 @@ (infix_declaration) @local.scope (let_in_expr) @local.scope -(function_declaration_left (lower_pattern (lower_case_identifier)) @local.definition.function) +(function_declaration_left (lower_pattern (lower_case_identifier)) @local.definition.variable.parameter) (function_declaration_left (lower_case_identifier) @local.definition.function) (value_expr(value_qid(upper_case_identifier)) @local.reference) diff --git a/runtime/queries/groovy/highlights.scm b/runtime/queries/groovy/highlights.scm index 11fb8e46..58459e63 100644 --- a/runtime/queries/groovy/highlights.scm +++ b/runtime/queries/groovy/highlights.scm @@ -101,6 +101,12 @@ (identifier) @variable +; Member access. The last segment of a dotted access is the member; placed +; before the @constant and function_call rules below so `o.CONST` stays a +; constant and `o.method()` reclaims @function. +(dotted_identifier + (identifier) @variable.other.member .) + ((identifier) @constant (#match? @constant "^[A-Z][A-Z_]+")) diff --git a/runtime/queries/haxe/highlights.scm b/runtime/queries/haxe/highlights.scm index 18bab570..3ce3f6f5 100644 --- a/runtime/queries/haxe/highlights.scm +++ b/runtime/queries/haxe/highlights.scm @@ -32,6 +32,10 @@ ; ----------- ; (call_expression name: (identifier) @variable.parameter) +; Member access. Before the call rule below so a method call `o.m()` reclaims +; @function, while a plain `o.field` stays a member. +(member_expression member: (identifier) @variable.other.member) + ; TODO: Figure out how to determined when "nested member call" is last ident. ; apparently this is a known issue https://github.com/tree-sitter/tree-sitter/issues/880 (call_expression object: [ diff --git a/runtime/queries/hcl/highlights.scm b/runtime/queries/hcl/highlights.scm index ffeb79a5..2ab02712 100644 --- a/runtime/queries/hcl/highlights.scm +++ b/runtime/queries/hcl/highlights.scm @@ -62,6 +62,9 @@ (variable_expr (identifier) @type.builtin (#match? @type.builtin "^(bool|string|number|object|tuple|list|map|set|any)$")))) +; Member access: the attribute of a traversal (obj.field). Before the builtin +; get_attr rule so path.root / path.module stay @variable.builtin. +(get_attr (identifier) @variable.other.member) (get_attr (identifier) @variable.builtin (#match? @variable.builtin "^(root|cwd|module)$")) (variable_expr (identifier) @variable.builtin (#match? @variable.builtin "^(var|local|path)$")) ((identifier) @type.builtin (#match? @type.builtin "^(bool|string|number|object|tuple|list|map|set|any)$")) diff --git a/runtime/queries/java/highlights.scm b/runtime/queries/java/highlights.scm index 6a3076b8..d09e7887 100644 --- a/runtime/queries/java/highlights.scm +++ b/runtime/queries/java/highlights.scm @@ -57,6 +57,12 @@ ; elsewhere — so scope it to the guard rather than the flat keyword list. (guard "when" @keyword.control.conditional) +; Member access. `field_access` is a distinct node from `method_invocation`, so +; this leaves method calls alone; placed before the SCREAMING @constant rule +; below so `Type.CONST` stays a constant. +(field_access + field: (identifier) @variable.other.member) + ; Variables ((identifier) @constant diff --git a/runtime/queries/koto/locals.scm b/runtime/queries/koto/locals.scm index 8b5bd9cb..5b338c9c 100644 --- a/runtime/queries/koto/locals.scm +++ b/runtime/queries/koto/locals.scm @@ -9,7 +9,7 @@ (identifier) @local.definition.variable.parameter) (arg - (variable (identifier)) @local.definition.parameter) + (variable (identifier)) @local.definition.variable.parameter) (import_item (identifier) @local.definition.namespace) diff --git a/runtime/queries/meson/highlights.scm b/runtime/queries/meson/highlights.scm index 0277ee7b..3ec3c5be 100644 --- a/runtime/queries/meson/highlights.scm +++ b/runtime/queries/meson/highlights.scm @@ -40,9 +40,14 @@ (normal_command command: (identifier) @function) -; Method calls: `obj.method(...)` — the property is the method name. +; Member access vs. method call. A plain `obj.prop` is a member; an +; `obj.method(...)` additionally carries the call's `function:` field, so the +; later, more specific rule reclaims it as @function.method. (expression_statement - property: (identifier) @function.method) + property: (identifier) @variable.other.member) +(expression_statement + property: (identifier) @function.method + function: (_)) ; Dictionary / keyword-argument keys. (pair diff --git a/runtime/queries/move/highlights.scm b/runtime/queries/move/highlights.scm index bf607e1f..c63a5a49 100644 --- a/runtime/queries/move/highlights.scm +++ b/runtime/queries/move/highlights.scm @@ -41,6 +41,10 @@ (module_access member: (identifier) @type)) (field_identifier) @variable.other.member +; Field access `o.val` parses as a dot_expression whose access is a plain +; name_expression (not a field_identifier), so capture that field too. +(dot_expression + access: (name_expression (module_access member: (identifier) @variable.other.member))) ; ------- ; Functions diff --git a/runtime/queries/nickel/highlights.scm b/runtime/queries/nickel/highlights.scm index e5da7216..cd78adc6 100644 --- a/runtime/queries/nickel/highlights.scm +++ b/runtime/queries/nickel/highlights.scm @@ -39,6 +39,8 @@ "=>" @operator ) (record_field) @variable.other.member +; Field access `o.field`: the id of a record operation chain. +(record_operation_chain id: (ident) @variable.other.member) [ "." diff --git a/runtime/queries/nim/highlights.scm b/runtime/queries/nim/highlights.scm index bf44f7d7..172bec37 100644 --- a/runtime/queries/nim/highlights.scm +++ b/runtime/queries/nim/highlights.scm @@ -260,6 +260,11 @@ (macro_declaration name: (_) @function.macro) (symbol_declaration name: (_) @variable) +; Member access: the field of a dot expression (o.field). Before the call +; rule below so a method call's right-hand identifier reclaims @function. +(dot_expression + right: (identifier) @variable.other.member) + (call function: [ (identifier) @function diff --git a/runtime/queries/pkl/highlights.scm b/runtime/queries/pkl/highlights.scm index 3f2f1317..bdfde9a9 100644 --- a/runtime/queries/pkl/highlights.scm +++ b/runtime/queries/pkl/highlights.scm @@ -153,6 +153,8 @@ (classProperty (identifier) @variable.other.member) (objectProperty (identifier) @variable.other.member) +; Property access `o.field` (methodCallExpr below handles `o.method()`). +(propertyCallExpr (identifier) @variable.other.member) (parameterList (typedIdentifier (identifier) @variable.parameter)) (objectBodyParameters (typedIdentifier (identifier) @variable.parameter)) diff --git a/runtime/queries/r/highlights.scm b/runtime/queries/r/highlights.scm index 8d664a74..0bba82a7 100644 --- a/runtime/queries/r/highlights.scm +++ b/runtime/queries/r/highlights.scm @@ -2,6 +2,9 @@ (identifier) @variable +; Member access: the name after `$`/`@` (`obj$field`, `s4@slot`). +(extract_operator rhs: (identifier) @variable.other.member) + ; Literals [ diff --git a/runtime/queries/rescript/highlights.scm b/runtime/queries/rescript/highlights.scm index 33a1f0e5..cedb6c0b 100644 --- a/runtime/queries/rescript/highlights.scm +++ b/runtime/queries/rescript/highlights.scm @@ -67,6 +67,10 @@ ; Identifiers ;------------ +; Base catch-all for value-level identifiers (let bindings, references); the +; specific rules below (params, calls, escaped operators, raise) override it. +(value_identifier) @variable + ; Escaped identifiers like \"+." ((value_identifier) @function.macro (#match? @function.macro "^\\.*$")) @@ -195,6 +199,10 @@ "catch" ] @keyword.control.exception +; A call's callee is a function (before the raise special-case below). +(call_expression + function: (value_identifier) @function) + (call_expression function: (value_identifier) @keyword.control.exception (#eq? @keyword.control.exception "raise")) diff --git a/runtime/queries/ripple/highlights.scm b/runtime/queries/ripple/highlights.scm index 20db3540..4ac76847 100644 --- a/runtime/queries/ripple/highlights.scm +++ b/runtime/queries/ripple/highlights.scm @@ -9,6 +9,18 @@ "untrack" ] @function.builtin +; Base catch-all for identifiers, as a base layer the specific rules below +; (functions, calls, params, JSX) override. Kept first — imported from upstream +; queries with this rule mid-file, where it left every component/call name +; @variable. +(identifier) @variable + +; Member access (generic): before the method-call rule below so an invoked +; `obj.method()` reclaims @function.method while a plain `obj.field` stays +; a member. +(member_expression + property: (identifier) @variable.other.member) + ; Functions (component_declaration name: (identifier) @function) @@ -29,9 +41,6 @@ function: (member_expression property: (identifier) @function.method)) -; Variables -(identifier) @variable - ; Parameters (required_parameter pattern: (identifier) @variable.parameter) @@ -272,9 +281,6 @@ (pair key: (property_name) @variable.other.member) -(member_expression - property: (identifier) @variable.other.member) - (shorthand_property_identifier) @variable.other.member (shorthand_property_identifier_pattern) @variable.other.member diff --git a/runtime/queries/sourcepawn/highlights.scm b/runtime/queries/sourcepawn/highlights.scm index df8292c1..a76e7505 100644 --- a/runtime/queries/sourcepawn/highlights.scm +++ b/runtime/queries/sourcepawn/highlights.scm @@ -1,3 +1,5 @@ +(identifier) @variable + ; Assume all-caps names are constants ((identifier) @constant (#match? @constant "^[A-Z][A-Z\\d_]+$'")) @@ -250,4 +252,3 @@ "while" ] @keyword -(identifier) @variable diff --git a/runtime/queries/v/highlights.scm b/runtime/queries/v/highlights.scm index d9a9f827..9d9104c1 100644 --- a/runtime/queries/v/highlights.scm +++ b/runtime/queries/v/highlights.scm @@ -45,6 +45,13 @@ (interface_method_definition name: (identifier) @function.method) +; Member access. Placed before the call rules below so a method call +; `o.m()` is reclaimed as @function.method, while a plain `o.field` +; access stays a member. +(field_name) @variable.other.member +(selector_expression + field: (reference_expression) @variable.other.member) + (call_expression name: (selector_expression field: (reference_expression) @function.method)) @@ -67,11 +74,6 @@ (struct_field_declaration name: (identifier) @variable.other.member) -(field_name) @variable.other.member - -(selector_expression - field: (reference_expression) @variable.other.member) - (int_literal) @constant.numeric.integer (escape_sequence) @constant.character.escape diff --git a/runtime/queries/vala/highlights.scm b/runtime/queries/vala/highlights.scm index 3d804cf8..2d8037e5 100644 --- a/runtime/queries/vala/highlights.scm +++ b/runtime/queries/vala/highlights.scm @@ -1,3 +1,10 @@ +(identifier) @variable + +; Member access (the trailing name of `obj.field`). Before the @constant and +; method-call rules below so a SCREAMING member stays @constant and a call stays +; @function. +(member_access_expression (identifier) @variable.other.member .) + ; highlights.scm ; highlight constants @@ -24,7 +31,6 @@ (unqualified_type (symbol . (identifier) @type)) (unqualified_type (symbol (symbol) @namespace (identifier) @type)) -(identifier) @variable (attribute) @variable.other.member (method_declaration (symbol (symbol) @type (identifier) @function)) (method_declaration (symbol (identifier) @function)) diff --git a/runtime/queries/vim/highlights.scm b/runtime/queries/vim/highlights.scm index 2851e202..88711221 100644 --- a/runtime/queries/vim/highlights.scm +++ b/runtime/queries/vim/highlights.scm @@ -322,6 +322,7 @@ (field_expression "." @punctuation.delimiter) +(field_expression field: (identifier) @variable.other.member) [ "," diff --git a/runtime/queries/wesl/highlights.scm b/runtime/queries/wesl/highlights.scm index 1bb5fdee..57405d10 100644 --- a/runtime/queries/wesl/highlights.scm +++ b/runtime/queries/wesl/highlights.scm @@ -28,6 +28,9 @@ (line_comment) @comment.line (block_comment) @comment.block +; Base catch-all: every specific identifier rule below overrides it. +(identifier) @variable + ; imports (WESL extension) (import_item (identifier) @type @@ -106,8 +109,6 @@ (named_component_expression component: (_) @variable.other.member) -(identifier) @variable - ; literals (bool_literal) @constant.builtin.boolean diff --git a/runtime/queries/wgsl/highlights.scm b/runtime/queries/wgsl/highlights.scm index c59ef6b5..2ecebbc7 100644 --- a/runtime/queries/wgsl/highlights.scm +++ b/runtime/queries/wgsl/highlights.scm @@ -104,10 +104,17 @@ (variable_identifier_declaration (identifier) @variable.other.member))) +(type_declaration _ @type) + +; A call/constructor callee (the identifier inside the call's type_declaration) +; is a function — must come after the generic type_declaration rule above, which +; otherwise paints the callee @type. (type_constructor_or_function_call_expression (type_declaration (identifier) @function)) -(type_declaration _ @type) +; Member access: obj.field +(composite_value_decomposition_expression + accessor: (identifier) @variable.other.member) (attribute (identifier) @attribute) -- 2.51.2