This commit is contained in:
Michael Davis 2024-11-20 18:02:09 -06:00 committed by GitHub
commit d6a75bd14c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
34 changed files with 911 additions and 554 deletions

View File

@ -2481,15 +2481,17 @@ fn next(&mut self) -> Option<Self::Item> {
} }
} }
// Once a highlighting pattern is found for the current node, skip over // Use the last capture found for the current node, skipping over any
// any later highlighting patterns that also match this node. Captures // highlight patterns that also match this node. Captures
// for a given node are ordered by pattern index, so these subsequent // for a given node are ordered by pattern index, so these subsequent
// captures are guaranteed to be for highlighting, not injections or // captures are guaranteed to be for highlighting, not injections or
// local variables. // local variables.
while let Some((next_match, next_capture_index)) = captures.peek() { while let Some((next_match, next_capture_index)) = captures.peek() {
let next_capture = next_match.captures[*next_capture_index]; let next_capture = next_match.captures[*next_capture_index];
if next_capture.node == capture.node { if next_capture.node == capture.node {
captures.next(); match_.remove();
capture = next_capture;
match_ = captures.next().unwrap().0;
} else { } else {
break; break;
} }

View File

@ -1172,7 +1172,7 @@ indent = { tab-width = 4, unit = " " }
[[grammar]] [[grammar]]
name = "julia" name = "julia"
source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "8fb38abff74652c4faddbf04d2d5bbbc6b4bae25" } source = { git = "https://github.com/tree-sitter/tree-sitter-julia", rev = "e84f10db8eeb8b9807786bfc658808edaa1b4fa2" }
[[language]] [[language]]
name = "java" name = "java"
@ -1688,7 +1688,7 @@ language-servers = [ "docker-langserver" ]
[[grammar]] [[grammar]]
name = "dockerfile" name = "dockerfile"
source = { git = "https://github.com/camdencheek/tree-sitter-dockerfile", rev = "8ee3a0f7587b2bd8c45c8cb7d28bd414604aec62" } source = { git = "https://github.com/camdencheek/tree-sitter-dockerfile", rev = "868e44ce378deb68aac902a9db68ff82d2299dd0" }
[[language]] [[language]]
name = "docker-compose" name = "docker-compose"
@ -1948,7 +1948,7 @@ indent = { tab-width = 4, unit = " " }
[[grammar]] [[grammar]]
name = "ron" name = "ron"
source = { git = "https://github.com/zee-editor/tree-sitter-ron", rev = "7762d709a0f7c1f9e269d0125a2e8a7a69006146" } source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-ron", rev = "78938553b93075e638035f624973083451b29055" }
[[language]] [[language]]
name = "robot" name = "robot"
@ -2439,7 +2439,7 @@ formatter = { command = "cue", args = ["fmt", "-"] }
[[grammar]] [[grammar]]
name = "cue" name = "cue"
source = { git = "https://github.com/eonpatapon/tree-sitter-cue", rev = "61843e3beebf19417e4fede4e8be4df1084317ad" } source = { git = "https://github.com/eonpatapon/tree-sitter-cue", rev = "8a5f273bfa281c66354da562f2307c2d394b6c81" }
[[language]] [[language]]
name = "slint" name = "slint"

View File

@ -109,14 +109,15 @@
(number) @constant.numeric (number) @constant.numeric
(string) @string (string) @string
(func_call name: (identifier) @function)
(func_def name: (identifier) @function)
(field_ref (_) @variable)
[ [
(identifier) (identifier)
(field_ref) (field_ref)
] @variable ] @variable
(func_call name: (identifier) @function)
(func_def name: (identifier) @function)
(field_ref (_) @variable)
(ns_qualified_name "::" @operator) (ns_qualified_name "::" @operator)
(ns_qualified_name (namespace) @namespace) (ns_qualified_name (namespace) @namespace)

View File

@ -12,7 +12,10 @@
(command_name) @function (command_name) @function
(variable_name) @variable.other.member (variable_name) @variable
((variable_name) @constant
(#match? @constant "^[A-Z][A-Z_0-9]*$"))
[ [
"if" "if"
@ -48,6 +51,9 @@
(comment) @comment (comment) @comment
((word) @constant.builtin.boolean
(#any-of? @constant.builtin.boolean "true" "false"))
(function_definition name: (word) @function) (function_definition name: (word) @function)
(file_descriptor) @constant.numeric.integer (file_descriptor) @constant.numeric.integer
@ -56,7 +62,7 @@
(command_substitution) (command_substitution)
(process_substitution) (process_substitution)
(expansion) (expansion)
]@embedded ] @embedded
[ [
"$" "$"

View File

@ -1,3 +1,9 @@
(identifier) @variable
((identifier) @constant
(#match? @constant "^[A-Z][A-Z\\d_]*$"))
"sizeof" @keyword "sizeof" @keyword
[ [
@ -109,6 +115,12 @@
(char_literal) @constant.character (char_literal) @constant.character
(escape_sequence) @constant.character.escape (escape_sequence) @constant.character.escape
(field_identifier) @variable.other.member
(statement_identifier) @label
(type_identifier) @type
(primitive_type) @type.builtin
(sized_type_specifier) @type.builtin
(call_expression (call_expression
function: (identifier) @function) function: (identifier) @function)
(call_expression (call_expression
@ -128,15 +140,4 @@
(attribute (attribute
name: (identifier) @attribute) name: (identifier) @attribute)
(field_identifier) @variable.other.member
(statement_identifier) @label
(type_identifier) @type
(primitive_type) @type.builtin
(sized_type_specifier) @type.builtin
((identifier) @constant
(#match? @constant "^[A-Z][A-Z\\d_]*$"))
(identifier) @variable
(comment) @comment (comment) @comment

View File

@ -1,7 +1,9 @@
; Preproc ; Preproc
(unique_id) @keyword.directive [
(top_level_annotation_body) @keyword.directive (unique_id)
(top_level_annotation_body)
] @keyword.directive
; Includes ; Includes
@ -9,6 +11,7 @@
"import" "import"
"$import" "$import"
"embed" "embed"
"using"
] @keyword.control.import ] @keyword.control.import
(import_path) @string (import_path) @string
@ -84,10 +87,10 @@
"union" "union"
] @keyword.storage.type ] @keyword.storage.type
"extends" @keyword
[ [
"extends"
"namespace" "namespace"
"using"
(annotation_target) (annotation_target)
] @special ] @special

View File

@ -22,16 +22,10 @@
"in" "in"
] @keyword ] @keyword
; Function calls
(call_expression
function: (identifier) @function)
(member_call_expression
function: (identifier) @function)
; Identifiers ; Identifiers
(identifier) @variable.other.member
(select_expression (select_expression
operand: (identifier) @type) operand: (identifier) @type)
@ -39,7 +33,13 @@
operand: (select_expression operand: (select_expression
member: (identifier) @type)) member: (identifier) @type))
(identifier) @variable.other.member ; Function calls
(call_expression
function: (identifier) @function)
(member_call_expression
function: (identifier) @function)
; Literals ; Literals

View File

@ -10,6 +10,14 @@
(comment) @comment (comment) @comment
;; other symbols
(sym_lit) @variable
;; other calls
(list_lit
.
(sym_lit) @function)
;; metadata experiment ;; metadata experiment
(meta_lit (meta_lit
marker: "^" @punctuation) marker: "^" @punctuation)
@ -61,20 +69,12 @@
((sym_lit) @operator ((sym_lit) @operator
(#match? @operator "^%")) (#match? @operator "^%"))
;; other calls
(list_lit
.
(sym_lit) @function)
;; interop-ish ;; interop-ish
(list_lit (list_lit
. .
(sym_lit) @function.method (sym_lit) @function.method
(#match? @function.method "^\\.")) (#match? @function.method "^\\."))
;; other symbols
(sym_lit) @variable
;; quote ;; quote
(quoting_lit) @constant.character.escape (quoting_lit) @constant.character.escape

View File

@ -1,3 +1,5 @@
; inherits: c
; Functions ; Functions
; These casts are parsed as function calls, but are not. ; These casts are parsed as function calls, but are not.
@ -132,5 +134,3 @@
; Strings ; Strings
(raw_string_literal) @string (raw_string_literal) @string
; inherits: c

View File

@ -1,12 +1,46 @@
(package_clause "package" @keyword.control.import) ; Includes
[
"package"
"import"
] @keyword.control.import
(package_identifier) @variable ; Namespaces
(package_identifier) @namespace
(import_declaration "import" @keyword.control.import) (import_spec
[
"."
"_"
] @punctuation.special)
[ [
"!" (attr_path)
(package_path)
] @string.special.url ; In attributes
; Attributes
(attribute) @attribute
; Conditionals
"if" @keyword.control.conditional
; Repeats
"for" @keyword.control.repeat
(for_clause
"_" @punctuation.special)
; Keywords
"let" @keyword
"in" @keyword.operator
; Operators
[
"+"
"-"
"*" "*"
"/"
"|" "|"
"&" "&"
"||" "||"
@ -19,92 +53,103 @@
">=" ">="
"=~" "=~"
"!~" "!~"
"+" "!"
"-" "="
"*"
"/"
] @operator ] @operator
(unary_expression "*" @operator.default) ; Fields & Properties
(field
(label
(identifier) @variable.other.member))
(unary_expression "=~" @operator.regexp) (selector_expression
(_)
(identifier) @variable.other.member)
(unary_expression "!~" @operator.regexp) ; Functions
(call_expression
function: (identifier) @function)
(binary_expression _ "&" @operator.unify _) (call_expression
function: (selector_expression
(_)
(identifier) @function))
(binary_expression _ "|" @operator.disjunct _) (call_expression
function: (builtin_function) @function)
(builtin) @function.builtin (builtin_function) @function.builtin
(qualified_identifier) @function.builtin ; Variables
(identifier) @variable
(let_clause "let" @keyword.storage.type) ; Types
(primitive_type) @type.builtin
(for_clause "for" @keyword.control.repeat) ((identifier) @type
(for_clause "in" @keyword.control.repeat) (#match? @type "^_?#"))
(guard_clause "if" @keyword.control.conditional)
(comment) @comment
[ [
(string_type) (slice_type)
(simple_string_lit) (pointer_type)
(multiline_string_lit) ] @type ; In attributes
(bytes_type)
(simple_bytes_lit)
(multiline_bytes_lit)
] @string
[
(number_type)
(int_lit)
(int_type)
(uint_type)
] @constant.numeric.integer
[
(float_lit)
(float_type)
] @constant.numeric.float
[
(bool_type)
(true)
(false)
] @constant.builtin.boolean
(null) @constant.builtin
(ellipsis) @punctuation.bracket
; Punctuation
[ [
"," ","
":" ":"
] @punctuation.delimiter ] @punctuation.delimiter
[ [
"("
")"
"["
"]"
"{" "{"
"}" "}"
"["
"]"
"("
")"
"<"
">"
] @punctuation.bracket ] @punctuation.bracket
(interpolation "\\(" @punctuation.bracket (_) ")" @punctuation.bracket) @variable.other.member [
(ellipsis)
"?"
] @punctuation.special
(field (label (identifier) @variable.other.member)) ; Literals
(string) @string
( [
(identifier) @keyword.storage.type (escape_char)
(#match? @keyword.storage.type "^#") (escape_unicode)
) ] @constant.character.escape
(field (label alias: (identifier) @label)) (number) @constant.numeric
(let_clause left: (identifier) @label) (float) @constant.numeric.float
(si_unit
(float)
(_) @string.special.symbol)
(attribute (identifier) @tag) (boolean) @constant.builtin.boolean
[
(null)
(top)
(bottom)
] @constant.builtin
; Interpolations
(interpolation
"\\(" @punctuation.special
(_)
")" @punctuation.special)
(interpolation
"\\("
(identifier) @variable
")")
; Comments
(comment) @comment

View File

@ -51,14 +51,14 @@
(integer_literal) @constant.numeric.integer (integer_literal) @constant.numeric.integer
(identifier) @variable
(call_expression (call_expression
function: (identifier) @function) function: (identifier) @function)
(labeled_item (labeled_item
label: (identifier) @label) label: (identifier) @label)
(identifier) @variable
(unit_address) @tag (unit_address) @tag
(reference) @constant (reference) @constant

View File

@ -37,6 +37,15 @@
(double_quoted_string) @string (double_quoted_string) @string
[
(heredoc_marker)
(heredoc_end)
] @label
((heredoc_block
(heredoc_line) @string)
(#set! "priority" 90))
(expansion (expansion
[ [
"$" "$"
@ -52,3 +61,6 @@
(param) (param)
(mount_param) (mount_param)
] @constant ] @constant
(expose_instruction
(expose_port) @constant.numeric.integer)

View File

@ -1,3 +1,5 @@
(identifier) @variable
(keyword) @keyword (keyword) @keyword
(string_literal) @string (string_literal) @string
(number_literal) @constant.numeric (number_literal) @constant.numeric
@ -33,11 +35,9 @@
(identifier) @constant) (identifier) @constant)
) )
[ (comment) @comment
(comment)
(preproc) (preproc) @keyword.directive
] @comment
(ERROR) @error (ERROR) @error
(identifier) @variable

View File

@ -1,3 +1,45 @@
; Comments
(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) (sigil)] @string
(character) @constant.character
(escape_sequence) @constant.character.escape
(integer) @constant.numeric.integer
(float) @constant.numeric.float
; Punctuation
["," "." "-" ";"] @punctuation.delimiter
["(" ")" "#" "{" "}" "[" "]" "<<" ">>"] @punctuation.bracket
; 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
; Keywords
(attribute name: (atom) @keyword)
["case" "fun" "if" "of" "when" "end" "receive" "try" "catch" "after" "begin" "maybe"] @keyword
; Attributes ; Attributes
; module declaration ; module declaration
(attribute (attribute
@ -122,46 +164,3 @@
(record field: (atom) @variable.other.member) (record field: (atom) @variable.other.member)
(record name: (atom) @type) (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
; Comments
(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) (sigil)] @string
(character) @constant.character
(escape_sequence) @constant.character.escape
(integer) @constant.numeric.integer
(float) @constant.numeric.float
; Punctuation
["," "." "-" ";"] @punctuation.delimiter
["(" ")" "#" "{" "}" "[" "]" "<<" ">>"] @punctuation.bracket
; (ERROR) @error

View File

@ -1,8 +1,34 @@
; Function calls
(call_expression ; Identifiers
function: (identifier) @function.builtin
(#match? @function.builtin "^(append|cap|close|complex|copy|delete|imag|len|make|new|panic|print|println|real|recover)$")) (field_identifier) @variable.other.member
(identifier) @variable
(package_identifier) @namespace
(parameter_declaration (identifier) @variable.parameter)
(variadic_parameter_declaration (identifier) @variable.parameter)
(const_spec
name: (identifier) @constant)
(type_spec
name: (type_identifier) @constructor)
(keyed_element (literal_element (identifier) @variable.other.member))
(field_declaration
name: (field_identifier) @variable.other.member)
(parameter_declaration (identifier) @variable.parameter)
(variadic_parameter_declaration (identifier) @variable.parameter)
(label_name) @label
(const_spec
name: (identifier) @constant)
; Function calls
(call_expression (call_expression
function: (identifier) @function) function: (identifier) @function)
@ -11,9 +37,14 @@
function: (selector_expression function: (selector_expression
field: (field_identifier) @function.method)) field: (field_identifier) @function.method))
(call_expression
function: (identifier) @function.builtin
(#match? @function.builtin "^(append|cap|close|complex|copy|delete|imag|len|make|new|panic|print|println|real|recover)$"))
; Types ; Types
(type_identifier) @type
(type_parameter_list (type_parameter_list
(parameter_declaration (parameter_declaration
name: (identifier) @type.parameter)) name: (identifier) @type.parameter))
@ -21,8 +52,6 @@
((type_identifier) @type.builtin ((type_identifier) @type.builtin
(#match? @type.builtin "^(any|bool|byte|comparable|complex128|complex64|error|float32|float64|int|int16|int32|int64|int8|rune|string|uint|uint16|uint32|uint64|uint8|uintptr)$")) (#match? @type.builtin "^(any|bool|byte|comparable|complex128|complex64|error|float32|float64|int|int16|int32|int64|int8|rune|string|uint|uint16|uint32|uint64|uint8|uintptr)$"))
(type_identifier) @type
; Function definitions ; Function definitions
(function_declaration (function_declaration
@ -34,28 +63,6 @@
(method_spec (method_spec
name: (field_identifier) @function.method) name: (field_identifier) @function.method)
; Identifiers
(const_spec
name: (identifier) @constant)
(parameter_declaration (identifier) @variable.parameter)
(variadic_parameter_declaration (identifier) @variable.parameter)
(type_spec
name: (type_identifier) @constructor)
(field_identifier) @variable.other.member
(keyed_element (literal_element (identifier) @variable.other.member))
(identifier) @variable
(package_identifier) @namespace
(parameter_declaration (identifier) @variable.parameter)
(variadic_parameter_declaration (identifier) @variable.parameter)
(label_name) @label
(const_spec
name: (identifier) @constant)
; Operators ; Operators

View File

@ -1,17 +1,3 @@
;; ----------------------------------------------------------------------------
;; Literals and comments
(integer) @constant.numeric.integer
(exp_negation) @constant.numeric.integer
(exp_literal (float)) @constant.numeric.float
(char) @constant.character
(string) @string
(con_unit) @constant.builtin ; unit, as in ()
(comment) @comment
;; ---------------------------------------------------------------------------- ;; ----------------------------------------------------------------------------
;; Punctuation ;; Punctuation
@ -30,6 +16,20 @@
] @punctuation.delimiter ] @punctuation.delimiter
;; ----------------------------------------------------------------------------
;; Literals and comments
(integer) @constant.numeric.integer
(exp_negation) @constant.numeric.integer
(exp_literal (float)) @constant.numeric.float
(char) @constant.character
(string) @string
(comment) @comment
(con_unit [ "(" ")" ] @constant.builtin) ; unit, as in ()
;; ---------------------------------------------------------------------------- ;; ----------------------------------------------------------------------------
;; Keywords, operators, includes ;; Keywords, operators, includes
@ -103,6 +103,8 @@
;; ---------------------------------------------------------------------------- ;; ----------------------------------------------------------------------------
;; Functions and variables ;; Functions and variables
(variable) @variable
(signature name: (variable) @type) (signature name: (variable) @type)
(function (function
name: (variable) @function name: (variable) @function
@ -117,7 +119,6 @@
(exp_apply . (exp_name (variable) @function)) (exp_apply . (exp_name (variable) @function))
(exp_apply . (exp_name (qualified_variable (variable) @function))) (exp_apply . (exp_name (qualified_variable (variable) @function)))
(variable) @variable
(pat_wildcard) @variable (pat_wildcard) @variable
;; ---------------------------------------------------------------------------- ;; ----------------------------------------------------------------------------

View File

@ -10,12 +10,15 @@
(num_lit) @constant.numeric (num_lit) @constant.numeric
[(bool_lit) (nil_lit)] @constant.builtin (bool_lit) @constant.builtin.boolean
(nil_lit) @constant.builtin
(comment) @comment (comment) @comment
((sym_lit) @variable (sym_lit) @variable
(#match? @variable "^\\*.+\\*$"))
((sym_lit) @variable.builtin
(#match? @variable.builtin "^\\*.+\\*$"))
(short_fn_lit (short_fn_lit
. .
@ -57,8 +60,6 @@
. .
(sym_lit) @function) (sym_lit) @function)
(sym_lit) @variable
["{" "@{" "}" ["{" "@{" "}"
"[" "@[" "]" "[" "@[" "]"
"(" "@(" ")"] @punctuation.bracket "(" "@(" ")"] @punctuation.bracket

View File

@ -1,3 +1,5 @@
(identifier) @variable
; Methods ; Methods
(method_declaration (method_declaration
@ -54,8 +56,6 @@
((identifier) @constant ((identifier) @constant
(#match? @constant "^_*[A-Z][A-Z\\d_]+$")) (#match? @constant "^_*[A-Z][A-Z\\d_]+$"))
(identifier) @variable
(this) @variable.builtin (this) @variable.builtin
; Literals ; Literals

View File

@ -3,9 +3,12 @@
(struct_definition) (struct_definition)
(macro_definition) (macro_definition)
(function_definition) (function_definition)
(compound_expression) ; begin blocks
(let_statement)
(if_statement) (if_statement)
(try_statement)
(for_statement) (for_statement)
(while_statement) (while_statement)
(let_statement)
(quote_statement)
(do_clause)
(compound_statement) ; begin block
] @fold ] @fold

View File

@ -1,38 +1,47 @@
; ---------- ; ------------
; Primitives ; Variables identifiers
; ---------- ; ------------
[ (identifier) @variable
(line_comment)
(block_comment)
] @comment
; Remaining identifiers that start with capital letters should be types (PascalCase)
( (
((identifier) @constant.builtin) (identifier) @type
(#match? @constant.builtin "^(nothing|missing|undef)$")) (#match? @type "^[A-Z]"))
[
(true)
(false)
] @constant.builtin.boolean
(integer_literal) @constant.numeric.integer
(float_literal) @constant.numeric.float
; SCREAMING_SNAKE_CASE
( (
((identifier) @constant.numeric.float) (identifier) @constant
(#match? @constant.numeric.float "^((Inf|NaN)(16|32|64)?)$")) (#match? @constant "^[A-Z][A-Z0-9_]*$"))
(character_literal) @constant.character (const_statement
(escape_sequence) @constant.character.escape (assignment
. (identifier) @constant))
(string_literal) @string ; Field expressions are either module content or struct fields.
; Module types and constants should already be captured, so this
(prefixed_string_literal ; assumes the remaining identifiers to be struct fields.
prefix: (identifier) @function.macro) @string (field_expression
(_)
(identifier) @variable.other.member)
(quote_expression (quote_expression
(identifier) @string.special.symbol) ":" @string.special.symbol
[
(identifier)
(operator)
] @string.special.symbol)
; ------
; Macros
; ------
(macro_definition
name: (identifier) @function.macro)
(macro_identifier
"@" @function.macro
(identifier) @function.macro)
; ------------------- ; -------------------
; Modules and Imports ; Modules and Imports
@ -50,49 +59,6 @@
(scoped_identifier (scoped_identifier
(identifier) @namespace) (identifier) @namespace)
; -----
; Types
; -----
(abstract_definition
name: (identifier) @type)
(primitive_definition
name: (identifier) @type)
(struct_definition
name: (identifier) @type)
(struct_definition
. (_)
(identifier) @variable.other.member)
(struct_definition
. (_)
(typed_expression
. (identifier) @variable.other.member))
(type_parameter_list
(identifier) @type)
(constrained_type_parameter
(identifier) @type)
(subtype_clause
(identifier) @type)
(typed_expression
(identifier) @type . )
(parameterized_identifier
(identifier) @type)
(type_argument_list
(identifier) @type)
(where_clause
(identifier) @type)
; ------------------- ; -------------------
; Function definition ; Function definition
; ------------------- ; -------------------
@ -119,22 +85,6 @@
; prevent constructors (PascalCase) to be highlighted as functions ; prevent constructors (PascalCase) to be highlighted as functions
(#match? @function "^[^A-Z]")) (#match? @function "^[^A-Z]"))
(parameter_list
(identifier) @variable.parameter)
(typed_parameter
(identifier) @variable.parameter
(identifier)? @type)
(optional_parameter
. (identifier) @variable.parameter)
(slurp_parameter
(identifier) @variable.parameter)
(function_expression
. (identifier) @variable.parameter)
; --------------- ; ---------------
; Functions calls ; Functions calls
; --------------- ; ---------------
@ -145,93 +95,294 @@
; prevent constructors (PascalCase) to be highlighted as functions ; prevent constructors (PascalCase) to be highlighted as functions
(#match? @function "^[^A-Z]")) (#match? @function "^[^A-Z]"))
(
(broadcast_call_expression
(identifier) @function)
(#match? @function "^[^A-Z]"))
( (
(call_expression (call_expression
(field_expression (identifier) @function .)) (field_expression (identifier) @function .))
(#match? @function "^[^A-Z]")) (#match? @function "^[^A-Z]"))
(
(broadcast_call_expression
(identifier) @function)
(#match? @function "^[^A-Z]"))
( (
(broadcast_call_expression (broadcast_call_expression
(field_expression (identifier) @function .)) (field_expression (identifier) @function .))
(#match? @function "^[^A-Z]")) (#match? @function "^[^A-Z]"))
; ------
; Macros
; ------
(macro_definition ; -------------------
name: (identifier) @function.macro) ; Functions builtins
; -------------------
((identifier) @function.builtin
(#any-of? @function.builtin
"_abstracttype" "_apply_iterate" "_apply_pure" "_call_in_world" "_call_in_world_total"
"_call_latest" "_equiv_typedef" "_expr" "_primitivetype" "_setsuper!" "_structtype" "_typebody!"
"_typevar" "applicable" "apply_type" "arrayref" "arrayset" "arraysize" "const_arrayref"
"donotdelete" "fieldtype" "get_binding_type" "getfield" "ifelse" "invoke" "isa" "isdefined"
"modifyfield!" "nfields" "replacefield!" "set_binding_type!" "setfield!" "sizeof" "svec"
"swapfield!" "throw" "tuple" "typeassert" "typeof"))
; -----------
; Parameters
; -----------
(parameter_list
(identifier) @variable.parameter)
(optional_parameter
. (identifier) @variable.parameter)
(slurp_parameter
(identifier) @variable.parameter)
(typed_parameter
parameter: (identifier)? @variable.parameter
type: (_) @type)
(function_expression
. (identifier) @variable.parameter) ; Single parameter arrow functions
; -----
; Types
; -----
; Definitions
(abstract_definition
name: (identifier) @type.definition) @keyword
(primitive_definition
name: (identifier) @type.definition) @keyword
(struct_definition
name: (identifier) @type)
(struct_definition
. (_)
(identifier) @variable.other.member)
(struct_definition
. (_)
(typed_expression
. (identifier) @variable.other.member))
(type_clause
[
(identifier) @type
(field_expression
(identifier) @type .)
])
; Annotations
(parametrized_type_expression
(_) @type
(curly_expression
(_) @type))
(type_parameter_list
(identifier) @type)
(typed_expression
(identifier) @type . )
(function_definition
return_type: (identifier) @type)
(short_function_definition
return_type: (identifier) @type)
(where_clause
(identifier) @type)
(where_clause
(curly_expression
(_) @type))
; ---------
; Builtins
; ---------
; This list was generated with:
;
; istype(x) = typeof(x) === DataType || typeof(x) === UnionAll
; get_types(m) = filter(x -> istype(Base.eval(m, x)), names(m))
; type_names = sort(union(get_types(Core), get_types(Base)))
;
((identifier) @type.builtin
(#any-of? @type.builtin
"AbstractArray" "AbstractChannel" "AbstractChar" "AbstractDict" "AbstractDisplay"
"AbstractFloat" "AbstractIrrational" "AbstractLock" "AbstractMatch" "AbstractMatrix"
"AbstractPattern" "AbstractRange" "AbstractSet" "AbstractSlices" "AbstractString"
"AbstractUnitRange" "AbstractVecOrMat" "AbstractVector" "Any" "ArgumentError" "Array"
"AssertionError" "Atomic" "BigFloat" "BigInt" "BitArray" "BitMatrix" "BitSet" "BitVector" "Bool"
"BoundsError" "By" "CanonicalIndexError" "CapturedException" "CartesianIndex" "CartesianIndices"
"Cchar" "Cdouble" "Cfloat" "Channel" "Char" "Cint" "Cintmax_t" "Clong" "Clonglong" "Cmd" "Colon"
"ColumnSlices" "Complex" "ComplexF16" "ComplexF32" "ComplexF64" "ComposedFunction"
"CompositeException" "ConcurrencyViolationError" "Condition" "Cptrdiff_t" "Cshort" "Csize_t"
"Cssize_t" "Cstring" "Cuchar" "Cuint" "Cuintmax_t" "Culong" "Culonglong" "Cushort" "Cvoid"
"Cwchar_t" "Cwstring" "DataType" "DenseArray" "DenseMatrix" "DenseVecOrMat" "DenseVector" "Dict"
"DimensionMismatch" "Dims" "DivideError" "DomainError" "EOFError" "Enum" "ErrorException"
"Exception" "ExponentialBackOff" "Expr" "Float16" "Float32" "Float64" "Function" "GlobalRef"
"HTML" "IO" "IOBuffer" "IOContext" "IOStream" "IdDict" "IndexCartesian" "IndexLinear"
"IndexStyle" "InexactError" "InitError" "Int" "Int128" "Int16" "Int32" "Int64" "Int8" "Integer"
"InterruptException" "InvalidStateException" "Irrational" "KeyError" "LazyString" "LinRange"
"LineNumberNode" "LinearIndices" "LoadError" "Lt" "MIME" "Matrix" "Method" "MethodError"
"Missing" "MissingException" "Module" "NTuple" "NamedTuple" "Nothing" "Number" "Ordering"
"OrdinalRange" "OutOfMemoryError" "OverflowError" "Pair" "ParseError" "PartialQuickSort" "Perm"
"PermutedDimsArray" "Pipe" "ProcessFailedException" "Ptr" "QuoteNode" "Rational" "RawFD"
"ReadOnlyMemoryError" "Real" "ReentrantLock" "Ref" "Regex" "RegexMatch" "Returns"
"ReverseOrdering" "RoundingMode" "RowSlices" "SegmentationFault" "Set" "Signed" "Slices" "Some"
"SpinLock" "StackFrame" "StackOverflowError" "StackTrace" "Stateful" "StepRange" "StepRangeLen"
"StridedArray" "StridedMatrix" "StridedVecOrMat" "StridedVector" "String" "StringIndexError"
"SubArray" "SubString" "SubstitutionString" "Symbol" "SystemError" "Task" "TaskFailedException"
"Text" "TextDisplay" "Timer" "Tmstruct" "Tuple" "Type" "TypeError" "TypeVar" "UInt" "UInt128"
"UInt16" "UInt32" "UInt64" "UInt8" "UndefInitializer" "UndefKeywordError" "UndefRefError"
"UndefVarError" "Union" "UnionAll" "UnitRange" "Unsigned" "Val" "VecElement" "VecOrMat" "Vector"
"VersionNumber" "WeakKeyDict" "WeakRef"))
((identifier) @variable.builtin
(#any-of? @variable.builtin "begin" "end")
(#has-ancestor? @variable.builtin index_expression))
((identifier) @variable.builtin
(#any-of? @variable.builtin "begin" "end")
(#has-ancestor? @variable.builtin range_expression))
(macro_identifier
"@" @function.macro
(identifier) @function.macro)
; -------- ; --------
; Keywords ; Keywords
; -------- ; --------
(function_definition [
["function" "end"] @keyword.function) "global"
"local"
] @keyword
(compound_statement
[
"begin"
"end"
] @keyword)
(quote_statement
[
"quote"
"end"
] @keyword)
(let_statement
[
"let"
"end"
] @keyword)
(if_statement (if_statement
["if" "end"] @keyword.control.conditional) [
(elseif_clause "if"
["elseif"] @keyword.control.conditional) "end"
(else_clause ] @keyword.control.conditional)
["else"] @keyword.control.conditional)
(ternary_expression
["?" ":"] @keyword.control.conditional)
(for_statement (elseif_clause
["for" "end"] @keyword.control.repeat) "elseif" @keyword.control.conditional)
(while_statement
["while" "end"] @keyword.control.repeat) (else_clause
(break_statement) @keyword.control.repeat "else" @keyword.control.conditional)
(continue_statement) @keyword.control.repeat
(for_binding (if_clause
"in" @keyword.control.repeat) "if" @keyword.control.conditional) ; `if` clause in comprehensions
(for_clause
"for" @keyword.control.repeat) (ternary_expression
[
"?"
":"
] @keyword.control.conditional)
(try_statement (try_statement
["try" "end" ] @keyword.control.exception) [
"try"
"end"
] @keyword.control.exception)
(finally_clause (finally_clause
"finally" @keyword.control.exception) "finally" @keyword.control.exception)
(catch_clause (catch_clause
"catch" @keyword.control.exception) "catch" @keyword.control.exception)
(for_statement
[
"for"
"end"
] @keyword.control.repeat)
(while_statement
[
"while"
"end"
] @keyword.control.repeat)
(for_clause
"for" @keyword.control.repeat)
[ [
"export" (break_statement)
(continue_statement)
] @keyword.control.repeat
(module_definition
[
"module"
"baremodule"
"end"
] @keyword.control.import)
(import_statement
[
"import" "import"
"using" "using"
] @keyword.control.import ] @keyword.control.import)
[ (import_alias
"abstract" "as" @keyword.control.import)
"baremodule"
"begin" (export_statement
"const" "export" @keyword.control.import)
(selected_import
":" @punctuation.delimiter)
(struct_definition
[
"struct"
"end"
] @keyword)
(macro_definition
[
"macro"
"end"
] @keyword)
(function_definition
[
"function"
"end"
] @keyword.function)
(do_clause
[
"do" "do"
"end" "end"
"let" ] @keyword.function)
"macro"
"module"
"mutable"
"primitive"
"quote"
"return"
"struct"
"type"
"where"
] @keyword
; TODO: fix this (return_statement
((identifier) @keyword (#match? @keyword "global|local")) "return" @keyword.control.return)
[
"const"
"mutable"
] @keyword.storage.modifier
; --------- ; ---------
; Operators ; Operators
@ -239,14 +390,34 @@
[ [
(operator) (operator)
"::" "="
"<:" "∈"
":"
"=>"
"..."
"$"
] @operator ] @operator
(adjoint_expression
"'" @operator)
(range_expression
":" @operator)
((operator) @keyword.operator
(#any-of? @keyword.operator "in" "isa"))
(for_binding
"in" @keyword.operator)
(where_clause
"where" @keyword.operator)
(where_expression
"where" @keyword.operator)
(binary_expression
(_)
(operator) @operator
(identifier) @function
(#any-of? @operator "|>" ".|>"))
; ------------ ; ------------
; Punctuations ; Punctuations
; ------------ ; ------------
@ -255,40 +426,58 @@
"." "."
"," ","
";" ";"
"::"
"->"
] @punctuation.delimiter ] @punctuation.delimiter
"..." @punctuation.special
[ [
"["
"]"
"(" "("
")" ")"
"["
"]"
"{" "{"
"}" "}"
] @punctuation.bracket ] @punctuation.bracket
; --------------------- ; ---------
; Remaining identifiers ; Literals
; --------------------- ; ---------
(const_statement (boolean_literal) @constant.builtin.boolean
(variable_declaration
. (identifier) @constant)) (integer_literal) @constant.numeric.integer
(float_literal) @constant.numeric.float
; SCREAMING_SNAKE_CASE
( (
(identifier) @constant ((identifier) @constant.numeric.float)
(#match? @constant "^[A-Z][A-Z0-9_]*$")) (#match? @constant.numeric.float "^((Inf|NaN)(16|32|64)?)$"))
; remaining identifiers that start with capital letters should be types (PascalCase)
( (
(identifier) @type ((identifier) @constant.builtin)
(#match? @type "^[A-Z]")) (#match? @constant.builtin "^(nothing|missing|undef)$"))
; Field expressions are either module content or struct fields. (character_literal) @constant.character
; Module types and constants should already be captured, so this
; assumes the remaining identifiers to be struct fields.
(field_expression
(_)
(identifier) @variable.other.member)
(identifier) @variable (escape_sequence) @constant.character.escape
(string_literal) @string
(prefixed_string_literal
prefix: (identifier) @function.macro) @string
(command_literal) @string
(prefixed_command_literal
prefix: (identifier) @function.macro) @string
; ---------
; Comments
; ---------
[
(line_comment)
(block_comment)
] @comment

View File

@ -2,15 +2,39 @@
(struct_definition) (struct_definition)
(macro_definition) (macro_definition)
(function_definition) (function_definition)
(compound_expression) (compound_statement)
(let_statement)
(if_statement) (if_statement)
(try_statement)
(for_statement) (for_statement)
(while_statement) (while_statement)
(let_statement)
(quote_statement)
(do_clause) (do_clause)
(parameter_list) (assignment)
(for_binding)
(call_expression)
(parenthesized_expression)
(tuple_expression)
(comprehension_expression)
(matrix_expression)
(vector_expression)
] @indent ] @indent
[ [
"end" "end"
")"
"]"
"}"
] @outdent ] @outdent
(argument_list
. (_) @anchor
(#set! "scope" "tail")) @align
(parameter_list
. (_) @anchor
(#set! "scope" "tail")) @align
(curly_expression
. (_) @anchor
(#set! "scope" "tail")) @align

View File

@ -9,7 +9,8 @@
(primitive_definition) (primitive_definition)
(abstract_definition) (abstract_definition)
(struct_definition) (struct_definition)
(assignment_expression) (short_function_definition)
(assignment)
(const_statement) (const_statement)
]) ])
(#set! injection.language "markdown")) (#set! injection.language "markdown"))
@ -21,10 +22,17 @@
] @injection.content ] @injection.content
(#set! injection.language "comment")) (#set! injection.language "comment"))
(
[
(command_literal)
(prefixed_command_literal)
] @injection.content
(#set! injection.language "sh"))
( (
(prefixed_string_literal (prefixed_string_literal
prefix: (identifier) @function.macro) @injection.content prefix: (identifier) @function.macro) @injection.content
(#eq? @function.macro "re") (#eq? @function.macro "r")
(#set! injection.language "regex")) (#set! injection.language "regex"))
( (

View File

@ -2,43 +2,100 @@
; Definitions ; Definitions
; ----------- ; -----------
; Imports ; Variables
(import_statement (assignment
(identifier) @local.definition) (identifier) @local.definition)
(assignment
(tuple_expression
(identifier) @local.definition))
; Constants ; Constants
(const_statement (const_statement
(variable_declaration (assignment
. (identifier) @local.definition)) . (identifier) @local.definition))
; let/const bindings
(let_binding
(identifier) @local.definition)
(let_binding
(tuple_expression
(identifier) @local.definition))
; For bindings
(for_binding
(identifier) @local.definition)
(for_binding
(tuple_expression
(identifier) @local.definition))
; Types
(struct_definition
name: (identifier) @local.definition)
(abstract_definition
name: (identifier) @local.definition)
(abstract_definition
name: (identifier) @local.definition)
(type_parameter_list
(identifier) @local.definition)
; Module imports
(import_statement
(identifier) @local.definition)
; Parameters ; Parameters
(parameter_list (parameter_list
(identifier) @local.definition) (identifier) @local.definition)
(typed_parameter (optional_parameter
. (identifier) @local.definition) .
(optional_parameter .
(identifier) @local.definition) (identifier) @local.definition)
(slurp_parameter (slurp_parameter
(identifier) @local.definition) (identifier) @local.definition)
(typed_parameter
parameter: (identifier) @local.definition
(_))
; Single parameter arrow function
(function_expression (function_expression
. (identifier) @local.definition) .
(identifier) @local.definition)
; ------ ; Function/macro definitions
; Scopes (function_definition
; ------ name: (identifier) @local.definition) @local.scope
[ (short_function_definition
(function_definition) name: (identifier) @local.definition) @local.scope
(short_function_definition)
(macro_definition) (macro_definition
] @local.scope name: (identifier) @local.definition) @local.scope
; ---------- ; ----------
; References ; References
; ---------- ; ----------
(identifier) @local.reference (identifier) @local.reference
; ------
; Scopes
; ------
[
(for_statement)
(while_statement)
(try_statement)
(catch_clause)
(finally_clause)
(let_statement)
(quote_statement)
(do_clause)
] @local.scope

View File

@ -1,11 +1,11 @@
; Identifiers ; Identifiers
[(NAME) (SYMBOLNAME)] @variable
(section (section
. .
(NAME) @namespace) (NAME) @namespace)
[(NAME) (SYMBOLNAME)] @variable
; Operators ; Operators
[ [

View File

@ -23,12 +23,16 @@
(borrow_expression "&" @keyword.storage.modifier.ref) (borrow_expression "&" @keyword.storage.modifier.ref)
(borrow_expression "&mut" @keyword.storage.modifier.mut) (borrow_expression "&mut" @keyword.storage.modifier.mut)
(identifier) @variable
(constant_identifier) @constant (constant_identifier) @constant
((identifier) @constant ((identifier) @constant
(#match? @constant "^[A-Z][A-Z\\d_]*$")) (#match? @constant "^[A-Z][A-Z\\d_]*$"))
(function_identifier) @function (function_identifier) @function
(primitive_type) @type.builtin
(struct_identifier) @type (struct_identifier) @type
(pack_expression (pack_expression
access: (module_access access: (module_access
@ -152,6 +156,3 @@
"with" "with"
] @keyword ] @keyword
(primitive_type) @type.buildin
(identifier) @variable

View File

@ -17,6 +17,18 @@
"with" "with"
] @keyword ] @keyword
(variable_expression name: (identifier) @variable)
(select_expression
attrpath: (attrpath attr: (identifier)) @variable.other.member)
(apply_expression
function: [
(variable_expression name: (identifier) @function)
(select_expression
attrpath: (attrpath
attr: (identifier) @function .))])
((identifier) @variable.builtin ((identifier) @variable.builtin
(#match? @variable.builtin "^(__currentSystem|__currentTime|__nixPath|__nixVersion|__storeDir|builtins)$") (#match? @variable.builtin "^(__currentSystem|__currentTime|__nixPath|__nixVersion|__storeDir|builtins)$")
(#is-not? local)) (#is-not? local))
@ -59,28 +71,16 @@
name: (identifier) @variable.parameter name: (identifier) @variable.parameter
"?"? @punctuation.delimiter) "?"? @punctuation.delimiter)
(select_expression
attrpath: (attrpath attr: (identifier)) @variable.other.member)
(interpolation (interpolation
"${" @punctuation.special "${" @punctuation.special
"}" @punctuation.special) @embedded "}" @punctuation.special) @embedded
(apply_expression
function: [
(variable_expression name: (identifier) @function)
(select_expression
attrpath: (attrpath
attr: (identifier) @function .))])
(unary_expression (unary_expression
operator: _ @operator) operator: _ @operator)
(binary_expression (binary_expression
operator: _ @operator) operator: _ @operator)
(variable_expression name: (identifier) @variable)
(binding (binding
attrpath: (attrpath attr: (identifier)) @variable.other.member) attrpath: (attrpath attr: (identifier)) @variable.other.member)

View File

@ -3,13 +3,14 @@
(boolean) @constant.builtin.boolean (boolean) @constant.builtin.boolean
(include_path) @string.special.path (include_path) @string.special.path
(identifier) @variable
(parameters_declaration (identifier) @variable.parameter) (parameters_declaration (identifier) @variable.parameter)
(function_declaration name: (identifier) @function) (function_declaration name: (identifier) @function)
(function_call function: (identifier) @function) (function_call function: (identifier) @function)
(module_call name: (identifier) @function) (module_call name: (identifier) @function)
(identifier) @variable
(special_variable) @variable.builtin (special_variable) @variable.builtin
[ [

View File

@ -1,19 +1,3 @@
; ----------------------------------------------------------------------------
; Record fields would need to come before literal strings in order to be captured correctly
(record_accessor
field: [ (variable)
(string)
(triple_quote_string)
] @variable.other.member)
(exp_record_access
field: [ (variable)
(string)
(triple_quote_string)
] @variable.other.member)
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; Literals and comments ; Literals and comments
@ -21,6 +5,7 @@
(exp_negation) @constant.numeric.integer (exp_negation) @constant.numeric.integer
(exp_literal (number)) @constant.numeric.float (exp_literal (number)) @constant.numeric.float
(char) @constant.character (char) @constant.character
[ [
(string) (string)
(triple_quote_string) (triple_quote_string)
@ -28,7 +13,6 @@
(comment) @comment (comment) @comment
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; Punctuation ; Punctuation
@ -41,18 +25,19 @@
"]" "]"
] @punctuation.bracket ] @punctuation.bracket
[ (comma) @punctuation.delimiter
(comma)
";"
] @punctuation.delimiter
; ----------------------------------------------------------------------------
; Types
(type) @type
(constructor) @constructor
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; Keywords, operators, includes ; Keywords, operators, includes
; This needs to come before the other "else" in (module) @namespace
; order to be highlighted correctly
(class_instance "else" @keyword)
[ [
"if" "if"
@ -95,7 +80,6 @@
] @operator ] @operator
(qualified_module (module) @constructor) (qualified_module (module) @constructor)
(module) @namespace
(qualified_type (module) @namespace) (qualified_type (module) @namespace)
(qualified_variable (module) @namespace) (qualified_variable (module) @namespace)
(import (module) @namespace) (import (module) @namespace)
@ -122,6 +106,11 @@
"infixr" "infixr"
] @keyword ] @keyword
; NOTE
; Needs to come after the other `else` in
; order to be highlighted correctly
(class_instance "else" @keyword)
(type_role_declaration (type_role_declaration
"role" @keyword "role" @keyword
role: (type_role) @keyword) role: (type_role) @keyword)
@ -131,10 +120,27 @@
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; Functions and variables ; Functions and variables
(variable) @variable
(row_field (field_name) @variable.other.member) (row_field (field_name) @variable.other.member)
(record_field (field_name) @variable.other.member) (record_field (field_name) @variable.other.member)
(record_field (field_pun) @variable.other.member) (record_field (field_pun) @variable.other.member)
; NOTE
; Record fields must come after literal strings and
; plain variables in order to be highlighted correctly
(record_accessor
field: [ (variable)
(string)
(triple_quote_string)
] @variable.other.member)
(exp_record_access
field: [ (variable)
(string)
(triple_quote_string)
] @variable.other.member)
(signature name: (variable) @type) (signature name: (variable) @type)
(function name: (variable) @function) (function name: (variable) @function)
(class_instance (instance_name) @function) (class_instance (instance_name) @function)
@ -151,14 +157,5 @@
(exp_ticked (exp_name (variable) @operator)) (exp_ticked (exp_name (variable) @operator))
(exp_ticked (exp_name (qualified_variable (variable) @operator))) (exp_ticked (exp_name (qualified_variable (variable) @operator)))
(variable) @variable (patterns (pat_as "@" @namespace))
("@" @namespace) ; "as" pattern operator, e.g. x@Constructor
; ----------------------------------------------------------------------------
; Types
(type) @type
(constructor) @constructor

View File

@ -1,3 +1,11 @@
; Structs
;------------
(enum_variant) @type.enum.variant
(struct_entry (_) @variable.other.member ":")
(struct_name (identifier)) @type
(unit_struct) @type.builtin
; Literals ; Literals
;------------ ;------------
@ -7,16 +15,6 @@
(float) @constant.numeric.float (float) @constant.numeric.float
(char) @constant.character (char) @constant.character
; Structs
;------------
(enum_variant) @type.enum.variant
(struct_entry (_) @variable.other.member ":")
(struct_name (identifier)) @type
; Comments ; Comments
;------------ ;------------
@ -37,6 +35,7 @@
"{" @punctuation.bracket "{" @punctuation.bracket
"}" @punctuation.bracket "}" @punctuation.bracket
"-" @operator
; Special ; Special
;------------ ;------------

View File

@ -10,32 +10,28 @@
(block_comment) @comment.block (block_comment) @comment.block
(directive) @keyword.directive (directive) @keyword.directive
; operators ; variables
((symbol) @operator ((symbol) @variable.builtin
(#match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$")) (#eq? @variable.builtin "..."))
; keywords ((symbol) @variable.builtin
(#eq? @variable.builtin "."))
(symbol) @variable
["(" ")" "[" "]" "{" "}"] @punctuation.bracket
(quote "'") @operator
(unquote_splicing ",@") @operator
(unquote ",") @operator
(quasiquote "`") @operator
; procedure
(list (list
. .
((symbol) @keyword.conditional (symbol) @function)
(#match? @keyword.conditional "^(if|cond|case|when|unless)$"
)))
(list
.
(symbol) @keyword
(#match? @keyword
"^(define-syntax|let\\*|lambda|λ|case|=>|quote-splicing|unquote-splicing|set!|let|letrec|letrec-syntax|let-values|let\\*-values|do|else|define|cond|syntax-rules|unquote|begin|quote|let-syntax|and|if|quasiquote|letrec|delay|or|when|unless|identifier-syntax|assert|library|export|import|rename|only|except|prefix)$"
))
(list
.
(symbol) @function.builtin
(#match? @function.builtin
"^(caar|cadr|call-with-input-file|call-with-output-file|cdar|cddr|list|open-input-file|open-output-file|with-input-from-file|with-output-to-file|\\*|\\+|-|/|<|<=|=|>|>=|abs|acos|angle|append|apply|asin|assoc|assq|assv|atan|boolean\\?|caaaar|caaadr|caaar|caadar|caaddr|caadr|cadaar|cadadr|cadar|caddar|cadddr|caddr|call-with-current-continuation|call-with-values|car|cdaaar|cdaadr|cdaar|cdadar|cdaddr|cdadr|cddaar|cddadr|cddar|cdddar|cddddr|cdddr|cdr|ceiling|char->integer|char-alphabetic\\?|char-ci<=\\?|char-ci<\\?|char-ci=\\?|char-ci>=\\?|char-ci>\\?|char-downcase|char-lower-case\\?|char-numeric\\?|char-ready\\?|char-upcase|char-upper-case\\?|char-whitespace\\?|char<=\\?|char<\\?|char=\\?|char>=\\?|char>\\?|char\\?|close-input-port|close-output-port|complex\\?|cons|cos|current-error-port|current-input-port|current-output-port|denominator|display|dynamic-wind|eof-object\\?|eq\\?|equal\\?|eqv\\?|eval|even\\?|exact->inexact|exact\\?|exp|expt|floor|flush-output|for-each|force|gcd|imag-part|inexact->exact|inexact\\?|input-port\\?|integer->char|integer\\?|interaction-environment|lcm|length|list->string|list->vector|list-ref|list-tail|list\\?|load|log|magnitude|make-polar|make-rectangular|make-string|make-vector|map|max|member|memq|memv|min|modulo|negative\\?|newline|not|null-environment|null\\?|number->string|number\\?|numerator|odd\\?|output-port\\?|pair\\?|peek-char|positive\\?|procedure\\?|quotient|rational\\?|rationalize|read|read-char|real-part|real\\?|remainder|reverse|round|scheme-report-environment|set-car!|set-cdr!|sin|sqrt|string|string->list|string->number|string->symbol|string-append|string-ci<=\\?|string-ci<\\?|string-ci=\\?|string-ci>=\\?|string-ci>\\?|string-copy|string-fill!|string-length|string-ref|string-set!|string<=\\?|string<\\?|string=\\?|string>=\\?|string>\\?|string\\?|substring|symbol->string|symbol\\?|tan|transcript-off|transcript-on|truncate|values|vector|vector->list|vector-fill!|vector-length|vector-ref|vector-set!|vector\\?|write|write-char|zero\\?)$"
))
; special forms ; special forms
@ -62,12 +58,10 @@
(#match? @_f (#match? @_f
"^(let|let\\*|let-syntax|let-values|let\\*-values|letrec|letrec\\*|letrec-syntax)$")) "^(let|let\\*|let-syntax|let-values|let\\*-values|letrec|letrec\\*|letrec-syntax)$"))
; quote ; operators
(list ((symbol) @operator
. (#match? @operator "^(\\+|-|\\*|/|=|>|<|>=|<=)$"))
(symbol) @_f
(#eq? @_f "quote")) @string.symbol
; library ; library
@ -79,26 +73,31 @@
(#eq? @_lib "library")) (#eq? @_lib "library"))
; procedure ; quote
(list (list
. .
(symbol) @function) (symbol) @_f
(#eq? @_f "quote")) @string.symbol
;; variables ; keywords
((symbol) @variable.builtin (list
(#eq? @variable.builtin "...")) .
((symbol) @keyword.conditional
(#match? @keyword.conditional "^(if|cond|case|when|unless)$"
)))
((symbol) @variable.builtin (list
(#eq? @variable.builtin ".")) .
(symbol) @keyword
(symbol) @variable (#match? @keyword
"^(define-syntax|let\\*|lambda|λ|case|=>|quote-splicing|unquote-splicing|set!|let|letrec|letrec-syntax|let-values|let\\*-values|do|else|define|cond|syntax-rules|unquote|begin|quote|let-syntax|and|if|quasiquote|letrec|delay|or|when|unless|identifier-syntax|assert|library|export|import|rename|only|except|prefix)$"
["(" ")" "[" "]" "{" "}"] @punctuation.bracket ))
(quote "'") @operator
(unquote_splicing ",@") @operator
(unquote ",") @operator
(quasiquote "`") @operator
(list
.
(symbol) @function.builtin
(#match? @function.builtin
"^(caar|cadr|call-with-input-file|call-with-output-file|cdar|cddr|list|open-input-file|open-output-file|with-input-from-file|with-output-to-file|\\*|\\+|-|/|<|<=|=|>|>=|abs|acos|angle|append|apply|asin|assoc|assq|assv|atan|boolean\\?|caaaar|caaadr|caaar|caadar|caaddr|caadr|cadaar|cadadr|cadar|caddar|cadddr|caddr|call-with-current-continuation|call-with-values|car|cdaaar|cdaadr|cdaar|cdadar|cdaddr|cdadr|cddaar|cddadr|cddar|cdddar|cddddr|cdddr|cdr|ceiling|char->integer|char-alphabetic\\?|char-ci<=\\?|char-ci<\\?|char-ci=\\?|char-ci>=\\?|char-ci>\\?|char-downcase|char-lower-case\\?|char-numeric\\?|char-ready\\?|char-upcase|char-upper-case\\?|char-whitespace\\?|char<=\\?|char<\\?|char=\\?|char>=\\?|char>\\?|char\\?|close-input-port|close-output-port|complex\\?|cons|cos|current-error-port|current-input-port|current-output-port|denominator|display|dynamic-wind|eof-object\\?|eq\\?|equal\\?|eqv\\?|eval|even\\?|exact->inexact|exact\\?|exp|expt|floor|flush-output|for-each|force|gcd|imag-part|inexact->exact|inexact\\?|input-port\\?|integer->char|integer\\?|interaction-environment|lcm|length|list->string|list->vector|list-ref|list-tail|list\\?|load|log|magnitude|make-polar|make-rectangular|make-string|make-vector|map|max|member|memq|memv|min|modulo|negative\\?|newline|not|null-environment|null\\?|number->string|number\\?|numerator|odd\\?|output-port\\?|pair\\?|peek-char|positive\\?|procedure\\?|quotient|rational\\?|rationalize|read|read-char|real-part|real\\?|remainder|reverse|round|scheme-report-environment|set-car!|set-cdr!|sin|sqrt|string|string->list|string->number|string->symbol|string-append|string-ci<=\\?|string-ci<\\?|string-ci=\\?|string-ci>=\\?|string-ci>\\?|string-copy|string-fill!|string-length|string-ref|string-set!|string<=\\?|string<\\?|string=\\?|string>=\\?|string>\\?|string\\?|substring|symbol->string|symbol\\?|tan|transcript-off|transcript-on|truncate|values|vector|vector->list|vector-fill!|vector-length|vector-ref|vector-set!|vector\\?|write|write-char|zero\\?)$"
))

View File

@ -1,4 +1,4 @@
(syscall) @function (syscall) @function.builtin
(integer) @constant.numeric (integer) @constant.numeric
(pointer) @constant.numeric (pointer) @constant.numeric
(value) @label (value) @label

View File

@ -40,6 +40,7 @@
(float) @constant.numeric.float (float) @constant.numeric.float
(integer) @constant.numeric.integer (integer) @constant.numeric.integer
(comment) @comment (comment) @comment
[(path) (string) (json)] @string.special.path [(string) (json)] @string.special.path
(path) @string.special.path
(time) @string.special.symbol (time) @string.special.symbol
(boolean) @constant.builtin.boolean (boolean) @constant.builtin.boolean

View File

@ -1,13 +1,3 @@
(block_mapping_pair
key: (flow_node [(double_quote_scalar) (single_quote_scalar)] @variable.other.member))
(block_mapping_pair
key: (flow_node (plain_scalar (string_scalar) @variable.other.member)))
(flow_mapping
(_ key: (flow_node [(double_quote_scalar) (single_quote_scalar)] @variable.other.member)))
(flow_mapping
(_ key: (flow_node (plain_scalar (string_scalar) @variable.other.member))))
(boolean_scalar) @constant.builtin.boolean (boolean_scalar) @constant.builtin.boolean
(null_scalar) @constant.builtin (null_scalar) @constant.builtin
(double_quote_scalar) @string (double_quote_scalar) @string
@ -24,6 +14,16 @@
(yaml_directive) @keyword (yaml_directive) @keyword
(ERROR) @error (ERROR) @error
(block_mapping_pair
key: (flow_node [(double_quote_scalar) (single_quote_scalar)] @variable.other.member))
(block_mapping_pair
key: (flow_node (plain_scalar (string_scalar) @variable.other.member)))
(flow_mapping
(_ key: (flow_node [(double_quote_scalar) (single_quote_scalar)] @variable.other.member)))
(flow_mapping
(_ key: (flow_node (plain_scalar (string_scalar) @variable.other.member))))
[ [
"," ","
"-" "-"

View File

@ -7,6 +7,18 @@
(line_comment) (line_comment)
] @comment.line ] @comment.line
[
variable: (IDENTIFIER)
variable_type_function: (IDENTIFIER)
] @variable
parameter: (IDENTIFIER) @variable.parameter
[
field_member: (IDENTIFIER)
field_access: (IDENTIFIER)
] @variable.other.member
;; assume TitleCase is a type ;; assume TitleCase is a type
( (
[ [
@ -36,6 +48,13 @@
(#match? @constant "^[A-Z][A-Z_0-9]+$") (#match? @constant "^[A-Z][A-Z_0-9]+$")
) )
[
function_call: (IDENTIFIER)
function: (IDENTIFIER)
] @function
exception: "!" @keyword.control.exception
;; _ ;; _
( (
(IDENTIFIER) @variable.builtin (IDENTIFIER) @variable.builtin
@ -45,25 +64,6 @@
;; C Pointers [*c]T ;; C Pointers [*c]T
(PtrTypeStart "c" @variable.builtin) (PtrTypeStart "c" @variable.builtin)
[
variable: (IDENTIFIER)
variable_type_function: (IDENTIFIER)
] @variable
parameter: (IDENTIFIER) @variable.parameter
[
field_member: (IDENTIFIER)
field_access: (IDENTIFIER)
] @variable.other.member
[
function_call: (IDENTIFIER)
function: (IDENTIFIER)
] @function
exception: "!" @keyword.control.exception
field_constant: (IDENTIFIER) @constant field_constant: (IDENTIFIER) @constant
(BUILTINIDENTIFIER) @function.builtin (BUILTINIDENTIFIER) @function.builtin