chore: add downloaded community queries for kotlin + typescript

Kotlin (fwcd/tree-sitter-kotlin) and TypeScript packages
don't bundle queries. These are downloaded from upstream repos.
This commit is contained in:
tobjend 2026-07-03 18:05:19 +02:00
parent 069c63f2c8
commit 8d06ac2d52
5 changed files with 611 additions and 0 deletions

View file

@ -0,0 +1,378 @@
;; Based on the nvim-treesitter highlighting, which is under the Apache license.
;; See https://github.com/nvim-treesitter/nvim-treesitter/blob/f8ab59861eed4a1c168505e3433462ed800f2bae/queries/kotlin/highlights.scm
;;
;; The only difference in this file is that queries using #lua-match?
;; have been removed.
;;; 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
(#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
(#eq? @variable.builtin "field"))
; `this` this keyword inside classes
(this_expression) @variable.builtin
; `super` keyword inside classes
(super_expression) @variable.builtin
(class_parameter
(simple_identifier) @property)
(class_body
(property_declaration
(variable_declaration
(simple_identifier) @property)))
; id_1.id_2.id_3: `id_2` and `id_3` are assumed as object properties
(_
(navigation_suffix
(simple_identifier) @property))
(enum_entry
(simple_identifier) @constant)
(type_identifier) @type
((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"
))
(package_header
. (identifier)) @namespace
(import_header
"import" @include)
; TODO: Seperate labeled returns/breaks/continue/super/this
; Must be implemented in the parser first
(label) @label
;;; Function definitions
(function_declaration
. (simple_identifier) @function)
(getter
("get") @function.builtin)
(setter
("set") @function.builtin)
(primary_constructor) @constructor
(secondary_constructor
("constructor") @constructor)
(constructor_invocation
(user_type
(type_identifier) @constructor))
(anonymous_initializer
("init") @constructor)
(parameter
(simple_identifier) @parameter)
(parameter_with_optional_type
(simple_identifier) @parameter)
; lambda parameters
(lambda_literal
(lambda_parameters
(variable_declaration
(simple_identifier) @parameter)))
;;; Function calls
; function()
(call_expression
. (simple_identifier) @function)
; object.function() or object.property.function()
(call_expression
(navigation_expression
(navigation_suffix
(simple_identifier) @function) . ))
(call_expression
. (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"
))
;;; Literals
[
(line_comment)
(multiline_comment)
(shebang_line)
] @comment
(real_literal) @float
[
(integer_literal)
(long_literal)
(hex_literal)
(bin_literal)
(unsigned_literal)
] @number
[
(null_literal) ; should be highlighted the same as booleans
(boolean_literal)
] @boolean
(character_literal) @character
(string_literal) @string
(character_escape_seq) @string.escape
; There are 3 ways to define a regex
; - "[abc]?".toRegex()
(call_expression
(navigation_expression
((string_literal) @string.regex)
(navigation_suffix
((simple_identifier) @_function
(#eq? @_function "toRegex")))))
; - Regex("[abc]?")
(call_expression
((simple_identifier) @_function
(#eq? @_function "Regex"))
(call_suffix
(value_arguments
(value_argument
(string_literal) @string.regex))))
; - Regex.fromLiteral("[abc]?")
(call_expression
(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.regex))))
;;; Keywords
(type_alias "typealias" @keyword)
[
(class_modifier)
(member_modifier)
(function_modifier)
(property_modifier)
(platform_modifier)
(variance_modifier)
(parameter_modifier)
(visibility_modifier)
(reification_modifier)
(inheritance_modifier)
]@keyword
[
"val"
"var"
"enum"
"class"
"object"
"interface"
; "typeof" ; NOTE: It is reserved for future use
] @keyword
("fun") @keyword.function
(jump_expression) @keyword.return
[
"if"
"else"
"when"
] @conditional
[
"for"
"do"
"while"
] @repeat
[
"try"
"catch"
"throw"
"finally"
] @exception
(annotation
"@" @attribute (use_site_target)? @attribute)
(annotation
(user_type
(type_identifier) @attribute))
(annotation
(constructor_invocation
(user_type
(type_identifier) @attribute)))
(file_annotation
"@" @attribute "file" @attribute ":" @attribute)
(file_annotation
(user_type
(type_identifier) @attribute))
(file_annotation
(constructor_invocation
(user_type
(type_identifier) @attribute)))
;;; Operators & Punctuation
[
"!"
"!="
"!=="
"="
"=="
"==="
">"
">="
"<"
"<="
"||"
"&&"
"+"
"++"
"+="
"-"
"--"
"-="
"*"
"*="
"/"
"/="
"%"
"%="
"?."
"?:"
"!!"
"is"
"in"
"as"
"as?"
".."
"..<"
"->"
] @operator
[
"(" ")"
"[" "]"
"{" "}"
] @punctuation.bracket
[
"."
","
";"
":"
"::"
] @punctuation.delimiter
; NOTE: `interpolated_identifier`s can be highlighted in any way
(string_literal
(interpolation_identifier_start) @punctuation.special
(interpolated_identifier) @none)
(string_literal
(interpolation_expression_start) @punctuation.special
(interpolated_expression) @none
(interpolation_expression_end) @punctuation.special)

View file

@ -0,0 +1,43 @@
; Classes
(class_declaration
(type_identifier) @name) @definition.class
; Objects
(object_declaration
(type_identifier) @name) @definition.class
; Functions (top-level and member)
(function_declaration
(simple_identifier) @name) @definition.function
; Properties
(property_declaration
(variable_declaration
(simple_identifier) @name)) @definition.constant
; Enum entries
(enum_entry
(simple_identifier) @name) @definition.constant
; Type aliases
(type_alias
(type_identifier) @name) @definition.type
; Companion objects (only named ones)
(companion_object
(type_identifier) @name) @definition.class
; Function calls
(call_expression
(simple_identifier) @name) @reference.call
; Method calls via navigation
(call_expression
(navigation_expression
(navigation_suffix
(simple_identifier) @name))) @reference.call
; Constructor invocations (class references)
(constructor_invocation
(user_type
(type_identifier) @name)) @reference.class

View file

@ -0,0 +1,35 @@
; Types
(type_identifier) @type
(predefined_type) @type.builtin
((identifier) @type
(#match? @type "^[A-Z]"))
(type_arguments
"<" @punctuation.bracket
">" @punctuation.bracket)
; Variables
(required_parameter (identifier) @variable.parameter)
(optional_parameter (identifier) @variable.parameter)
; Keywords
[ "abstract"
"declare"
"enum"
"export"
"implements"
"interface"
"keyof"
"namespace"
"private"
"protected"
"public"
"type"
"readonly"
"override"
"satisfies"
] @keyword

View file

@ -0,0 +1,23 @@
(function_signature
name: (identifier) @name) @definition.function
(method_signature
name: (property_identifier) @name) @definition.method
(abstract_method_signature
name: (property_identifier) @name) @definition.method
(abstract_class_declaration
name: (type_identifier) @name) @definition.class
(module
name: (identifier) @name) @definition.module
(interface_declaration
name: (type_identifier) @name) @definition.interface
(type_annotation
(type_identifier) @name) @reference.type
(new_expression
constructor: (identifier) @name) @reference.class

132
bex/queries/universal.scm Normal file
View file

@ -0,0 +1,132 @@
; UNIVERSAL DERVISH QUERY
;
; One query to extract behavioral tokens from any TreeSitter-supported language.
; TreeSitter silently ignores non-existent node types at query time,
; so we can reference nodes from all languages safely.
;
; Captures:
; @qualified-call — obj.method() → "obj.method"
; @simple-call — bare method() → "method"
; @annotation — @Annotation → "@Annotation"
; @constructor — new Type() / Type() → "Type"
;; === JAVA ===
; obj.method()
(method_invocation
object: (identifier) @object
name: (identifier) @method) @qualified-call
; method() (no explicit object)
(method_invocation
name: (identifier) @method
!object) @simple-call
; @Annotation
(annotation
name: (identifier) @name) @annotation
; @Annotation (no args)
(marker_annotation
name: (identifier) @name) @annotation
; new Type()
(object_creation_expression
type: (type_identifier) @name) @constructor
;; === KOTLIN ===
; obj.method()
(navigation_expression
(identifier) @object
(identifier) @method) @qualified-call
; method() bare call (Kotlin top-level function)
(call_expression
function: (identifier) @method) @simple-call
; @Annotation (simple)
(annotation
(user_type) @name) @annotation
; @Annotation(args)
(annotation
(constructor_invocation
(user_type) @name)) @annotation
;; === PYTHON ===
; obj.method()
(call
function: (attribute
object: (identifier) @object
attribute: (identifier) @method)) @qualified-call
; method() bare call
(call
function: (identifier) @method) @simple-call
; @decorator
(decorator
(identifier) @name) @annotation
; @decorator(args)
(decorator
(attribute
attribute: (identifier) @name)) @annotation
;; === GO ===
; obj.method()
(call_expression
function: (selector_expression
operand: (identifier) @object
field: (field_identifier) @method)) @qualified-call
; method() bare call
(call_expression
function: (identifier) @method) @simple-call
;; === RUST ===
; obj::method()
(call_expression
function: (scoped_identifier
path: (identifier) @object
name: (identifier) @method)) @qualified-call
; obj.method()
(call_expression
function: (field_expression
value: (identifier) @object
field: (field_identifier) @method)) @qualified-call
; method() bare call
(call_expression
function: (identifier) @method) @simple-call
;; === TYPE-SCRIPT / JAVASCRIPT ===
; obj.method()
(call_expression
function: (member_expression
object: (identifier) @object
property: (property_identifier) @method)) @qualified-call
; method() bare call
(call_expression
function: (identifier) @method) @simple-call
; new Type()
(new_expression
constructor: (identifier) @name) @constructor
;; === C / C++ ===
(call_expression
function: (field_expression
argument: (identifier) @object
field: (field_identifier) @method)) @qualified-call
(call_expression
function: (identifier) @method) @simple-call