You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
helix-plus/runtime/queries/lua/highlights.scm

170 lines
2.2 KiB
Scheme

;;; Highlighting for lua
;;; Builtins
((identifier) @variable.builtin
(#eq? @variable.builtin "self"))
;; Keywords
(if_statement
[
"if"
"then"
"end"
] @keyword.control.conditional)
(elseif_statement
[
"elseif"
"then"
"end"
] @keyword.control.conditional)
(else_statement
[
"else"
"end"
] @keyword.control.conditional)
(for_statement
[
"for"
"do"
"end"
] @keyword.control.repeat)
(while_statement
[
"while"
"do"
"end"
] @keyword.control.repeat)
(repeat_statement
[
"repeat"
"until"
] @keyword.control.repeat)
(do_statement
[
"do"
"end"
] @keyword)
"return" @keyword.control.return
[
"in"
"local"
(break_statement)
"goto"
] @keyword
(function_declaration
[
"function"
"end"
] @keyword.function)
(function_definition
[
"function"
"end"
] @keyword.function)
;; Operators
[
"not"
"and"
"or"
] @keyword.operator
[
"="
"~="
"=="
"<="
">="
"<"
">"
"+"
"-"
"%"
"/"
"//"
"*"
"^"
"&"
"~"
"|"
">>"
"<<"
".."
"#"
] @operator
;; Punctuation
["," "." ":" ";"] @punctuation.delimiter
;; Brackets
[
"("
")"
"["
"]"
"{"
"}"
] @punctuation.bracket
; ;; Constants
[
(false)
(true)
] @constant.builtin.boolean
(nil) @constant.builtin
(vararg_expression) @constant
((identifier) @constant
(#match? @constant "^[A-Z][A-Z_0-9]*$"))
;; Parameters
(parameters
(identifier) @variable.parameter)
; ;; Functions
(function_declaration name: (identifier) @function)
(function_call name: (identifier) @function.call)
(function_declaration name: (dot_index_expression field: (identifier) @function))
(function_call name: (dot_index_expression field: (identifier) @function.call))
; TODO: incorrectly highlights variable N in `N, nop = 42, function() end`
(assignment_statement
(variable_list
name: (identifier) @function)
(expression_list
value: (function_definition)))
(method_index_expression method: (identifier) @function.method)
;; Nodes
(comment) @comment
(string) @string
(number) @constant.numeric.integer
(label_statement) @label
; A bit of a tricky one, this will only match field names
(field . (identifier) @variable.other.member (_))
(hash_bang_line) @comment
;; Property
(dot_index_expression field: (identifier) @variable.other.member)
;; Variable
(identifier) @variable
;; Error
(ERROR) @error