aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--languages.toml2
-rw-r--r--runtime/queries/groovy/folds.scm6
-rw-r--r--runtime/queries/groovy/highlights.scm330
-rw-r--r--runtime/queries/groovy/injections.scm7
-rw-r--r--runtime/queries/groovy/locals.scm6
5 files changed, 269 insertions, 82 deletions
diff --git a/languages.toml b/languages.toml
index 4018fbe0..e4684298 100644
--- a/languages.toml
+++ b/languages.toml
@@ -3247,7 +3247,7 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "groovy"
-source = { git = "https://github.com/Decodetalkers/tree-sitter-groovy", rev = "7e023227f46fee428b16a0288eeb0f65ee2523ec" }
+source = { git = "https://github.com/murtaza64/tree-sitter-groovy", rev = "235009aad0f580211fc12014bb0846c3910130c1" }
[[language]]
name = "fidl"
diff --git a/runtime/queries/groovy/folds.scm b/runtime/queries/groovy/folds.scm
new file mode 100644
index 00000000..354861a6
--- /dev/null
+++ b/runtime/queries/groovy/folds.scm
@@ -0,0 +1,6 @@
+[
+ (argument_list)
+ (closure)
+ (list)
+ (map)
+] @fold
diff --git a/runtime/queries/groovy/highlights.scm b/runtime/queries/groovy/highlights.scm
index 4e94ccd3..11fb8e46 100644
--- a/runtime/queries/groovy/highlights.scm
+++ b/runtime/queries/groovy/highlights.scm
@@ -1,96 +1,268 @@
-(unit
- (identifier) @variable)
+[
+ "!instanceof"
+ "assert"
+ "class"
+ "extends"
+ "instanceof"
+ "package"
+] @keyword
-(string
- (identifier) @variable)
+[
+ "!in"
+ "as"
+ "in"
+] @keyword.operator
+
+[
+ "case"
+ "default"
+ "else"
+ "if"
+ "switch"
+] @keyword.control.conditional
-(escape_sequence) @constant.character.escape
+[
+ "catch"
+ "finally"
+ "try"
+] @keyword.control.exception
-(block
- (unit
- (identifier) @namespace))
+"def" @keyword.function
-(func
- (identifier) @function)
+"import" @keyword.control.import
-(number) @constant.numeric
+[
+ "for"
+ "while"
+ (break)
+ (continue)
+] @keyword.control.repeat
-((identifier) @constant.builtin.boolean
- (#any-of? @constant.builtin.boolean "true" "false"))
+"return" @keyword.control.return
-((identifier) @constant
- (#match? @constant "^[A-Z][A-Z\\d_]*$"))
-
-((identifier) @constant.builtin
- (#eq? @constant.builtin "null"))
-
-((identifier) @type
- (#any-of? @type
- "String"
- "Map"
- "Object"
- "Boolean"
- "Integer"
- "List"))
-
-((identifier) @function.builtin
- (#any-of? @function.builtin
- "void"
- "id"
- "version"
- "apply"
- "implementation"
- "testImplementation"
- "androidTestImplementation"
- "debugImplementation"))
-
-((identifier) @keyword.storage.modifier
- (#eq? @keyword.storage.modifier "static"))
-
-((identifier) @keyword.storage.type
- (#any-of? @keyword.storage.type "class" "def" "interface"))
-
-((identifier) @keyword
- (#any-of? @keyword
- "assert"
- "new"
- "extends"
- "implements"
- "instanceof"))
-
-((identifier) @keyword.control.import
- (#any-of? @keyword.control.import "import" "package"))
-
-((identifier) @keyword.storage.modifier
- (#any-of? @keyword.storage.modifier
- "abstract"
- "protected"
- "private"
- "public"))
-
-((identifier) @keyword.control.exception
- (#any-of? @keyword.control.exception
- "throw"
- "finally"
- "try"
- "catch"))
+[
+ "true"
+ "false"
+] @constant.builtin.boolean
+
+(null) @constant.builtin
+
+"this" @variable.builtin
+
+[
+ "int"
+ "char"
+ "short"
+ "long"
+ "boolean"
+ "float"
+ "double"
+ "void"
+] @type.builtin
+
+[
+ "final"
+ "private"
+ "protected"
+ "public"
+ "static"
+ "synchronized"
+] @keyword.storage.modifier
+
+(comment) @comment
+
+(shebang) @keyword.directive
(string) @string
+(string
+ (escape_sequence) @constant.character.escape)
+
+(string
+ (interpolation
+ "$" @punctuation.special))
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+] @punctuation.bracket
+
[
- (line_comment)
- (block_comment)
-] @comment
+ ":"
+ ","
+ "."
+] @punctuation.delimiter
+
+(number_literal) @constant.numeric
-((block_comment) @comment.block.documentation
- (#match? @comment.block.documentation "^/[*][*][^*](?s:.)*[*]/$"))
+(identifier) @variable
-((line_comment) @comment.block.documentation
- (#match? @comment.block.documentation "^///[^/]*.*$"))
+((identifier) @constant
+ (#match? @constant "^[A-Z][A-Z_]+"))
[
- (operators)
- (leading_key)
+ "%"
+ "*"
+ "/"
+ "+"
+ "-"
+ "<<"
+ ">>"
+ ">>>"
+ ".."
+ "..<"
+ "<..<"
+ "<.."
+ "<"
+ "<="
+ ">"
+ ">="
+ "=="
+ "!="
+ "<=>"
+ "==="
+ "!=="
+ "=~"
+ "==~"
+ "&"
+ "^"
+ "|"
+ "&&"
+ "||"
+ "?:"
+ "+"
+ "*"
+ ".&"
+ ".@"
+ "?."
+ "*."
+ "*"
+ "*:"
+ "++"
+ "--"
+ "!"
] @operator
-["(" ")" "[" "]" "{" "}"] @punctuation.bracket
+(string
+ "/" @string)
+
+(ternary_op
+ ([
+ "?"
+ ":"
+ ]) @keyword.operator)
+
+(map
+ (map_item
+ key: (identifier) @variable.parameter))
+
+(parameter
+ type: (identifier) @type
+ name: (identifier) @variable.parameter)
+
+(generic_param
+ name: (identifier) @variable.parameter)
+
+(declaration
+ type: (identifier) @type)
+
+(function_definition
+ type: (identifier) @type)
+
+(function_declaration
+ type: (identifier) @type)
+
+(class_definition
+ name: (identifier) @type)
+
+(class_definition
+ superclass: (identifier) @type)
+
+(generic_param
+ superclass: (identifier) @type)
+
+(type_with_generics
+ (identifier) @type)
+
+(type_with_generics
+ (generics
+ (identifier) @type))
+
+(generics
+ [
+ "<"
+ ">"
+ ] @punctuation.bracket)
+
+(generic_parameters
+ [
+ "<"
+ ">"
+ ] @punctuation.bracket)
+
+; TODO: Class literals with PascalCase
+(declaration
+ "=" @operator)
+
+(assignment
+ "=" @operator)
+
+(function_call
+ function: (identifier) @function)
+
+(function_call
+ function:
+ (dotted_identifier
+ (identifier) @function .))
+
+(function_call
+ (argument_list
+ (map_item
+ key: (identifier) @variable.parameter)))
+
+(juxt_function_call
+ function: (identifier) @function)
+
+(juxt_function_call
+ function:
+ (dotted_identifier
+ (identifier) @function .))
+
+(juxt_function_call
+ (argument_list
+ (map_item
+ key: (identifier) @variable.parameter)))
+
+(function_definition
+ function: (identifier) @function)
+
+(function_declaration
+ function: (identifier) @function)
+
+(annotation) @function.macro
+
+(annotation
+ (identifier) @function.macro)
+
+"@interface" @function.macro
+
+(groovy_doc) @comment.block.documentation
+
+(groovy_doc
+ [
+ (groovy_doc_param)
+ (groovy_doc_throws)
+ (groovy_doc_tag)
+ ] @string.special)
+
+(groovy_doc
+ (groovy_doc_param
+ (identifier) @variable.parameter))
+
+(groovy_doc
+ (groovy_doc_throws
+ (identifier) @type))
diff --git a/runtime/queries/groovy/injections.scm b/runtime/queries/groovy/injections.scm
index e4509a5f..1c04c65f 100644
--- a/runtime/queries/groovy/injections.scm
+++ b/runtime/queries/groovy/injections.scm
@@ -1,2 +1,5 @@
-([(line_comment) (block_comment)] @injection.content
- (#set! injection.language "comment"))
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+((groovy_doc) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/groovy/locals.scm b/runtime/queries/groovy/locals.scm
new file mode 100644
index 00000000..380c4ad6
--- /dev/null
+++ b/runtime/queries/groovy/locals.scm
@@ -0,0 +1,6 @@
+(function_definition) @local.scope
+
+(parameter
+ name: (identifier) @local.definition)
+
+(identifier) @local.reference