(block) @scope

; Parameter definitions
(parameter_declaration
  command: (identifier)
  macro: (macro) @definition.parameter)

; Variable definitions
(macro_definition
  command: (identifier)
  macro: (macro) @definition.var)

(command_expression
  command: (identifier)
  arguments: (argument_list
    variable: (identifier) @definition.var))

; Function definitions
(subroutine_block
  command: (identifier)
  subroutine: (identifier) @definition.function)

(labeled_expression
  label: (identifier) @definition.function
  (block))

; References
(
  (subroutine_call_expression
    command: (identifier)
    subroutine: (identifier) @reference)
  (set! reference.kind "function")
)

(macro) @reference

 Parameter definitions
 Variable definitions
 Function definitions
 References
(block) @scope

(parameter_declaration
  command: (identifier)
  macro: (macro) @definition.parameter)

(macro_definition
  command: (identifier)
  macro: (macro) @definition.var)

(command_expression
  command: (identifier)
  arguments: (argument_list
    variable: (identifier) @definition.var))

(subroutine_block
  command: (identifier)
  subroutine: (identifier) @definition.function)

(labeled_expression
  label: (identifier) @definition.function
  (block))

(
  (subroutine_call_expression
    command: (identifier)
    subroutine: (identifier) @reference)
  (set! reference.kind "function")
)

(macro) @reference
