diff --git a/Groovy/Fold.tmPreferences b/Groovy/Fold.tmPreferences
deleted file mode 100644
index b14a351173..0000000000
--- a/Groovy/Fold.tmPreferences
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
- scope
- source.groovy
- settings
-
- foldScopes
-
-
- begin
- punctuation.definition.parameters.begin
- end
- punctuation.definition.parameters.end
-
-
- begin
- punctuation.definition.method-parameters.begin
- end
- punctuation.definition.method-parameters.end
-
-
-
-
-
diff --git a/Groovy/Groovy.sublime-syntax b/Groovy/Groovy.sublime-syntax
deleted file mode 100644
index 975d3089d9..0000000000
--- a/Groovy/Groovy.sublime-syntax
+++ /dev/null
@@ -1,681 +0,0 @@
-%YAML 1.2
----
-# http://www.sublimetext.com/docs/3/syntax.html
-name: Groovy
-scope: source.groovy
-
-file_extensions:
- - groovy
- - gvy
- - gradle
-
-hidden_file_extensions:
- - Jenkinsfile
-
-first_line_match: |-
- (?xi:
- ^ \#! .* \bgroovy\b # shebang
- | ^ \s* // .*? -\*- .*? \bgroovy\b .*? -\*- # editorconfig
- )
-
-variables:
- unicode_letter: |-
- (?:(?xi)
- # Valid unicode letters according to:
- # http://groovy-lang.org/syntax.html#_normal_identifiers
- # Literal Unicode Escaped Unicode
- [\x{00C0}-\x{00D6}] | \\u00C[0-9A-F] | \\u00D[0-6]
- | [\x{00D8}-\x{00F6}] | \\u00D[89A-F] | \\u00E[0-9A-F] | \\u00F[0-6]
- | [\x{00F8}-\x{00FF}] | \\u00F[89A-F]
- | [\x{0100}-\x{FFFE}] | \\u0[1-9A-F][0-9A-F]{2} | \\u(?!FFFF)[1-9A-F][0-9A-F]{3}
- )
-
- # dollars aren't allowed in the single dollar interpolated identifiers
- # (dotted expressions), but they are supposed to be valid characters
- # in identifiers in other contexts
- # e.g. `"$$a"` is invalid, but `"${$a}"` is fine.
- single_dollar_interpolation_identifier: (?:{{unicode_letter}}|[a-zA-Z_])(?:{{unicode_letter}}|[a-zA-Z0-9_])*
- primitive: (?:boolean|byte|char|short|int|float|long|double)\b
-
-contexts:
- main:
- - match: ^(#!).+$\n
- scope: comment.line.hashbang.groovy
- captures:
- 1: punctuation.definition.comment.groovy
- - match: '^\s*(package)\s+([^ ;]+)'
- scope: meta.package.groovy
- captures:
- 1: keyword.other.package.groovy
- 2: storage.type.package.groovy
- - match: '^\s*(import)\s+([^ ;$]+);?'
- scope: meta.import.groovy
- captures:
- 1: keyword.other.import.groovy
- 2: storage.type.import.groovy
- - include: groovy
- class-object:
- - match: |-
- (?x)
- \b(
- (?:[a-z]\w*\.)* # Optional package specification
- [A-Z]\w+\b # Class name
- (?:<(?:[\w, ]*)>)? # Optional Generics
- (?:\[\s*\])* # Optional brackets (array)
- )\b
- scope: storage.type.class.groovy
- classes:
- - match: |-
- (?x)^\s*
- (?:(?:\b(?:(public|private|protected)|(static)|(final)|(native|synchronized|abstract|threadsafe|transient))\b\s*)*) # modifier
- (class)\s+
- (\w+)\s* # identifier
- captures:
- 1: storage.modifier.access-control.groovy
- 2: storage.modifier.static.groovy
- 3: storage.modifier.final.groovy
- 4: storage.modifier.other.groovy
- 5: storage.type.class.groovy
- 6: entity.name.type.class.groovy
- push:
- - meta_scope: meta.definition.class.groovy
- - match: $|(?=\})
- pop: true
- - match: '(extends)\s+([a-zA-Z0-9_\.]+(?:<(?:[a-zA-Z0-9_, ])+>)?)\s*'
- scope: meta.definition.class.inherited.classes.groovy
- captures:
- 1: storage.modifier.extends.groovy
- 2: entity.other.inherited-class.groovy
- - match: (implements)\s
- captures:
- 1: storage.modifier.implements.groovy
- push:
- - meta_scope: meta.definition.class.implemented.interfaces.groovy
- - match: '(?=\s*extends|$|\{)'
- pop: true
- - match: '((?:[a-z]\w*.)*[A-Z]\w*)\s*(?:(,)|$|\{)'
- captures:
- 1: entity.other.inherited-class.interface.groovy
- 2: punctuation.definition.implemented.interfaces.separator.groovy
- comment-block:
- - match: /\*
- scope: punctuation.definition.comment.groovy
- push: inside-comment-block
- inside-comment-block:
- - meta_scope: comment.block.groovy
- - match: \*/
- scope: punctuation.definition.comment.groovy
- pop: true
- comments:
- - match: /\*\*/
- scope: comment.block.empty.groovy punctuation.definition.comment.groovy
- - include: scope:text.html.javadoc
- - include: comment-block
- - match: //
- scope: punctuation.definition.comment.groovy
- push: inside-line-comment
- - include: merge-conflict-markers
- inside-line-comment:
- - meta_scope: comment.line.double-slash.groovy
- - match: $\n?
- pop: true
- merge-conflict-markers:
- # see also: Diff.sublime-syntax#conflict-markers
- - match: ^(<{7})(?:\s+(\S.*?))?$\n?
- scope: meta.block.conflict.begin.diff
- captures:
- 1: punctuation.section.block.begin.diff
- 2: entity.name.section.diff
- - match: ^(>{7})(?:\s+(\S.*?))?$\n?
- scope: meta.block.conflict.end.diff
- captures:
- 1: punctuation.section.block.end.diff
- 2: entity.name.section.diff
- - match: ^(\|{7}|={7})(?:\s+(\S.*?))?$\n?
- scope: meta.block.conflict.separator.diff
- captures:
- 1: punctuation.section.block.diff
- 2: entity.name.section.diff
- constants:
- - match: \b([A-Z][A-Z0-9_]+)\b(?!\s*:)
- scope: constant.other.groovy
- - match: \bfalse\b
- scope: constant.language.boolean.false.groovy
- - match: \btrue\b
- scope: constant.language.boolean.true.groovy
- - match: \bnull\b
- scope: constant.language.null.groovy
- groovy:
- - include: classes
- - include: methods
- - include: groovy-code
- groovy-code:
- - include: map-keys
- - include: groovy-code-minus-map-keys
- - include: block
- groovy-code-minus-map-keys:
- - include: comments
- - include: support-functions
- - include: keyword-language
- - include: values
- - include: keyword-operator
- - include: storage-types
- - include: storage-modifiers
- keyword:
- - include: keyword-operator
- - include: keyword-language
- keyword-language:
- - match: \bthrow\b
- scope: keyword.control.flow.throw.groovy
- - match: \btry\b
- scope: keyword.control.exception.try.groovy
- - match: \bfinally\b
- scope: keyword.control.exception.finally.groovy
- - match: \bcatch\b
- scope: keyword.control.exception.catch.groovy
- - match: \bdefault\b
- scope: keyword.control.conditional.groovy
- - match: \bfor\b
- scope: keyword.control.loop.for.groovy
- - match: \bwhile\b
- scope: keyword.control.loop.while.groovy
- - match: \bdo\b
- scope: keyword.control.loop.do-while.groovy
- - match: \breturn\b
- scope: keyword.control.flow.return.groovy
- - match: \bbreak\b
- scope: keyword.control.flow.break.groovy
- - match: \bcontinue\b
- scope: keyword.control.flow.continue.groovy
- - match: \bif\b
- scope: keyword.control.conditional.if.groovy
- - match: \belse\b
- scope: keyword.control.conditional.else.groovy
- - match: \bswitch\b
- scope: keyword.control.conditional.switch.groovy
- - match: \bcase\b
- scope: keyword.control.conditional.case.groovy
- push:
- - meta_scope: meta.case.groovy
- - match: ":"
- scope: punctuation.definition.case-terminator.groovy
- pop: true
- - include: groovy-code-minus-map-keys
- - match: \bnew\b
- scope: keyword.operator.new.groovy
- - match: \bassert\b
- scope: keyword.control.exception.assert.groovy
- push:
- - meta_scope: meta.declaration.assertion.groovy
- - match: $|(?=\})
- pop: true
- - match: ":"
- scope: keyword.operator.assert.expression-separator.groovy
- - include: groovy-code-minus-map-keys
- - match: \bthrows\b
- scope: keyword.control.exception.groovy
- keyword-operator:
- - match: \bas\b
- scope: keyword.operator.as.groovy
- - match: \bis\b
- scope: keyword.operator.reflection.groovy
- - match: '\?\:'
- scope: keyword.operator.elvis.groovy
- - match: \.\.
- scope: keyword.operator.range.groovy
- - match: \->
- scope: keyword.operator.arrow.groovy
- - match: "<<"
- scope: keyword.operator.bitwise.groovy
- - match: (?<=\S)\.(?=\S)
- scope: punctuation.accessor.dot.groovy
- - match: (?<=\S)\?\.(?=\S)
- scope: punctuation.accessor.null-coalescing.groovy
- - match: \?
- scope: keyword.operator.ternary.groovy
- push:
- - meta_scope: meta.evaluation.ternary.groovy
- - match: $|(?=\})
- pop: true
- - match: ":"
- scope: keyword.operator.ternary.expression-separator.groovy
- - include: groovy-code-minus-map-keys
- - match: "==~"
- scope: keyword.operator.match.groovy
- - match: "=~"
- scope: keyword.operator.find.groovy
- - match: \b(instanceof)\b
- scope: keyword.operator.instanceof.groovy
- - match: (===|==|!=|<=|>=|<=>|<>|<|>|<<)
- scope: keyword.operator.comparison.groovy
- - match: "="
- scope: keyword.operator.assignment.groovy
- - match: (\-\-|\+\+)
- scope: keyword.operator.increment-decrement.groovy
- - match: (\-|\+|\*|\/|%)
- scope: keyword.operator.arithmetic.groovy
- - match: (!|&&|\|\|)
- scope: keyword.operator.logical.groovy
- map-keys:
- - match: (\w+)\s*(:)
- captures:
- 1: constant.other.key.groovy
- 2: punctuation.definition.separator.key-value.groovy
- method-call:
- - match: (\w+)(\()
- captures:
- 1: meta.function-call.identifier.groovy variable.function.groovy
- 2: meta.function-call.arguments.groovy punctuation.section.arguments.begin.groovy
- push:
- - meta_content_scope: meta.function-call.arguments.groovy
- - match: \)
- scope: meta.function-call.groovy punctuation.section.arguments.end.groovy
- pop: true
- - match: ","
- scope: punctuation.definition.separator.parameter.groovy
- - include: groovy-code
- method-declaration-remainder:
- - match: \(
- scope: punctuation.definition.parameters.begin.groovy
- push:
- - meta_content_scope: meta.definition.method.parameters.groovy
- - match: \)
- scope: punctuation.definition.parameters.end.groovy
- pop: true
- - match: |-
- (?x)\s*
- (
- (?:{{primitive}}|(?:\w+\.)*[A-Z]\w*\b(?:<(?:[\w, ]*)>)?(?:\[\s*\])*)
- )?
- \s*
- ([a-z_][A-Za-z0-9_]*) # variable
- scope: meta.definition.method.parameter.groovy
- captures:
- 1: storage.type.parameter.groovy
- 2: variable.parameter.groovy
- - match: '({{primitive}}|(?:\w+\.)*[A-Z]\w*\b(?:<(?:[\w, ]*)>)?(?:\[\s*\])*)'
- scope: meta.definition.method.parameter.groovy
- captures:
- 1: storage.type.parameter.groovy
- - match: ","
- scope: punctuation.definition.parameters.separator.groovy
- - include: comment-block
- - match: (?<=\))\s*(throws)\s
- captures:
- 1: storage.modifier.throws.groovy
- push:
- - meta_scope: meta.definition.method.throwables.groovy
- - match: '(?=$|\{)'
- captures:
- 1: storage.modifier.throws.groovy
- pop: true
- - match: '((?:[a-z]\w*.)*[A-Z]\w*)\s*(?:(,)|$|\{)'
- captures:
- 1: storage.type.throwable.groovy
- 2: punctuation.definition.throwables.separator.groovy
- methods:
- - match: |-
- (?x)^\s*
- (?: # zero or more modifiers
- (?:
- (public|private|protected)|(final)|(native|synchronized|abstract|threadsafe|transient)
- )
- \s+
- )?
- \s*
- ([A-Z](?:[a-zA-Z0-9_])+) # constructor/class name
- \s*
- (?=\()
- captures:
- 1: storage.modifier.access-control.groovy
- 2: storage.modifier.final.groovy
- 3: storage.modifier.other.groovy
- 4: entity.name.function.constructor.groovy
- 5: punctuation.definition.parameters.begin.groovy
- push:
- - meta_scope: meta.definition.constructor.groovy
- - match: '(?={)|$\n?'
- pop: true
- - include: method-declaration-remainder
- - match: |-
- (?x)^\s*
- (?:
- (?: # or modifier and optional type
- (?:(?:\b(public|private|protected)|(static)|(final)|(native|synchronized|abstract|threadsafe|transient))\b\s+)+\s* # modifier
- (?:\b
- (void\b)
- |
- ({{primitive}}) # primitive
- |
- ( # or class type
- (?:\w+\.)*[A-Z]\w+\b # Class name
- (?:<(?:[\w, ]*)>)? # optional Generic type
- (?:\[\s*\])* # zero or more square brackets (array)
- )
- )?
- )
- |
- (?:\b # or type by itself
- (def\b)
- |
- (void\b)
- |
- ({{primitive}}) # primitive
- |
- ( # or class type
- (?:\w+\.)*[A-Z]\w+\b # Class name
- (?:<(?:[\w, ]*)>)? # optional generics info
- (?:\[\s*\])* # zero or more square brackets (array)
- )
- )
- )
- \s*
- (\w+) # method name
- \s*
- (?=\() # opening parens
- captures:
- 1: storage.modifier.access-control.groovy
- 2: storage.modifier.static.groovy
- 3: storage.modifier.final.groovy
- 4: storage.modifier.other.groovy
- 5: storage.type.return-type.void.groovy
- 6: storage.type.return-type.primitive.groovy
- 7: storage.type.return-type.class.groovy
- 8: keyword.declaration.function.groovy
- 9: storage.type.return-type.void.groovy
- 10: storage.type.return-type.primitive.groovy
- 11: storage.type.return-type.class.groovy
- 12: entity.name.function.groovy
- push:
- - meta_scope: meta.definition.method.groovy
- - match: '(?={)|$\n?'
- pop: true
- - include: method-declaration-remainder
- block:
- - match: '\{'
- scope: punctuation.section.block.begin.groovy
- push:
- - meta_scope: meta.block.groovy
- - match: '\}'
- scope: punctuation.section.block.end.groovy
- pop: true
- - include: groovy-code
- numbers:
- - match: '((0(x|X)[0-9a-fA-F]*)|(\+|-)?\b(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b'
- scope: constant.numeric.groovy
- regexp:
- - match: "/(?=[^/]+/)"
- scope: punctuation.definition.string.regexp.begin.groovy
- push: inside-regexp
- inside-regexp:
- - meta_scope: string.regexp.groovy
- - match: /
- scope: punctuation.definition.string.regexp.end.groovy
- pop: true
- # backslashes only escape forward slashes and newlines (and unicode)
- - match: \\/
- scope: constant.character.escape.groovy
- - include: escaped-end-of-line
- - include: unicode-escape-sequence
- - include: single-dollar-string-interpolation
- - match: '\$\{'
- scope: punctuation.section.interpolation.begin.groovy
- push:
- - meta_scope: source.groovy.embedded.source
- - match: '\}'
- scope: punctuation.section.interpolation.end.groovy
- pop: true
- - include: escaped-end-of-line
- # newlines are invalid inside the interpolation
- # but outside of a nested multiline string
- - match: '\n'
- scope: invalid.illegal.newline.groovy
- pop: true
- - include: groovy-code
- storage-modifiers:
- - match: \b(private|protected|public)\b
- scope: storage.modifier.access-control.groovy
- - match: \b(static)\b
- scope: storage.modifier.static.groovy
- - match: \b(final)\b
- scope: storage.modifier.final.groovy
- - match: \b(native|synchronized|abstract|threadsafe|transient)\b
- scope: storage.modifier.other.groovy
- storage-types:
- - match: '(@[^ (]+)(\()'
- captures:
- 1: storage.type.annotation.groovy
- 2: punctuation.definition.annotation-arguments.begin.groovy
- push: inside-annotation
- - match: '@\S+'
- scope: storage.type.annotation.groovy
- - match: \b(def)\b
- scope: storage.type.def.groovy
- - match: '\b({{primitive}})(?:\[\s*\])*\b'
- scope: storage.type.primitive.groovy
- inside-annotation:
- - meta_scope: meta.declaration.annotation.groovy
- - match: (\))
- captures:
- 1: punctuation.definition.annotation-arguments.end.groovy
- pop: true
- - match: (\w*)\s*(=)
- captures:
- 1: constant.other.key.groovy
- 2: keyword.operator.assignment.groovy
- - include: values
- - match: ","
- scope: punctuation.definition.separator.groovy
- single-dollar-string-interpolation:
- - match: \${{single_dollar_interpolation_identifier}}
- scope: variable.other.interpolated.groovy
- push:
- - match: \.(?={{single_dollar_interpolation_identifier}})
- scope: punctuation.accessor.dot.groovy
- - match: '{{single_dollar_interpolation_identifier}}'
- scope: variable.other.interpolated.groovy
- - match: \b
- pop: true
- unicode-escape-sequence:
- - match: \\u\h{4}
- scope: constant.character.escape.groovy
- - match: \\u(?!\h{4}).{4}
- scope: invalid.illegal.escape.groovy
- escaped-end-of-line:
- - match: \\\n
- scope: constant.character.escape.groovy
- push:
- - match: ^
- pop: true
- string-escape-sequences:
- - include: unicode-escape-sequence
- - include: escaped-end-of-line
- - match: |-
- \\[nrtbf\$\\'"]
- scope: constant.character.escape.groovy
- - match: \\.
- scope: invalid.illegal.escape.groovy
- string-quoted-double:
- - match: '"'
- scope: punctuation.definition.string.begin.groovy
- push:
- - meta_scope: string.quoted.double.groovy
- - match: '"'
- scope: punctuation.definition.string.end.groovy
- pop: true
- - match: '\n'
- scope: invalid.illegal.unclosed-string.groovy
- pop: true
- - include: string-escape-sequences
- - include: single-dollar-string-interpolation
- - match: '\$\{'
- scope: punctuation.section.interpolation.begin.groovy
- push:
- - meta_scope: source.groovy.embedded.source
- - match: '\}'
- scope: punctuation.section.interpolation.end.groovy
- pop: true
- - include: escaped-end-of-line
- # we don't consume the newline here, so that
- # the outer scope handles it and pops correctly
- - match: '(?=\n)'
- pop: true
- - include: groovy-code
- # anything else following a dollar sign is not a valid interpolation
- - match: \$(?=")
- scope: invalid.illegal.identifier.groovy
- - match: \$[^"]+
- scope: invalid.illegal.identifier.groovy
- string-quoted-single:
- - match: "'"
- scope: punctuation.definition.string.begin.groovy
- push:
- - meta_scope: string.quoted.single.groovy
- - match: "'"
- scope: punctuation.definition.string.end.groovy
- pop: true
- - match: '\n'
- scope: invalid.illegal.unclosed-string.groovy
- pop: true
- - include: string-escape-sequences
- string-quoted-triple-single:
- - match: "'''"
- scope: punctuation.definition.string.begin.groovy
- push:
- - meta_scope: string.quoted.single.block.groovy
- - match: "'''"
- scope: punctuation.definition.string.end.groovy
- pop: true
- - include: string-escape-sequences
- string-quoted-triple-double:
- - match: '"""'
- scope: punctuation.definition.string.begin.groovy
- push:
- - meta_scope: string.quoted.double.block.groovy
- - match: '""""'
- scope: invalid.illegal
- pop: true
- - match: '"""'
- scope: punctuation.definition.string.end.groovy
- pop: true
- - include: string-escape-sequences
- - include: single-dollar-string-interpolation
- - include: string-interpolation-multiple-lines
- # anything else following a dollar sign is not a valid interpolation
- - match: \$(?=")
- scope: invalid.illegal.groovy
- - match: \$[^"]+
- scope: invalid.illegal.groovy
- string-interpolation-multiple-lines:
- - match: '\$\{'
- scope: punctuation.section.interpolation.begin.groovy
- push:
- - meta_scope: source.groovy.embedded.source
- - match: '\}'
- scope: punctuation.section.interpolation.end.groovy
- pop: true
- - include: escaped-end-of-line
- - include: groovy-code
- string-dollar-slashy:
- - match: '\$/'
- scope: punctuation.definition.string.begin.groovy
- push:
- - meta_scope: string.quoted.other.dollar-slashy.groovy
- - match: '/\$'
- scope: punctuation.definition.string.end.groovy
- pop: true
- - match: '\$/|\$\$'
- scope: constant.character.escape.groovy
- # backslashes only escape newlines (and unicode)
- - include: escaped-end-of-line
- - include: unicode-escape-sequence
- - include: single-dollar-string-interpolation
- - match: '\$\{'
- scope: punctuation.section.interpolation.begin.groovy
- push:
- - meta_scope: source.groovy.embedded.source
- - match: '\}'
- scope: punctuation.section.interpolation.end.groovy
- pop: true
- - include: escaped-end-of-line
- - include: groovy-code
- strings:
- - include: string-quoted-triple-double
- - include: string-quoted-triple-single
- - include: string-quoted-double
- - include: string-quoted-single
- - include: regexp
- - include: string-dollar-slashy
- structures:
- - match: '\['
- scope: punctuation.definition.structure.begin.groovy
- push: inside-structure
- inside-structure:
- - meta_scope: meta.structure.groovy
- - match: '\]'
- scope: punctuation.definition.structure.end.groovy
- pop: true
- - include: groovy-code
- - match: ","
- scope: punctuation.definition.separator.groovy
- support-functions:
- - match: (?x)\b(?:sprintf|print(?:f|ln)?)\b
- scope: support.function.print.groovy
- - match: |-
- (?x)\b(?:shouldFail|fail(?:NotEquals)?|ass(?:ume|ert(?:S(?:cript|ame)|N(?:ot(?:Same|
- Null)|ull)|Contains|T(?:hat|oString|rue)|Inspect|Equals|False|Length|
- ArrayEquals)))\b
- scope: support.function.testing.groovy
- - match: (?x)\b(?:sleep|inspect|dump|use|with)\b
- scope: support.function.other.groovy
- values:
- - include: strings
- - include: numbers
- - include: constants
- - include: class-object
- - include: structures
- - include: method-call
- - include: variables
- - match: \(
- scope: punctuation.section.group.begin.groovy
- push: inside-parens
- variables:
- - match: \b(this|super)\b
- scope: variable.language.groovy
- - match: \b(sh)\s+(''')
- captures:
- 1: support.function.groovy
- 2: meta.string.embedded-shell.groovy punctuation.definition.string.begin.groovy
- embed: scope:source.shell.bash
- embed_scope: meta.string.embedded-shell.groovy string.quoted.single.block.groovy
- escape: "'''"
- escape_captures:
- 0: meta.string.embedded-shell.groovy punctuation.definition.string.end.groovy
- #- include: string-escape-sequences
- - match: \b(sh)\s+(""")
- captures:
- 1: support.function.groovy
- 2: meta.string.embedded-shell.groovy punctuation.definition.string.begin.groovy
- embed: scope:source.shell.bash
- embed_scope: meta.string.embedded-shell.groovy string.quoted.double.block.groovy
- escape: '"""'
- escape_captures:
- 0: meta.string.embedded-shell.groovy punctuation.definition.string.end.groovy
- #- include: string-interpolation-multiple-lines
- - match: \b(sh)\s+(')
- captures:
- 1: support.function.groovy
- 2: meta.string.embedded-shell.groovy punctuation.definition.string.begin.groovy
- embed: scope:source.shell.bash
- embed_scope: meta.string.embedded-shell.groovy string.quoted.single.groovy
- escape: \'
- escape_captures:
- 0: meta.string.embedded-shell.groovy punctuation.definition.string.end.groovy
- - match: \b(?!def\b)(?![A-Z])\w+\b(?!\s+\w)
- scope: variable.other.readwrite.groovy
- inside-parens:
- - meta_scope: meta.group.groovy
- - match: \)
- scope: punctuation.section.group.end.groovy
- pop: true
- - include: groovy-code-minus-map-keys
diff --git a/Groovy/syntax_test_groovy.groovy b/Groovy/syntax_test_groovy.groovy
deleted file mode 100644
index 1604461227..0000000000
--- a/Groovy/syntax_test_groovy.groovy
+++ /dev/null
@@ -1,114 +0,0 @@
-// SYNTAX TEST "Packages/Groovy/Groovy.sublime-syntax"
-
-// Merge Conflict Marker Tests
-
-<<<<<<< HEAD
-// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-// ^ meta.block.conflict.begin.diff - entity - punctuation
-// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
-// ^ meta.block.conflict.begin.diff - entity - punctuation
-
-=======
-// <- meta.block.conflict.separator.diff punctuation.section.block.diff
-//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
-// ^ meta.block.conflict.separator.diff - punctuation
-
->>>>>>> master
-// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
-//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
-// ^ meta.block.conflict.end.diff - entity - punctuation
-// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
-// ^ meta.block.conflict.end.diff - entity - punctuation
-
-// Tests for issue 1260
-
-def defectiveSyntaxTest(String value) {
-// <- meta.definition.method.groovy keyword.declaration.function.groovy
-// ^^^^^^^^^^^^^^^^^^^ entity.name.function
-// ^ meta.definition.method.groovy punctuation.definition.parameters.begin.groovy
-// ^^^^^^ storage.type.parameter
-// ^^^^^ variable.parameter
-// ^ meta.definition.method.groovy punctuation.definition.parameters.end.groovy
- println value
-}
-
-void voidCheck(String value) {
-// <- storage.type.return-type
-// ^ entity.name.function
-// ^ entity.name.function
-// ^ storage.type.parameter
-// ^ variable.parameter
-}
-
-double interpretString(String value) {
-// <- storage.type.return-type
-// ^ entity.name.function
-// ^ entity.name.function
-// ^ storage.type.parameter
-// ^ variable.parameter
- return Double.parseDouble(value);
-}
-
-defectiveSyntaxTest("hello")
-// <- meta.function-call.identifier
-//^^^^^^^^^^^^^^^^^ meta.function-call.identifier
-// ^ meta.function-call.arguments.groovy punctuation.section.arguments.begin.groovy
-// ^^^^^^^ meta.function-call.arguments.groovy string.quoted.double.groovy
-// ^ meta.function-call.groovy punctuation.section.arguments.end.groovy
-
-voidCheck(123456)
-// <- meta.function-call.identifier.groovy variable.function.groovy
-//^^^^^^^ meta.function-call.identifier.groovy variable.function.groovy
-// ^ meta.function-call.arguments.groovy punctuation.section.arguments.begin.groovy
-// ^^^^^^ meta.function-call.arguments.groovy constant.numeric.groovy
-// ^ meta.function-call.groovy punctuation.section.arguments.end.groovy
-// ^ - meta.function-call
-
-chartHistogram([1,1,2,3])
-// <- meta.function-call.identifier.groovy variable.function.groovy
-//^^^^^^^^^^^^ meta.function-call.identifier.groovy variable.function.groovy
-// ^^^^^^^^^^ meta.function-call.arguments.groovy
-// ^ punctuation.section.arguments.begin.groovy
-// ^^^^^^^^^ meta.structure.groovy
-// ^ punctuation.definition.structure.begin.groovy
-// ^ constant.numeric.groovy
-// ^ punctuation.definition.separator.groovy
-// ^ punctuation.definition.structure.end.groovy
-// ^ meta.function-call.groovy punctuation.section.arguments.end.groovy - meta.structure
-
-def greeting = "Hello ${true ? 'World' : 'Home'}"
-// <- storage.type.def
-//^ storage.type.def
-// ^ keyword.operator.assignment
-// ^ punctuation.definition.string.begin
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double
-// ^^ punctuation.section.interpolation.begin
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.groovy.embedded.source
-// ^^^^ constant.language
-// ^^^^^^^^^^^^^^^^^^ meta.evaluation.ternary
-// ^^ - meta.evaluation.ternary
-// ^ keyword.operator.ternary
-// ^ punctuation.definition.string.begin
-// ^^^^^^^ string.quoted.single
-// ^ punctuation.definition.string.end
-// ^ keyword.operator.ternary.expression-separator
-// ^ punctuation.definition.string.begin
-// ^^^^^^ string.quoted.single
-// ^ punctuation.definition.string.end
-// ^ punctuation.section.interpolation.end
-// ^ punctuation.definition.string.end
-// ^ - string.quoted - invalid
-
-def str = "
-// ^ string.quoted.double.groovy punctuation.definition.string.begin.groovy
-// ^ string.quoted.double.groovy invalid.illegal.unclosed-string.groovy
- "
-//^ string.quoted.double.groovy punctuation.definition.string.begin.groovy
-// ^ string.quoted.double.groovy invalid.illegal.unclosed-string.groovy
-def str = "\
-// ^ string.quoted.double.groovy punctuation.definition.string.begin.groovy
-// ^^ string.quoted.double.groovy constant.character.escape.groovy
-def str = "\
- "
-//^ string.quoted.double.groovy punctuation.definition.string.end.groovy
diff --git a/Groovy/tests/syntax_test_Strings.groovy b/Groovy/tests/syntax_test_Strings.groovy
deleted file mode 100644
index 44fed6ea09..0000000000
--- a/Groovy/tests/syntax_test_Strings.groovy
+++ /dev/null
@@ -1,298 +0,0 @@
-// SYNTAX TEST "Packages/Groovy/Groovy.sublime-syntax"
-
-multilineSingle = '''
-// ^^^ string.quoted.single.block.groovy punctuation.definition.string.begin.groovy
- '''
-//^^^ string.quoted.single.block.groovy punctuation.definition.string.end.groovy
-
-multilineDouble = """
-// ^^^ string.quoted.double.block.groovy punctuation.definition.string.begin.groovy
- """
-//^^^ string.quoted.double.block.groovy punctuation.definition.string.end.groovy
-
-multilineDollarSlashy = $/
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.begin.groovy
- /$
-//^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-escapedNewlineSingle = '\
-// ^ string.quoted.single.groovy punctuation.definition.string.begin.groovy
-// ^^ string.quoted.single.groovy constant.character.escape.groovy - invalid.illegal.unclosed-string.groovy
-
-escapedNewlineDouble = "\
-// ^ string.quoted.double.groovy punctuation.definition.string.begin.groovy
-// ^^ string.quoted.double.groovy constant.character.escape.groovy - invalid.illegal.unclosed-string.groovy
-
-escapeNewlineTripleSingle = '''\
-// ^^^ string.quoted.single.block.groovy punctuation.definition.string.begin.groovy
-// ^^ string.quoted.single.block.groovy constant.character.escape.groovy - invalid.illegal.unclosed-string.groovy
- '''
-//^^^ string.quoted.single.block.groovy punctuation.definition.string.end.groovy
-
-escapeNewlineTripleDouble = """\
-// ^^^ string.quoted.double.block.groovy punctuation.definition.string.begin.groovy
-// ^^ string.quoted.double.block.groovy constant.character.escape.groovy - invalid.illegal.unclosed-string.groovy
- """
-//^^^ string.quoted.double.block.groovy punctuation.definition.string.end.groovy
-
-escapedNewlineInterpolated = "${\
-// ^^ string.quoted.double.groovy source.groovy.embedded.source constant.character.escape.groovy
-}";
-
-escapeInterpolation = "\${notInterpolated}"
-// ^^ constant.character.escape.groovy - punctuation.section.embedded.groovy
-// ^^^^^^^^^^^^^^^^^ string.quoted.double.groovy - source.groovy.embedded.source
-
-validEscapesSingle = '\$\'\"\t\n\r\t\f\b\u00D7\\'
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.single.groovy constant.character.escape.groovy
-
-validEscapesDouble = "\$\'\"\t\n\r\t\f\b\u00D7\\"
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.groovy constant.character.escape.groovy
-
-validEscapesTripleSingle = '''\$\'\"\t\n\r\t\f\b\u00D7\\'''
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.single.block.groovy constant.character.escape.groovy
-
-validEscapesTripleDouble = """\$\'\"\t\n\r\t\f\b\u00D7\\"""
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.block.groovy constant.character.escape.groovy
-
-validEscapesSlashy= /\/\u00D7/
-// ^^^^^^^^ string.regexp.groovy constant.character.escape.groovy
-
-invalidEscapesSingle = '\y \1 \+ \{'
-// ^^^^^^^^^^^ string.quoted.single.groovy - constant.character.escape.groovy
-
-invalidEscapesDouble = "\y \1 \+ \{"
-// ^^^^^^^^^^^ string.quoted.double.groovy - constant.character.escape.groovy
-
-invalidEscapesTripleSingle = '''\y \1 \+ \{'''
-// ^^^^^^^^^^^ string.quoted.single.block.groovy - constant.character.escape.groovy
-
-invalidEscapesTripleDouble = """\y \1 \+ \{"""
-// ^^^^^^^^^^^ string.quoted.double.block.groovy - constant.character.escape.groovy
-
-regularCharactersSlashy = /\$\'\"\t\n\r\t\f\b\y\1\+\{/
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.regexp.groovy - constant.character.escape.groovy
-
-regularCharactersDollarSlashy = $/\$\'\"\t\n\r\t\f\b\y\1\+\{/$
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.other.dollar-slashy.groovy - constant.character.escape.groovy
-
-interpolation1 = "2 + 3 = ${2 + 3}"
-// ^^ punctuation.section.interpolation.begin.groovy
-// ^^^^^ source.groovy.embedded.source
-// ^ constant.numeric.groovy
-// ^ keyword.operator.arithmetic.groovy
-// ^ constant.numeric.groovy
-// ^ punctuation.section.interpolation.end.groovy
-// ^ punctuation.definition.string.end.groovy
-
-interpolation3 = "Hello $name"
-// ^^^^^ variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-interpolation4 = "Hello $person.name"
-// ^^^^^^^ variable.other.interpolated.groovy
-// ^ punctuation.accessor.dot.groovy
-// ^^^^ string.quoted.double.groovy variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-interpolation5 = "$a2_3"
-// ^^^^^ string.quoted.double.groovy variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-interpolation6 = "The sum of 1 and 2 is equal to ${def a = 1; a + 2}"
-// ^^^^^^^^^^^^^^^^ string.quoted.double.groovy source.groovy.embedded.source
-// ^^^ storage.type.def.groovy
-// ^ constant.numeric.groovy
-// ^ keyword.operator.arithmetic.groovy
-// ^ constant.numeric.groovy
-// ^ punctuation.definition.string.end.groovy
-
-interpolation7 = "foo { ${if (x) { y } else { z } } }"
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.groovy
-// ^ - punctuation
-// ^^ keyword.control.conditional.if.groovy
-// ^ punctuation.section.block.begin.groovy
-// ^ punctuation.section.block.end.groovy - punctuation.section.interpolation
-// ^^^^ keyword.control.conditional.else.groovy
-// ^ punctuation.section.block.begin.groovy
-// ^ punctuation.section.block.end.groovy - punctuation.section.interpolation
-// ^ punctuation.section.interpolation.end.groovy
-// ^ - punctuation
-// ^ punctuation.definition.string.end.groovy
-
-unicodeInterpolation1 = "$À"
-// ^^ variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-unicodeInterpolation2 = "$À.ö"
-// ^^ variable.other.interpolated.groovy
-// ^ punctuation.accessor.dot.groovy
-// ^ variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-unicodeInterpolation3 = "$\u00c0.\u00F6"
-// ^^^^^^^ variable.other.interpolated.groovy
-// ^ punctuation.accessor.dot.groovy
-// ^^^^^^ variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-invalidInterpolation1 = "$"
-// ^ invalid.illegal
-// ^ punctuation.definition.string.end.groovy
-
-invalidInterpolation2 = "$21"
-// ^^^ invalid.illegal - variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-invalidInterpolation3 = "$$"
-// ^^ invalid.illegal - variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-notAnAccessorDot1 = "$obj."
-// ^^^^^ string.quoted.double.groovy
-// ^^^^ variable.other.interpolated.groovy
-// ^ - punctuation.accessor.dot.groovy
-// ^ punctuation.definition.string.end.groovy - variable.other.interpolated.groovy
-
-notAnAccessorDot2 = "$obj.2"
-// ^^^^^^ string.quoted.double.groovy
-// ^^^^ variable.other.interpolated.groovy
-// ^ - punctuation.accessor.dot.groovy
-// ^ - variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-notAnAccessorDot3 = "$obj.×"
-// ^^^^^^ string.quoted.double.groovy
-// ^^^^ variable.other.interpolated.groovy
-// ^ - punctuation.accessor.dot.groovy
-// ^ - variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-notAnAccessorDot4 = "$obj.\u00D7"
-// ^^^^^^^^^^^ string.quoted.double.groovy
-// ^^^^ variable.other.interpolated.groovy
-// ^ - punctuation.accessor.dot.groovy
-// ^^^^^^ constant.character.escape.groovy - variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-notASafeNavigation = "$obj?.nope"
-// ^^^^^^^^^^ string.quoted.double.groovy
-// ^^^^ variable.other.interpolated.groovy
-// ^^ - punctuation.accessor.groovy
-// ^^^^ - variable.other.interpolated.groovy
-// ^ punctuation.definition.string.end.groovy
-
-notAMethodCall = "$obj.nope()"
-// ^^^^^^^^^^^ string.quoted.double.groovy
-// ^^^^ variable.other.interpolated.groovy
-// ^ punctuation.accessor.dot.groovy
-// ^^^^ variable.other.interpolated.groovy
-// ^^^^^^ - meta.method-call.groovy
-// ^ punctuation.definition.string.end.groovy
-
-lazyInterpolation = "lazy ${-> someVariable}"
-// ^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.groovy
-// ^^ keyword.operator.arrow.groovy
-// ^ punctuation.definition.string.end.groovy
-
-invalidStringClose = """""""
-// ^^^^ invalid.illegal
-
-unclosedStr1 = "
-// ^ invalid.illegal.unclosed-string.groovy
-
-unclosedStr2 = '
-// ^ invalid.illegal.unclosed-string.groovy
-
-unclosedStr3 = "newlines ${'''
- aren't valid inside the interpolation but outside of the
- multiline string
-'''}
-// ^ invalid.illegal.unclosed-string.groovy
-
-unclosedStr4 = "newlines ${'''
- aren't valid inside the interpolation but outside of the
- multiline string'''
-// ^ invalid.illegal.unclosed-string.groovy
-
-// multiline string embedded in a single line string
-embed1 = "embed ${'''
-// ^ string.quoted.double.groovy punctuation.definition.string.begin.groovy
-// ^^^^^^ string.quoted.double.groovy
-// ^^ punctuation.section.interpolation.begin.groovy
-// ^^^ source.groovy.embedded.source
- Some text
-//^^^^^^^^^ string.quoted.double.groovy source.groovy.embedded.source string.quoted.single.block.groovy
-'''}"
-// ^ punctuation.section.interpolation.end.groovy
-// ^ string.quoted.double.groovy punctuation.definition.string.end.groovy
-
-// multiline > singleline > multiline
-embed2 = """I hope
- ${
- " people ${'''don't
-// ^^^^^^^ string.quoted.double.block.groovy source.groovy.embedded.source string.quoted.double.groovy
-// ^^^^^ string.quoted.single.block.groovy
- actually'''}"
-// ^ string.quoted.double.block.groovy source.groovy.embedded.source string.quoted.double.groovy punctuation.section.interpolation.end.groovy
- }
-// ^ punctuation.section.interpolation.end.groovy
- do this
- """
-//^^^ string.quoted.double.block.groovy punctuation.definition.string.end.groovy
-
-embeddedInterpolation1 = "${"$yep"}"
-// ^^^^ string.quoted.double.groovy source.groovy.embedded.source string.quoted.double.groovy variable.other.interpolated.groovy
-
-embeddedNonInterpolation = "${'$nope'}"
-// ^^^^^ string.quoted.double.groovy source.groovy.embedded.source string.quoted.single.groovy - variable.other.interpolated.groovy
-
-dollarSlashy01 = $/Hello $person.name/$
-// ^^^^^^^ string.quoted.other.dollar-slashy.groovy variable.other.interpolated.groovy
-// ^ punctuation.accessor.dot.groovy
-// ^^^^ string.quoted.other.dollar-slashy.groovy variable.other.interpolated.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy02 = $/today is ${new Date().format( 'yyyy-MM-dd' )}./$
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.groovy.embedded.source
-// ^^ punctuation.section.interpolation.begin.groovy
-// ^^^ keyword.operator.new.groovy
-// ^^^^^^^^^^^^^^^^^^^^^^ meta.function-call
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy03 = $/$ dollar sign/$
-// ^^^^^^^^^^^^^ string.quoted.other.dollar-slashy.groovy - invalid.illegal
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy04 = $/$$ escaped dollar sign/$
-// ^^ string.quoted.other.dollar-slashy.groovy constant.character.escape.groovy - invalid.illegal - variable.other.interpolated.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy05 = $/\ backslash/$
-// ^^^^^^^^^^^ string.quoted.other.dollar-slashy.groovy - invalid.illegal - constant.character.escape.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy06 = $// forward slash/$
-// ^^^^^^^^^^^^^^^ string.quoted.other.dollar-slashy.groovy - invalid.illegal - constant.character.escape.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy07 = $/$/ escaped forward slash/$
-// ^^ string.quoted.other.dollar-slashy.groovy constant.character.escape.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy08 = $/$$$/ escaped opening dollar slashy/$
-// ^^^^ string.quoted.other.dollar-slashy.groovy constant.character.escape.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy09 = $/$/$$ escaped closing dollar slashy/$
-// ^^^^ string.quoted.other.dollar-slashy.groovy constant.character.escape.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-dollarSlashy10 = $/${$$}/$
-// ^^ string.quoted.other.dollar-slashy.groovy source.groovy.embedded.source - constant.character.escape.groovy
-// ^^ string.quoted.other.dollar-slashy.groovy punctuation.definition.string.end.groovy
-
-interpolatedSlashy = /a ${color} $obj$/
-// ^^^^^ string.regexp.groovy source.groovy.embedded.source
-// ^^^^ string.regexp.groovy variable.other.interpolated.groovy
-// ^ string.regexp.groovy - variable.other.interpolated.groovy
diff --git a/Groovy/tests/syntax_test_jenkins.Jenkinsfile b/Groovy/tests/syntax_test_jenkins.Jenkinsfile
deleted file mode 100644
index d77bedced8..0000000000
--- a/Groovy/tests/syntax_test_jenkins.Jenkinsfile
+++ /dev/null
@@ -1,116 +0,0 @@
-// SYNTAX TEST "Packages/Groovy/Groovy.sublime-syntax"
-// <- comment.line.double-slash.groovy punctuation.definition.comment.groovy
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.double-slash.groovy
-
-pipeline {
- agent {
- docker { image 'node:20.17.0-alpine3.20' }
- }
- stages {
- stage('Test') {
- steps {
- sh 'node --version'
- }
- }
- }
-}
-
-def call() {
-// <- meta.definition.method.groovy keyword.declaration.function.groovy
-//^ meta.definition.method.groovy keyword.declaration.function.groovy
-// ^^^^ meta.definition.method.groovy entity.name.function.groovy
-// ^ meta.definition.method.groovy punctuation.definition.parameters.begin.groovy
-// ^ meta.definition.method.groovy punctuation.definition.parameters.end.groovy
-// ^ meta.block.groovy punctuation.section.block.begin.groovy
- sh '''#!/bin/bash
-// ^^ meta.block.groovy support.function.groovy
-// ^^^ meta.block.groovy meta.string.embedded-shell.groovy punctuation.definition.string.begin.groovy
-// ^ meta.block.groovy meta.string.embedded-shell.groovy string.quoted.single.block.groovy source.shell.bash comment.line.number-sign.shell punctuation.definition.comment.shell
- echo "hello ${world}"
-// ^^^^ meta.block.groovy meta.string.embedded-shell.groovy string.quoted.single.block.groovy source.shell.bash meta.function-call.identifier.shell support.function.shell
-// ^ meta.interpolation.parameter.shell punctuation.definition.variable.shell
-// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.begin.shell
-// ^^^^^ meta.interpolation.parameter.shell variable.other.readwrite.shell
-// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.end.shell
-// ^ - meta.interpolation
- '''
-}
-// <- meta.block.groovy punctuation.section.block.end.groovy
-
-@Library('somelib') _
-// <- meta.declaration.annotation.groovy storage.type.annotation.groovy
-//^^^^^^ meta.declaration.annotation.groovy storage.type.annotation.groovy
-
-properties([
- parameters([
- booleanParam(name: 'SOME_PARAM', defaultValue: false, description: 'Example parameter'),
- validatingString(name: 'COMMIT_HASH', defaultValue: '', regex: '^(?:[a-z0-9]{40})?$', failedValidationMessage: 'Commit must be valid if specified', description: 'Commit hash'),
- ]),
-])
-
-// Project config
-Map config = [
-// <- storage.type.class.groovy
-// ^^^^^^ variable.other.readwrite.groovy
-// ^ keyword.operator.assignment.groovy
-// ^ meta.structure.groovy punctuation.definition.structure.begin.groovy
- containerWorkDir: '/src',
-// ^^^^^^^^^^^^^^^^ constant.other.key.groovy
-// ^ punctuation.definition.separator.key-value.groovy
-// ^^^^^^ string.quoted.single.groovy
-// ^ punctuation.definition.separator.groovy
- DEFAULT_BRANCH: 'master',
-// ^^^^^^^^^^^^^^ constant.other.key.groovy
-// ^ punctuation.definition.separator.key-value.groovy
-]
-// <- meta.structure.groovy punctuation.definition.structure.end.groovy
-//^ - meta.structure
-// Deployment decision variables
-Boolean isPullRequest = (env.CHANGE_ID != null)
-// ^^^^ storage.type.class.groovy
-// ^^^^^^^^^^^^^ variable.other.readwrite.groovy
-// ^ keyword.operator.assignment.groovy
-// ^^^^^^^^^^^^^^^^^^^^^^^ meta.group.groovy
-// ^ punctuation.section.group.begin.groovy
-// ^^ keyword.operator.comparison.groovy
-// ^^^^ constant.language.null.groovy
-// ^ punctuation.section.group.end.groovy
-
-// Environment section
-env.SOME_ENV_VAR = "refs/heads/${config.DEFAULT_BRANCH.toLowerCase()}"
-
-int something = sh(returnStdout: true, script: '''#!/bin/bash
- set -eu
- echo 7
- ''')
-// TODO: highlight bash above
-
-node('some-node-name') {
- try {
- // <- meta.block.groovy keyword.control.exception.try.groovy
- // ^ punctuation.section.block.begin.groovy
- lock(lockName) {
-
- }
- } catch (InterruptedException e) {
- // <- punctuation.section.block.end.groovy
- //^^^^^ keyword.control.exception.catch.groovy
- // ^ punctuation.section.group.begin.groovy
- // ^^^^^^^^^^^^^^^^^^^^ storage.type.class.groovy
- // ^ variable.other.readwrite.groovy
- // ^ punctuation.section.group.end.groovy
- // ^ punctuation.section.block.begin.groovy
- if (isDeployment) {
- // <- meta.block.groovy meta.block.groovy keyword.control.conditional.if.groovy
- // ^ meta.block.groovy meta.block.groovy meta.group.groovy punctuation.section.group.begin.groovy
- // ^^^^^^^^^^^^ meta.block.groovy meta.block.groovy meta.group.groovy variable.other.readwrite.groovy
- // ^ meta.block.groovy meta.block.groovy meta.group.groovy punctuation.section.group.end.groovy
- // ^ meta.block.groovy meta.block.groovy meta.block.groovy punctuation.section.block.begin.groovy
- notify.deployment(channel: config.jobStatusChannel, status: 'ABORTED', environment: params.CI_ENVIRONMENT)
- }
- throw e
- // <- meta.block.groovy meta.block.groovy keyword.control.flow.throw.groovy
- // ^ meta.block.groovy meta.block.groovy variable.other.readwrite.groovy
- }
- // <- meta.block.groovy meta.block.groovy punctuation.section.block.end.groovy
-}
diff --git a/Java/Default.sublime-keymap b/Java/Default.sublime-keymap
index 92a4a90a52..6294a237d6 100644
--- a/Java/Default.sublime-keymap
+++ b/Java/Default.sublime-keymap
@@ -5,7 +5,7 @@
[
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "source.java - string", "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "(source.java | source.groovy) - string", "match_all": true },
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|,|:|;|\\+|$)", "match_all": true },
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true },
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
@@ -18,10 +18,10 @@
[
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
- { "key": "selector", "operator": "equal", "operand": "source.java - string", "match_all": true },
+ { "key": "selector", "operator": "equal", "operand": "(source.java | source.groovy) - string", "match_all": true },
{ "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|,|:|;|\\+|$)", "match_all": true },
{ "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
]
},
-]
\ No newline at end of file
+]
diff --git a/Java/Groovy.sublime-syntax b/Java/Groovy.sublime-syntax
new file mode 100644
index 0000000000..49e9a7ef17
--- /dev/null
+++ b/Java/Groovy.sublime-syntax
@@ -0,0 +1,470 @@
+%YAML 1.2
+---
+# https://docs.groovy-lang.org/latest/html/documentation/
+# https://groovy-lang.org/documentation.html
+# https://www.sublimetext.com/docs/syntax.html
+
+name: Groovy
+scope: source.groovy
+version: 2
+
+extends: Packages/Java/Java.sublime-syntax
+
+file_extensions:
+ - groovy
+ - gvy
+ - gradle
+
+hidden_file_extensions:
+ - Jenkinsfile
+
+first_line_match: |-
+ (?x:
+ ^ \#! .* {{shebang_language}} # shebang
+ | ^ \s* // .*? -\*- .*? \bgroovy\b .*? -\*- # editorconfig
+ )
+
+###[ CONTEXTS ]################################################################
+
+contexts:
+
+ main:
+ - meta_include_prototype: false
+ - match: ''
+ push: [groovy, shebang]
+
+###[ GROOVY ]##################################################################
+
+ groovy:
+ - include: java
+
+###[ COMMENTS ]################################################################
+
+ shebang:
+ - meta_include_prototype: false
+ - match: ^\s*(\#!)
+ captures:
+ 1: punctuation.definition.comment.groovy
+ set: shebang-body
+ - match: ^|(?=\S) # Note: Ensure to highlight shebang if Erlang is embedded.
+ pop: 1
+
+ shebang-body:
+ - meta_include_prototype: false
+ - meta_scope: comment.line.shebang.groovy
+ - match: '{{shebang_language}}'
+ scope: constant.language.shebang.groovy
+ - match: $\n?
+ pop: 1
+
+ # TODO: groovy doc
+
+###[ LITERALS / VARIABLES ]####################################################
+
+ literal-variables:
+ - meta_prepend: true
+ - match: \b(assertScript)\s+(\'{3}) # assertScript '''...'''
+ captures:
+ 1: support.function.groovy
+ 2:
+ meta.string.groovy
+ string.quoted.single.block.groovy
+ punctuation.definition.string.begin.groovy
+ meta.groovy.groovy
+ embed: scope:source.groovy
+ embed_scope:
+ meta.groovy.groovy
+ source.groovy.embedded.groovy
+ escape: \'{3}
+ escape_captures:
+ 0:
+ meta.string.groovy
+ string.quoted.single.block.groovy
+ punctuation.definition.string.end.groovy
+ meta.groovy.groovy
+ - match: \b(sh)\s+(\"{3}) # sh """..."""
+ captures:
+ 1: support.function.groovy
+ 2:
+ meta.string.groovy
+ string.quoted.double.block.groovy
+ punctuation.definition.string.begin.groovy
+ meta.shell.groovy
+ embed: scope:source.shell.bash
+ embed_scope:
+ meta.shell.groovy
+ source.shell.bash.embedded.groovy
+ escape: \"{3}
+ escape_captures:
+ 0:
+ meta.string.groovy
+ string.quoted.double.block.groovy
+ punctuation.definition.string.end.groovy
+ meta.shell.groovy
+ - match: \b(sh)\s+(\'{3}) # sh '''...'''
+ captures:
+ 1: support.function.groovy
+ 2:
+ meta.string.groovy
+ string.quoted.single.block.groovy
+ punctuation.definition.string.begin.groovy
+ meta.shell.groovy
+ embed: scope:source.shell.bash
+ embed_scope:
+ meta.shell.groovy
+ source.shell.bash.embedded.groovy
+ escape: \'{3}
+ escape_captures:
+ 0:
+ meta.string.groovy
+ string.quoted.single.block.groovy
+ punctuation.definition.string.end.groovy
+ meta.shell.groovy
+ - match: \b(sh)\s+(\') # sh '...'
+ captures:
+ 1: support.function.groovy
+ 2:
+ meta.string.groovy
+ string.quoted.single.groovy
+ punctuation.definition.string.begin.groovy
+ meta.shell.groovy
+ embed: scope:source.shell.bash
+ embed_scope:
+ meta.shell.groovy
+ source.shell.bash.embedded.groovy
+ escape: \'
+ escape_captures:
+ 0:
+ meta.string.groovy
+ string.quoted.single.groovy
+ punctuation.definition.string.end.groovy
+ meta.shell.groovy
+
+###[ LITERALS / STRINGS ]######################################################
+
+ literal-strings:
+ # https://docs.groovy-lang.org/latest/html/documentation/#all-strings
+ - include: literal-double-quoted-textblocks
+ - include: literal-double-quoted-strings
+ - include: literal-single-quoted-textblocks
+ - include: literal-single-quoted-strings
+ - include: dollar-slashy-strings
+ - include: slashy-regexp-strings
+
+ literal-double-quoted-textblocks:
+ - match: \"{3}
+ scope: punctuation.definition.string.begin.groovy
+ push: literal-double-quoted-textblock-body
+
+ literal-double-quoted-textblock-body:
+ - meta_include_prototype: false
+ - meta_scope: meta.string.groovy string.quoted.double.block.groovy
+ - match: \"{3}
+ scope: punctuation.definition.string.end.groovy
+ pop: 1
+ - include: literal-string-escapes
+ - include: string-interpolations-single-dollar
+ - include: string-interpolations-multiline
+ - include: illegal-interpolations
+ - include: merge-conflict-markers
+
+ literal-double-quoted-strings:
+ - match: \"
+ scope: punctuation.definition.string.begin.groovy
+ push: literal-double-quoted-string-body
+
+ literal-double-quoted-string-body:
+ - meta_include_prototype: false
+ - meta_scope: meta.string.groovy string.quoted.double.groovy
+ - match: \"
+ scope: punctuation.definition.string.end.groovy
+ pop: 1
+ - include: illegal-newline
+ - include: literal-string-escapes
+ - include: string-interpolations-single-dollar
+ - include: string-interpolations
+ - include: illegal-interpolations
+
+ literal-single-quoted-textblocks:
+ - match: \'{3}(?=#!/bin/bash)
+ captures:
+ 0:
+ meta.string.groovy
+ string.quoted.single.block.groovy
+ punctuation.definition.string.begin.groovy
+ meta.shell.groovy
+ embed: scope:source.shell.bash
+ embed_scope:
+ meta.shell.groovy
+ source.shell.bash.embedded.groovy
+ escape: \'{3}
+ escape_captures:
+ 0:
+ meta.string.groovy
+ string.quoted.single.block.groovy
+ punctuation.definition.string.end.groovy
+ meta.shell.groovy
+ - match: \'{3}
+ scope: punctuation.definition.string.begin.groovy
+ push: literal-single-quoted-textblock-body
+
+ literal-single-quoted-textblock-body:
+ - meta_include_prototype: false
+ - meta_scope: meta.string.groovy string.quoted.single.block.groovy
+ - match: \'{3}
+ scope: punctuation.definition.string.end.groovy
+ pop: 1
+ - include: literal-string-escapes
+ - include: merge-conflict-markers
+
+ literal-single-quoted-strings:
+ - match: \'
+ scope: punctuation.definition.string.begin.groovy
+ push: literal-single-quoted-string-body
+
+ literal-single-quoted-string-body:
+ - meta_include_prototype: false
+ - meta_scope: meta.string.groovy string.quoted.single.groovy
+ - match: \'
+ scope: punctuation.definition.string.end.groovy
+ pop: 1
+ - include: illegal-newline
+ - include: literal-string-escapes
+
+ dollar-slashy-strings:
+ # https://docs.groovy-lang.org/latest/html/documentation/#_dollar_slashy_string
+
+ - match: '\$/'
+ scope: punctuation.definition.string.begin.groovy
+ push: dollar-slashy-string-body
+
+ dollar-slashy-string-body:
+ - meta_include_prototype: false
+ - meta_scope: meta.string.groovy string.other.dollar-slashy.block.groovy
+ - match: '/\$'
+ scope: punctuation.definition.string.end.groovy
+ pop: 1
+ - match: '\$/|\$\$'
+ scope: constant.character.escape.groovy
+ - include: literal-string-escape-eol
+ - match: '{{escape_unicode}}'
+ scope: constant.character.escape.unicode.java
+ - include: string-interpolations-single-dollar
+ - include: string-interpolations-multiline
+ - include: merge-conflict-markers
+
+ slashy-regexp-strings:
+ # https://docs.groovy-lang.org/latest/html/documentation/#_slashy_string
+ # FIXME: find a better way to distinguish operators / and /= vs slashy strings
+ - match: '/(?=[^/= ])'
+ scope: punctuation.definition.string.begin.groovy
+ push:
+ - slashy-regexp-string-meta
+ - slashy-regexp-string-body
+
+ slashy-regexp-string-meta:
+ - meta_include_prototype: false
+ - meta_scope: meta.string.groovy string.regexp.groovy
+ - match: '/'
+ scope: punctuation.definition.string.end.groovy
+ pop: 1
+
+ slashy-regexp-string-body:
+ - meta_include_prototype: false
+ - include: scope:source.regexp.groovy
+ - include: merge-conflict-markers
+ - include: immediately-pop
+
+###[ LITERALS / STRING ESCAPES ]###############################################
+
+ literal-string-escapes:
+ - match: '{{escape_unicode}}'
+ scope: constant.character.escape.unicode.java
+ - include: literal-string-escape-eol
+ - match: '{{escape_other}}'
+ scope: constant.character.escape.other.java
+
+ literal-string-escape-eol:
+ - match: \\\n
+ scope: constant.character.escape.groovy
+
+###[ LITERALS / STRING INTERPOLTATIONS ]#######################################
+
+ string-interpolations-multiline:
+ - match: '\$\{'
+ scope: punctuation.section.interpolation.begin.groovy
+ push: string-interpolation-multiline-body
+
+ string-interpolation-multiline-body:
+ - meta_include_prototype: false
+ - meta_scope: source.groovy.embedded.groovy
+ - match: '\}'
+ scope: punctuation.section.interpolation.end.groovy
+ pop: 1
+ - include: literal-string-escape-eol
+ - include: groovy
+
+ string-interpolations:
+ - match: '\$\{'
+ scope: punctuation.section.interpolation.begin.groovy
+ push: string-interpolation-body
+
+ string-interpolation-body:
+ - meta_include_prototype: false
+ - meta_scope: source.groovy.embedded.groovy
+ - match: '\}'
+ scope: punctuation.section.interpolation.end.groovy
+ pop: 1
+ - include: literal-string-escape-eol
+ # NOTE: not consuming the newline here, so that the outer scope handles it
+ # and pops correctly
+ - match: (?=\n)
+ pop: 1
+ - include: groovy
+
+ string-interpolations-single-dollar:
+ - match: \${{single_dollar_interpolation_identifier}}
+ scope: variable.other.interpolated.groovy
+ push: string-interpolation-single-dollar-body
+
+ string-interpolation-single-dollar-body:
+ - meta_include_prototype: false
+ - match: \.(?={{single_dollar_interpolation_identifier}})
+ scope: punctuation.accessor.dot.groovy
+ - match: '{{single_dollar_interpolation_identifier}}'
+ scope: variable.other.interpolated.groovy
+ - match: \b
+ pop: 1
+
+###[ OPERATORS ]###############################################################
+
+ operators:
+ - include: word-operators
+ - include: range-operators
+
+ # FIXME: sregex-compatibility, see https://github.com/sublimehq/Packages/issues/481
+
+ - match: '\->'
+ scope: keyword.operator.arrow.groovy
+ - match: (?<=\S)\.(?=\S)
+ scope: punctuation.accessor.dot.groovy
+ - match: (?<=\S)\?\.(?=\S)
+ scope: punctuation.accessor.null-coalescing.groovy
+
+ - include: match-and-find-operators
+ - include: spaceship-and-diamond-operators
+
+ - include: assignment-augmented-bitwise-shift-operators
+ - include: bitwise-shift-operators
+ - include: relational-operators
+ - include: assignment-augmented-operators
+ - include: arithmetic-operators
+ - include: logical-operators
+ - include: bitwise-operators
+ - include: comparison-operators
+ - include: assignment-operators
+ - include: elvis-and-ternary-operators
+
+ word-operators:
+ - match: \bas\b
+ scope: keyword.operator.coercion.groovy
+ - match: (?:!|\b)in\b
+ scope: keyword.operator.membership.groovy
+ - match: (?:!|\b)instanceof\b
+ scope: keyword.operator.instanceof.groovy
+
+ range-operators:
+ - match: '<\.\.>'
+ scope: keyword.operator.range.exclusive.both.groovy
+ - match: '<\.\.'
+ scope: keyword.operator.range.exclusive.lower.groovy
+ - match: '\.\.>'
+ scope: keyword.operator.range.exclusive.upper.groovy
+ - match: '\.\.'
+ scope: keyword.operator.range.inclusive.groovy
+
+ match-and-find-operators:
+ - match: '==~'
+ scope: keyword.operator.match.groovy
+ - match: '=~'
+ scope: keyword.operator.find.groovy
+
+ spaceship-and-diamond-operators:
+ - match: '<=>'
+ scope: keyword.operator.comparison.groovy
+ - match: '<>'
+ scope: keyword.operator.comparison.groovy
+
+ assignment-augmented-operators:
+ - meta_prepend: true
+ - match: '\*\*='
+ scope: keyword.operator.assignment.augmented.power.groovy
+
+ arithmetic-operators:
+ - meta_prepend: true
+ - match: '\*\*'
+ scope: keyword.operator.arithmetic.power.groovy
+
+ comparison-operators:
+ - meta_prepend: true
+ - match: '==='
+ scope: keyword.operator.comparison.equal.value.strict.groovy
+ - match: '!=='
+ scope: keyword.operator.comparison.not-equal.value.strict.groovy
+
+ elvis-and-ternary-operators:
+ # https://docs.groovy-lang.org/latest/html/documentation/#_elvis_operator
+ - match: '\?\:'
+ scope: keyword.operator.elvis.groovy
+
+ - include: ternary-operators
+
+###[ TYPE IMPORT ]#############################################################
+
+ type-import-package:
+ # https://docs.groovy-lang.org/latest/html/documentation/#_default_imports
+ - meta_prepend: true
+ - match: 'java\.math\.Big(?:Decimal|Integer){{break}}'
+ scope: invalid.illegal.import-of-default-import.groovy
+ pop: 1
+ - match: 'java\.(?:io|lang|net|util)(?:{{break}}|(?:\.{{lowercase_id}})*)'
+ scope: invalid.illegal.import-of-default-import.groovy
+ pop: 1
+ - match: 'groovy\.(?:lang|util)(?:{{break}}|(?:\.{{lowercase_id}})*)'
+ scope: invalid.illegal.import-of-default-import.groovy
+ pop: 1
+
+###[ ILLEGALS ]################################################################
+
+ illegal-interpolations:
+ - match: \$(?=")
+ scope: invalid.illegal.stray-dollar-sign.groovy
+ - match: \$[^"]+
+ scope: invalid.illegal.malformatted-interpolation.groovy
+
+###[ VARIABLES ]###############################################################
+
+variables:
+ shebang_language: \b(?:groovy)\b
+
+ float_suffix: '[dDfFgGiIlL]{{break}}'
+ int_suffix: '[dDfFgGiIlL]{{break}}'
+
+ escape_other: \\[btnfr"'\\\$]
+
+ single_dollar_id_char: |-
+ (?xi:
+ # Valid unicode letters according to:
+ # http://groovy-lang.org/syntax.html#_normal_identifiers
+ # Literal Unicode Escaped Unicode
+ [\x{00C0}-\x{00D6}] | \\u00C[0-9A-F] | \\u00D[0-6]
+ | [\x{00D8}-\x{00F6}] | \\u00D[89A-F] | \\u00E[0-9A-F] | \\u00F[0-6]
+ | [\x{00F8}-\x{00FF}] | \\u00F[89A-F]
+ | [\x{0100}-\x{FFFE}] | \\u0[1-9A-F][0-9A-F]{2} | \\u(?!FFFF)[1-9A-F][0-9A-F]{3}
+ )
+
+ # dollars aren't allowed in the single dollar interpolated identifiers
+ # (dotted expressions), but they are supposed to be valid characters
+ # in identifiers in other contexts
+ # e.g. `"$$a"` is invalid, but `"${$a}"` is fine.
+ single_dollar_interpolation_identifier: (?:{{single_dollar_id_char}}|[[:alpha:]_])(?:{{single_dollar_id_char}}|[[:alnum:]_])*
diff --git a/Java/Groovy/Ant.sublime-build b/Java/Groovy/Ant.sublime-build
new file mode 100644
index 0000000000..8908120bb8
--- /dev/null
+++ b/Java/Groovy/Ant.sublime-build
@@ -0,0 +1,12 @@
+{
+ "cmd": ["ant"],
+ "file_regex": "^ *\\[groovyc\\] (.+):([0-9]+):() (.*)$",
+ "working_dir": "${project_path:${folder}}",
+ "selector": "source.groovy",
+ "keyfiles": ["build.xml"],
+
+ "windows":
+ {
+ "cmd": ["ant.bat"]
+ }
+}
diff --git a/Groovy/Comments.tmPreferences b/Java/Groovy/Comments.tmPreferences
similarity index 100%
rename from Groovy/Comments.tmPreferences
rename to Java/Groovy/Comments.tmPreferences
diff --git a/Java/Groovy/Completion Rules.tmPreferences b/Java/Groovy/Completion Rules.tmPreferences
new file mode 100644
index 0000000000..9d173c6128
--- /dev/null
+++ b/Java/Groovy/Completion Rules.tmPreferences
@@ -0,0 +1,15 @@
+
+
+
+ scope
+ source.groovy
+ settings
+
+ cancelCompletion
+
+
+
+
diff --git a/Java/Groovy/Embeddings/RegExp (Groovy).sublime-syntax b/Java/Groovy/Embeddings/RegExp (Groovy).sublime-syntax
new file mode 100644
index 0000000000..8efbcfea8e
--- /dev/null
+++ b/Java/Groovy/Embeddings/RegExp (Groovy).sublime-syntax
@@ -0,0 +1,79 @@
+%YAML 1.2
+---
+name: Regular Expression (Groovy)
+scope: source.regexp.groovy
+version: 2
+hidden: true
+
+extends: 'Packages/Regular Expressions/RegExp.sublime-syntax'
+
+###[ CONTEXTS ]################################################################
+
+contexts:
+
+ prototype:
+ - meta_prepend: true
+ - include: groovy-interpolations
+
+ main:
+ - include: groovy-regexp-end-or-interpolation
+ - include: main-extended
+
+###[ OVERRIDES OVER BASE SYNTAX ]##############################################
+
+ base-literal:
+ - meta_prepend: true
+ - include: groovy-regexp-end-or-interpolation
+
+ base-literal-extended:
+ - meta_prepend: true
+ - include: groovy-regexp-end-or-interpolation
+
+ escaped-chars:
+ - match: \\(?:[/\n]|u\h{4})
+ scope: constant.character.escape.groovy
+
+ escaped-char:
+ - match: \\(?:[/\n]|u\h{4})
+ scope: constant.character.escape.groovy
+ pop: 1
+
+###[ GROOVY ]##################################################################
+
+ groovy-regexp-end-or-interpolation:
+ - match: (?=/)
+ pop: 1
+
+ - include: Packages/Java/Groovy.sublime-syntax#string-interpolations-single-dollar
+
+###[ PROTOTYPE / INTERPOLATIONS ]##############################################
+
+ groovy-interpolations:
+ - match: '\$\{'
+ scope: punctuation.section.interpolation.begin.groovy
+ push:
+ - groovy-interpolations-meta
+ - groovy-interpolations-body
+
+ groovy-interpolations-meta:
+ - clear_scopes: 1
+ - meta_scope: meta.interpolation.groovy
+
+ - match: '\}'
+ scope: punctuation.section.interpolation.end.groovy
+ pop: 1
+
+ - include: Packages/Java/Groovy.sublime-syntax#literal-string-escape-eol
+
+ # newlines are invalid inside the interpolation
+ # but outside of a nested multiline string
+ - match: '\n'
+ scope: invalid.illegal.newline.groovy
+ pop: 1
+
+ groovy-interpolations-body:
+ - include: Packages/Java/Groovy.sublime-syntax#java
+
+ # immediately-pop
+ - match: ''
+ pop: 1
diff --git a/Java/Groovy/Fold.tmPreferences b/Java/Groovy/Fold.tmPreferences
new file mode 100644
index 0000000000..86c07bd824
--- /dev/null
+++ b/Java/Groovy/Fold.tmPreferences
@@ -0,0 +1,63 @@
+
+
+
+ scope
+ source.groovy
+ settings
+
+ foldScopes
+
+
+ begin
+ punctuation.definition.comment.begin
+ end
+ punctuation.definition.comment.end
+
+
+ begin
+ punctuation.definition.string.begin
+ end
+ punctuation.definition.string.end
+
+
+ begin
+ punctuation.section.interpolation.begin
+ end
+ punctuation.section.interpolation.end
+
+
+ begin
+ punctuation.definition.generic.begin
+ end
+ punctuation.definition.generic.end
+
+
+ begin
+ punctuation.section.block.begin
+ end
+ punctuation.section.block.end
+
+
+ begin
+ punctuation.section.braces.begin
+ end
+ punctuation.section.braces.end
+
+
+ begin
+ punctuation.section.brackets.begin
+ end
+ punctuation.section.brackets.end
+
+
+ begin
+ punctuation.section.group.begin
+ end
+ punctuation.section.group.end
+
+
+ indentationFoldingEnabled
+
+
+
+
diff --git a/Java/Groovy/GroovyC.sublime-build b/Java/Groovy/GroovyC.sublime-build
new file mode 100644
index 0000000000..583f9666eb
--- /dev/null
+++ b/Java/Groovy/GroovyC.sublime-build
@@ -0,0 +1,5 @@
+{
+ "shell_cmd": "groovyc \"$file\"",
+ "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
+ "selector": "source.groovy"
+}
diff --git a/Java/Groovy/Indentation Rules (Comments).tmPreferences b/Java/Groovy/Indentation Rules (Comments).tmPreferences
new file mode 100644
index 0000000000..2cfe39f2bd
--- /dev/null
+++ b/Java/Groovy/Indentation Rules (Comments).tmPreferences
@@ -0,0 +1,27 @@
+
+
+
+ scope
+ source.groovy comment.block
+ settings
+
+
+ preserveIndent
+
+ unIndentedLinePattern
+ .
+
+
+
diff --git a/Java/Groovy/Indentation Rules.tmPreferences b/Java/Groovy/Indentation Rules.tmPreferences
new file mode 100644
index 0000000000..b389c26df4
--- /dev/null
+++ b/Java/Groovy/Indentation Rules.tmPreferences
@@ -0,0 +1,83 @@
+
+
+
+ scope
+ source.groovy
+ settings
+
+ decreaseIndentPattern
+
+ increaseIndentPattern
+
+ bracketIndentNextLinePattern
+ (?: \s* (? /\*.*\*/ ) )* \s* )
+ (?:
+ # indent after:
+ # - `else`
+ else
+ # indent after:
+ # - `else if (...)`
+ # - `if (...)`
+ # - `for (...)`
+ # - `while (...)`
+ | (?: (?: else \g )? if | for | while )
+ # followed by whitespace or block comments [optional]
+ \g
+ # top-level balanced parentheses
+ (?
+ \( (?:
+ # nested balanced parentheses
+ \g
+ # double quoted string with ignored escaped quotation marks
+ | \".*(?
+ # anything but closing parenthesis
+ | [^)]
+ )* \)
+ )
+ )
+ # followed by whitespace or block comments [optional]
+ \g
+ # followed by line comment [optional]
+ (?: //.* )? $
+ ]]>
+ preserveIndent
+
+ unIndentedLinePattern
+
+
+
+
diff --git a/Groovy/Snippets/#!-usr-local-bin-groovy-w.sublime-snippet b/Java/Groovy/Snippets/#!-usr-local-bin-groovy-w.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/#!-usr-local-bin-groovy-w.sublime-snippet
rename to Java/Groovy/Snippets/#!-usr-local-bin-groovy-w.sublime-snippet
diff --git a/Groovy/Snippets/Ant-__-replace.sublime-snippet b/Java/Groovy/Snippets/Ant-__-replace.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/Ant-__-replace.sublime-snippet
rename to Java/Groovy/Snippets/Ant-__-replace.sublime-snippet
diff --git a/Groovy/Snippets/Block-Comment.sublime-snippet b/Java/Groovy/Snippets/Block-Comment.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/Block-Comment.sublime-snippet
rename to Java/Groovy/Snippets/Block-Comment.sublime-snippet
diff --git a/Groovy/Snippets/Constructor.sublime-snippet b/Java/Groovy/Snippets/Constructor.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/Constructor.sublime-snippet
rename to Java/Groovy/Snippets/Constructor.sublime-snippet
diff --git a/Groovy/Snippets/Hash-Pair.sublime-snippet b/Java/Groovy/Snippets/Hash-Pair.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/Hash-Pair.sublime-snippet
rename to Java/Groovy/Snippets/Hash-Pair.sublime-snippet
diff --git a/Groovy/Snippets/Thread_start-{-__-}.sublime-snippet b/Java/Groovy/Snippets/Thread_start-{-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/Thread_start-{-__-}.sublime-snippet
rename to Java/Groovy/Snippets/Thread_start-{-__-}.sublime-snippet
diff --git a/Groovy/Snippets/Thread_startDaemon-{-__-}.sublime-snippet b/Java/Groovy/Snippets/Thread_startDaemon-{-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/Thread_startDaemon-{-__-}.sublime-snippet
rename to Java/Groovy/Snippets/Thread_startDaemon-{-__-}.sublime-snippet
diff --git a/Groovy/Snippets/all{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/all{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/all{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/all{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/any{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/any{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/any{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/any{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/as-BigDecimal.sublime-snippet b/Java/Groovy/Snippets/as-BigDecimal.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-BigDecimal.sublime-snippet
rename to Java/Groovy/Snippets/as-BigDecimal.sublime-snippet
diff --git a/Groovy/Snippets/as-BigInteger.sublime-snippet b/Java/Groovy/Snippets/as-BigInteger.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-BigInteger.sublime-snippet
rename to Java/Groovy/Snippets/as-BigInteger.sublime-snippet
diff --git a/Groovy/Snippets/as-Double.sublime-snippet b/Java/Groovy/Snippets/as-Double.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-Double.sublime-snippet
rename to Java/Groovy/Snippets/as-Double.sublime-snippet
diff --git a/Groovy/Snippets/as-Float.sublime-snippet b/Java/Groovy/Snippets/as-Float.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-Float.sublime-snippet
rename to Java/Groovy/Snippets/as-Float.sublime-snippet
diff --git a/Groovy/Snippets/as-Immutable.sublime-snippet b/Java/Groovy/Snippets/as-Immutable.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-Immutable.sublime-snippet
rename to Java/Groovy/Snippets/as-Immutable.sublime-snippet
diff --git a/Groovy/Snippets/as-Set.sublime-snippet b/Java/Groovy/Snippets/as-Set.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-Set.sublime-snippet
rename to Java/Groovy/Snippets/as-Set.sublime-snippet
diff --git a/Groovy/Snippets/as-String.sublime-snippet b/Java/Groovy/Snippets/as-String.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-String.sublime-snippet
rename to Java/Groovy/Snippets/as-String.sublime-snippet
diff --git a/Groovy/Snippets/as-Synchronized.sublime-snippet b/Java/Groovy/Snippets/as-Synchronized.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-Synchronized.sublime-snippet
rename to Java/Groovy/Snippets/as-Synchronized.sublime-snippet
diff --git a/Groovy/Snippets/as-Writable.sublime-snippet b/Java/Groovy/Snippets/as-Writable.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/as-Writable.sublime-snippet
rename to Java/Groovy/Snippets/as-Writable.sublime-snippet
diff --git a/Groovy/Snippets/assert(__).sublime-snippet b/Java/Groovy/Snippets/assert(__).sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assert(__).sublime-snippet
rename to Java/Groovy/Snippets/assert(__).sublime-snippet
diff --git a/Groovy/Snippets/assertEquals(__).sublime-snippet b/Java/Groovy/Snippets/assertEquals(__).sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assertEquals(__).sublime-snippet
rename to Java/Groovy/Snippets/assertEquals(__).sublime-snippet
diff --git a/Groovy/Snippets/assertFalse.sublime-snippet b/Java/Groovy/Snippets/assertFalse.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assertFalse.sublime-snippet
rename to Java/Groovy/Snippets/assertFalse.sublime-snippet
diff --git a/Groovy/Snippets/assertNotEquals(__).sublime-snippet b/Java/Groovy/Snippets/assertNotEquals(__).sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assertNotEquals(__).sublime-snippet
rename to Java/Groovy/Snippets/assertNotEquals(__).sublime-snippet
diff --git a/Groovy/Snippets/assertNotNull(__).sublime-snippet b/Java/Groovy/Snippets/assertNotNull(__).sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assertNotNull(__).sublime-snippet
rename to Java/Groovy/Snippets/assertNotNull(__).sublime-snippet
diff --git a/Groovy/Snippets/assertNull(__).sublime-snippet b/Java/Groovy/Snippets/assertNull(__).sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assertNull(__).sublime-snippet
rename to Java/Groovy/Snippets/assertNull(__).sublime-snippet
diff --git a/Groovy/Snippets/assertSame.sublime-snippet b/Java/Groovy/Snippets/assertSame.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assertSame.sublime-snippet
rename to Java/Groovy/Snippets/assertSame.sublime-snippet
diff --git a/Groovy/Snippets/assertTrue.sublime-snippet b/Java/Groovy/Snippets/assertTrue.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/assertTrue.sublime-snippet
rename to Java/Groovy/Snippets/assertTrue.sublime-snippet
diff --git a/Groovy/Snippets/case.sublime-snippet b/Java/Groovy/Snippets/case.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/case.sublime-snippet
rename to Java/Groovy/Snippets/case.sublime-snippet
diff --git a/Groovy/Snippets/class-__-singleton.sublime-snippet b/Java/Groovy/Snippets/class-__-singleton.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/class-__-singleton.sublime-snippet
rename to Java/Groovy/Snippets/class-__-singleton.sublime-snippet
diff --git a/Groovy/Snippets/class-__.sublime-snippet b/Java/Groovy/Snippets/class-__.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/class-__.sublime-snippet
rename to Java/Groovy/Snippets/class-__.sublime-snippet
diff --git a/Groovy/Snippets/class-___-TestCase.sublime-snippet b/Java/Groovy/Snippets/class-___-TestCase.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/class-___-TestCase.sublime-snippet
rename to Java/Groovy/Snippets/class-___-TestCase.sublime-snippet
diff --git a/Groovy/Snippets/collect-{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/collect-{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/collect-{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/collect-{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/copy__-file.sublime-snippet b/Java/Groovy/Snippets/copy__-file.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/copy__-file.sublime-snippet
rename to Java/Groovy/Snippets/copy__-file.sublime-snippet
diff --git a/Groovy/Snippets/copy__-fileset-include-exclude.sublime-snippet b/Java/Groovy/Snippets/copy__-fileset-include-exclude.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/copy__-fileset-include-exclude.sublime-snippet
rename to Java/Groovy/Snippets/copy__-fileset-include-exclude.sublime-snippet
diff --git a/Groovy/Snippets/copy__-fileset.sublime-snippet b/Java/Groovy/Snippets/copy__-fileset.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/copy__-fileset.sublime-snippet
rename to Java/Groovy/Snippets/copy__-fileset.sublime-snippet
diff --git a/Groovy/Snippets/def-__-closure-=-{__}.sublime-snippet b/Java/Groovy/Snippets/def-__-closure-=-{__}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/def-__-closure-=-{__}.sublime-snippet
rename to Java/Groovy/Snippets/def-__-closure-=-{__}.sublime-snippet
diff --git a/Groovy/Snippets/def-__-method()-{__}.sublime-snippet b/Java/Groovy/Snippets/def-__-method()-{__}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/def-__-method()-{__}.sublime-snippet
rename to Java/Groovy/Snippets/def-__-method()-{__}.sublime-snippet
diff --git a/Groovy/Snippets/downto(num)-{-n-__-}.sublime-snippet b/Java/Groovy/Snippets/downto(num)-{-n-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/downto(num)-{-n-__-}.sublime-snippet
rename to Java/Groovy/Snippets/downto(num)-{-n-__-}.sublime-snippet
diff --git a/Groovy/Snippets/each-{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/each-{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/each-{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/each-{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachByte-{-byte-__-}.sublime-snippet b/Java/Groovy/Snippets/eachByte-{-byte-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachByte-{-byte-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachByte-{-byte-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachDir-{-dir-__-}.sublime-snippet b/Java/Groovy/Snippets/eachDir-{-dir-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachDir-{-dir-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachDir-{-dir-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachDirMatch.sublime-snippet b/Java/Groovy/Snippets/eachDirMatch.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachDirMatch.sublime-snippet
rename to Java/Groovy/Snippets/eachDirMatch.sublime-snippet
diff --git a/Groovy/Snippets/eachDirRecurse.sublime-snippet b/Java/Groovy/Snippets/eachDirRecurse.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachDirRecurse.sublime-snippet
rename to Java/Groovy/Snippets/eachDirRecurse.sublime-snippet
diff --git a/Groovy/Snippets/eachFile-{-file-__-}.sublime-snippet b/Java/Groovy/Snippets/eachFile-{-file-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachFile-{-file-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachFile-{-file-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachFileMatch-{-file-__-}.sublime-snippet b/Java/Groovy/Snippets/eachFileMatch-{-file-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachFileMatch-{-file-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachFileMatch-{-file-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachFileRecurse-{-file-__-}.sublime-snippet b/Java/Groovy/Snippets/eachFileRecurse-{-file-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachFileRecurse-{-file-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachFileRecurse-{-file-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachKey-{-key-__-}.sublime-snippet b/Java/Groovy/Snippets/eachKey-{-key-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachKey-{-key-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachKey-{-key-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachLine-{-line-__-}.sublime-snippet b/Java/Groovy/Snippets/eachLine-{-line-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachLine-{-line-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachLine-{-line-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachMatch(regex)-{-match-__-}.sublime-snippet b/Java/Groovy/Snippets/eachMatch(regex)-{-match-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachMatch(regex)-{-match-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachMatch(regex)-{-match-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachObject-{-obj-__-}.sublime-snippet b/Java/Groovy/Snippets/eachObject-{-obj-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachObject-{-obj-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachObject-{-obj-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachValue-{-val-__-}.sublime-snippet b/Java/Groovy/Snippets/eachValue-{-val-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachValue-{-val-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachValue-{-val-__-}.sublime-snippet
diff --git a/Groovy/Snippets/eachWithIndex-{-e-i-__-}.sublime-snippet b/Java/Groovy/Snippets/eachWithIndex-{-e-i-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/eachWithIndex-{-e-i-__-}.sublime-snippet
rename to Java/Groovy/Snippets/eachWithIndex-{-e-i-__-}.sublime-snippet
diff --git a/Groovy/Snippets/else.sublime-snippet b/Java/Groovy/Snippets/else.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/else.sublime-snippet
rename to Java/Groovy/Snippets/else.sublime-snippet
diff --git a/Groovy/Snippets/elseif-___.sublime-snippet b/Java/Groovy/Snippets/elseif-___.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/elseif-___.sublime-snippet
rename to Java/Groovy/Snippets/elseif-___.sublime-snippet
diff --git a/Groovy/Snippets/every-{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/every-{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/every-{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/every-{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/final-method.sublime-snippet b/Java/Groovy/Snippets/final-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/final-method.sublime-snippet
rename to Java/Groovy/Snippets/final-method.sublime-snippet
diff --git a/Groovy/Snippets/final-var.sublime-snippet b/Java/Groovy/Snippets/final-var.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/final-var.sublime-snippet
rename to Java/Groovy/Snippets/final-var.sublime-snippet
diff --git a/Groovy/Snippets/find-{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/find-{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/find-{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/find-{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/findAll-{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/findAll-{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/findAll-{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/findAll-{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/for-in.sublime-snippet b/Java/Groovy/Snippets/for-in.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/for-in.sublime-snippet
rename to Java/Groovy/Snippets/for-in.sublime-snippet
diff --git a/Groovy/Snippets/grep(-pattern-)-{-match-__-}.sublime-snippet b/Java/Groovy/Snippets/grep(-pattern-)-{-match-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/grep(-pattern-)-{-match-__-}.sublime-snippet
rename to Java/Groovy/Snippets/grep(-pattern-)-{-match-__-}.sublime-snippet
diff --git a/Groovy/Snippets/if-else.sublime-snippet b/Java/Groovy/Snippets/if-else.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/if-else.sublime-snippet
rename to Java/Groovy/Snippets/if-else.sublime-snippet
diff --git a/Groovy/Snippets/if.sublime-snippet b/Java/Groovy/Snippets/if.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/if.sublime-snippet
rename to Java/Groovy/Snippets/if.sublime-snippet
diff --git a/Groovy/Snippets/import.sublime-snippet b/Java/Groovy/Snippets/import.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/import.sublime-snippet
rename to Java/Groovy/Snippets/import.sublime-snippet
diff --git a/Groovy/Snippets/mkdir.sublime-snippet b/Java/Groovy/Snippets/mkdir.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/mkdir.sublime-snippet
rename to Java/Groovy/Snippets/mkdir.sublime-snippet
diff --git a/Groovy/Snippets/new-File(__)_eachLine-{-__-}.sublime-snippet b/Java/Groovy/Snippets/new-File(__)_eachLine-{-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/new-File(__)_eachLine-{-__-}.sublime-snippet
rename to Java/Groovy/Snippets/new-File(__)_eachLine-{-__-}.sublime-snippet
diff --git a/Groovy/Snippets/package.sublime-snippet b/Java/Groovy/Snippets/package.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/package.sublime-snippet
rename to Java/Groovy/Snippets/package.sublime-snippet
diff --git a/Groovy/Snippets/print.sublime-snippet b/Java/Groovy/Snippets/print.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/print.sublime-snippet
rename to Java/Groovy/Snippets/print.sublime-snippet
diff --git a/Groovy/Snippets/println.sublime-snippet b/Java/Groovy/Snippets/println.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/println.sublime-snippet
rename to Java/Groovy/Snippets/println.sublime-snippet
diff --git a/Groovy/Snippets/private-final-method.sublime-snippet b/Java/Groovy/Snippets/private-final-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-final-method.sublime-snippet
rename to Java/Groovy/Snippets/private-final-method.sublime-snippet
diff --git a/Groovy/Snippets/private-final-var.sublime-snippet b/Java/Groovy/Snippets/private-final-var.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-final-var.sublime-snippet
rename to Java/Groovy/Snippets/private-final-var.sublime-snippet
diff --git a/Groovy/Snippets/private-method.sublime-snippet b/Java/Groovy/Snippets/private-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-method.sublime-snippet
rename to Java/Groovy/Snippets/private-method.sublime-snippet
diff --git a/Groovy/Snippets/private-static-final-String.sublime-snippet b/Java/Groovy/Snippets/private-static-final-String.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-static-final-String.sublime-snippet
rename to Java/Groovy/Snippets/private-static-final-String.sublime-snippet
diff --git a/Groovy/Snippets/private-static-final-method.sublime-snippet b/Java/Groovy/Snippets/private-static-final-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-static-final-method.sublime-snippet
rename to Java/Groovy/Snippets/private-static-final-method.sublime-snippet
diff --git a/Groovy/Snippets/private-static-method.sublime-snippet b/Java/Groovy/Snippets/private-static-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-static-method.sublime-snippet
rename to Java/Groovy/Snippets/private-static-method.sublime-snippet
diff --git a/Groovy/Snippets/private-static-var.sublime-snippet b/Java/Groovy/Snippets/private-static-var.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-static-var.sublime-snippet
rename to Java/Groovy/Snippets/private-static-var.sublime-snippet
diff --git a/Groovy/Snippets/private-var.sublime-snippet b/Java/Groovy/Snippets/private-var.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/private-var.sublime-snippet
rename to Java/Groovy/Snippets/private-var.sublime-snippet
diff --git a/Groovy/Snippets/replaceAll(regex)-{-match-__}.sublime-snippet b/Java/Groovy/Snippets/replaceAll(regex)-{-match-__}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/replaceAll(regex)-{-match-__}.sublime-snippet
rename to Java/Groovy/Snippets/replaceAll(regex)-{-match-__}.sublime-snippet
diff --git a/Groovy/Snippets/reverseEach-{-e-__-}.sublime-snippet b/Java/Groovy/Snippets/reverseEach-{-e-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/reverseEach-{-e-__-}.sublime-snippet
rename to Java/Groovy/Snippets/reverseEach-{-e-__-}.sublime-snippet
diff --git a/Groovy/Snippets/run-after.sublime-snippet b/Java/Groovy/Snippets/run-after.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/run-after.sublime-snippet
rename to Java/Groovy/Snippets/run-after.sublime-snippet
diff --git a/Groovy/Snippets/setUp().sublime-snippet b/Java/Groovy/Snippets/setUp().sublime-snippet
similarity index 100%
rename from Groovy/Snippets/setUp().sublime-snippet
rename to Java/Groovy/Snippets/setUp().sublime-snippet
diff --git a/Groovy/Snippets/shouldFail(__)-{-__-}.sublime-snippet b/Java/Groovy/Snippets/shouldFail(__)-{-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/shouldFail(__)-{-__-}.sublime-snippet
rename to Java/Groovy/Snippets/shouldFail(__)-{-__-}.sublime-snippet
diff --git a/Groovy/Snippets/sleep(secs)-{-__-on-interrupt-}.sublime-snippet b/Java/Groovy/Snippets/sleep(secs)-{-__-on-interrupt-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/sleep(secs)-{-__-on-interrupt-}.sublime-snippet
rename to Java/Groovy/Snippets/sleep(secs)-{-__-on-interrupt-}.sublime-snippet
diff --git a/Groovy/Snippets/sleep(secs).sublime-snippet b/Java/Groovy/Snippets/sleep(secs).sublime-snippet
similarity index 100%
rename from Groovy/Snippets/sleep(secs).sublime-snippet
rename to Java/Groovy/Snippets/sleep(secs).sublime-snippet
diff --git a/Groovy/Snippets/sort-{-__-}.sublime-snippet b/Java/Groovy/Snippets/sort-{-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/sort-{-__-}.sublime-snippet
rename to Java/Groovy/Snippets/sort-{-__-}.sublime-snippet
diff --git a/Groovy/Snippets/splitEachLine(separator)-{-line-__-}-copy.sublime-snippet b/Java/Groovy/Snippets/splitEachLine(separator)-{-line-__-}-copy.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/splitEachLine(separator)-{-line-__-}-copy.sublime-snippet
rename to Java/Groovy/Snippets/splitEachLine(separator)-{-line-__-}-copy.sublime-snippet
diff --git a/Groovy/Snippets/static-final-method.sublime-snippet b/Java/Groovy/Snippets/static-final-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/static-final-method.sublime-snippet
rename to Java/Groovy/Snippets/static-final-method.sublime-snippet
diff --git a/Groovy/Snippets/static-final-var.sublime-snippet b/Java/Groovy/Snippets/static-final-var.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/static-final-var.sublime-snippet
rename to Java/Groovy/Snippets/static-final-var.sublime-snippet
diff --git a/Groovy/Snippets/static-main-method.sublime-snippet b/Java/Groovy/Snippets/static-main-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/static-main-method.sublime-snippet
rename to Java/Groovy/Snippets/static-main-method.sublime-snippet
diff --git a/Groovy/Snippets/static-method.sublime-snippet b/Java/Groovy/Snippets/static-method.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/static-method.sublime-snippet
rename to Java/Groovy/Snippets/static-method.sublime-snippet
diff --git a/Groovy/Snippets/static-var.sublime-snippet b/Java/Groovy/Snippets/static-var.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/static-var.sublime-snippet
rename to Java/Groovy/Snippets/static-var.sublime-snippet
diff --git a/Groovy/Snippets/step(to-amount)-{-n-__-}.sublime-snippet b/Java/Groovy/Snippets/step(to-amount)-{-n-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/step(to-amount)-{-n-__-}.sublime-snippet
rename to Java/Groovy/Snippets/step(to-amount)-{-n-__-}.sublime-snippet
diff --git a/Groovy/Snippets/switch__case.sublime-snippet b/Java/Groovy/Snippets/switch__case.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/switch__case.sublime-snippet
rename to Java/Groovy/Snippets/switch__case.sublime-snippet
diff --git a/Groovy/Snippets/switch__case__default.sublime-snippet b/Java/Groovy/Snippets/switch__case__default.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/switch__case__default.sublime-snippet
rename to Java/Groovy/Snippets/switch__case__default.sublime-snippet
diff --git a/Groovy/Snippets/tearDown().sublime-snippet b/Java/Groovy/Snippets/tearDown().sublime-snippet
similarity index 100%
rename from Groovy/Snippets/tearDown().sublime-snippet
rename to Java/Groovy/Snippets/tearDown().sublime-snippet
diff --git a/Groovy/Snippets/test-case.sublime-snippet b/Java/Groovy/Snippets/test-case.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/test-case.sublime-snippet
rename to Java/Groovy/Snippets/test-case.sublime-snippet
diff --git a/Groovy/Snippets/times-{-n-__-}.sublime-snippet b/Java/Groovy/Snippets/times-{-n-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/times-{-n-__-}.sublime-snippet
rename to Java/Groovy/Snippets/times-{-n-__-}.sublime-snippet
diff --git a/Groovy/Snippets/to-Array.sublime-snippet b/Java/Groovy/Snippets/to-Array.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-Array.sublime-snippet
rename to Java/Groovy/Snippets/to-Array.sublime-snippet
diff --git a/Groovy/Snippets/to-BigDecimal.sublime-snippet b/Java/Groovy/Snippets/to-BigDecimal.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-BigDecimal.sublime-snippet
rename to Java/Groovy/Snippets/to-BigDecimal.sublime-snippet
diff --git a/Groovy/Snippets/to-BigInteger.sublime-snippet b/Java/Groovy/Snippets/to-BigInteger.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-BigInteger.sublime-snippet
rename to Java/Groovy/Snippets/to-BigInteger.sublime-snippet
diff --git a/Groovy/Snippets/to-Boolean.sublime-snippet b/Java/Groovy/Snippets/to-Boolean.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-Boolean.sublime-snippet
rename to Java/Groovy/Snippets/to-Boolean.sublime-snippet
diff --git a/Groovy/Snippets/to-Character.sublime-snippet b/Java/Groovy/Snippets/to-Character.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-Character.sublime-snippet
rename to Java/Groovy/Snippets/to-Character.sublime-snippet
diff --git a/Groovy/Snippets/to-Double.sublime-snippet b/Java/Groovy/Snippets/to-Double.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-Double.sublime-snippet
rename to Java/Groovy/Snippets/to-Double.sublime-snippet
diff --git a/Groovy/Snippets/to-Float.sublime-snippet b/Java/Groovy/Snippets/to-Float.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-Float.sublime-snippet
rename to Java/Groovy/Snippets/to-Float.sublime-snippet
diff --git a/Groovy/Snippets/to-Integer.sublime-snippet b/Java/Groovy/Snippets/to-Integer.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-Integer.sublime-snippet
rename to Java/Groovy/Snippets/to-Integer.sublime-snippet
diff --git a/Groovy/Snippets/to-List.sublime-snippet b/Java/Groovy/Snippets/to-List.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-List.sublime-snippet
rename to Java/Groovy/Snippets/to-List.sublime-snippet
diff --git a/Groovy/Snippets/to-String.sublime-snippet b/Java/Groovy/Snippets/to-String.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-String.sublime-snippet
rename to Java/Groovy/Snippets/to-String.sublime-snippet
diff --git a/Groovy/Snippets/to-URI.sublime-snippet b/Java/Groovy/Snippets/to-URI.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-URI.sublime-snippet
rename to Java/Groovy/Snippets/to-URI.sublime-snippet
diff --git a/Groovy/Snippets/to-URL.sublime-snippet b/Java/Groovy/Snippets/to-URL.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/to-URL.sublime-snippet
rename to Java/Groovy/Snippets/to-URL.sublime-snippet
diff --git a/Groovy/Snippets/try-__-catch__-finally.sublime-snippet b/Java/Groovy/Snippets/try-__-catch__-finally.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/try-__-catch__-finally.sublime-snippet
rename to Java/Groovy/Snippets/try-__-catch__-finally.sublime-snippet
diff --git a/Groovy/Snippets/try-__-catch__.sublime-snippet b/Java/Groovy/Snippets/try-__-catch__.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/try-__-catch__.sublime-snippet
rename to Java/Groovy/Snippets/try-__-catch__.sublime-snippet
diff --git a/Groovy/Snippets/upto(num)-{-n-__-}.sublime-snippet b/Java/Groovy/Snippets/upto(num)-{-n-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/upto(num)-{-n-__-}.sublime-snippet
rename to Java/Groovy/Snippets/upto(num)-{-n-__-}.sublime-snippet
diff --git a/Groovy/Snippets/var.sublime-snippet b/Java/Groovy/Snippets/var.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/var.sublime-snippet
rename to Java/Groovy/Snippets/var.sublime-snippet
diff --git a/Groovy/Snippets/while-___-{___}.sublime-snippet b/Java/Groovy/Snippets/while-___-{___}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/while-___-{___}.sublime-snippet
rename to Java/Groovy/Snippets/while-___-{___}.sublime-snippet
diff --git a/Groovy/Snippets/withInputStream-{-in-__-}.sublime-snippet b/Java/Groovy/Snippets/withInputStream-{-in-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withInputStream-{-in-__-}.sublime-snippet
rename to Java/Groovy/Snippets/withInputStream-{-in-__-}.sublime-snippet
diff --git a/Groovy/Snippets/withOutputStream-{-out-__-}.sublime-snippet b/Java/Groovy/Snippets/withOutputStream-{-out-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withOutputStream-{-out-__-}.sublime-snippet
rename to Java/Groovy/Snippets/withOutputStream-{-out-__-}.sublime-snippet
diff --git a/Groovy/Snippets/withPrintWriter-{-pw-__}.sublime-snippet b/Java/Groovy/Snippets/withPrintWriter-{-pw-__}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withPrintWriter-{-pw-__}.sublime-snippet
rename to Java/Groovy/Snippets/withPrintWriter-{-pw-__}.sublime-snippet
diff --git a/Groovy/Snippets/withReader-{-r-__-}.sublime-snippet b/Java/Groovy/Snippets/withReader-{-r-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withReader-{-r-__-}.sublime-snippet
rename to Java/Groovy/Snippets/withReader-{-r-__-}.sublime-snippet
diff --git a/Groovy/Snippets/withStream-{-in-__-}.sublime-snippet b/Java/Groovy/Snippets/withStream-{-in-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withStream-{-in-__-}.sublime-snippet
rename to Java/Groovy/Snippets/withStream-{-in-__-}.sublime-snippet
diff --git a/Groovy/Snippets/withStreams-{-Socket-s-__}.sublime-snippet b/Java/Groovy/Snippets/withStreams-{-Socket-s-__}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withStreams-{-Socket-s-__}.sublime-snippet
rename to Java/Groovy/Snippets/withStreams-{-Socket-s-__}.sublime-snippet
diff --git a/Groovy/Snippets/withWriter(charset)-{-w-__-}.sublime-snippet b/Java/Groovy/Snippets/withWriter(charset)-{-w-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withWriter(charset)-{-w-__-}.sublime-snippet
rename to Java/Groovy/Snippets/withWriter(charset)-{-w-__-}.sublime-snippet
diff --git a/Groovy/Snippets/withWriter-{-w-__}.sublime-snippet b/Java/Groovy/Snippets/withWriter-{-w-__}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withWriter-{-w-__}.sublime-snippet
rename to Java/Groovy/Snippets/withWriter-{-w-__}.sublime-snippet
diff --git a/Groovy/Snippets/withWriterAppend(charset)-{-__-}.sublime-snippet b/Java/Groovy/Snippets/withWriterAppend(charset)-{-__-}.sublime-snippet
similarity index 100%
rename from Groovy/Snippets/withWriterAppend(charset)-{-__-}.sublime-snippet
rename to Java/Groovy/Snippets/withWriterAppend(charset)-{-__-}.sublime-snippet
diff --git a/Java/Groovy/Symbol List - Case Label.tmPreferences b/Java/Groovy/Symbol List - Case Label.tmPreferences
new file mode 100644
index 0000000000..5344e7172b
--- /dev/null
+++ b/Java/Groovy/Symbol List - Case Label.tmPreferences
@@ -0,0 +1,19 @@
+
+
+
+ scope
+ source.groovy meta.statement.conditional.case.label.java
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+
+ s/\/\*.*?\*\///g; # remove block comments
+ s/\/\/[^\n]*\n//g; # remove line comments
+ s/\s+//g; # remove whitespace
+ s/^/case /; # prepend case keyword
+
+
+
+
diff --git a/Groovy/Symbol List - Variables.tmPreferences b/Java/Groovy/Symbol List - Classes.tmPreferences
similarity index 58%
rename from Groovy/Symbol List - Variables.tmPreferences
rename to Java/Groovy/Symbol List - Classes.tmPreferences
index bc79ee8f14..359c4c921a 100644
--- a/Groovy/Symbol List - Variables.tmPreferences
+++ b/Java/Groovy/Symbol List - Classes.tmPreferences
@@ -2,15 +2,13 @@
scope
- source.groovy meta.definition.class-variable.name
+ source.groovy meta.class.identifier entity.name.class
settings
+ showInIndexedSymbolList
+ 1
showInSymbolList
1
- symbolTransformation
-
- s/.+/$0/g
-
diff --git a/Groovy/Symbol List - Class Variables.tmPreferences b/Java/Groovy/Symbol List - Constants.tmPreferences
similarity index 54%
rename from Groovy/Symbol List - Class Variables.tmPreferences
rename to Java/Groovy/Symbol List - Constants.tmPreferences
index 1435271104..694d9f52ba 100644
--- a/Groovy/Symbol List - Class Variables.tmPreferences
+++ b/Java/Groovy/Symbol List - Constants.tmPreferences
@@ -2,15 +2,13 @@
scope
- source.groovy meta.definition.class meta.definition.class-variable.name
+ source.groovy entity.name.constant.java
settings
+ showInIndexedSymbolList
+ 1
showInSymbolList
1
- symbolTransformation
-
- s/.+/ $0/g
-
diff --git a/Groovy/Symbol List - Methods.tmPreferences b/Java/Groovy/Symbol List - Enums.tmPreferences
similarity index 54%
rename from Groovy/Symbol List - Methods.tmPreferences
rename to Java/Groovy/Symbol List - Enums.tmPreferences
index 3ffdd67b3b..d7da12f6c1 100644
--- a/Groovy/Symbol List - Methods.tmPreferences
+++ b/Java/Groovy/Symbol List - Enums.tmPreferences
@@ -2,15 +2,13 @@
scope
- source.groovy meta.definition.method.signature
+ source.groovy meta.enum.identifier entity.name.enum
settings
+ showInIndexedSymbolList
+ 1
showInSymbolList
1
- symbolTransformation
-
- s/\s*.*\s+(\w+)\s*(\(.*\)).*/ $1$2/g
-
diff --git a/Groovy/Symbol List - Classes.tmPreferences b/Java/Groovy/Symbol List - Fields.tmPreferences
similarity index 73%
rename from Groovy/Symbol List - Classes.tmPreferences
rename to Java/Groovy/Symbol List - Fields.tmPreferences
index e8df59ff5e..0354fa399d 100644
--- a/Groovy/Symbol List - Classes.tmPreferences
+++ b/Java/Groovy/Symbol List - Fields.tmPreferences
@@ -2,7 +2,7 @@
scope
- source.groovy entity.name.type.class
+ source.groovy meta.field.identifier variable.other
settings
showInSymbolList
diff --git a/Java/Groovy/Symbol List - Imports.tmPreferences b/Java/Groovy/Symbol List - Imports.tmPreferences
new file mode 100644
index 0000000000..15ac368c7c
--- /dev/null
+++ b/Java/Groovy/Symbol List - Imports.tmPreferences
@@ -0,0 +1,21 @@
+
+
+
+ scope
+ source.groovy meta.import meta.path
+ settings
+
+ showInIndexedSymbolList
+ 0
+ showInSymbolList
+ 1
+ symbolTransformation
+
+ s/\/\*.*?\*\///g; # remove block comments
+ s/\/\/[^\n]*\n//g; # remove line comments
+ s/\s+//g; # remove whitespace
+ s/^/import /; # prepend import keyword
+
+
+
+
diff --git a/Java/Groovy/Symbol List - Interfaces.tmPreferences b/Java/Groovy/Symbol List - Interfaces.tmPreferences
new file mode 100644
index 0000000000..4602ba54b2
--- /dev/null
+++ b/Java/Groovy/Symbol List - Interfaces.tmPreferences
@@ -0,0 +1,14 @@
+
+
+
+ scope
+ source.groovy meta.interface.identifier entity.name.interface
+ settings
+
+ showInIndexedSymbolList
+ 1
+ showInSymbolList
+ 1
+
+
+
diff --git a/Java/Groovy/Symbol List - Modules.tmPreferences b/Java/Groovy/Symbol List - Modules.tmPreferences
new file mode 100644
index 0000000000..a5aa305ec2
--- /dev/null
+++ b/Java/Groovy/Symbol List - Modules.tmPreferences
@@ -0,0 +1,18 @@
+
+
+
+ scope
+
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+
+ s/\/\*.*?\*\///g; # remove block comments
+ s/\/\/[^\n]*\n//g; # remove line comments
+ s/\s+//g; # remove whitespace
+
+
+
+
diff --git a/Java/Groovy/Symbol List - Packages.tmPreferences b/Java/Groovy/Symbol List - Packages.tmPreferences
new file mode 100644
index 0000000000..a9a1597786
--- /dev/null
+++ b/Java/Groovy/Symbol List - Packages.tmPreferences
@@ -0,0 +1,18 @@
+
+
+
+ scope
+
+ settings
+
+ showInSymbolList
+ 1
+ symbolTransformation
+
+ s/\/\*.*?\*\///g; # remove block comments
+ s/\/\/[^\n]*\n//g; # remove line comments
+ s/\s+//g; # remove whitespace
+
+
+
+
diff --git a/Java/Groovy/tests/syntax_test_groovy.groovy b/Java/Groovy/tests/syntax_test_groovy.groovy
new file mode 100644
index 0000000000..bec31e783e
--- /dev/null
+++ b/Java/Groovy/tests/syntax_test_groovy.groovy
@@ -0,0 +1,409 @@
+// SYNTAX TEST "Packages/Java/Groovy.sublime-syntax" \
+// <- source.groovy
+
+
+
+import java.io
+// ^^^^^^^ invalid.illegal.import-of-default-import
+import java.lang
+// ^^^^^^^^^ invalid.illegal.import-of-default-import
+import java.math.BigDecimal
+// ^^^^^^^^^^^^^^^^^^^^ invalid.illegal.import-of-default-import
+import java.math.BigInteger
+// ^^^^^^^^^^^^^^^^^^^^ invalid.illegal.import-of-default-import
+import java.net
+// ^^^^^^^^ invalid.illegal.import-of-default-import
+import java.util
+// ^^^^^^^^^ invalid.illegal.import-of-default-import
+import groovy.lang
+// ^^^^^^^^^^^ invalid.illegal.import-of-default-import
+import groovy.util
+// ^^^^^^^^^^^ invalid.illegal.import-of-default-import
+
+// Tests for issue 1260
+
+def defectiveSyntaxTest(String value) {
+// <- meta.function.return-type support.class
+// ^^^^^^^^^^^^^^^^^^^ entity.name.function
+// ^ meta.group punctuation.section.group.begin
+// ^^^^^^ meta.function.parameters support.class
+// ^^^^^ variable.parameter
+// ^ meta.definition.method punctuation.definition.parameters.end
+ println value
+}
+
+void voidCheck(String value) {
+// <- meta.function.return-type storage.type.void
+// ^ entity.name.function
+// ^ entity.name.function
+// ^ meta.function.parameters support.class
+// ^ variable.parameter
+}
+
+double interpretString(String value) {
+// <- meta.function.return-type storage.type.primitive
+// ^ entity.name.function
+// ^ entity.name.function
+// ^ meta.function.parameters support.class
+// ^ variable.parameter
+ return Double.parseDouble(value);
+}
+
+defectiveSyntaxTest("hello")
+// <- meta.function-call.identifier
+//^^^^^^^^^^^^^^^^^ meta.function-call.identifier
+// ^ meta.group punctuation.section.group.begin
+// ^^^^^^^ meta.function-call.arguments string.quoted.double
+// ^ meta.group punctuation.section.group.end
+
+voidCheck(123456)
+// <- meta.function-call.identifier variable.function
+//^^^^^^^ meta.function-call.identifier variable.function
+// ^ meta.group punctuation.section.group.begin
+// ^^^^^^ meta.function-call.arguments constant.numeric
+// ^ meta.group punctuation.section.group.end
+// ^ - meta.function-call
+
+chartHistogram([1,1,2,3])
+// <- meta.function-call.identifier variable.function
+//^^^^^^^^^^^^ meta.function-call.identifier variable.function
+// ^^^^^^^^^^ meta.function-call.arguments
+// ^ meta.group punctuation.section.group.begin
+// ^^^^^^^^^ meta.brackets
+// ^ punctuation.section.brackets.begin
+// ^ constant.numeric
+// ^ punctuation.separator.comma
+// ^ punctuation.section.brackets.end
+// ^ meta.group punctuation.section.group.end - meta.brackets
+
+def greeting = "Hello ${true ? 'World' : 'Home'}"
+// <- storage.type.def
+//^ storage.type.def
+// ^ keyword.operator.assignment
+// ^ punctuation.definition.string.begin
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double
+// ^^ punctuation.section.interpolation.begin
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^ source.groovy.embedded.groovy
+// ^^^^ constant.language
+// ^^^^^^^^^^^^^^^^^^ meta.evaluation.ternary
+// ^^ - meta.evaluation.ternary
+// ^ keyword.operator.ternary
+// ^ punctuation.definition.string.begin
+// ^^^^^^^ string.quoted.single
+// ^ punctuation.definition.string.end
+// ^ keyword.operator.ternary.expression-separator
+// ^ punctuation.definition.string.begin
+// ^^^^^^ string.quoted.single
+// ^ punctuation.definition.string.end
+// ^ punctuation.section.interpolation.end
+// ^ punctuation.definition.string.end
+// ^ - string.quoted - invalid
+
+
+
+
+
+//[ STRINGS ]//////////////////////////////////////////////////////////////// \
+
+
+multilineSingle = '''
+// ^^^ string.quoted.single.block punctuation.definition.string.begin
+ '''
+// ^^^ string.quoted.single.block punctuation.definition.string.end
+
+multilineDouble = """
+// ^^^ string.quoted.double.block punctuation.definition.string.begin
+ """
+// ^^^ string.quoted.double.block punctuation.definition.string.end
+
+multilineDollarSlashy = $/
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.begin
+ /$
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+escapedNewlineSingle = '\
+// ^ meta.string string.quoted.single punctuation.definition.string.begin \
+// ^^ constant.character.escape - invalid.illegal.unexpected-newline \
+ '
+// ^ string.quoted.single punctuation.definition.string.end
+
+escapedNewlineDouble = "\
+// ^ string.quoted.double punctuation.definition.string.begin \
+// ^^ string.quoted.double constant.character.escape - invalid.illegal.unexpected-newline \
+ "
+// ^ string.quoted.double punctuation.definition.string.end
+
+escapeNewlineTripleSingle = '''\
+// ^^^ string.quoted.single.block punctuation.definition.string.begin \
+// ^^ string.quoted.single.block constant.character.escape - invalid.illegal.unexpected-newline \
+ '''
+// ^^^ string.quoted.single.block punctuation.definition.string.end
+
+escapeNewlineTripleDouble = """\
+// ^^^ string.quoted.double.block punctuation.definition.string.begin \
+// ^^ string.quoted.double.block constant.character.escape - invalid.illegal.unexpected-newline \
+ """
+// ^^^ string.quoted.double.block punctuation.definition.string.end
+
+escapedNewlineInterpolated = "${\
+// ^^ string.quoted.double source.groovy.embedded.groovy constant.character.escape
+}";
+
+escapeInterpolation = "\${notInterpolated}"
+// ^^^^^^^^^^^^^^^^^^^^^ string.quoted.double
+// ^^ constant.character.escape - punctuation.section.embedded
+// ^^^^^^^^^^^^^^^^^ - source.groovy.embedded.groovy
+
+validEscapesSingle = '\$\'\"\t\n\r\t\f\b\u00D7\\'
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.single constant.character.escape
+
+validEscapesDouble = "\$\'\"\t\n\r\t\f\b\u00D7\\"
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double constant.character.escape
+
+validEscapesTripleSingle = '''\$\'\"\t\n\r\t\f\b\u00D7\\'''
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.single.block constant.character.escape
+
+validEscapesTripleDouble = """\$\'\"\t\n\r\t\f\b\u00D7\\"""
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.block constant.character.escape
+
+validEscapesSlashy= /\/\u00D7/
+// ^^^^^^^^ string.regexp meta.mode.extended constant.character.escape
+
+invalidEscapesSingle = '\y \1 \+ \{'
+// ^^^^^^^^^^^ meta.string string.quoted.single - constant.character.escape
+
+invalidEscapesDouble = "\y \1 \+ \{"
+// ^^^^^^^^^^^ meta.string string.quoted.double - constant.character.escape
+
+invalidEscapesTripleSingle = '''\y \1 \+ \{'''
+// ^^^^^^^^^^^ meta.string string.quoted.single.block - constant.character.escape
+
+invalidEscapesTripleDouble = """\y \1 \+ \{"""
+// ^^^^^^^^^^^ meta.string string.quoted.double.block - constant.character.escape
+
+regularCharactersSlashy = /\$\'\"\t\n\r\t\f\b\y\1\+\{/
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string string.regexp meta.mode.extended.regexp - constant.character.escape
+
+regularCharactersDollarSlashy = $/\$\'\"\t\n\r\t\f\b\y\1\+\{/$
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string string.other.dollar-slashy.block - constant.character.escape
+
+interpolation1 = "2 + 3 = ${2 + 3}"
+// ^^ punctuation.section.interpolation.begin
+// ^^^^^ source.groovy.embedded.groovy
+// ^ constant.numeric
+// ^ keyword.operator.arithmetic
+// ^ constant.numeric
+// ^ punctuation.section.interpolation.end
+// ^ punctuation.definition.string.end
+
+interpolation3 = "Hello $name"
+// ^^^^^ variable.other.interpolated
+// ^ punctuation.definition.string.end
+
+interpolation4 = "Hello $person.name"
+// ^^^^^^^ variable.other.interpolated
+// ^ punctuation.accessor.dot
+// ^^^^ string.quoted.double variable.other.interpolated
+// ^ punctuation.definition.string.end
+
+interpolation5 = "$a2_3"
+// ^^^^^ string.quoted.double variable.other.interpolated
+// ^ punctuation.definition.string.end
+
+interpolation6 = "The sum of 1 and 2 is equal to ${def a = 1; a + 2}"
+// ^^^^^^^^^^^^^^^^ meta.string string.quoted.double source.groovy.embedded.groovy
+// ^^^ meta.declaration.type support.class
+// ^ constant.numeric
+// ^ keyword.operator.arithmetic
+// ^ constant.numeric
+// ^ punctuation.definition.string.end
+
+interpolation7 = "foo { ${if (x) { y } else { z } } }"
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double
+// ^ - punctuation
+// ^^ keyword.control.conditional.if
+// ^ punctuation.section.block.begin
+// ^ punctuation.section.block.end - punctuation.section.interpolation
+// ^^^^ keyword.control.conditional.else
+// ^ punctuation.section.block.begin
+// ^ punctuation.section.block.end - punctuation.section.interpolation
+// ^ punctuation.section.interpolation.end
+// ^ - punctuation
+// ^ punctuation.definition.string.end
+
+unicodeInterpolation1 = "$À"
+// ^^ variable.other.interpolated
+// ^ meta.string string.quoted.double punctuation.definition.string.end
+
+unicodeInterpolation2 = "$À.ö"
+// ^^ variable.other.interpolated
+// ^ punctuation.accessor.dot
+// ^ variable.other.interpolated
+// ^ meta.string string.quoted.double punctuation.definition.string.end
+
+unicodeInterpolation3 = "$\u00c0.\u00F6"
+// ^^^^^^^ variable.other.interpolated
+// ^ punctuation.accessor.dot
+// ^^^^^^ variable.other.interpolated
+// ^ meta.string string.quoted.double punctuation.definition.string.end
+
+invalidInterpolation1 = "$"
+// ^ invalid.illegal.stray-dollar-sign
+// ^ meta.string string.quoted.double punctuation.definition.string.end
+
+invalidInterpolation2 = "$21"
+// ^^^ invalid.illegal.malformatted-interpolation - variable.other.interpolated
+// ^ meta.string string.quoted.double punctuation.definition.string.end
+
+invalidInterpolation3 = "$$"
+// ^^ invalid.illegal - variable.other.interpolated
+// ^ meta.string string.quoted.double punctuation.definition.string.end
+
+notAnAccessorDot1 = "$obj."
+// ^^^^^ string.quoted.double
+// ^^^^ variable.other.interpolated
+// ^ - punctuation.accessor.dot
+// ^ punctuation.definition.string.end - variable.other.interpolated
+
+notAnAccessorDot2 = "$obj.2"
+// ^^^^^^ string.quoted.double
+// ^^^^ variable.other.interpolated
+// ^ - punctuation.accessor.dot
+// ^ - variable.other.interpolated
+// ^ punctuation.definition.string.end
+
+notAnAccessorDot3 = "$obj.×"
+// ^^^^^^ string.quoted.double
+// ^^^^ variable.other.interpolated
+// ^ - punctuation.accessor.dot
+// ^ - variable.other.interpolated
+// ^ punctuation.definition.string.end
+
+notAnAccessorDot4 = "$obj.\u00D7"
+// ^^^^^^^^^^^ string.quoted.double
+// ^^^^ variable.other.interpolated
+// ^ - punctuation.accessor.dot
+// ^^^^^^ constant.character.escape - variable.other.interpolated
+// ^ punctuation.definition.string.end
+
+notASafeNavigation = "$obj?.nope"
+// ^^^^^^^^^^ string.quoted.double
+// ^^^^ variable.other.interpolated
+// ^^ - punctuation.accessor
+// ^^^^ - variable.other.interpolated
+// ^ punctuation.definition.string.end
+
+notAMethodCall = "$obj.nope()"
+// ^^^^^^^^^^^ string.quoted.double
+// ^^^^ variable.other.interpolated
+// ^ punctuation.accessor.dot
+// ^^^^ variable.other.interpolated
+// ^^^^^^ - meta.method-call
+// ^ punctuation.definition.string.end
+
+lazyInterpolation = "lazy ${-> someVariable}"
+// ^^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double
+// ^^ keyword.declaration.function.arrow
+// ^ punctuation.definition.string.end
+
+invalidStringClose = """""""
+// ^^^^ invalid.illegal
+
+unclosedStr1 = "
+// ^ invalid.illegal.unexpected-newline
+
+unclosedStr2 = '
+// ^ invalid.illegal.unexpected-newline
+
+unclosedStr3 = "newlines ${'''
+ aren't valid inside the interpolation but outside of the
+ multiline string
+'''}
+// ^ invalid.illegal.unexpected-newline
+
+unclosedStr4 = "newlines ${'''
+ aren't valid inside the interpolation but outside of the
+ multiline string'''
+// ^ invalid.illegal.unexpected-newline
+
+// multiline string embedded in a single line string
+embed1 = "embed ${'''
+// ^ string.quoted.double punctuation.definition.string.begin
+// ^^^^^^ string.quoted.double
+// ^^ punctuation.section.interpolation.begin
+// ^^^ source.groovy.embedded.groovy
+ Some text
+//^^^^^^^^^ string.quoted.double source.groovy.embedded.groovy string.quoted.single.block
+'''}"
+// ^ punctuation.section.interpolation.end
+// ^ string.quoted.double punctuation.definition.string.end
+
+// multiline > singleline > multiline
+embed2 = """I hope
+ ${
+ " people ${'''don't
+// ^^^^^^^ string.quoted.double.block source.groovy.embedded.groovy string.quoted.double
+// ^^^^^ string.quoted.single.block
+ actually'''}"
+// ^ string.quoted.double.block source.groovy.embedded.groovy string.quoted.double punctuation.section.interpolation.end
+ }
+// ^ punctuation.section.interpolation.end
+ do this
+ """
+//^^^ string.quoted.double.block punctuation.definition.string.end
+
+embeddedInterpolation1 = "${"$yep"}"
+// ^^^^ string.quoted.double source.groovy.embedded.groovy string.quoted.double variable.other.interpolated
+
+embeddedNonInterpolation = "${'$nope'}"
+// ^^^^^ string.quoted.double source.groovy.embedded.groovy string.quoted.single - variable.other.interpolated
+
+dollarSlashy01 = $/Hello $person.name/$
+// ^^^^^^^ string.other.dollar-slashy.block variable.other.interpolated
+// ^ punctuation.accessor.dot
+// ^^^^ string.other.dollar-slashy.block variable.other.interpolated
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy02 = $/today is ${new Date().format( 'yyyy-MM-dd' )}./$
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.groovy.embedded.groovy
+// ^^ punctuation.section.interpolation.begin
+// ^^^ keyword.other.storage.new
+// ^^^^^^^^^^^^^^^^^^^^^^ meta.function-call
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy03 = $/$ dollar sign/$
+// ^^^^^^^^^^^^^ string.other.dollar-slashy.block - invalid.illegal
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy04 = $/$$ escaped dollar sign/$
+// ^^ string.other.dollar-slashy.block constant.character.escape - invalid.illegal - variable.other.interpolated
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy05 = $/\ backslash/$
+// ^^^^^^^^^^^ string.other.dollar-slashy.block - invalid.illegal - constant.character.escape
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy06 = $// forward slash/$
+// ^^^^^^^^^^^^^^^ string.other.dollar-slashy.block - invalid.illegal - constant.character.escape
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy07 = $/$/ escaped forward slash/$
+// ^^ string.other.dollar-slashy.block constant.character.escape
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy08 = $/$$$/ escaped opening dollar slashy/$
+// ^^^^ string.other.dollar-slashy.block constant.character.escape
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy09 = $/$/$$ escaped closing dollar slashy/$
+// ^^^^ string.other.dollar-slashy.block constant.character.escape
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+dollarSlashy10 = $/${$$}/$
+// ^^ string.other.dollar-slashy.block source.groovy.embedded.groovy - constant.character.escape
+// ^^ string.other.dollar-slashy.block punctuation.definition.string.end
+
+interpolatedSlashy = /a ${color} $obj$/
+// ^^^^^ meta.string string.regexp meta.interpolation
+// ^^^^ string.regexp variable.other.interpolated
+// ^ string.regexp - variable.other.interpolated
diff --git a/Java/Groovy/tests/syntax_test_jenkins.Jenkinsfile b/Java/Groovy/tests/syntax_test_jenkins.Jenkinsfile
new file mode 100644
index 0000000000..2e88812b11
--- /dev/null
+++ b/Java/Groovy/tests/syntax_test_jenkins.Jenkinsfile
@@ -0,0 +1,148 @@
+// SYNTAX TEST "Packages/Java/Groovy.sublime-syntax" \
+// <- source.groovy
+
+// this is a comment
+// <- comment.line.double-slash punctuation.definition.comment
+// ^^^^^^^^^^^^^^^^^^ comment.line.double-slash
+
+pipeline {
+ agent {
+ docker { image 'node:20.17.0-alpine3.20' }
+ }
+ stages {
+ stage('Test') {
+ steps {
+ sh 'node --version'
+ }
+ }
+ }
+}
+
+def call() {
+// <- meta.function.return-type support.class
+//^ meta.function.return-type support.class
+// ^^^^ meta.function.identifier entity.name.function
+// ^ meta.function.parameters meta.group punctuation.section.group.begin
+// ^ meta.function.parameters meta.group punctuation.section.group.end
+// ^ meta.block punctuation.section.block.begin
+
+ sh """#!/bin/bash
+// ^^ meta.block support.function
+// ^^^ meta.string string.quoted.double.block punctuation.definition.string.begin meta.shell
+// ^ meta.shell source.shell.bash.embedded comment.line.number-sign.shell punctuation.definition.comment.shell
+ echo "hello ${world}"
+// ^^^^ meta.shell source.shell.bash.embedded meta.function-call.identifier.shell support.function.shell
+// ^ meta.interpolation.parameter.shell punctuation.definition.variable.shell
+// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.begin.shell
+// ^^^^^ meta.interpolation.parameter.shell variable.other.readwrite.shell
+// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.end.shell
+// ^ - meta.interpolation
+ """
+// ^^^ meta.string string.quoted.double.block punctuation.definition.string.end meta.shell
+
+ sh '''#!/bin/bash
+// ^^ meta.block support.function
+// ^^^ meta.string string.quoted.single.block punctuation.definition.string.begin meta.shell
+// ^ meta.shell source.shell.bash.embedded comment.line.number-sign.shell punctuation.definition.comment.shell
+ echo "hello ${world}"
+// ^^^^ meta.shell source.shell.bash.embedded meta.function-call.identifier.shell support.function.shell
+// ^ meta.interpolation.parameter.shell punctuation.definition.variable.shell
+// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.begin.shell
+// ^^^^^ meta.interpolation.parameter.shell variable.other.readwrite.shell
+// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.end.shell
+// ^ - meta.interpolation
+ '''
+// ^^^ meta.string string.quoted.single.block punctuation.definition.string.end meta.shell
+
+ sh '#!/bin/bash
+// ^^ meta.block support.function
+// ^ meta.string string.quoted.single punctuation.definition.string.begin meta.shell
+// ^ meta.shell source.shell.bash.embedded comment.line.number-sign.shell punctuation.definition.comment.shell
+ echo "hello ${world}"
+// ^^^^ meta.shell source.shell.bash.embedded meta.function-call.identifier.shell support.function.shell
+// ^ meta.interpolation.parameter.shell punctuation.definition.variable.shell
+// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.begin.shell
+// ^^^^^ meta.interpolation.parameter.shell variable.other.readwrite.shell
+// ^ meta.interpolation.parameter.shell punctuation.section.interpolation.end.shell
+// ^ - meta.interpolation
+ '
+// ^ meta.string string.quoted.single punctuation.definition.string.end meta.shell
+}
+// <- meta.block punctuation.section.block.end
+
+@Library('somelib') _
+// <- meta.declaration.type meta.annotation punctuation.definition.annotation
+//^^^^^^ meta.declaration.type meta.annotation variable.annotation
+
+properties([
+ parameters([
+ booleanParam(name: 'SOME_PARAM', defaultValue: false, description: 'Example parameter'),
+ validatingString(name: 'COMMIT_HASH', defaultValue: '', regex: '^(?:[a-z0-9]{40})?$', failedValidationMessage: 'Commit must be valid if specified', description: 'Commit hash'),
+ ]),
+])
+
+// Project config
+Map config = [
+// <- storage.type.class
+// ^^^^^^ variable.other.readwrite
+// ^ keyword.operator.assignment
+// ^ meta.brackets punctuation.section.brackets.begin
+ containerWorkDir: '/src',
+// ^^^^^^^^^^^^^^^^ meta.variable.identifier variable.other
+// ^ punctuation.definition.separator.key-value
+// ^^^^^^ meta.string string.quoted.single
+// ^ punctuation.separator.comma
+ DEFAULT_BRANCH: 'master',
+// ^^^^^^^^^^^^^^ constant.other.java
+// ^ punctuation.definition.separator.key-value
+]
+// <- meta.brackets punctuation.section.brackets.end
+//^ - meta.structure
+// Deployment decision variables
+Boolean isPullRequest = (env.CHANGE_ID != null)
+// ^^^^ storage.type.primitive
+// ^^^^^^^^^^^^^ variable.other
+// ^ keyword.operator.assignment
+// ^^^^^^^^^^^^^^^^^^^^^^^ meta.group
+// ^ punctuation.section.group.begin
+// ^^ keyword.operator.comparison
+// ^^^^ constant.language.null
+// ^ punctuation.section.group.end
+
+// Environment section
+env.SOME_ENV_VAR = "refs/heads/${config.DEFAULT_BRANCH.toLowerCase()}"
+
+int something = sh(returnStdout: true, script: '''#!/bin/bash
+ set -eu
+ echo 7
+ ''')
+
+node('some-node-name') {
+ try {
+ // <- meta.block keyword.control.exception.try
+ // ^ punctuation.section.braces.begin
+ lock(lockName) {
+
+ }
+ } catch (InterruptedException e) {
+ // <- punctuation.section.braces.end
+ //^^^^^ keyword.control.exception.catch
+ // ^ punctuation.section.group.begin
+ // ^^^^^^^^^^^^^^^^^^^^ storage.type.class
+ // ^ variable.other.readwrite
+ // ^ punctuation.section.group.end
+ // ^ punctuation.section.block.begin
+ if (isDeployment) {
+ // <- meta.braces meta.braces keyword.control.conditional.if
+ // ^ meta.braces meta.braces meta.group punctuation.section.group.begin
+ // ^^^^^^^^^^^^ meta.braces meta.braces meta.group variable.other.readwrite
+ // ^ meta.braces meta.braces meta.group punctuation.section.group.end
+ // ^ meta.braces meta.braces meta.braces punctuation.section.braces.begin
+ notify.deployment(channel: config.jobStatusChannel, status: 'ABORTED', environment: params.CI_ENVIRONMENT)
+ }
+ throw e
+ // <- meta.block meta.block keyword.control.flow.throw
+ // ^ meta.block meta.block variable.other.readwrite
+ }
+ // <- meta.braces meta.braces punctuation.section.braces.end
+}
diff --git a/Java/Groovy/tests/syntax_test_scope_conflicts.groovy b/Java/Groovy/tests/syntax_test_scope_conflicts.groovy
new file mode 100644
index 0000000000..44b7692f89
--- /dev/null
+++ b/Java/Groovy/tests/syntax_test_scope_conflicts.groovy
@@ -0,0 +1,177 @@
+// SYNTAX TEST "Packages/Java/Groovy.sublime-syntax" \
+// <- source.groovy
+
+//[ MERGE CONFLICT MARKERS ]///////////////////////////////////////////////// \
+
+
+<<<<<<< HEAD
+// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+ // <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+ ours
+=======
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ theirs
+======= branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ theirs
+|||||||
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ base
+||||||| branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ base
+>>>>>>> master
+// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+ // <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+ after
+
+multilineDoubleMergeConflictMarkers = """
+<<<<<<< HEAD
+// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+ // <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+ ours
+=======
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ theirs
+======= branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ theirs
+|||||||
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ base
+||||||| branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ base
+>>>>>>> master
+// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+ // <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+ after
+"""
+
+
+multilineSingleMergeConflictMarkers = '''
+<<<<<<< HEAD
+// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+ // <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+ ours
+=======
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ theirs
+======= branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ theirs
+|||||||
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ base
+||||||| branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ base
+>>>>>>> master
+// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+ // <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+ after
+'''
+
+
+multilineDollarSlashyMergeConflictMarkers = $/
+<<<<<<< HEAD
+// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+ // <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+ ours
+=======
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ theirs
+======= branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ theirs
+|||||||
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+ base
+||||||| branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+ base
+>>>>>>> master
+// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+ // <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+ after
+/$
diff --git a/Java/Groovy/tests/syntax_test_shebang.groovy b/Java/Groovy/tests/syntax_test_shebang.groovy
new file mode 100644
index 0000000000..6646da2249
--- /dev/null
+++ b/Java/Groovy/tests/syntax_test_shebang.groovy
@@ -0,0 +1,5 @@
+#! SYNTAX TEST "Packages/Java/Groovy.sublime-syntax" groovy
+#! <- source.groovy comment.line.shebang.groovy punctuation.definition.comment.groovy
+ #! <- comment.line.shebang.groovy punctuation.definition.comment.groovy
+#!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.shebang.groovy
+#! ^^^^^^ comment.line.shebang.groovy constant.language.shebang.groovy
diff --git a/Java/Java.sublime-syntax b/Java/Java.sublime-syntax
index 15b5ff89ba..fdbdf6520e 100644
--- a/Java/Java.sublime-syntax
+++ b/Java/Java.sublime-syntax
@@ -16,119 +16,20 @@ first_line_match: |-
| ^ \s* // .*? -\*- .*? \bjava\b .*? -\*- # editorconfig
)
-###############################################################################
-
-variables:
- shebang_language: \b(?:bsh|java)\b
-
- # Reserved keywords
- # https://docs.oracle.com/javase/specs/jls/se13/html/jls-3.html#jls-3.9
- reserved_words: |-
- (?x:
- {{keywords}}
- | {{storage_types}}
- | {{storage_modifiers}}
- | {{constants}}
- | {{variables}}
- )
- keywords: |-
- (?x:
- {{declaration_keywords}}
- | {{control_keywords}}
- | {{operator_keywords}}
- | {{illegal_keywords}}
- )
- declaration_keywords: |-
- (?x: class | enum | @?interface | var | void | extends | implements | import | package )
- control_keywords: |-
- (?x: assert | break | case | catch | continue | do | else | finally | for
- | if | return | switch | throw | throws | try | while | yield )
- operator_keywords: |-
- (?x: new | instanceof )
- illegal_keywords: |-
- (?x: const | goto )
-
- # Storage Modifiers
- storage_modifiers: |-
- (?x:
- {{class_modifier}}
- | {{class_no_modifier}}
- )
- # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.1.1
- class_modifier: |-
- (?x: public | protected | private | abstract | final | sealed | static | strictfp )
- class_no_modifier: |-
- (?x: default | native | synchronized | transient | volatile )
- # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.8
- constructor_modifier: |-
- (?x: public | protected | private )
- constructor_no_modifier: |-
- (?x: abstract | default | final | native | sealed | static | strictfp | synchronized | transient | volatile )
- # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.3.1
- field_modifier: |-
- (?x: public | protected | private | final | static | transient | volatile )
- field_no_modifier: |-
- (?x: abstract | default | native | sealed | strictfp | synchronized )
- # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-9.1.1
- interface_modifier: |-
- (?x: public | protected | private | abstract | sealed | static | strictfp )
- interface_no_modifier: |-
- (?x: default | final | native | synchronized | transient | volatile )
- # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.4.3
- # https://docs.oracle.com/javase/specs/jls/se13/html/jls-9.html#jls-9.4
- method_modifier: |-
- (?x: public | protected | private | abstract | default | final | native | static | strictfp | synchronized )
- method_no_modifier: |-
- (?x: sealed | transient | volatile )
-
- # Storage Types
- storage_types: |-
- (?x: boolean | byte | char | short | int | float | long | double )
-
- # Literals
- constants: |-
- (?x: false | null | true )
- variables: |-
- (?x: _ | super | this )
-
- # Identifiers
- break: (?!{{id_char}})
-
- identifier: (?!{{reserved_words}}[^{{id_char}}]){{id}}
-
- id: (?:{{id_first_char}}{{id_char}}*)
- id_first_char: '[\p{L}_$]'
- id_char: '[\p{L}\p{N}_$]'
-
- classcase_id: (?:\p{Lu}{{id_char}}*)
- lowercase_id: (?:[_$]*\p{Ll}[\p{Ll}\p{N}_$]*{{break}})
- uppercase_id: (?:[_$]*\p{Lu}[\p{Lu}\p{N}_$]*{{break}})
-
- # digits
- bin_digit: '[01_]'
- oct_digit: '[0-7_]'
- dec_digit: '[\d_]'
- hex_digit: '[\h_]'
- dec_exponent: '[eE][-+]?{{dec_digit}}*'
- hex_exponent: '[pP][-+]?{{dec_digit}}*'
- float_suffix: '[dDfF]{{break}}'
- int_suffix: '[lL]{{break}}'
-
- escape_octal: \\[0-3]?[0-7]{1,2}
- escape_other: \\[btnfr"'\\]
- escape_unicode: \\u+\h{4}
-
- # accessor but no variadic operator
- single_dot: \.(?!\.)
-
-###############################################################################
+###[ CONTEXTS ]################################################################
contexts:
+ prototype:
+ - include: comments
+ - include: illegal-keywords
+
main:
- meta_include_prototype: false
- match: ''
push: [java, shebang]
+###[ JAVA ]####################################################################
+
java:
- include: import
- include: module
@@ -187,7 +88,7 @@ contexts:
scope:
comment.block.documentation.java
punctuation.definition.comment.begin.java
- embed: Packages/Java/Embeddings/JavaDoc.sublime-syntax#javadoc
+ embed: Packages/Java/Java/Embeddings/JavaDoc.sublime-syntax#javadoc
embed_scope: comment.block.documentation.java
escape: \*+/
escape_captures:
@@ -2522,7 +2423,6 @@ contexts:
scope: punctuation.definition.string.end.java
pop: 1
- include: illegal-newline
- - include: merge-conflict-markers
- include: literal-string-escapes
literal-double-quoted-textblocks:
@@ -2539,8 +2439,8 @@ contexts:
- match: \"{3}
scope: punctuation.definition.string.end.java
pop: 1
- - include: merge-conflict-markers
- include: literal-string-escapes
+ - include: merge-conflict-markers
literal-string-escapes:
# https://docs.oracle.com/javase/specs/jls/se13/html/jls-3.html#jls-3.3
@@ -2556,21 +2456,115 @@ contexts:
operators:
# https://docs.oracle.com/javase/specs/jls/se13/html/jls-3.html#jls-3.12
- - match: (<<|>>>?|[-+*/%|&\^])=
- scope: keyword.operator.assignment.augmented.java
- - match: '<<|>>>?'
- scope: keyword.operator.bitwise.java
- - match: '==|!=|<=|>=|<>|<|>'
+ - include: diamond-operators
+ - include: assignment-augmented-bitwise-shift-operators
+ - include: bitwise-shift-operators
+ - include: relational-operators
+ - include: assignment-augmented-operators
+ - include: arithmetic-operators
+ - include: logical-operators
+ - include: bitwise-operators
+ - include: comparison-operators
+ - include: assignment-operators
+ - include: ternary-operators
+
+ diamond-operators:
+ - match: '<>'
scope: keyword.operator.comparison.java
+
+ assignment-augmented-bitwise-shift-operators:
+ # NOTE: no unsigned shift left augmented assignment in Java
+ - match: '>>>='
+ scope: keyword.operator.assignment.augmented.bitwise.shift.right.unsigned.java
+
+ - match: '<<='
+ scope: keyword.operator.assignment.augmented.bitwise.shift.left.signed.java
+ - match: '>>='
+ scope: keyword.operator.assignment.augmented.bitwise.shift.right.signed.java
+
+ bitwise-shift-operators:
+ # NOTE: no unsigned shift left in Java
+ - match: '>>>'
+ scope: keyword.operator.bitwise.shift.right.unsigned.java
+
+ - match: '<<'
+ scope: keyword.operator.bitwise.shift.left.signed.java
+ - match: '>>'
+ scope: keyword.operator.bitwise.shift.right.signed.java
+
+ relational-operators:
+ - match: '<='
+ scope: keyword.operator.relational.less-equal.java
+ - match: '>='
+ scope: keyword.operator.relational.greater-equal.java
+
+ - match: '<'
+ scope: keyword.operator.relational.less.java
+ - match: '>'
+ scope: keyword.operator.relational.greater.java
+
+ assignment-augmented-operators:
+ - match: '\+='
+ scope: keyword.operator.assignment.augmented.addition.java
+ - match: '-='
+ scope: keyword.operator.assignment.augmented.subtraction.java
+ - match: '\*='
+ scope: keyword.operator.assignment.augmented.multiplication.java
+ - match: '/='
+ scope: keyword.operator.assignment.augmented.division.java
+ - match: '%='
+ scope: keyword.operator.assignment.augmented.remainder.java
+
+ - match: ([|&\^])=
+ scope: keyword.operator.assignment.augmented.java
+
+ arithmetic-operators:
+ - match: '\+\+'
+ scope: keyword.operator.arithmetic.increment.java
+ - match: '\-\-'
+ scope: keyword.operator.arithmetic.decrement.java
+
+ - match: '\+'
+ scope: keyword.operator.arithmetic.addition.java
+ - match: '\-'
+ scope: keyword.operator.arithmetic.subtraction.java
+ - match: '\*'
+ scope: keyword.operator.arithmetic.multiplication.java
+ - match: '/'
+ scope: keyword.operator.arithmetic.division.java
+ - match: '%'
+ scope: keyword.operator.arithmetic.remainder.java
+
+ logical-operators:
+ - match: '&&'
+ scope: keyword.operator.logical.and.java
+ - match: '\|\|'
+ scope: keyword.operator.logical.or.java
+ - match: '!(?!=)'
+ scope: keyword.operator.logical.not.java
+
+ bitwise-operators:
+ - match: '~'
+ scope: keyword.operator.bitwise.not.java
+ - match: '\^'
+ scope: keyword.operator.bitwise.xor.java
+ - match: '&'
+ scope: keyword.operator.bitwise.and.java
+ - match: '\|'
+ scope: keyword.operator.bitwise.or.java
+
+ comparison-operators:
+ - match: '=='
+ scope: keyword.operator.comparison.equal.value.java
+ - match: '!='
+ scope: keyword.operator.comparison.not-equal.value.java
+
+ assignment-operators:
- match: '='
scope: keyword.operator.assignment.java
push: variable-initializer
- - match: '\+\+?|\-\-?|[*/%]'
- scope: keyword.operator.arithmetic.java
- - match: '!|&&|\|\|'
- scope: keyword.operator.logical.java
- - match: '[~|&\^]'
- scope: keyword.operator.bitwise.java
+
+ ternary-operators:
- match: '\?'
scope: keyword.operator.ternary.java
push: ternary-expression
@@ -3362,10 +3356,6 @@ contexts:
###[ PROTOTYPES ]##############################################################
- prototype:
- - include: comments
- - include: illegal-keywords
-
annotation-else-pop:
- include: annotations
- include: else-pop
@@ -3473,3 +3463,108 @@ contexts:
stray-group:
- match: \)
scope: invalid.illegal.stray.java
+
+###[ VARIABLES ]###############################################################
+
+variables:
+ shebang_language: \b(?:bsh|java)\b
+
+ # Reserved keywords
+ # https://docs.oracle.com/javase/specs/jls/se13/html/jls-3.html#jls-3.9
+ reserved_words: |-
+ (?x:
+ {{keywords}}
+ | {{storage_types}}
+ | {{storage_modifiers}}
+ | {{constants}}
+ | {{variables}}
+ )
+ keywords: |-
+ (?x:
+ {{declaration_keywords}}
+ | {{control_keywords}}
+ | {{operator_keywords}}
+ | {{illegal_keywords}}
+ )
+ declaration_keywords: |-
+ (?x: class | enum | @?interface | var | void | extends | implements | import | package )
+ control_keywords: |-
+ (?x: assert | break | case | catch | continue | do | else | finally | for
+ | if | return | switch | throw | throws | try | while | yield )
+ operator_keywords: |-
+ (?x: new | instanceof )
+ illegal_keywords: |-
+ (?x: const | goto )
+
+ # Storage Modifiers
+ storage_modifiers: |-
+ (?x:
+ {{class_modifier}}
+ | {{class_no_modifier}}
+ )
+ # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.1.1
+ class_modifier: |-
+ (?x: public | protected | private | abstract | final | sealed | static | strictfp )
+ class_no_modifier: |-
+ (?x: default | native | synchronized | transient | volatile )
+ # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.8
+ constructor_modifier: |-
+ (?x: public | protected | private )
+ constructor_no_modifier: |-
+ (?x: abstract | default | final | native | sealed | static | strictfp | synchronized | transient | volatile )
+ # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.3.1
+ field_modifier: |-
+ (?x: public | protected | private | final | static | transient | volatile )
+ field_no_modifier: |-
+ (?x: abstract | default | native | sealed | strictfp | synchronized )
+ # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-9.1.1
+ interface_modifier: |-
+ (?x: public | protected | private | abstract | sealed | static | strictfp )
+ interface_no_modifier: |-
+ (?x: default | final | native | synchronized | transient | volatile )
+ # https://docs.oracle.com/javase/specs/jls/se13/html/jls-8.html#jls-8.4.3
+ # https://docs.oracle.com/javase/specs/jls/se13/html/jls-9.html#jls-9.4
+ method_modifier: |-
+ (?x: public | protected | private | abstract | default | final | native | static | strictfp | synchronized )
+ method_no_modifier: |-
+ (?x: sealed | transient | volatile )
+
+ # Storage Types
+ storage_types: |-
+ (?x: boolean | byte | char | short | int | float | long | double )
+
+ # Literals
+ constants: |-
+ (?x: false | null | true )
+ variables: |-
+ (?x: _ | super | this )
+
+ # Identifiers
+ break: (?!{{id_char}})
+
+ identifier: (?!{{reserved_words}}[^{{id_char}}]){{id}}
+
+ id: (?:{{id_first_char}}{{id_char}}*)
+ id_first_char: '[\p{L}_$]'
+ id_char: '[\p{L}\p{N}_$]'
+
+ classcase_id: (?:\p{Lu}{{id_char}}*)
+ lowercase_id: (?:[_$]*\p{Ll}[\p{Ll}\p{N}_$]*{{break}})
+ uppercase_id: (?:[_$]*\p{Lu}[\p{Lu}\p{N}_$]*{{break}})
+
+ # digits
+ bin_digit: '[01_]'
+ oct_digit: '[0-7_]'
+ dec_digit: '[\d_]'
+ hex_digit: '[\h_]'
+ dec_exponent: '[eE][-+]?{{dec_digit}}*'
+ hex_exponent: '[pP][-+]?{{dec_digit}}*'
+ float_suffix: '[dDfF]{{break}}'
+ int_suffix: '[lL]{{break}}'
+
+ escape_octal: \\[0-3]?[0-7]{1,2}
+ escape_other: \\[btnfr"'\\]
+ escape_unicode: \\u+\h{4}
+
+ # accessor but no variadic operator
+ single_dot: \.(?!\.)
diff --git a/Java/Ant.sublime-build b/Java/Java/Ant.sublime-build
similarity index 100%
rename from Java/Ant.sublime-build
rename to Java/Java/Ant.sublime-build
diff --git a/Java/Java - Comments.tmPreferences b/Java/Java/Comments.tmPreferences
similarity index 100%
rename from Java/Java - Comments.tmPreferences
rename to Java/Java/Comments.tmPreferences
diff --git a/Java/Java - Completion Rules.tmPreferences b/Java/Java/Completion Rules.tmPreferences
similarity index 100%
rename from Java/Java - Completion Rules.tmPreferences
rename to Java/Java/Completion Rules.tmPreferences
diff --git a/Java/Embeddings/CSS (for JSP).sublime-syntax b/Java/Java/Embeddings/CSS (for JSP).sublime-syntax
similarity index 100%
rename from Java/Embeddings/CSS (for JSP).sublime-syntax
rename to Java/Java/Embeddings/CSS (for JSP).sublime-syntax
diff --git a/Java/Embeddings/JSON (for JSP).sublime-syntax b/Java/Java/Embeddings/JSON (for JSP).sublime-syntax
similarity index 100%
rename from Java/Embeddings/JSON (for JSP).sublime-syntax
rename to Java/Java/Embeddings/JSON (for JSP).sublime-syntax
diff --git a/Java/Embeddings/Java (for HTML).sublime-syntax b/Java/Java/Embeddings/Java (for HTML).sublime-syntax
similarity index 100%
rename from Java/Embeddings/Java (for HTML).sublime-syntax
rename to Java/Java/Embeddings/Java (for HTML).sublime-syntax
diff --git a/Java/Embeddings/Java (for JSP).sublime-syntax b/Java/Java/Embeddings/Java (for JSP).sublime-syntax
similarity index 100%
rename from Java/Embeddings/Java (for JSP).sublime-syntax
rename to Java/Java/Embeddings/Java (for JSP).sublime-syntax
diff --git a/Java/Embeddings/JavaDoc.sublime-syntax b/Java/Java/Embeddings/JavaDoc.sublime-syntax
similarity index 100%
rename from Java/Embeddings/JavaDoc.sublime-syntax
rename to Java/Java/Embeddings/JavaDoc.sublime-syntax
diff --git a/Java/Embeddings/JavaScript (for JSP).sublime-syntax b/Java/Java/Embeddings/JavaScript (for JSP).sublime-syntax
similarity index 100%
rename from Java/Embeddings/JavaScript (for JSP).sublime-syntax
rename to Java/Java/Embeddings/JavaScript (for JSP).sublime-syntax
diff --git a/Java/Fold.tmPreferences b/Java/Java/Fold.tmPreferences
similarity index 60%
rename from Java/Fold.tmPreferences
rename to Java/Java/Fold.tmPreferences
index ddbac01964..97a473c2c5 100644
--- a/Java/Fold.tmPreferences
+++ b/Java/Java/Fold.tmPreferences
@@ -7,6 +7,24 @@
foldScopes
+
+ begin
+ punctuation.definition.comment.begin
+ end
+ punctuation.definition.comment.end
+
+
+ begin
+ punctuation.definition.string.begin
+ end
+ punctuation.definition.string.end
+
+
+ begin
+ punctuation.definition.generic.begin
+ end
+ punctuation.definition.generic.end
+
begin
punctuation.section.block.begin
@@ -32,6 +50,8 @@
punctuation.section.group.end
+ indentationFoldingEnabled
+
diff --git a/Java/Java - Indentation Rules (Comments).tmPreferences b/Java/Java/Indentation Rules (Comments).tmPreferences
similarity index 100%
rename from Java/Java - Indentation Rules (Comments).tmPreferences
rename to Java/Java/Indentation Rules (Comments).tmPreferences
diff --git a/Java/Java - Indentation Rules.tmPreferences b/Java/Java/Indentation Rules.tmPreferences
similarity index 100%
rename from Java/Java - Indentation Rules.tmPreferences
rename to Java/Java/Indentation Rules.tmPreferences
diff --git a/Java/JavaC.sublime-build b/Java/Java/JavaC.sublime-build
similarity index 100%
rename from Java/JavaC.sublime-build
rename to Java/Java/JavaC.sublime-build
diff --git a/Java/Snippets/abstract.sublime-snippet b/Java/Java/Snippets/abstract.sublime-snippet
similarity index 100%
rename from Java/Snippets/abstract.sublime-snippet
rename to Java/Java/Snippets/abstract.sublime-snippet
diff --git a/Java/Snippets/assert.sublime-snippet b/Java/Java/Snippets/assert.sublime-snippet
similarity index 100%
rename from Java/Snippets/assert.sublime-snippet
rename to Java/Java/Snippets/assert.sublime-snippet
diff --git a/Java/Snippets/break.sublime-snippet b/Java/Java/Snippets/break.sublime-snippet
similarity index 100%
rename from Java/Snippets/break.sublime-snippet
rename to Java/Java/Snippets/break.sublime-snippet
diff --git a/Java/Snippets/case.sublime-snippet b/Java/Java/Snippets/case.sublime-snippet
similarity index 100%
rename from Java/Snippets/case.sublime-snippet
rename to Java/Java/Snippets/case.sublime-snippet
diff --git a/Java/Snippets/catch.sublime-snippet b/Java/Java/Snippets/catch.sublime-snippet
similarity index 100%
rename from Java/Snippets/catch.sublime-snippet
rename to Java/Java/Snippets/catch.sublime-snippet
diff --git a/Java/Snippets/class.sublime-snippet b/Java/Java/Snippets/class.sublime-snippet
similarity index 100%
rename from Java/Snippets/class.sublime-snippet
rename to Java/Java/Snippets/class.sublime-snippet
diff --git a/Java/Snippets/constant-string.sublime-snippet b/Java/Java/Snippets/constant-string.sublime-snippet
similarity index 100%
rename from Java/Snippets/constant-string.sublime-snippet
rename to Java/Java/Snippets/constant-string.sublime-snippet
diff --git a/Java/Snippets/constant.sublime-snippet b/Java/Java/Snippets/constant.sublime-snippet
similarity index 100%
rename from Java/Snippets/constant.sublime-snippet
rename to Java/Java/Snippets/constant.sublime-snippet
diff --git a/Java/Snippets/default.sublime-snippet b/Java/Java/Snippets/default.sublime-snippet
similarity index 100%
rename from Java/Snippets/default.sublime-snippet
rename to Java/Java/Snippets/default.sublime-snippet
diff --git a/Java/Snippets/else-if.sublime-snippet b/Java/Java/Snippets/else-if.sublime-snippet
similarity index 100%
rename from Java/Snippets/else-if.sublime-snippet
rename to Java/Java/Snippets/else-if.sublime-snippet
diff --git a/Java/Snippets/else.sublime-snippet b/Java/Java/Snippets/else.sublime-snippet
similarity index 100%
rename from Java/Snippets/else.sublime-snippet
rename to Java/Java/Snippets/else.sublime-snippet
diff --git a/Java/Snippets/final.sublime-snippet b/Java/Java/Snippets/final.sublime-snippet
similarity index 100%
rename from Java/Snippets/final.sublime-snippet
rename to Java/Java/Snippets/final.sublime-snippet
diff --git a/Java/Snippets/for-(each).sublime-snippet b/Java/Java/Snippets/for-(each).sublime-snippet
similarity index 100%
rename from Java/Snippets/for-(each).sublime-snippet
rename to Java/Java/Snippets/for-(each).sublime-snippet
diff --git a/Java/Snippets/for.sublime-snippet b/Java/Java/Snippets/for.sublime-snippet
similarity index 100%
rename from Java/Snippets/for.sublime-snippet
rename to Java/Java/Snippets/for.sublime-snippet
diff --git a/Java/Snippets/if.sublime-snippet b/Java/Java/Snippets/if.sublime-snippet
similarity index 100%
rename from Java/Snippets/if.sublime-snippet
rename to Java/Java/Snippets/if.sublime-snippet
diff --git a/Java/Snippets/import-junit_framework_TestCase;.sublime-snippet b/Java/Java/Snippets/import-junit_framework_TestCase;.sublime-snippet
similarity index 100%
rename from Java/Snippets/import-junit_framework_TestCase;.sublime-snippet
rename to Java/Java/Snippets/import-junit_framework_TestCase;.sublime-snippet
diff --git a/Java/Snippets/import.sublime-snippet b/Java/Java/Snippets/import.sublime-snippet
similarity index 100%
rename from Java/Snippets/import.sublime-snippet
rename to Java/Java/Snippets/import.sublime-snippet
diff --git a/Java/Snippets/interface.sublime-snippet b/Java/Java/Snippets/interface.sublime-snippet
similarity index 100%
rename from Java/Snippets/interface.sublime-snippet
rename to Java/Java/Snippets/interface.sublime-snippet
diff --git a/Java/Snippets/java_beans_.sublime-snippet b/Java/Java/Snippets/java_beans_.sublime-snippet
similarity index 100%
rename from Java/Snippets/java_beans_.sublime-snippet
rename to Java/Java/Snippets/java_beans_.sublime-snippet
diff --git a/Java/Snippets/java_io.sublime-snippet b/Java/Java/Snippets/java_io.sublime-snippet
similarity index 100%
rename from Java/Snippets/java_io.sublime-snippet
rename to Java/Java/Snippets/java_io.sublime-snippet
diff --git a/Java/Snippets/java_math.sublime-snippet b/Java/Java/Snippets/java_math.sublime-snippet
similarity index 100%
rename from Java/Snippets/java_math.sublime-snippet
rename to Java/Java/Snippets/java_math.sublime-snippet
diff --git a/Java/Snippets/java_net_.sublime-snippet b/Java/Java/Snippets/java_net_.sublime-snippet
similarity index 100%
rename from Java/Snippets/java_net_.sublime-snippet
rename to Java/Java/Snippets/java_net_.sublime-snippet
diff --git a/Java/Snippets/java_util_.sublime-snippet b/Java/Java/Snippets/java_util_.sublime-snippet
similarity index 100%
rename from Java/Snippets/java_util_.sublime-snippet
rename to Java/Java/Snippets/java_util_.sublime-snippet
diff --git a/Java/Snippets/method-(main).sublime-snippet b/Java/Java/Snippets/method-(main).sublime-snippet
similarity index 100%
rename from Java/Snippets/method-(main).sublime-snippet
rename to Java/Java/Snippets/method-(main).sublime-snippet
diff --git a/Java/Snippets/method.sublime-snippet b/Java/Java/Snippets/method.sublime-snippet
similarity index 100%
rename from Java/Snippets/method.sublime-snippet
rename to Java/Java/Snippets/method.sublime-snippet
diff --git a/Java/Snippets/package.sublime-snippet b/Java/Java/Snippets/package.sublime-snippet
similarity index 100%
rename from Java/Snippets/package.sublime-snippet
rename to Java/Java/Snippets/package.sublime-snippet
diff --git a/Java/Snippets/print.sublime-snippet b/Java/Java/Snippets/print.sublime-snippet
similarity index 100%
rename from Java/Snippets/print.sublime-snippet
rename to Java/Java/Snippets/print.sublime-snippet
diff --git a/Java/Snippets/println.sublime-snippet b/Java/Java/Snippets/println.sublime-snippet
similarity index 100%
rename from Java/Snippets/println.sublime-snippet
rename to Java/Java/Snippets/println.sublime-snippet
diff --git a/Java/Snippets/private.sublime-snippet b/Java/Java/Snippets/private.sublime-snippet
similarity index 100%
rename from Java/Snippets/private.sublime-snippet
rename to Java/Java/Snippets/private.sublime-snippet
diff --git a/Java/Snippets/protected.sublime-snippet b/Java/Java/Snippets/protected.sublime-snippet
similarity index 100%
rename from Java/Snippets/protected.sublime-snippet
rename to Java/Java/Snippets/protected.sublime-snippet
diff --git a/Java/Snippets/public.sublime-snippet b/Java/Java/Snippets/public.sublime-snippet
similarity index 100%
rename from Java/Snippets/public.sublime-snippet
rename to Java/Java/Snippets/public.sublime-snippet
diff --git a/Java/Snippets/return.sublime-snippet b/Java/Java/Snippets/return.sublime-snippet
similarity index 100%
rename from Java/Snippets/return.sublime-snippet
rename to Java/Java/Snippets/return.sublime-snippet
diff --git a/Java/Snippets/static.sublime-snippet b/Java/Java/Snippets/static.sublime-snippet
similarity index 100%
rename from Java/Snippets/static.sublime-snippet
rename to Java/Java/Snippets/static.sublime-snippet
diff --git a/Java/Snippets/switch.sublime-snippet b/Java/Java/Snippets/switch.sublime-snippet
similarity index 100%
rename from Java/Snippets/switch.sublime-snippet
rename to Java/Java/Snippets/switch.sublime-snippet
diff --git a/Java/Snippets/synchronized.sublime-snippet b/Java/Java/Snippets/synchronized.sublime-snippet
similarity index 100%
rename from Java/Snippets/synchronized.sublime-snippet
rename to Java/Java/Snippets/synchronized.sublime-snippet
diff --git a/Java/Snippets/test-case.sublime-snippet b/Java/Java/Snippets/test-case.sublime-snippet
similarity index 100%
rename from Java/Snippets/test-case.sublime-snippet
rename to Java/Java/Snippets/test-case.sublime-snippet
diff --git a/Java/Snippets/test.sublime-snippet b/Java/Java/Snippets/test.sublime-snippet
similarity index 100%
rename from Java/Snippets/test.sublime-snippet
rename to Java/Java/Snippets/test.sublime-snippet
diff --git a/Java/Snippets/throw.sublime-snippet b/Java/Java/Snippets/throw.sublime-snippet
similarity index 100%
rename from Java/Snippets/throw.sublime-snippet
rename to Java/Java/Snippets/throw.sublime-snippet
diff --git a/Java/Snippets/variable.sublime-snippet b/Java/Java/Snippets/variable.sublime-snippet
similarity index 100%
rename from Java/Snippets/variable.sublime-snippet
rename to Java/Java/Snippets/variable.sublime-snippet
diff --git a/Java/Snippets/while.sublime-snippet b/Java/Java/Snippets/while.sublime-snippet
similarity index 100%
rename from Java/Snippets/while.sublime-snippet
rename to Java/Java/Snippets/while.sublime-snippet
diff --git a/Java/Symbol List - Case Label.tmPreferences b/Java/Java/Symbol List - Case Label.tmPreferences
similarity index 100%
rename from Java/Symbol List - Case Label.tmPreferences
rename to Java/Java/Symbol List - Case Label.tmPreferences
diff --git a/Java/Symbol List - Classes.tmPreferences b/Java/Java/Symbol List - Classes.tmPreferences
similarity index 100%
rename from Java/Symbol List - Classes.tmPreferences
rename to Java/Java/Symbol List - Classes.tmPreferences
diff --git a/Java/Symbol List - Constants.tmPreferences b/Java/Java/Symbol List - Constants.tmPreferences
similarity index 100%
rename from Java/Symbol List - Constants.tmPreferences
rename to Java/Java/Symbol List - Constants.tmPreferences
diff --git a/Java/Symbol List - Enums.tmPreferences b/Java/Java/Symbol List - Enums.tmPreferences
similarity index 100%
rename from Java/Symbol List - Enums.tmPreferences
rename to Java/Java/Symbol List - Enums.tmPreferences
diff --git a/Java/Symbol List - Fields.tmPreferences b/Java/Java/Symbol List - Fields.tmPreferences
similarity index 100%
rename from Java/Symbol List - Fields.tmPreferences
rename to Java/Java/Symbol List - Fields.tmPreferences
diff --git a/Java/Symbol List - Imports.tmPreferences b/Java/Java/Symbol List - Imports.tmPreferences
similarity index 100%
rename from Java/Symbol List - Imports.tmPreferences
rename to Java/Java/Symbol List - Imports.tmPreferences
diff --git a/Java/Symbol List - Interfaces.tmPreferences b/Java/Java/Symbol List - Interfaces.tmPreferences
similarity index 100%
rename from Java/Symbol List - Interfaces.tmPreferences
rename to Java/Java/Symbol List - Interfaces.tmPreferences
diff --git a/Java/Symbol List - Modules.tmPreferences b/Java/Java/Symbol List - Modules.tmPreferences
similarity index 77%
rename from Java/Symbol List - Modules.tmPreferences
rename to Java/Java/Symbol List - Modules.tmPreferences
index b29b7d7715..4830243ea7 100644
--- a/Java/Symbol List - Modules.tmPreferences
+++ b/Java/Java/Symbol List - Modules.tmPreferences
@@ -2,7 +2,7 @@
scope
- source.java meta.namespace.module.identifier & (meta.path, entity.name.namespace)
+
settings
showInSymbolList
diff --git a/Java/Symbol List - Packages.tmPreferences b/Java/Java/Symbol List - Packages.tmPreferences
similarity index 77%
rename from Java/Symbol List - Packages.tmPreferences
rename to Java/Java/Symbol List - Packages.tmPreferences
index 666feab98f..65b37212d8 100644
--- a/Java/Symbol List - Packages.tmPreferences
+++ b/Java/Java/Symbol List - Packages.tmPreferences
@@ -2,7 +2,7 @@
scope
- source.java meta.namespace.package.identifier & (meta.path, entity.name.namespace)
+
settings
showInSymbolList
diff --git a/Java/tests/syntax_test_java.java b/Java/Java/tests/syntax_test_java.java
similarity index 98%
rename from Java/tests/syntax_test_java.java
rename to Java/Java/tests/syntax_test_java.java
index ee18a0331f..fb1df3c5b6 100644
--- a/Java/tests/syntax_test_java.java
+++ b/Java/Java/tests/syntax_test_java.java
@@ -466,92 +466,6 @@
// ^^ comment.block.documentation.java punctuation.definition.comment.end.java
-/******************************************************************************
- * Git Conflict Marker Tests
- *****************************************************************************/
-
-<<<<<<< HEAD
-// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-// ^ meta.block.conflict.begin.diff - entity - punctuation
-// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
-// ^ meta.block.conflict.begin.diff - entity - punctuation
-
-=======
-// <- meta.block.conflict.separator.diff punctuation.section.block.diff
-//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
-// ^ meta.block.conflict.separator.diff - punctuation
-
->>>>>>> master
-// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
-//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
-// ^ meta.block.conflict.end.diff - entity - punctuation
-// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
-// ^ meta.block.conflict.end.diff - entity - punctuation
-
-/* merge conflict in blocks */
-
-{
-// <- meta.block.java punctuation.section.block.begin.java
-<<<<<<< HEAD
-// <- meta.block.java meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-//^^^^^ meta.block.java meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-// ^ meta.block.java meta.block.conflict.begin.diff - entity - punctuation
-// ^^^^ meta.block.java meta.block.conflict.begin.diff entity.name.section.diff
-// ^ meta.block.java meta.block.conflict.begin.diff - entity - punctuation
-
-=======
-// <- meta.block.java meta.block.conflict.separator.diff punctuation.section.block.diff
-//^^^^^ meta.block.java meta.block.conflict.separator.diff punctuation.section.block.diff
-// ^ meta.block.java meta.block.conflict.separator.diff - punctuation
-
->>>>>>> master
-// <- meta.block.java meta.block.conflict.end.diff punctuation.section.block.end.diff
-//^^^^^ meta.block.java meta.block.conflict.end.diff punctuation.section.block.end.diff
-// ^ meta.block.java meta.block.conflict.end.diff - entity - punctuation
-// ^^^^^^ meta.block.java meta.block.conflict.end.diff entity.name.section.diff
-// ^ meta.block.java meta.block.conflict.end.diff - entity - punctuation
-}
-// <- meta.block.java punctuation.section.block.end.java
-
-/* merge conflict in multiline strings */
-
-string = """
-before
-<<<<<<< HEAD
-// <- meta.string.java meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-//^^^^^ meta.string.java meta.block.conflict.begin.diff punctuation.section.block.begin.diff
-// ^ meta.string.java meta.block.conflict.begin.diff - entity - punctuation
-// ^^^^ meta.string.java meta.block.conflict.begin.diff entity.name.section.diff
-// ^ meta.string.java meta.block.conflict.begin.diff - entity - punctuation
-ours
-// <- meta.string.java string.quoted.triple.java
-//^^ meta.string.java string.quoted.triple.java
-=======
-// <- meta.string.java meta.block.conflict.separator.diff punctuation.section.block.diff
-//^^^^^ meta.string.java meta.block.conflict.separator.diff punctuation.section.block.diff
-// ^ meta.string.java meta.block.conflict.separator.diff - punctuation
-theirs
-// <- meta.string.java string.quoted.triple.java
-//^^^^ meta.string.java string.quoted.triple.java
-|||||||
-base
-// <- meta.string.java string.quoted.triple.java
-//^^ meta.string.java string.quoted.triple.java
->>>>>>> master
-// <- meta.string.java meta.block.conflict.end.diff punctuation.section.block.end.diff
-//^^^^^ meta.string.java meta.block.conflict.end.diff punctuation.section.block.end.diff
-// ^ meta.string.java meta.block.conflict.end.diff - entity - punctuation
-// ^^^^^^ meta.string.java meta.block.conflict.end.diff entity.name.section.diff
-// ^ meta.string.java meta.block.conflict.end.diff - entity - punctuation
-after
-// <- meta.string.java string.quoted.triple.java
-//^^^ meta.string.java string.quoted.triple.java
-"""
-// <- meta.string.java string.quoted.triple.java punctuation.definition.string.end.java
-//^ meta.string.java string.quoted.triple.java punctuation.definition.string.end.java
-
-
/******************************************************************************
* Package Declaration Tests
*****************************************************************************/
@@ -5668,7 +5582,7 @@ void run() {
// ^^ keyword.control.conditional.if.java
// ^ punctuation.section.group.begin.java
// ^^^ variable.function.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^^^^ constant.language.boolean.true.java
// ^ punctuation.section.group.end.java
// ^^^ variable.function.java
@@ -5769,12 +5683,12 @@ void run() {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.statement.conditional.assertion.java
// ^^^^^^ keyword.control.flow.assert.java
// ^^^^^ variable.other.java
-// ^ keyword.operator.comparison.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.relational.greater.java
+// ^ keyword.operator.arithmetic.subtraction.java
// ^^^ constant.numeric.value.java
// ^ punctuation.separator.expressions.java
// ^^^ variable.other.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^^^^ constant.language.boolean.true.java
// ^ punctuation.terminator.java
@@ -5954,7 +5868,7 @@ void run() {
// ^ punctuation.definition.string.begin.java
// ^^ constant.character.escape.other.java
// ^ punctuation.definition.string.end.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^^^ variable.function.java
// ^ punctuation.separator.expressions.java
@@ -5966,7 +5880,7 @@ void run() {
// ^ meta.statement.conditional.switch.java meta.block.java - meta.statement.conditional.case
// ^^^^ keyword.control.conditional.case.java
// ^^^^^^^^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.separator.expressions.java
@@ -5980,7 +5894,7 @@ void run() {
// ^^^^ keyword.control.conditional.case.java
// ^ punctuation.section.group.begin.java
// ^^^^^^^^ variable.other.java
-// ^^ keyword.operator.bitwise.java
+// ^^ keyword.operator.bitwise.shift.left.signed.java
// ^^ meta.number.integer.hexadecimal.java constant.numeric.base.java
// ^ meta.number.integer.hexadecimal.java constant.numeric.value.java
// ^ punctuation.section.group.end.java
@@ -6376,7 +6290,7 @@ void testClassicCaseLabels(boolean startWeek) {
// ^^^^^^^^^^^^^^^^^^^^^ support.class.java
// ^ punctuation.section.group.begin.java
// ^^^^^^^^^^^^^^^ string.quoted.double.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^^^ variable.other.java
// ^ punctuation.section.group.end.java
// ^ punctuation.terminator.java
@@ -6486,7 +6400,7 @@ void testPatternCaseLabelsWithGuards(Object o) {
// ^ meta.variable.identifier.java variable.other.java
// ^ punctuation.accessor.dot.java
// ^^^^^^ variable.function.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^^^^^^^ constant.other.java
// ^^ punctuation.separator.expressions.java
// ^^^^^^^^^^ string.quoted.double.java
@@ -6508,7 +6422,7 @@ void testPatternCaseLabelsWithGuards(Object o) {
// ^ variable.other.java
// ^ punctuation.accessor.dot.java
// ^^^^^^ variable.function.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.greater.java
// ^^^^^^^ constant.other.java
// ^^ punctuation.separator.expressions.java
System.out.println("weekend");
@@ -6532,14 +6446,14 @@ void testPatternCaseLabelsWithGuards(Object o) {
// ^ variable.other.java
// ^^^^ keyword.control.conditional.when.java
// ^ variable.other.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^^^^^^^ constant.other.java
// ^ punctuation.separator.comma.java
// ^^^^ support.class.java
// ^ variable.other.java
// ^^^^ keyword.control.conditional.when.java
// ^ variable.other.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^^^^ support.class.java
// ^ punctuation.accessor.dot.java
// ^^^^^^ constant.other.java
@@ -6580,13 +6494,13 @@ void testPatternCaseLabelsWithGuards(Object o) {
// ^^ punctuation.section.group.end.java
// ^^^^ keyword.control.conditional.when.java
// ^ meta.variable.identifier.java variable.other.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^^^^ meta.number.integer.decimal.java constant.numeric.value.java
// ^^ punctuation.separator.expressions.java
// ^ meta.variable.identifier.java variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ meta.variable.identifier.java variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ meta.variable.identifier.java variable.other.java
// ^ punctuation.terminator.java
};
@@ -6766,11 +6680,11 @@ void run() {
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^^ keyword.operator.assignment.augmented.java
+// ^^ keyword.operator.assignment.augmented.addition.java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.section.group.end.java
// ^ punctuation.section.block.begin.java
@@ -6791,11 +6705,11 @@ void run() {
// ^ punctuation.separator.comma.java
// ^ constant.numeric.value.java
// ^ punctuation.terminator.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^^ constant.numeric.value.java
-// ^^ keyword.operator.logical.java
+// ^^ keyword.operator.logical.and.java
// ^ punctuation.terminator.java
-// ^^ keyword.operator.assignment.augmented.java
+// ^^ keyword.operator.assignment.augmented.addition.java
// ^ constant.numeric.value.java
// ^ punctuation.section.group.end.java
// ^ punctuation.section.block.begin.java
@@ -6817,16 +6731,17 @@ void run() {
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
-// ^^ keyword.operator.logical.java
+// ^^ keyword.operator.logical.and.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^^ keyword.operator.assignment.augmented.java
+// ^^ keyword.operator.assignment.augmented.addition.java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
+// ^^ keyword.operator.arithmetic.increment.java
// ^ punctuation.section.group.end.java
// ^ punctuation.section.block.begin.java
@@ -6843,11 +6758,11 @@ void run() {
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^^ keyword.operator.assignment.augmented.java
+// ^^ keyword.operator.assignment.augmented.addition.java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.section.group.end.java
// ^ punctuation.section.block.begin.java
@@ -6868,11 +6783,11 @@ void run() {
// ^ punctuation.separator.comma.java
// ^ constant.numeric.value.java
// ^ punctuation.terminator.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^^ constant.numeric.value.java
-// ^^ keyword.operator.logical.java
+// ^^ keyword.operator.logical.and.java
// ^ punctuation.terminator.java
-// ^^ keyword.operator.assignment.augmented.java
+// ^^ keyword.operator.assignment.augmented.addition.java
// ^ constant.numeric.value.java
// ^ punctuation.section.group.end.java
// ^ punctuation.section.block.begin.java
@@ -6895,15 +6810,15 @@ void run() {
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less..java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
-// ^^ keyword.operator.logical.java
+// ^^ keyword.operator.logical.and.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less..java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
// ^ variable.other.java
-// ^^ keyword.operator.assignment.augmented.java
+// ^^ keyword.operator.assignment.augmented.addition.java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.section.group.end.java
// ^ punctuation.section.block.begin.java
@@ -7200,7 +7115,7 @@ void run() {
// ^ - meta.statement.flow.return
// ^^^^^^ keyword.control.flow.return.java
// ^^^^^^^^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^^^^ variable.function.java
// ^ punctuation.section.group.begin.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
@@ -7216,7 +7131,7 @@ void run() {
// ^^^^^^^^ variable.other.java
+
// ^^^ meta.statement.flow.return.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
func
// ^^^^^^ meta.statement.flow.return.java
// ^^^^ variable.function.java
@@ -7259,7 +7174,7 @@ void run() {
// ^ punctuation.section.group.end.java
// ^^ keyword.declaration.function.arrow.java
// ^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ variable.other.java
// ^ punctuation.terminator.java
}
@@ -7304,7 +7219,7 @@ void run() {
// ^ - meta.statement.flow.throw
// ^^^^^ keyword.control.flow.throw.java
// ^^^^^^^^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^^^^ variable.function.java
// ^ punctuation.section.group.begin.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
@@ -7320,7 +7235,7 @@ void run() {
// ^^^^^^^^ variable.other.java
+
// ^^^ meta.statement.flow.throw.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
func
// ^^^^^^ meta.statement.flow.throw.java
// ^^^^ variable.function.java
@@ -7363,7 +7278,7 @@ void run() {
// ^ punctuation.section.group.end.java
// ^^ keyword.declaration.function.arrow.java
// ^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ variable.other.java
// ^ punctuation.terminator.java
}
@@ -8304,7 +8219,7 @@ public void instantiateClassesObjects() {
// ^^ invalid.illegal.unexpected-keyword.java
// ^ punctuation.section.group.begin.java
// ^^^ variable.other.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^^^^ constant.language.boolean.true.java
// ^ punctuation.section.group.end.java
// ^ punctuation.section.block.begin.java
@@ -8499,7 +8414,7 @@ public void instantiateObjectArrays() {
// ^^^^^ variable.annotation.java
// ^ punctuation.section.brackets.begin.java
// ^^^^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.section.brackets.end.java
// ^ punctuation.definition.annotation.java
@@ -8527,7 +8442,7 @@ public void instantiateObjectArrays() {
// ^^^^^ variable.annotation.java
// ^ punctuation.section.brackets.begin.java
// ^^^^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.section.brackets.end.java
// ^ punctuation.definition.annotation.java
@@ -9157,7 +9072,7 @@ void primitiveTypeCastExpression() {
// ^ punctuation.section.group.end.java
// ^ punctuation.section.group.begin.java
// ^^^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^^ constant.numeric.value.java
// ^ punctuation.section.group.end.java
@@ -9177,7 +9092,7 @@ void primitiveTypeCastExpression() {
// ^^^ storage.type.primitive.java
// ^^ storage.modifier.array.java
// ^ punctuation.section.group.end.java
-// ^ keyword.operator.logical.java
+// ^ keyword.operator.logical.not.java
// ^^^ variable.other.java
(int[]) ~ foo;
@@ -9187,7 +9102,7 @@ void primitiveTypeCastExpression() {
// ^^^ storage.type.primitive.java
// ^^ storage.modifier.array.java
// ^ punctuation.section.group.end.java
-// ^ keyword.operator.bitwise.java
+// ^ keyword.operator.bitwise.not.java
// ^^^ variable.other.java
(var) foo;
@@ -9286,7 +9201,7 @@ void genericTypeCastExpression() {
// ^ punctuation.definition.generic.begin.java
// ^ support.class.java
// ^ punctuation.section.group.end.java
-// ^ keyword.operator.bitwise.java
+// ^ keyword.operator.bitwise.not.java
// ^^^ variable.other.java
(List) foo;
@@ -9418,7 +9333,7 @@ void noCastExpressionsTests() {
// ^^^^^^^ meta.group.java
// ^ punctuation.section.group.begin.java
// ^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ variable.other.java
// ^ punctuation.section.group.end.java
// ^^^ variable.other.java
@@ -9427,10 +9342,10 @@ void noCastExpressionsTests() {
// ^^^^^^^ meta.group.java
// ^ punctuation.section.group.begin.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less..java
// ^ variable.other.java
// ^ punctuation.section.group.end.java
-// ^ keyword.operator.bitwise.java
+// ^ keyword.operator.bitwise.and.java
// ^^^ variable.other.java
(0) foo;
@@ -9666,12 +9581,12 @@ void instanceofPatternsTests () {
// ^^^^^^^^^^ keyword.other.storage.instanceof.java
// ^^^^^^ support.class.java
// ^ variable.other.java
-// ^^ keyword.operator.logical.java
+// ^^ keyword.operator.logical.and.java
// ^ variable.other.java
// ^ punctuation.accessor.dot.java
// ^^^^^^ variable.function.java
// ^^ meta.group.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.greater.java
// ^ constant.numeric.value.java
obj instanceof ( String[] s ) s == 5
@@ -9686,7 +9601,7 @@ obj instanceof ( String[] s ) s == 5
// ^ variable.other.java
// ^ punctuation.section.group.end.java
// ^ variable.other.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
// ^ constant.numeric.value.java
}
//^ meta.class.java meta.block.java meta.function.java meta.block.java punctuation.section.block.end.java
@@ -9752,12 +9667,12 @@ obj instanceof (Record(boolean a, (var b), Foo(int c) d) e) f && s.length() > 5
// ^ punctuation.section.group.end.java
// ^ punctuation.section.group.end.java
// ^ variable.other.java
-// ^^ keyword.operator.logical.java
+// ^^ keyword.operator.logical.and.java
// ^ variable.other.java
// ^ punctuation.accessor.dot.java
// ^^^^^^ variable.function.java
// ^^ meta.group.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.greater.java
// ^ constant.numeric.value.java
}
//^ meta.class.java meta.block.java meta.function.java meta.block.java punctuation.section.block.end.java
@@ -9926,7 +9841,7 @@ void anonymousFunctions() {
// ^^^ storage.type.primitive.java
// ^ punctuation.section.group.end.java
// ^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ punctuation.section.group.begin.java
// ^ variable.parameter.java
// ^ punctuation.separator.comma.java
@@ -9953,7 +9868,7 @@ void anonymousFunctions() {
// ^^^ storage.type.primitive.java
// ^ punctuation.section.group.end.java
// ^ variable.other.java
-// ^ keyword.operator.arithmetic.java
+// ^ keyword.operator.arithmetic.addition.java
// ^ punctuation.section.group.begin.java
// ^ variable.parameter.java
// ^ punctuation.separator.comma.java
@@ -10401,64 +10316,64 @@ public static void main(String[] args, String moreArgs, a.b.c.Foo bar) {}
int operatorsTests() {
== != <= >= <> < >
-// ^^ keyword.operator.comparison.java
-// ^^ keyword.operator.comparison.java
-// ^^ keyword.operator.comparison.java
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
+// ^^ keyword.operator.comparison.not-equal.value.java
+// ^^ keyword.operator.relational.less-equal.java
+// ^^ keyword.operator.relational.greater-equal.java
// ^^ keyword.operator.comparison.java
-// ^ keyword.operator.comparison.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
+// ^ keyword.operator.relational.greater.java
! && ||
-// ^ keyword.operator.logical.java
-// ^^ keyword.operator.logical.java
-// ^^ keyword.operator.logical.java
+// ^ keyword.operator.logical.not.java
+// ^^ keyword.operator.logical.and.java
+// ^^ keyword.operator.logical.or.java
<< >> >>> ~ & | ^
-// ^^ keyword.operator.bitwise.java
-// ^^ keyword.operator.bitwise.java
-// ^^^ keyword.operator.bitwise.java
-// ^ keyword.operator.bitwise.java
-// ^ keyword.operator.bitwise.java
-// ^ keyword.operator.bitwise.java
-// ^ keyword.operator.bitwise.java
+// ^^ keyword.operator.bitwise.shift.left.signed.java
+// ^^ keyword.operator.bitwise.shift.right.signed.java
+// ^^^ keyword.operator.bitwise.shift.right.unsigned.java
+// ^ keyword.operator.bitwise.not.java
+// ^ keyword.operator.bitwise.and.java
+// ^ keyword.operator.bitwise.or.java
+// ^ keyword.operator.bitwise.xor.java
++ -- + - * / %
-// ^^ keyword.operator.arithmetic.java
-// ^^ keyword.operator.arithmetic.java
-// ^ keyword.operator.arithmetic.java
-// ^ keyword.operator.arithmetic.java
-// ^ keyword.operator.arithmetic.java
-// ^ keyword.operator.arithmetic.java
-// ^ keyword.operator.arithmetic.java
+// ^^ keyword.operator.arithmetic.increment.java
+// ^^ keyword.operator.arithmetic.decrement.java
+// ^ keyword.operator.arithmetic.addition.java
+// ^ keyword.operator.arithmetic.subtraction.java
+// ^ keyword.operator.arithmetic.multiplication.java
+// ^ keyword.operator.arithmetic.division.java
+// ^ keyword.operator.arithmetic.remainder.java
x = (e & 1) << c^2 >> 10;
// ^ keyword.operator.assignment.java
-// ^ keyword.operator.bitwise.java
-// ^^ keyword.operator.bitwise.java
-// ^ keyword.operator.bitwise.java
-// ^^ keyword.operator.bitwise.java
+// ^ keyword.operator.bitwise.and.java
+// ^^ keyword.operator.bitwise.shift.left.signed.java
+// ^ keyword.operator.bitwise.xor.java
+// ^^ keyword.operator.bitwise.shift.right.signed.java
y = ~e >>> (c | 2);
// ^ keyword.operator.assignment.java
-// ^ keyword.operator.bitwise.java
-// ^^^ keyword.operator.bitwise.java
-// ^ keyword.operator.bitwise.java
+// ^ keyword.operator.bitwise.not.java
+// ^^^ keyword.operator.bitwise.shift.right.unsigned.java
+// ^ keyword.operator.bitwise.or.java
z += x; z -= x; z *= x; z /= x; z %= x;
-// ^^ keyword.operator.assignment.augmented.java
-// ^^ keyword.operator.assignment.augmented.java
-// ^^ keyword.operator.assignment.augmented.java
-// ^^ keyword.operator.assignment.augmented.java
-// ^^ keyword.operator.assignment.augmented.java
+// ^^ keyword.operator.assignment.augmented.addition.java
+// ^^ keyword.operator.assignment.augmented.subtraction.java
+// ^^ keyword.operator.assignment.augmented.multiplication.java
+// ^^ keyword.operator.assignment.augmented.division.java
+// ^^ keyword.operator.assignment.augmented.remainder.java
z &= x; z ^= x; z |= x; z <<= x; z >>= x; z >>>= x;
// ^^ keyword.operator.assignment.augmented.java
// ^^ keyword.operator.assignment.augmented.java
// ^^ keyword.operator.assignment.augmented.java
-// ^^^ keyword.operator.assignment.augmented.java
-// ^^^ keyword.operator.assignment.augmented.java
-// ^^^^ keyword.operator.assignment.augmented.java
+// ^^^ keyword.operator.assignment.augmented.bitwise.shift.left.signed.java
+// ^^^ keyword.operator.assignment.augmented.bitwise.shift.right.signed.java
+// ^^^^ keyword.operator.assignment.augmented.bitwise.shift.right.unsigned.java
b=e.a(b b?b:b;
// ^ meta.function-call.identifier.java
@@ -10469,10 +10384,10 @@ int operatorsTests() {
// ^ variable.function.java
// ^ punctuation.section.group.begin.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^ variable.other.java
// ^ punctuation.section.group.end.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.greater.java
// ^ variable.other.java
// ^ keyword.operator.ternary.java
// ^ variable.other.java
@@ -10488,10 +10403,10 @@ int operatorsTests() {
// ^ variable.function.java
// ^ punctuation.section.group.begin.java
// ^ variable.other.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^ variable.other.java
// ^ punctuation.section.group.end.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.greater.java
// ^ variable.other.java
// ^ keyword.operator.ternary.java
// ^ variable.other.java
@@ -10624,19 +10539,19 @@ int operatorsTests() {
// ^ punctuation.terminator.java
if (a == false) {}
-// ^^ keyword.operator.comparison.java
+// ^^ keyword.operator.comparison.equal.value.java
if (this.scale<0) {
// ^^ keyword.control.conditional.if.java
// ^^^^^^^^^^^^^^ meta.group.java
// ^ punctuation.section.group.begin
// ^ punctuation.accessor.dot.java
-// ^ keyword.operator.comparison.java
+// ^ keyword.operator.relational.less.java
// ^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ - meta.group.java
return foo<<32;
// ^^^^^^ keyword.control.flow.return.java
-// ^^ keyword.operator.bitwise.java
+// ^^ keyword.operator.bitwise.shift.left.signed.java
// ^^ meta.number.integer.decimal.java constant.numeric.value.java
// ^ punctuation.terminator.java
}
@@ -10644,7 +10559,7 @@ int operatorsTests() {
return foo>>>>>> master
+// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+ // <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+
+
+ String multilineMergeConflictMarkersTest = """
+<<<<<<< HEAD
+// <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+ // <- meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+//^^^^^ meta.block.conflict.begin.diff punctuation.section.block.begin.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+// ^^^^ meta.block.conflict.begin.diff entity.name.section.diff
+// ^ meta.block.conflict.begin.diff - entity - punctuation
+
+=======
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+
+======= branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+
+|||||||
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^ meta.block.conflict.separator.diff - punctuation
+
+||||||| branchname
+// <- meta.block.conflict.separator.diff punctuation.section.block.diff
+ // <- meta.block.conflict.separator.diff punctuation.section.block.diff
+//^^^^^ meta.block.conflict.separator.diff punctuation.section.block.diff
+// ^^^^^^^^^^^ meta.block.conflict.separator.diff - punctuation
+
+>>>>>>> master
+// <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+ // <- meta.block.conflict.end.diff punctuation.section.block.end.diff
+//^^^^^ meta.block.conflict.end.diff punctuation.section.block.end.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+// ^^^^^^ meta.block.conflict.end.diff entity.name.section.diff
+// ^ meta.block.conflict.end.diff - entity - punctuation
+ """
+ }
+}
diff --git a/Java/tests/syntax_test_java_indentation.java b/Java/Java/tests/syntax_test_java_indentation.java
similarity index 100%
rename from Java/tests/syntax_test_java_indentation.java
rename to Java/Java/tests/syntax_test_java_indentation.java
diff --git a/Java/tests/syntax_test_java_properties.properties b/Java/Java/tests/syntax_test_java_properties.properties
similarity index 100%
rename from Java/tests/syntax_test_java_properties.properties
rename to Java/Java/tests/syntax_test_java_properties.properties
diff --git a/Java/tests/syntax_test_jsp.jsp b/Java/Java/tests/syntax_test_jsp.jsp
similarity index 99%
rename from Java/tests/syntax_test_jsp.jsp
rename to Java/Java/tests/syntax_test_jsp.jsp
index 9e74b5bf1b..f167959769 100644
--- a/Java/tests/syntax_test_jsp.jsp
+++ b/Java/Java/tests/syntax_test_jsp.jsp
@@ -369,8 +369,8 @@
// ^ source.java.embedded.jsp - source.java source.java
if (!foo && !bar) {
// ^^ keyword.control.conditional.if.java
-// ^ keyword.operator.logical.java
-// ^^ keyword.operator.logical.java
+// ^ keyword.operator.logical.not.java
+// ^^ keyword.operator.logical.and.java
%><%
// ^^ punctuation.section.embedded.end.jsp - source.java.embedded.jsp
// ^^^^^ meta.tag.block.any.html - meta.attribute-with-value
diff --git a/Java/Symbol List - Properties.tmPreferences b/Java/JavaProperties - Symbol List.tmPreferences
similarity index 100%
rename from Java/Symbol List - Properties.tmPreferences
rename to Java/JavaProperties - Symbol List.tmPreferences