diff --git a/runtime/queries/erlang/highlights.scm b/runtime/queries/erlang/highlights.scm index 050fb613..3f4ef4cb 100644 --- a/runtime/queries/erlang/highlights.scm +++ b/runtime/queries/erlang/highlights.scm @@ -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 diff --git a/runtime/queries/erlang/locals.scm b/runtime/queries/erlang/locals.scm new file mode 100644 index 00000000..7379926b --- /dev/null +++ b/runtime/queries/erlang/locals.scm @@ -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