Skip to content

Commit

Permalink
Extend groovy support (helix-editor#9677)
Browse files Browse the repository at this point in the history
* Extend groovy support

Use more complete parser introduced in nvm-treesitter in
nvim-treesitter/nvim-treesitter@d4dac52

* 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>
  • Loading branch information
2 people authored and postsolar committed Apr 4, 2024
1 parent 6530cf0 commit 1ac2430
Show file tree
Hide file tree
Showing 5 changed files with 269 additions and 82 deletions.
2 changes: 1 addition & 1 deletion languages.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
6 changes: 6 additions & 0 deletions runtime/queries/groovy/folds.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
(argument_list)
(closure)
(list)
(map)
] @fold
330 changes: 251 additions & 79 deletions runtime/queries/groovy/highlights.scm
Original file line number Diff line number Diff line change
@@ -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))
7 changes: 5 additions & 2 deletions runtime/queries/groovy/injections.scm
Original file line number Diff line number Diff line change
@@ -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"))
6 changes: 6 additions & 0 deletions runtime/queries/groovy/locals.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(function_definition) @local.scope

(parameter
name: (identifier) @local.definition)

(identifier) @local.reference

0 comments on commit 1ac2430

Please sign in to comment.