helix-mods/runtime/queries/erlang/highlights.scm
Michael Davis 452f7d071c Improve Edoc highlighting within Erlang
This highlights edoc within Erlang comments. The trick was to have
the Erlang grammar consume newlines and then give them to EDoc in the
injection to use so that line-wise elements could be parsed accurately.
2022-11-24 11:07:05 +09:00

131 lines
2.8 KiB
Scheme

; Attributes
; module declaration
(attribute
name: (atom) @keyword
(arguments (atom) @namespace)
(#match? @keyword "(module|behaviou?r)"))
(attribute
name: (atom) @keyword
(arguments
.
(atom) @namespace)
(#eq? @keyword "import"))
(attribute
name: (atom) @keyword
(arguments
.
[(atom) @type (macro)]
[
(tuple (atom)? @variable.other.member)
(tuple
(binary_operator
left: (atom) @variable.other.member
operator: ["=" "::"]))
(tuple
(binary_operator
left:
(binary_operator
left: (atom) @variable.other.member
operator: "=")
operator: "::"))
])
(#eq? @keyword "record"))
(attribute
name: (atom) @keyword
(arguments
.
[
(atom) @constant
(variable) @constant
(call
function:
[(variable) (atom)] @keyword.directive)
])
(#eq? @keyword "define"))
(attribute
name: (atom) @keyword
(arguments
(_) @keyword.directive)
(#match? @keyword "ifn?def"))
(attribute
name: (atom) @keyword
module: (atom) @namespace
(#match? @keyword "(spec|callback)"))
; Functions
(function_clause name: (atom) @function)
(call module: (atom) @namespace)
(call function: (atom) @function)
(stab_clause name: (atom) @function)
(function_capture module: (atom) @namespace)
(function_capture function: (atom) @function)
; Records
(record_content
(binary_operator
left: (atom) @variable.other.member
operator: "="))
(record field: (atom) @variable.other.member)
(record name: (atom) @type)
; Keywords
(attribute name: (atom) @keyword)
["case" "fun" "if" "of" "when" "end" "receive" "try" "catch" "after" "begin" "maybe"] @keyword
; Operators
(binary_operator
left: (atom) @function
operator: "/"
right: (integer) @constant.numeric.integer)
((binary_operator operator: _ @keyword.operator)
(#match? @keyword.operator "^\\w+$"))
((unary_operator operator: _ @keyword.operator)
(#match? @keyword.operator "^\\w+$"))
(binary_operator operator: _ @operator)
(unary_operator operator: _ @operator)
["/" ":" "->"] @operator
; Macros
(macro
"?"+ @constant
name: (_) @constant
!arguments)
(macro
"?"+ @keyword.directive
name: (_) @keyword.directive)
; Comments
((variable) @comment.discard
(#match? @comment.discard "^_"))
(tripledot) @comment.discard
[(comment) (line_comment) (shebang)] @comment
; Basic types
(variable) @variable
((atom) @constant.builtin.boolean
(#match? @constant.builtin.boolean "^(true|false)$"))
(atom) @string.special.symbol
(string) @string
(character) @constant.character
(integer) @constant.numeric.integer
(float) @constant.numeric.float
; Punctuation
["," "." "-" ";"] @punctuation.delimiter
["(" ")" "#" "{" "}" "[" "]" "<<" ">>"] @punctuation.bracket
; (ERROR) @error