Files
helix/runtime/queries/java/locals.scm

50 lines
1.3 KiB
Scheme

; Scopes
[
(method_declaration)
(constructor_declaration)
(compact_constructor_declaration)
(lambda_expression)
(for_statement)
(enhanced_for_statement)
(block)
] @local.scope
; Definitions
(formal_parameter
name: (identifier) @local.definition.variable.parameter)
; `Type... name` — the name lives in a variable_declarator child, not a `name:` field.
(spread_parameter
(variable_declarator
name: (identifier) @local.definition.variable.parameter))
(catch_formal_parameter
name: (identifier) @local.definition.variable.parameter)
; Lambda params: `x -> …` (single bare identifier) and `(x, y) -> …` (inferred).
(lambda_expression
parameters: (identifier) @local.definition.variable.parameter)
(inferred_parameters
(identifier) @local.definition.variable.parameter)
(local_variable_declaration
(variable_declarator
name: (identifier) @local.definition.variable))
(enhanced_for_statement
name: (identifier) @local.definition.variable)
; References
(identifier) @local.reference
; Discards: identifiers that look like references but aren't variables.
; `obj.method(…)` — the method name is not a variable.
(method_invocation
name: (identifier) @_)
; `obj.field` — the field name is not a local.
(field_access
field: (identifier) @_)
; `Outer.name` qualified access.
(scoped_identifier
name: (identifier) @_)