nvim-treesitter/queries/julia/highlights.scm
Christian Clason 1ae9b0e455 feat!: align standard captures with upstream
Problem: Sharing highlight queries with upstream tree-sitter and
Helix is difficult.

Solution: Where reasonable, use capture names in tree-sitter's standard
list or Helix's Atom-style hierarchy.

Specifically:

* tree-sitter "standard capture names"
  (3f44b89685/highlight/src/lib.rs (L20-L72)):

  - `@parameter` -> `@variable.parameter`
  - `@field` -> `@variable.member`
  - `@namespace` -> `@module`
  - `@float` -> `@number.float`
  - `@symbol` -> `@string.special.symbol`
  - `@string.regex` -> `@string.regexp`
  - `@text.*` -> `@markup.*` (`strong`, `italic`, `link`, `strikethrough`; with exceptions; see below)
  - `@text.title` -> `@markup.heading`
  - `@text.literal` -> `@markup.raw`
  - `@text.reference` -> `@markup.link`
  - `@text.uri` -> `@markup.link.url` (in markup links)
  - `@string.special` -> `@markup.link.label` (non-url links)
  - `@punctuation.special` -> `@markup.list` (markdown lists only; move subitems from `@text.todo`)

* Helix captures
  (https://docs.helix-editor.com/master/themes.html#syntax-highlighting):

  - `@method` -> `@function.method`
  - `@method.call` -> `@function.method.call`
  - `@text.{todo,warning,note,danger}` -> `@comment.{error,warning,hint,info,todo}`
  - `@text.diff.{add,delete,}` -> `@diff.{plus,minus,delta}`
  - `@text.uri` -> `@string.special.url` (outside markup)
  - `@preproc` -> `@keyword.directive`
  - `@define` -> `@keyword.directive`(`.define`?)
  - `@storageclass` -> `@keyword.storage`
  - `@conditional` -> `@keyword.conditional`
  - `@debug` -> `@keyword.debug`
  - `@exception` -> `@keyword.exception`
  - `@include` -> `@keyword.import`
  - `@repeat` -> `@keyword.repeat`

* cleanup

  - remove some redundant `@conceal` (but still allow it for conceal-only patterns)
  - remove obsolete `@error` (syntax linting is out of scope for this repo)
  - sort, cleanup capture list in `CONTRIBUTING.md`
2024-01-19 16:58:37 +01:00

496 lines
9 KiB
Scheme

;;; Identifiers
(identifier) @variable
; ;; If you want type highlighting based on Julia naming conventions (this might collide with mathematical notation)
; ((identifier) @type
; (match? @type "^[A-Z][^_]")) ; exception: Highlight `A_foo` sort of identifiers as variables
(macro_identifier) @function.macro
(macro_identifier
(identifier) @function.macro) ; for any one using the variable highlight
(macro_definition
name: (identifier) @function.macro)
(quote_expression
":" @string.special.symbol
[(identifier) (operator)] @string.special.symbol)
(field_expression
(identifier) @variable.member .)
;;; Function names
;; Definitions
(function_definition
name: (identifier) @function)
(short_function_definition
name: (identifier) @function)
(function_definition
name: (field_expression (identifier) @function .))
(short_function_definition
name: (field_expression (identifier) @function .))
;; calls
(call_expression
(identifier) @function.call)
(call_expression
(field_expression (identifier) @function.call .))
(broadcast_call_expression
(identifier) @function.call)
(broadcast_call_expression
(field_expression (identifier) @function.call .))
(binary_expression
(_)
(operator) @_pipe
(identifier) @function.call
(#eq? @_pipe "|>"))
;; 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)
(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))
;;; Keywords
[
"global"
"local"
] @keyword
(compound_statement
["begin" "end"] @keyword)
(quote_statement
["quote" "end"] @keyword)
(let_statement
["let" "end"] @keyword)
(if_statement
["if" "end"] @keyword.conditional)
(elseif_clause
"elseif" @keyword.conditional)
(else_clause
"else" @keyword.conditional)
(if_clause
"if" @keyword.conditional) ; `if` clause in comprehensions
(ternary_expression
["?" ":"] @keyword.conditional.ternary)
(try_statement
["try" "end"] @keyword.exception)
(finally_clause
"finally" @keyword.exception)
(catch_clause
"catch" @keyword.exception)
(for_statement
["for" "end"] @keyword.repeat)
(while_statement
["while" "end"] @keyword.repeat)
(for_clause
"for" @keyword.repeat)
[
(break_statement)
(continue_statement)
] @keyword.repeat
(module_definition
["module" "baremodule" "end"] @keyword.import)
(import_statement
["import" "using"] @keyword.import)
(import_alias
"as" @keyword.import)
(export_statement
"export" @keyword.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.return)
[
"const"
"mutable"
] @type.qualifier
;;; Operators & Punctuation
[
"="
"∈"
(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)
[
","
"."
";"
"::"
"->"
] @punctuation.delimiter
[
"..."
] @punctuation.special
["(" ")" "[" "]" "{" "}"] @punctuation.bracket
;;; Literals
(boolean_literal) @boolean
(integer_literal) @number
(float_literal) @number.float
((identifier) @number.float
(#any-of? @number.float "NaN" "NaN16" "NaN32"
"Inf" "Inf16" "Inf32"))
((identifier) @constant.builtin
(#any-of? @constant.builtin "nothing" "missing"))
(character_literal) @character
(escape_sequence) @string.escape
(string_literal) @string
(prefixed_string_literal
prefix: (identifier) @function.macro) @string
(command_literal) @string.special
(prefixed_command_literal
prefix: (identifier) @function.macro) @string.special
((string_literal) @string.documentation @spell
. [
(module_definition)
(abstract_definition)
(struct_definition)
(function_definition)
(short_function_definition)
(assignment)
(const_statement)
])
[
(line_comment)
(block_comment)
] @comment @spell