Add parameter highlights to Erlang

This doesn't work robustly (within pattern matches). Only regular
bindings are highlighted as parameters. In order to highlight all
parameters even in matches, we would need an arbitrary nesting operator
in queries which doesn't exist yet in tree-sitter.
This commit is contained in:
Michael Davis 2022-11-02 09:38:36 -05:00 committed by Blaž Hrastnik
parent 452f7d071c
commit 5a1bed2b70
2 changed files with 61 additions and 3 deletions

View File

@ -65,6 +65,37 @@
(function_capture module: (atom) @namespace)
(function_capture function: (atom) @function)
; Ignored variables
((variable) @comment.discard
(#match? @comment.discard "^_"))
; Parameters
; specs
((attribute
name: (atom) @keyword
(stab_clause
pattern: (arguments (variable) @variable.parameter)
body: (variable)? @variable.parameter))
(#match? @keyword "(spec|callback)"))
; functions
(function_clause pattern: (arguments (variable) @variable.parameter))
; anonymous functions
(stab_clause pattern: (arguments (variable) @variable.parameter))
; parametric types
((attribute
name: (atom) @keyword
(arguments
(binary_operator
left: (call (arguments (variable) @variable.parameter))
operator: "::")))
(#match? @keyword "(type|opaque)"))
; macros
((attribute
name: (atom) @keyword
(arguments
(call (arguments (variable) @variable.parameter))))
(#eq? @keyword "define"))
; Records
(record_content
(binary_operator
@ -105,9 +136,6 @@
name: (_) @keyword.directive)
; Comments
((variable) @comment.discard
(#match? @comment.discard "^_"))
(tripledot) @comment.discard
[(comment) (line_comment) (shebang)] @comment

View File

@ -0,0 +1,30 @@
; Specs and Callbacks
(attribute
(stab_clause
pattern: (arguments (variable) @local.definition)
; If a spec uses a variable as the return type (and later a `when` clause to type it):
body: (variable)? @local.definition)) @local.scope
; parametric `-type`s
((attribute
name: (atom) @_type
(arguments
(binary_operator
left: (call (arguments (variable) @local.definition))
operator: "::") @local.scope))
(#match? @_type "(type|opaque)"))
; macros
((attribute
name: (atom) @_define
(arguments
(call (arguments (variable) @local.definition)))) @local.scope
(#eq? @_define "define"))
; `fun`s
(anonymous_function (stab_clause pattern: (arguments (variable) @local.definition))) @local.scope
; Ordinary functions
(function_clause pattern: (arguments (variable) @local.definition)) @local.scope
(variable) @local.reference