Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'runtime/queries/crystal/highlights.scm')
-rw-r--r--runtime/queries/crystal/highlights.scm301
1 files changed, 300 insertions, 1 deletions
diff --git a/runtime/queries/crystal/highlights.scm b/runtime/queries/crystal/highlights.scm
index 57154286..0845479b 100644
--- a/runtime/queries/crystal/highlights.scm
+++ b/runtime/queries/crystal/highlights.scm
@@ -1 +1,300 @@
-; inherits: ruby
+[
+ ","
+ ";"
+ "."
+ ":"
+ "*"
+ "**"
+] @punctuation.delimiter
+
+[
+ "alias"
+ "alignof"
+ "annotation"
+ "asm"
+ "begin"
+ "case"
+ "def"
+ "do"
+ "end"
+ "extend"
+ "forall"
+ "fun"
+ "in"
+ "include"
+ "instance_alignof"
+ "instance_sizeof"
+ "macro"
+ "of"
+ "offsetof"
+ "out"
+ "pointerof"
+ "select"
+ "sizeof"
+ "then"
+ "type"
+ "typeof"
+ "uninitialized"
+ "verbatim"
+ "when"
+ "with"
+] @keyword
+
+[
+ "else"
+ "elsif"
+ "if"
+ "unless"
+] @keyword.control.conditional
+
+[
+ "for"
+ "until"
+ "while"
+] @keyword.control.repeat
+
+["require"] @keyword.control.import
+
+[
+ "break"
+ "next"
+ "return"
+ "yield"
+] @keyword.control.return
+
+[
+ "ensure"
+ "rescue"
+] @keyword.control.exception
+
+[
+ "class"
+ "enum"
+ "lib"
+ "module"
+ "struct"
+ "union"
+] @keyword.storage.type
+
+(conditional
+ [
+ "?"
+ ":"
+ ] @keyword.control.conditional)
+
+[
+ (private)
+ (protected)
+ "abstract"
+] @keyword
+
+(pseudo_constant) @constant.builtin
+
+; literals
+(char
+ ["'" (literal_content)] @string)
+
+(char
+ (escape_sequence) @constant.character.escape)
+
+(string
+ ["\"" (literal_content)] @string)
+
+(string
+ (escape_sequence) @constant.character.escape)
+
+(symbol
+ [
+ ":"
+ ":\""
+ "\""
+ (literal_content)
+ ] @string.special.symbol)
+
+(symbol
+ (escape_sequence) @constant.character.escape)
+
+(command
+ ["`" (literal_content)] @string.special)
+
+(command
+ (escape_sequence) @constant.character.escape)
+
+(regex
+ "/" @punctuation.bracket)
+
+(regex
+ (literal_content) @string.regexp)
+
+(regex_modifier) @string.special.symbol
+
+(heredoc_body
+ (literal_content) @string)
+
+(heredoc_body
+ (escape_sequence) @constant.character.escape)
+
+[
+ (heredoc_start)
+ (heredoc_end)
+] @string.symbol
+
+(integer) @constant.numeric.integer
+(float) @constant.numeric.float
+
+[
+ (true)
+ (false)
+ (nil)
+ (self)
+] @variable.builtin
+
+(
+ (comment)+ @comment.block.documentation
+ .
+ [
+ (class_def)
+ (struct_def)
+ (method_def)
+ (abstract_method_def)
+ (macro_def)
+ (module_def)
+ (enum_def)
+ (annotation_def)
+ (lib_def)
+ (type_def)
+ (c_struct_def)
+ (union_def)
+ (alias)
+ (const_assign)
+ ]
+)
+
+(comment) @comment
+
+; Operators and punctuation
+[
+ "="
+ "=>"
+ "->"
+ "&"
+ (operator)
+] @operator
+
+[
+ "("
+ ")"
+ "["
+ "@["
+ "]"
+ "{"
+ "}"
+] @punctuation.bracket
+
+(index_call
+ method: (operator) @punctuation.bracket
+ [
+ "]"
+ "]?"
+ ] @punctuation.bracket)
+
+(block
+ "|" @punctuation.bracket)
+
+[
+ "{%"
+ "%}"
+ "{{"
+ "}}"
+] @keyword.directive
+
+(interpolation
+ "#{" @punctuation.special
+ "}" @punctuation.special)
+
+; TODO: {splat,double_splat,block,fun}_param + rescue param
+
+; Types
+
+(nilable_constant
+ "?" @type)
+
+(nilable_type
+ "?" @type)
+
+(union_type
+ "|" @operator)
+
+(annotation
+ (constant) @attribute)
+
+(identifier) @variable
+(param name: (identifier) @variable.parameter)
+
+(method_def
+ name: (identifier) @function.method)
+
+(macro_def
+ name: (identifier) @function.method)
+
+(abstract_method_def
+ name: (identifier) @function.method)
+
+(fun_def
+ name: (identifier) @function.method
+ real_name: (identifier)? @function.method)
+
+(macro_var) @variable
+
+[
+ (class_var)
+ (instance_var)
+] @variable.other.member
+
+(named_expr
+ name: (identifier) @variable.other.member
+ ":" @variable.other.member)
+
+(named_type
+ name: (identifier) @variable.other.member)
+
+(underscore) @variable.special
+
+; function calls
+
+(call
+ method: (_) @keyword
+ arguments: (argument_list
+ [
+ (type_declaration
+ var: (_) @function.method)
+ (assign
+ lhs: (_) @function.method)
+ (_) @function.method
+ ])
+ (#match? @keyword "^(class_)?(getter|setter|property)[?!]?$"))
+
+(call
+ method: (_) @keyword
+ (#match? @keyword "^(record|is_a\\?|as|as\\?|responds_to\\?|nil\\?|\\!)$"))
+
+(call
+ method: (_) @function.method)
+
+(implicit_object_call
+ method: (_) @function.method)
+
+(method_proc
+ method: (_) @function.method)
+
+(assign_call
+ method: (_) @function.method)
+
+((identifier) @variable.builtin
+ (#match? @variable.builtin "^(previous_def|super)$"))
+
+[
+ (constant)
+ (generic_instance_type)
+ (generic_type)
+] @type