Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'runtime/queries/julia/highlights.scm')
-rw-r--r--runtime/queries/julia/highlights.scm517
1 files changed, 353 insertions, 164 deletions
diff --git a/runtime/queries/julia/highlights.scm b/runtime/queries/julia/highlights.scm
index 013f5063..7072640f 100644
--- a/runtime/queries/julia/highlights.scm
+++ b/runtime/queries/julia/highlights.scm
@@ -1,39 +1,48 @@
-; ----------
-; Primitives
-; ----------
+; ------------
+; Variables identifiers
+; ------------
-[
- (line_comment)
- (block_comment)
-] @comment
+(identifier) @variable
+; Remaining identifiers that start with capital letters should be types (PascalCase)
(
- ((identifier) @constant.builtin)
- (#match? @constant.builtin "^(nothing|missing|undef)$"))
+ (identifier) @type
+ (#match? @type "^[A-Z]"))
-[
- (true)
- (false)
-] @constant.builtin.boolean
+; SCREAMING_SNAKE_CASE
+(
+ (identifier) @constant
+ (#match? @constant "^[A-Z][A-Z0-9_]*$"))
-(integer_literal) @constant.numeric.integer
-(float_literal) @constant.numeric.float
+(const_statement
+ (assignment
+ . (identifier) @constant))
-(
- ((identifier) @constant.numeric.float)
- (#match? @constant.numeric.float "^((Inf|NaN)(16|32|64)?)$"))
+; Field expressions are either module content or struct fields.
+; Module types and constants should already be captured, so this
+; assumes the remaining identifiers to be struct fields.
+(field_expression
+ (_)
+ (identifier) @variable.other.member)
-(character_literal) @constant.character
-(escape_sequence) @constant.character.escape
+(quote_expression
+ ":" @string.special.symbol
+ [
+ (identifier)
+ (operator)
+ ] @string.special.symbol)
-(string_literal) @string
+; ------
+; Macros
+; ------
-(prefixed_string_literal
- prefix: (identifier) @function.macro) @string
+(macro_definition
+ name: (identifier) @function.macro)
+
+(macro_identifier
+ "@" @function.macro
+ (identifier) @function.macro)
-(quote_expression
- (identifier) @string.special.symbol)
-
; -------------------
; Modules and Imports
; -------------------
@@ -50,49 +59,6 @@
(scoped_identifier
(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
; -------------------
@@ -119,22 +85,6 @@
; prevent constructors (PascalCase) to be highlighted as functions
(#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
; ---------------
@@ -146,13 +96,13 @@
(#match? @function "^[^A-Z]"))
(
- (broadcast_call_expression
- (identifier) @function)
+ (call_expression
+ (field_expression (identifier) @function .))
(#match? @function "^[^A-Z]"))
(
- (call_expression
- (field_expression (identifier) @function .))
+ (broadcast_call_expression
+ (identifier) @function)
(#match? @function "^[^A-Z]"))
(
@@ -160,78 +110,279 @@
(field_expression (identifier) @function .))
(#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
; --------
-(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" "end"] @keyword.control.conditional)
+ [
+ "if"
+ "end"
+ ] @keyword.control.conditional)
+
(elseif_clause
- ["elseif"] @keyword.control.conditional)
+ "elseif" @keyword.control.conditional)
+
(else_clause
- ["else"] @keyword.control.conditional)
-(ternary_expression
- ["?" ":"] @keyword.control.conditional)
+ "else" @keyword.control.conditional)
-(for_statement
- ["for" "end"] @keyword.control.repeat)
-(while_statement
- ["while" "end"] @keyword.control.repeat)
-(break_statement) @keyword.control.repeat
-(continue_statement) @keyword.control.repeat
-(for_binding
- "in" @keyword.control.repeat)
-(for_clause
- "for" @keyword.control.repeat)
+(if_clause
+ "if" @keyword.control.conditional) ; `if` clause in comprehensions
+
+(ternary_expression
+ [
+ "?"
+ ":"
+ ] @keyword.control.conditional)
(try_statement
- ["try" "end" ] @keyword.control.exception)
+ [
+ "try"
+ "end"
+ ] @keyword.control.exception)
+
(finally_clause
"finally" @keyword.control.exception)
+
(catch_clause
"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"
- "import"
- "using"
-] @keyword.control.import
+ (break_statement)
+ (continue_statement)
+] @keyword.control.repeat
+
+(module_definition
+ [
+ "module"
+ "baremodule"
+ "end"
+ ] @keyword.control.import)
+
+(import_statement
+ [
+ "import"
+ "using"
+ ] @keyword.control.import)
+
+(import_alias
+ "as" @keyword.control.import)
+
+(export_statement
+ "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"
+ "end"
+ ] @keyword.function)
+
+(return_statement
+ "return" @keyword.control.return)
[
- "abstract"
- "baremodule"
- "begin"
"const"
- "do"
- "end"
- "let"
- "macro"
- "module"
"mutable"
- "primitive"
- "quote"
- "return"
- "struct"
- "type"
- "where"
-] @keyword
-
-; TODO: fix this
-((identifier) @keyword (#match? @keyword "global|local"))
+] @keyword.storage.modifier
; ---------
; Operators
@@ -239,14 +390,34 @@
[
(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
; ------------
@@ -255,40 +426,58 @@
"."
","
";"
+ "::"
+ "->"
] @punctuation.delimiter
+"..." @punctuation.special
+
[
- "["
- "]"
"("
")"
+ "["
+ "]"
"{"
"}"
] @punctuation.bracket
-; ---------------------
-; Remaining identifiers
-; ---------------------
+; ---------
+; Literals
+; ---------
+
+(boolean_literal) @constant.builtin.boolean
-(const_statement
- (variable_declaration
- . (identifier) @constant))
+(integer_literal) @constant.numeric.integer
+
+(float_literal) @constant.numeric.float
-; SCREAMING_SNAKE_CASE
(
- (identifier) @constant
- (#match? @constant "^[A-Z][A-Z0-9_]*$"))
+ ((identifier) @constant.numeric.float)
+ (#match? @constant.numeric.float "^((Inf|NaN)(16|32|64)?)$"))
-; remaining identifiers that start with capital letters should be types (PascalCase)
(
- (identifier) @type
- (#match? @type "^[A-Z]"))
+ ((identifier) @constant.builtin)
+ (#match? @constant.builtin "^(nothing|missing|undef)$"))
-; Field expressions are either module content or struct fields.
-; Module types and constants should already be captured, so this
-; assumes the remaining identifiers to be struct fields.
-(field_expression
- (_)
- (identifier) @variable.other.member)
+(character_literal) @constant.character
-(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