New kotlin parser

This commit is contained in:
Joakker 2021-08-16 22:00:07 -04:00 committed by Stephan Seitz
parent 53797ad88f
commit 16a4da493c
3 changed files with 178 additions and 179 deletions

View file

@ -117,7 +117,7 @@
"revision": "12ea597262125fc22fd2e91aa953ac69b19c26ca"
},
"kotlin": {
"revision": "48bfb38abd93f8d617877d7bb7f92a6bb1166285"
"revision": "0369bdc8a7ed42830ff718af1173129d2028769a"
},
"latex": {
"revision": "2c0d03a36ee979bc697f6a9dd119174cf0ef15e0"

View file

@ -205,10 +205,10 @@ list.java = {
list.kotlin = {
install_info = {
url = "https://github.com/tormodatt/tree-sitter-kotlin",
url = "https://github.com/Joakker/tree-sitter-kotlin",
files = { "src/parser.c" },
},
maintainers = { "@tormodatt" },
maintainers = { "@Joakker" },
}
list.html = {

View file

@ -1,191 +1,190 @@
;;; Kotlin
(simple_identifier) @variable
; Reset some
(navigation_suffix (simple_identifier) @none)
(import_header (identifier (simple_identifier) @none))
(package_header (identifier (simple_identifier) @none))
;; Strings
(line_string_literal) @string
(multi_line_string_literal) @string
; Interpolated
(interpolated_identifier) @variable
(interpolated_expression) @none
;; Suffixes
(navigation_expression (navigation_suffix (simple_identifier) @property ))
; Reset some
(assignment (navigation_expression (navigation_suffix (simple_identifier) @none )))
(call_expression (navigation_expression (navigation_suffix (simple_identifier) @none )))
(navigation_expression (navigation_expression (navigation_suffix (simple_identifier) @none )))
;; Variables/fields
; attribute in data classes etc.
(class_parameter (simple_identifier) @field)
; variable in normal classes
(property_declaration (variable_declaration (simple_identifier) @variable))
; accessed field in blocks. `logger` in `logger.info("")`
(statements (call_expression (navigation_expression (simple_identifier) @variable)))
(indexing_expression (call_expression (navigation_expression (simple_identifier) @variable)))
; `classProp` in `classProp.lastIndex`
(statements (navigation_expression (simple_identifier) @variable))
; `variable` in `variable = car.doors`
(directly_assignable_expression (simple_identifier) @variable)
;; Constants
; Assume all-caps names are constants
((simple_identifier) @constant
(#match? @constant "^[A-Z][A-Z_0-9]+$"))
((interpolated_identifier) @constant
(#vim-match? @constant "^[A-Z][A-Z_0-9]+$"))
(lambda_parameters) @parameter
;; Builtin functions
((simple_identifier) @function.macro
(#vim-match? @function.macro "^(commonPrefixWith|commonSuffixWith|endsWith|findAnyOf|findLastAnyOf|hasSurrogatePairAt|ifBlank|ifEmpty|indexOf|indexOfAny|isEmpty|isNotBlank|isNotEmpty|isNullOrBlank|isNullOrEmpty|lastIndexOf|lastIndexOfAny|lineSequence|lines|orEmpty|padEnd|padStart|removePrefix|removeRange|removeSuffix|removeSurrounding|replace|replaceAfter|replaceAfterLast|replaceBefore|replaceBeforeLast|replaceFirst|replaceRange|split|splitToSequence|startsWith|subSequence|substring|substringAfter|substringAfterLast|substringBefore|substringBeforeLast|trim|trimEnd|trimStart|containsKey|containsValue|filter|filterKeys|filterNot|filterNotTo|filterTo|filterValues|getOrElse|getOrPut|getValue|ifEmpty|isNotEmpty|isNullOrEmpty|mapKeys|mapKeysTo|mapValues|mapValuesTo|orEmpty|putAll|remove|toMap|toMutableMap|toPair|also|apply|let|run|takeIf|takeUnless|prependIndent|replaceIndent|replaceIndentByMargin|trimIndent|trimMargin|all|any|asIterable|asSequence|associate|associateBy|associateByTo|associateTo|associateWith|associateWithTo|chunked|chunkedSequence|count|drop|dropLast|dropLastWhile|dropWhile|elementAtOrElse|elementAtOrNull|filter|filterIndexed|filterIndexedTo|filterNot|filterNotTo|filterTo|find|findLast|first|firstOrNull|flatMap|flatMapIndexed|flatMapIndexedTo|flatMapTo|fold|foldIndexed|foldRight|foldRightIndexed|forEach|forEachIndexed|getOrElse|getOrNull|groupBy|groupByTo|groupingBy|indexOfFirst|indexOfLast|last|lastOrNull|map|mapIndexed|mapIndexedNotNull|mapIndexedNotNullTo|mapIndexedTo|mapNotNull|mapNotNullTo|mapTo|max|maxBy|maxByOrNull|maxOf|maxOfOrNull|maxOfWith|maxOfWithOrNull|maxOrNull|maxWith|maxWithOrNull|min|minBy|minByOrNull|minOf|minOfOrNull|minOfWith|minOfWithOrNull|minOrNull|minWith|minWithOrNull|none|onEach|onEachIndexed|partition|random|randomOrNull|reduce|reduceIndexed|reduceIndexedOrNull|reduceOrNull|reduceRight|reduceRightIndexed|reduceRightIndexedOrNull|reduceRightOrNull|reversed|runningFold|runningFoldIndexed|runningReduce|runningReduceIndexed|scan|scanIndexed|scanReduce|scanReduceIndexed|single|singleOrNull|slice|sumBy|sumByDouble|sumOf|take|takeLast|takeLastWhile|takeWhile|toCollection|toHashSet|toList|toMutableList|toSet|windowed|windowedSequence|withIndex|zip|zipWithNext)$"))
(call_expression
(simple_identifier) @function)
((simple_identifier) @function.builtin
(#vim-match? @function.builtin "^(print|println|buildMap|emptyMap|hashMapOf|linkedMapOf|mapOf|mutableMapOf|buildSet|emptySet|hashSetOf|linkedSetOf|mutableSetOf|setOf|setOfNotNull|TODO|repeat|run|with)$"))
;; Numbers
(integer_literal) @number
;; Booleans
(boolean_literal) @boolean
;; Types
(type_identifier) @type
;; Annotations
(annotation (single_annotation) @attribute)
(single_annotation (user_type (type_identifier) @attribute))
(single_annotation (constructor_invocation (user_type (type_identifier) @attribute)))
;; it
(indexing_expression (simple_identifier) @variable.builtin
(#vim-match? @variable.builtin "^it$"))
;; Operators
[
"="
"-"
"->"
"+"
"++"
"--"
"*"
] @operator
;; Keyword operators
[
"in"
] @keyword.operator
((simple_identifier) @keyword.operator
(#vim-match? @keyword.operator "^to$"))
;; Keywords
[
"this"
"override"
"enum"
"as"
"class"
"object"
"data"
"val"
"init"
"private"
"var"
"break"
"by"
"companion"
"constructor"
"throw"
] @keyword
"fun" @keyword.function
"return" @keyword.return
(null_literal) @keyword
; const etc.
(property_modifier) @keyword
;; Conditionals
[
"if"
"is"
"else"
"when"
] @conditional
;; Loops
[
"for"
"while"
] @repeat
;; Includes
"import" @include
"package" @include
;; Punctuation
(comment)
(shebang)
] @comment
[
"::"
";"
"."
","
":"
","
"."
] @punctuation.delimiter
[
"$"
"${"
"}"
] @none
[
"["
"]"
"{"
"}"
"("
")"
"("
")"
"{"
"}"
] @punctuation.bracket
[
"$"
] @punctuation.special
"class"
"object"
"fun"
"var"
"val"
"try"
"catch"
"finally"
] @keyword
;; Comments
(comment) @comment
"import" @include
; Functions
(function_declaration (simple_identifier) @function)
"return" @keyword.return
(return_expr
"return@" @keyword.return
label: (identifier) @label)
(break_expr
"break@" @keyword
label: (identifier) @label)
(label
name: (identifier) @label) @constant
[
"for"
"do"
"while"
] @repeat
[
"||"
"&&"
"!="
"!=="
"=="
"==="
"<"
">"
"<="
">="
".."
"+"
"-"
"%"
"*"
"/"
] @operator
[
"as"
"as?"
"in"
] @keyword.operator
(class_decl
name: (identifier) @type)
(class_decl
super: (_) @type)
(object_decl
name: (identifier) @type)
(class_param
name: (identifier) @parameter
type: (_) @type)
(type_constraints
"where" @keyword
(type_constraint
type: (identifier) @type
super: (_) @type))
(property
name: (identifier) @property)
(property
type: (_) @type)
(enum_entry
name: (identifier) @constant)
(func_decl
name: (identifier) @function)
(func_decl
return: (_) @type)
(param_decl
name: (identifier) @parameter
type: (_) @type)
(type_param
name: (identifier) @type)
(call
function: (identifier) @function)
(call
function: (selector
field: (identifier) @function))
(getter
"get" @function.builtin)
(setter
"set" @function.builtin)
((identifier) @function.builtin
(#any-of? @function.builtin
"arrayOf"
"arrayOfNulls"
"assert"
"booleanArrayOf"
"byteArrayOf"
"Char"
"charArrayOf"
"check"
"checkNotNull"
"doubleArrayOf"
"emptyArray"
"enumValueOf"
"enumValues"
"error"
"floatArrayOf"
"intArrayOf"
"lazy"
"lazyOf"
"longArrayOf"
"repeat"
"require"
"requireNotNull"
"run"
"runCatching"
"shortArrayOf"
"suspend"
"synchronized"
"TODO"
"ubyteArrayOf"
"UintArray"
"uintArrayOf"
"ULongArray"
"ulongArrayOf"
"UShortArray"
"ushortArrayOf"
"with"
"print"
"println"
"readLine"))
((identifier) @constant.builtin
(#eq? @constant.builtin "it"))
(lambda
args: (var_decl
name: (identifier) @parameter))
(lambda
args: (var_decl
type: (_) @type ))
(binary_expr
operator: (identifier) @keyword.operator)
(ERROR) @error
; TODO parameter
(integer) @number
(float) @float
(string) @string
"null" @constant
[
"true"
"false"
] @boolean