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.scm | 515 |
1 files changed, 164 insertions, 351 deletions
diff --git a/runtime/queries/julia/highlights.scm b/runtime/queries/julia/highlights.scm index f473d2ca..013f5063 100644 --- a/runtime/queries/julia/highlights.scm +++ b/runtime/queries/julia/highlights.scm @@ -1,48 +1,39 @@ -; ------------ -; Variables identifiers -; ------------ +; ---------- +; Primitives +; ---------- -(identifier) @variable - -; Remaining identifiers that start with capital letters should be types (PascalCase) -( - (identifier) @type - (#match? @type "^[A-Z]")) +[ + (line_comment) + (block_comment) +] @comment -; SCREAMING_SNAKE_CASE ( - (identifier) @constant - (#match? @constant "^[A-Z][A-Z0-9_]*$")) + ((identifier) @constant.builtin) + (#match? @constant.builtin "^(nothing|missing|undef)$")) -(const_statement - (assignment - . (identifier) @constant)) +[ + (true) + (false) +] @constant.builtin.boolean -; 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) +(integer_literal) @constant.numeric.integer +(float_literal) @constant.numeric.float -(quote_expression - ":" @string.special.symbol - [ - (identifier) - (operator) - ] @string.special.symbol) +( + ((identifier) @constant.numeric.float) + (#match? @constant.numeric.float "^((Inf|NaN)(16|32|64)?)$")) -; ------ -; Macros -; ------ +(character_literal) @constant.character +(escape_sequence) @constant.character.escape -(macro_definition - name: (identifier) @function.macro) +(string_literal) @string -(macro_identifier - "@" @function.macro - (identifier) @function.macro) +(prefixed_string_literal + prefix: (identifier) @function.macro) @string +(quote_expression + (identifier) @string.special.symbol) + ; ------------------- ; Modules and Imports ; ------------------- @@ -59,6 +50,49 @@ (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 ; ------------------- @@ -85,6 +119,22 @@ ; 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 ; --------------- @@ -96,13 +146,13 @@ (#match? @function "^[^A-Z]")) ( - (call_expression - (field_expression (identifier) @function .)) + (broadcast_call_expression + (identifier) @function) (#match? @function "^[^A-Z]")) ( - (broadcast_call_expression - (identifier) @function) + (call_expression + (field_expression (identifier) @function .)) (#match? @function "^[^A-Z]")) ( @@ -110,277 +160,78 @@ (field_expression (identifier) @function .)) (#match? @function "^[^A-Z]")) +; ------ +; Macros +; ------ -; ------------------- -; 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")) - -((identifier) @variable.builtin - (#any-of? @variable.builtin "begin" "end")) +(macro_definition + name: (identifier) @function.macro) +(macro_identifier + "@" @function.macro + (identifier) @function.macro) ; -------- ; Keywords ; -------- -[ - "global" - "local" -] @keyword - -(compound_statement - [ - "begin" - "end" - ] @keyword) - -(quote_statement - [ - "quote" - "end" - ] @keyword) - -(let_statement - [ - "let" - "end" - ] @keyword) +(function_definition + ["function" "end"] @keyword.function) (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) - -(if_clause - "if" @keyword.control.conditional) ; `if` clause in comprehensions - + ["else"] @keyword.control.conditional) (ternary_expression - [ - "?" - ":" - ] @keyword.control.conditional) + ["?" ":"] @keyword.control.conditional) -(try_statement - [ - "try" - "end" - ] @keyword.control.exception) +(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) +(try_statement + ["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) - [ - (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) + "export" + "import" + "using" +] @keyword.control.import [ + "abstract" + "baremodule" + "begin" "const" + "do" + "end" + "let" + "macro" + "module" "mutable" -] @keyword.storage.modifier + "primitive" + "quote" + "return" + "struct" + "type" + "where" +] @keyword + +; TODO: fix this +((identifier) @keyword (#match? @keyword "global|local")) ; --------- ; Operators @@ -388,34 +239,14 @@ [ (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 ; ------------ @@ -424,58 +255,40 @@ "." "," ";" - "::" - "->" ] @punctuation.delimiter -"..." @punctuation.special - [ - "(" - ")" "[" "]" + "(" + ")" "{" "}" ] @punctuation.bracket -; --------- -; Literals -; --------- - -(boolean_literal) @constant.builtin.boolean - -(integer_literal) @constant.numeric.integer +; --------------------- +; Remaining identifiers +; --------------------- -(float_literal) @constant.numeric.float +(const_statement + (variable_declaration + . (identifier) @constant)) +; SCREAMING_SNAKE_CASE ( - ((identifier) @constant.numeric.float) - (#match? @constant.numeric.float "^((Inf|NaN)(16|32|64)?)$")) + (identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]*$")) +; remaining identifiers that start with capital letters should be types (PascalCase) ( - ((identifier) @constant.builtin) - (#match? @constant.builtin "^(nothing|missing|undef)$")) - -(character_literal) @constant.character - -(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 + (identifier) @type + (#match? @type "^[A-Z]")) -; --------- -; Comments -; --------- +; 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) -[ - (line_comment) - (block_comment) -] @comment +(identifier) @variable |