nvim-treesitter/runtime/queries/kotlin/highlights.scm

398 lines
7.6 KiB
Scheme
Raw Permalink Normal View History

2024-01-06 15:05:50 +09:00
; Identifiers
(simple_identifier) @variable
; `it` keyword inside lambdas
; FIXME: This will highlight the keyword outside of lambdas since tree-sitter
; does not allow us to check for arbitrary nestation
((simple_identifier) @variable.builtin
2024-01-06 15:05:50 +09:00
(#eq? @variable.builtin "it"))
; `field` keyword inside property getter/setter
; FIXME: This will highlight the keyword outside of getters and setters
; since tree-sitter does not allow us to check for arbitrary nestation
((simple_identifier) @variable.builtin
2024-01-06 15:05:50 +09:00
(#eq? @variable.builtin "field"))
[
2024-01-06 15:05:50 +09:00
"this"
"super"
"this@"
"super@"
] @variable.builtin
; NOTE: for consistency with "super@"
2024-01-06 15:05:50 +09:00
(super_expression
"@" @variable.builtin)
(class_parameter
(simple_identifier) @variable.member)
; NOTE: temporary fix for treesitter bug that causes delay in file opening
;(class_body
; (property_declaration
; (variable_declaration
; (simple_identifier) @variable.member)))
; id_1.id_2.id_3: `id_2` and `id_3` are assumed as object properties
(_
2024-01-06 15:05:50 +09:00
(navigation_suffix
(simple_identifier) @variable.member))
; SCREAMING CASE identifiers are assumed to be constants
((simple_identifier) @constant
2024-01-06 15:05:50 +09:00
(#lua-match? @constant "^[A-Z][A-Z0-9_]*$"))
(_
2024-01-06 15:05:50 +09:00
(navigation_suffix
(simple_identifier) @constant
(#lua-match? @constant "^[A-Z][A-Z0-9_]*$")))
(enum_entry
2024-01-06 15:05:50 +09:00
(simple_identifier) @constant)
(type_identifier) @type
; '?' operator, replacement for Java @Nullable
(nullable_type) @punctuation.special
(type_alias
2024-01-06 15:05:50 +09:00
(type_identifier) @type.definition)
((type_identifier) @type.builtin
(#any-of? @type.builtin
"Byte" "Short" "Int" "Long" "UByte" "UShort" "UInt" "ULong" "Float" "Double" "Boolean" "Char"
"String" "Array" "ByteArray" "ShortArray" "IntArray" "LongArray" "UByteArray" "UShortArray"
"UIntArray" "ULongArray" "FloatArray" "DoubleArray" "BooleanArray" "CharArray" "Map" "Set"
"List" "EmptyMap" "EmptySet" "EmptyList" "MutableMap" "MutableSet" "MutableList"))
2024-01-06 15:05:50 +09:00
(package_header
"package" @keyword
.
(identifier
(simple_identifier) @module))
(import_header
2024-01-06 15:05:50 +09:00
"import" @keyword.import)
(wildcard_import) @character.special
; The last `simple_identifier` in a `import_header` will always either be a function
; or a type. Classes can appear anywhere in the import path, unlike functions
(import_header
2024-01-06 15:05:50 +09:00
(identifier
(simple_identifier) @type @_import)
(import_alias
(type_identifier) @type.definition)?
(#lua-match? @_import "^[A-Z]"))
(import_header
2024-01-06 15:05:50 +09:00
(identifier
(simple_identifier) @function @_import .)
(import_alias
(type_identifier) @function)?
(#lua-match? @_import "^[a-z]"))
(label) @label
2024-01-06 15:05:50 +09:00
; Function definitions
(function_declaration
2024-01-06 15:05:50 +09:00
(simple_identifier) @function)
(getter
2024-01-21 22:05:44 +09:00
"get" @function.builtin)
2024-01-06 15:05:50 +09:00
(setter
2024-01-21 22:05:44 +09:00
"set" @function.builtin)
(primary_constructor) @constructor
2024-01-06 15:05:50 +09:00
(secondary_constructor
2024-01-21 22:05:44 +09:00
"constructor" @constructor)
(constructor_invocation
2024-01-06 15:05:50 +09:00
(user_type
(type_identifier) @constructor))
(anonymous_initializer
2024-01-21 22:05:44 +09:00
"init" @constructor)
(parameter
2024-01-06 15:05:50 +09:00
(simple_identifier) @variable.parameter)
(parameter_with_optional_type
2024-01-06 15:05:50 +09:00
(simple_identifier) @variable.parameter)
; lambda parameters
(lambda_literal
2024-01-06 15:05:50 +09:00
(lambda_parameters
(variable_declaration
(simple_identifier) @variable.parameter)))
2024-01-06 15:05:50 +09:00
; Function calls
; function()
(call_expression
2024-01-06 15:05:50 +09:00
.
(simple_identifier) @function.call)
; ::function
(callable_reference
2024-01-06 15:05:50 +09:00
.
(simple_identifier) @function.call)
; object.function() or object.property.function()
(call_expression
2024-01-06 15:05:50 +09:00
(navigation_expression
(navigation_suffix
(simple_identifier) @function.call) .))
(call_expression
2024-01-06 15:05:50 +09:00
.
(simple_identifier) @function.builtin
(#any-of? @function.builtin
"arrayOf" "arrayOfNulls" "byteArrayOf" "shortArrayOf" "intArrayOf" "longArrayOf" "ubyteArrayOf"
"ushortArrayOf" "uintArrayOf" "ulongArrayOf" "floatArrayOf" "doubleArrayOf" "booleanArrayOf"
"charArrayOf" "emptyArray" "mapOf" "setOf" "listOf" "emptyMap" "emptySet" "emptyList"
"mutableMapOf" "mutableSetOf" "mutableListOf" "print" "println" "error" "TODO" "run"
"runCatching" "repeat" "lazy" "lazyOf" "enumValues" "enumValueOf" "assert" "check"
"checkNotNull" "require" "requireNotNull" "with" "synchronized"))
2024-01-06 15:05:50 +09:00
; Literals
[
(line_comment)
(multiline_comment)
] @comment @spell
((multiline_comment) @comment.documentation
(#lua-match? @comment.documentation "^/[*][*][^*].*[*]/$"))
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" (https://github.com/tree-sitter/tree-sitter/blob/3f44b896852eb7daaa6df4fb778c9bb52c70c815/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`
2023-12-24 10:00:20 +01:00
(shebang_line) @keyword.directive
2022-09-26 10:19:02 +01:00
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" (https://github.com/tree-sitter/tree-sitter/blob/3f44b896852eb7daaa6df4fb778c9bb52c70c815/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`
2023-12-24 10:00:20 +01:00
(real_literal) @number.float
2024-01-06 15:05:50 +09:00
[
2024-01-06 15:05:50 +09:00
(integer_literal)
(long_literal)
(hex_literal)
(bin_literal)
(unsigned_literal)
] @number
2020-11-30 22:58:52 +01:00
2021-08-16 22:00:07 -04:00
[
(null_literal)
2024-01-06 15:05:50 +09:00
; should be highlighted the same as booleans
(boolean_literal)
] @boolean
(character_literal) @character
2020-11-30 22:58:52 +01:00
(string_literal) @string
; NOTE: Escapes not allowed in multi-line strings
2024-01-06 15:05:50 +09:00
(character_literal
(character_escape_seq) @string.escape)
2020-11-30 22:58:52 +01:00
; There are 3 ways to define a regex
; - "[abc]?".toRegex()
(call_expression
2024-01-06 15:05:50 +09:00
(navigation_expression
2024-01-21 22:05:44 +09:00
(string_literal) @string.regexp
2024-01-06 15:05:50 +09:00
(navigation_suffix
((simple_identifier) @_function
(#eq? @_function "toRegex")))))
2020-11-30 22:58:52 +01:00
; - Regex("[abc]?")
(call_expression
2024-01-06 15:05:50 +09:00
((simple_identifier) @_function
(#eq? @_function "Regex"))
(call_suffix
(value_arguments
(value_argument
(string_literal) @string.regexp))))
; - Regex.fromLiteral("[abc]?")
(call_expression
2024-01-06 15:05:50 +09:00
(navigation_expression
((simple_identifier) @_class
(#eq? @_class "Regex"))
(navigation_suffix
((simple_identifier) @_function
(#eq? @_function "fromLiteral"))))
(call_suffix
(value_arguments
(value_argument
(string_literal) @string.regexp))))
; Keywords
(type_alias
"typealias" @keyword)
2024-01-06 15:05:50 +09:00
(companion_object
"companion" @keyword)
[
2024-01-06 15:05:50 +09:00
(class_modifier)
(member_modifier)
(function_modifier)
(property_modifier)
(platform_modifier)
(variance_modifier)
(parameter_modifier)
(visibility_modifier)
(reification_modifier)
(inheritance_modifier)
] @keyword.modifier
2020-11-30 22:58:52 +01:00
[
2024-01-06 15:05:50 +09:00
"val"
"var"
2024-04-23 12:23:15 -07:00
; "typeof" ; NOTE: It is reserved for future use
] @keyword
[
2024-01-06 15:05:50 +09:00
"enum"
"class"
"object"
"interface"
2024-04-23 12:23:15 -07:00
] @keyword.type
[
2024-01-06 15:05:50 +09:00
"return"
"return@"
] @keyword.return
"suspend" @keyword.coroutine
"fun" @keyword.function
2020-11-30 22:58:52 +01:00
[
2024-01-06 15:05:50 +09:00
"if"
"else"
"when"
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" (https://github.com/tree-sitter/tree-sitter/blob/3f44b896852eb7daaa6df4fb778c9bb52c70c815/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`
2023-12-24 10:00:20 +01:00
] @keyword.conditional
2021-08-16 22:00:07 -04:00
[
2024-01-06 15:05:50 +09:00
"for"
"do"
"while"
"continue"
"continue@"
"break"
"break@"
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" (https://github.com/tree-sitter/tree-sitter/blob/3f44b896852eb7daaa6df4fb778c9bb52c70c815/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`
2023-12-24 10:00:20 +01:00
] @keyword.repeat
2021-08-16 22:00:07 -04:00
[
2024-01-06 15:05:50 +09:00
"try"
"catch"
"throw"
"finally"
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" (https://github.com/tree-sitter/tree-sitter/blob/3f44b896852eb7daaa6df4fb778c9bb52c70c815/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`
2023-12-24 10:00:20 +01:00
] @keyword.exception
2021-08-16 22:00:07 -04:00
(annotation
2024-01-06 15:05:50 +09:00
"@" @attribute
(use_site_target)? @attribute)
(annotation
2024-01-06 15:05:50 +09:00
(user_type
(type_identifier) @attribute))
(annotation
2024-01-06 15:05:50 +09:00
(constructor_invocation
(user_type
(type_identifier) @attribute)))
2021-08-16 22:00:07 -04:00
(file_annotation
2024-01-06 15:05:50 +09:00
"@" @attribute
"file" @attribute
":" @attribute)
(file_annotation
2024-01-06 15:05:50 +09:00
(user_type
(type_identifier) @attribute))
2021-08-16 22:00:07 -04:00
2024-01-06 15:05:50 +09:00
(file_annotation
(constructor_invocation
(user_type
(type_identifier) @attribute)))
2021-08-16 22:00:07 -04:00
2024-01-06 15:05:50 +09:00
; Operators & Punctuation
[
2024-01-06 15:05:50 +09:00
"!"
"!="
"!=="
"="
"=="
"==="
">"
">="
"<"
"<="
"||"
"&&"
"+"
"++"
"+="
"-"
"--"
"-="
"*"
"*="
"/"
"/="
"%"
"%="
"?."
"?:"
"!!"
"is"
"in"
"as"
"as?"
".."
"..<"
2024-01-06 15:05:50 +09:00
"->"
] @operator
2021-08-16 22:00:07 -04:00
[
2024-01-06 15:05:50 +09:00
"("
")"
"["
"]"
"{"
"}"
] @punctuation.bracket
[
2024-01-06 15:05:50 +09:00
"."
","
";"
":"
"::"
] @punctuation.delimiter
2024-01-06 15:05:50 +09:00
(super_expression
[
"<"
">"
] @punctuation.delimiter)
(type_arguments
[
"<"
">"
] @punctuation.delimiter)
(type_parameters
[
"<"
">"
] @punctuation.delimiter)
; NOTE: `interpolated_identifier`s can be highlighted in any way
(string_literal
2024-01-06 15:05:50 +09:00
"$" @punctuation.special
(interpolated_identifier) @none @variable)
(string_literal
2024-01-06 15:05:50 +09:00
"${" @punctuation.special
(interpolated_expression) @none
"}" @punctuation.special)