helix/runtime/queries/ruby/highlights.scm
2024-09-13 13:28:20 -05:00

191 lines
3.3 KiB
Scheme

; Keywords
[
"BEGIN"
"END"
"alias"
"begin"
"class"
"do"
"end"
"module"
"in"
"rescue"
"ensure"
] @keyword
[
"if"
"else"
"elsif"
"when"
"case"
"unless"
"then"
] @keyword.control.conditional
[
"for"
"while"
"retry"
"until"
"redo"
] @keyword.control.repeat
[
"yield"
"return"
"next"
"break"
] @keyword.control.return
[
"def"
"undef"
] @keyword.function
((identifier) @keyword.control.import
(#match? @keyword.control.import "^(require|require_relative|load|autoload)$"))
[
"or"
"and"
"not"
] @keyword.operator
((identifier) @keyword.control.exception
(#match? @keyword.control.exception "^(raise|fail)$"))
; Function calls
((identifier) @function.builtin
(#match? @function.builtin "^(attr|attr_accessor|attr_reader|attr_writer|include|prepend|refine|private|protected|public)$"))
"defined?" @function.builtin
(call
method: [(identifier) (constant)] @function.method)
; Function definitions
(alias (identifier) @function.method)
(setter (identifier) @function.method)
(method name: [(identifier) (constant)] @function.method)
(singleton_method name: [(identifier) (constant)] @function.method)
; Identifiers
[
(class_variable)
(instance_variable)
] @variable.other.member
((identifier) @constant.builtin
(#match? @constant.builtin "^(__FILE__|__LINE__|__ENCODING__)$"))
((constant) @constant.builtin
(#match? @constant.builtin "^(ENV|ARGV|ARGF|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING)$"))
((constant) @constant
(#match? @constant "^[A-Z\\d_]+$"))
(constant) @constructor
(self) @variable.builtin
(super) @function.builtin
[(forward_parameter)(forward_argument)] @variable.parameter
(keyword_parameter name:((_)":" @variable.parameter) @variable.parameter)
(optional_parameter name:((_)"=" @operator) @variable.parameter)
(optional_parameter name: (identifier) @variable.parameter)
(splat_parameter name: (identifier) @variable.parameter) @variable.parameter
(hash_splat_parameter name: (identifier) @variable.parameter) @variable.parameter
(method_parameters (identifier) @variable.parameter)
(block_parameter (identifier) @variable.parameter)
(block_parameters (identifier) @variable.parameter)
((identifier) @function.method
(#is-not? local))
[
(identifier)
] @variable
; Literals
[
(string)
(bare_string)
(subshell)
(heredoc_body)
(heredoc_beginning)
] @string
[
(simple_symbol)
(delimited_symbol)
(bare_symbol)
] @string.special.symbol
(pair key: ((_)":" @string.special.symbol) @string.special.symbol)
(regex) @string.regexp
(escape_sequence) @constant.character.escape
[
(integer)
(float)
] @constant.numeric.integer
[
(nil)
(true)
(false)
] @constant.builtin
(interpolation
"#{" @punctuation.special
"}" @punctuation.special) @embedded
(comment) @comment
; Operators
[
":"
"?"
"~"
"=>"
"->"
"!"
] @operator
(assignment
"=" @operator)
(operator_assignment
operator: ["+=" "-=" "*=" "**=" "/=" "||=" "|=" "&&=" "&=" "%=" ">>=" "<<=" "^="] @operator)
(binary
operator: ["/" "|" "==" "===" "||" "&&" ">>" "<<" "<" ">" "<=" ">=" "&" "^" "!~" "=~" "<=>" "**" "*" "!=" "%" "-" "+"] @operator)
(range
operator: [".." "..."] @operator)
[
","
";"
"."
"&."
] @punctuation.delimiter
[
"|"
"("
")"
"["
"]"
"{"
"}"
"%w("
"%i("
] @punctuation.bracket