aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorBenedikt Ritter2024-03-17 23:01:11 +0000
committerGitHub2024-03-17 23:01:11 +0000
commitf7913c1a3bc7609c9c1d6eaa0fbd0e3dda18be63 (patch)
tree52a1021c5fd19c4f397819e009b7782abdccd806 /runtime
parent8457652da139320fba7128e02fbd19fcf09ea235 (diff)
Extend groovy support (#9677)
* Extend groovy support Use more complete parser introduced in nvm-treesitter in https://github.com/nvim-treesitter/nvim-treesitter/commit/d4dac523d2546afc266eb9b5a7986690b5319c41 * Update runtime/queries/groovy/locals.scm Co-authored-by: Michael Davis <mcarsondavis@gmail.com> * Drop indent.scm for groovy It was copied from the tree-sitter repository but is not compatiblw with the way indent queries are implemented in Helix. * Adapt groovy highlights to helix syntax * Update documentation --------- Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
Diffstat (limited to 'runtime')
-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
4 files changed, 268 insertions, 81 deletions
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