{"name":"Groovy","scopeName":"source.groovy","patterns":[{"name":"comment.line.hashbang.groovy","match":"^(#!).+$\\n","captures":{"1":{"name":"punctuation.definition.comment.groovy"}}},{"name":"meta.package.groovy","match":"^\\s*(package)\\b(?:\\s*([^ ;$]+)\\s*(;)?)?","captures":{"1":{"name":"keyword.other.package.groovy"},"2":{"name":"storage.modifier.package.groovy"},"3":{"name":"punctuation.terminator.groovy"}}},{"name":"meta.import.groovy","contentName":"storage.modifier.import.groovy","begin":"(import static)\\b\\s*","end":"\\s*(?:$|(?=%\u003e)(;))","patterns":[{"name":"punctuation.separator.groovy","match":"\\."},{"name":"invalid.illegal.character_not_allowed_here.groovy","match":"\\s"}],"captures":{"1":{"name":"keyword.other.import.groovy"},"2":{"name":"storage.modifier.import.groovy"},"3":{"name":"punctuation.terminator.groovy"}},"beginCaptures":{"1":{"name":"keyword.other.import.static.groovy"}},"endCaptures":{"1":{"name":"punctuation.terminator.groovy"}}},{"name":"meta.import.groovy","contentName":"storage.modifier.import.groovy","begin":"(import)\\b\\s*","end":"\\s*(?:$|(?=%\u003e)|(;))","patterns":[{"name":"punctuation.separator.groovy","match":"\\."},{"name":"invalid.illegal.character_not_allowed_here.groovy","match":"\\s"}],"captures":{"1":{"name":"keyword.other.import.groovy"},"2":{"name":"storage.modifier.import.groovy"},"3":{"name":"punctuation.terminator.groovy"}},"beginCaptures":{"1":{"name":"keyword.other.import.groovy"}},"endCaptures":{"1":{"name":"punctuation.terminator.groovy"}}},{"name":"meta.import.groovy","match":"^\\s*(import)(?:\\s+(static)\\s+)\\b(?:\\s*([^ ;$]+)\\s*(;)?)?","captures":{"1":{"name":"keyword.other.import.groovy"},"2":{"name":"keyword.other.import.static.groovy"},"3":{"name":"storage.modifier.import.groovy"},"4":{"name":"punctuation.terminator.groovy"}}},{"include":"#groovy"}],"repository":{"annotations":{"patterns":[{"name":"meta.declaration.annotation.groovy","begin":"(?\u003c!\\.)(@[^ (]+)(\\()","end":"(\\))","patterns":[{"match":"(\\w*)\\s*(=)","captures":{"1":{"name":"constant.other.key.groovy"},"2":{"name":"keyword.operator.assignment.groovy"}}},{"include":"#values"},{"name":"punctuation.definition.seperator.groovy","match":","}],"beginCaptures":{"1":{"name":"storage.type.annotation.groovy"},"2":{"name":"punctuation.definition.annotation-arguments.begin.groovy"}},"endCaptures":{"1":{"name":"punctuation.definition.annotation-arguments.end.groovy"}}},{"name":"storage.type.annotation.groovy","match":"(?\u003c!\\.)@\\S+"}]},"anonymous-classes-and-new":{"begin":"\\bnew\\b","end":"(?\u003c=\\)|\\])(?!\\s*{)|(?\u003c=})|(?=[;])|$","patterns":[{"begin":"(\\w+)\\s*(?=\\[)","end":"}|(?=\\s*(?:,|;|\\)))|$","patterns":[{"begin":"\\[","end":"\\]","patterns":[{"include":"#groovy"}]},{"begin":"{","end":"(?=})","patterns":[{"include":"#groovy"}]}],"beginCaptures":{"1":{"name":"storage.type.groovy"}}},{"begin":"(?=\\w.*\\(?)","end":"(?\u003c=\\))|$","patterns":[{"include":"#object-types"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#groovy"}],"beginCaptures":{"1":{"name":"storage.type.groovy"}}}]},{"name":"meta.inner-class.groovy","begin":"{","end":"}","patterns":[{"include":"#class-body"}]}],"beginCaptures":{"0":{"name":"keyword.control.new.groovy"}}},"braces":{"begin":"\\{","end":"\\}","patterns":[{"include":"#groovy-code"}]},"class":{"name":"meta.definition.class.groovy","begin":"(?=\\w?[\\w\\s]*(?:class|(?:@)?interface|enum)\\s+\\w+)","end":"}","patterns":[{"include":"#storage-modifiers"},{"include":"#comments"},{"name":"meta.class.identifier.groovy","match":"(class|(?:@)?interface|enum)\\s+(\\w+)","captures":{"1":{"name":"storage.modifier.groovy"},"2":{"name":"entity.name.type.class.groovy"}}},{"name":"meta.definition.class.inherited.classes.groovy","begin":"extends","end":"(?={|implements)","patterns":[{"include":"#object-types-inherited"},{"include":"#comments"}],"beginCaptures":{"0":{"name":"storage.modifier.extends.groovy"}}},{"name":"meta.definition.class.implemented.interfaces.groovy","begin":"(implements)\\s","end":"(?=\\s*extends|\\{)","patterns":[{"include":"#object-types-inherited"},{"include":"#comments"}],"beginCaptures":{"1":{"name":"storage.modifier.implements.groovy"}}},{"name":"meta.class.body.groovy","begin":"{","end":"(?=})","patterns":[{"include":"#class-body"}]}],"endCaptures":{"0":{"name":"punctuation.section.class.end.groovy"}}},"class-body":{"patterns":[{"include":"#enum-values"},{"include":"#constructors"},{"include":"#groovy"}]},"closures":{"begin":"\\{(?=.*?-\u003e)","end":"\\}","patterns":[{"begin":"(?\u003c=\\{)(?=[^\\}]*?-\u003e)","end":"-\u003e","patterns":[{"name":"meta.closure.parameters.groovy","begin":"(?!-\u003e)","end":"(?=-\u003e)","patterns":[{"name":"meta.closure.parameter.groovy","begin":"(?!,|-\u003e)","end":"(?=,|-\u003e)","patterns":[{"name":"meta.parameter.default.groovy","begin":"=","end":"(?=,|-\u003e)","patterns":[{"include":"#groovy-code"}],"beginCaptures":{"0":{"name":"keyword.operator.assignment.groovy"}}},{"include":"#parameters"}]}]}],"endCaptures":{"0":{"name":"keyword.operator.groovy"}}},{"begin":"(?=[^}])","end":"(?=\\})","patterns":[{"include":"#groovy-code"}]}]},"comment-block":{"name":"comment.block.groovy","begin":"/\\*","end":"\\*/","captures":{"0":{"name":"punctuation.definition.comment.groovy"}}},"comments":{"patterns":[{"name":"comment.block.empty.groovy","match":"/\\*\\*/","captures":{"0":{"name":"punctuation.definition.comment.groovy"}}},{"include":"text.html.javadoc"},{"include":"#comment-block"},{"name":"comment.line.double-slash.groovy","match":"(//).*$\\n?","captures":{"1":{"name":"punctuation.definition.comment.groovy"}}}]},"constants":{"patterns":[{"name":"constant.other.groovy","match":"\\b([A-Z][A-Z0-9_]+)\\b"},{"name":"constant.language.groovy","match":"\\b(true|false|null)\\b"}]},"constructors":{"begin":"(?\u003c=;|^)(?=\\s*(?:(?:private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final)\\s+)*[A-Z]\\w*\\()","end":"}","patterns":[{"include":"#method-content"}],"applyEndPatternLast":true},"enum-values":{"patterns":[{"begin":"(?\u003c=;|^)\\s*\\b([A-Z0-9_]+)(?=\\s*(?:,|;|}|\\(|$))","end":",|;|(?=})|^(?!\\s*\\w+\\s*(?:,|$))","patterns":[{"name":"meta.enum.value.groovy","begin":"\\(","end":"\\)","patterns":[{"name":"punctuation.definition.seperator.parameter.groovy","match":","},{"include":"#groovy-code"}]}],"beginCaptures":{"1":{"name":"constant.enum.name.groovy"}}}]},"groovy":{"patterns":[{"include":"#comments"},{"include":"#class"},{"include":"#variables"},{"include":"#methods"},{"include":"#annotations"},{"include":"#groovy-code"}]},"groovy-code":{"patterns":[{"include":"#groovy-code-minus-map-keys"},{"include":"#map-keys"}]},"groovy-code-minus-map-keys":{"patterns":[{"include":"#comments"},{"include":"#annotations"},{"include":"#support-functions"},{"include":"#keyword-language"},{"include":"#values"},{"include":"#anonymous-classes-and-new"},{"include":"#keyword-operator"},{"include":"#types"},{"include":"#storage-modifiers"},{"include":"#parens"},{"include":"#closures"},{"include":"#braces"}]},"keyword":{"patterns":[{"include":"#keyword-operator"},{"include":"#keyword-language"}]},"keyword-language":{"patterns":[{"name":"keyword.control.exception.groovy","match":"\\b(try|catch|finally|throw)\\b"},{"name":"keyword.control.groovy","match":"\\b((?\u003c!\\.)(?:return|break|continue|default|do|while|for|switch|if|else))\\b"},{"name":"meta.case.groovy","begin":"\\bcase\\b","end":":","patterns":[{"include":"#groovy-code-minus-map-keys"}],"beginCaptures":{"0":{"name":"keyword.control.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.case-terminator.groovy"}}},{"name":"meta.declaration.assertion.groovy","begin":"\\b(assert)\\s","end":"$|;|}","patterns":[{"name":"keyword.operator.assert.expression-seperator.groovy","match":":"},{"include":"#groovy-code-minus-map-keys"}],"beginCaptures":{"1":{"name":"keyword.control.assert.groovy"}}},{"name":"keyword.other.throws.groovy","match":"\\b(throws)\\b"}]},"keyword-operator":{"patterns":[{"name":"keyword.operator.as.groovy","match":"\\b(as)\\b"},{"name":"keyword.operator.in.groovy","match":"\\b(in)\\b"},{"name":"keyword.operator.elvis.groovy","match":"\\?\\:"},{"name":"keyword.operator.spreadmap.groovy","match":"\\*\\:"},{"name":"keyword.operator.range.groovy","match":"\\.\\."},{"name":"keyword.operator.arrow.groovy","match":"\\-\u003e"},{"name":"keyword.operator.leftshift.groovy","match":"\u003c\u003c"},{"name":"keyword.operator.navigation.groovy","match":"(?\u003c=\\S)\\.(?=\\S)"},{"name":"keyword.operator.safe-navigation.groovy","match":"(?\u003c=\\S)\\?\\.(?=\\S)"},{"name":"meta.evaluation.ternary.groovy","begin":"\\?","end":"(?=$|\\)|}|])","patterns":[{"name":"keyword.operator.ternary.expression-seperator.groovy","match":":"},{"include":"#groovy-code-minus-map-keys"}],"beginCaptures":{"0":{"name":"keyword.operator.ternary.groovy"}}},{"name":"keyword.operator.match.groovy","match":"==~"},{"name":"keyword.operator.find.groovy","match":"=~"},{"name":"keyword.operator.instanceof.groovy","match":"\\b(instanceof)\\b"},{"name":"keyword.operator.comparison.groovy","match":"(===|==|!=|\u003c=|\u003e=|\u003c=\u003e|\u003c\u003e|\u003c|\u003e|\u003c\u003c)"},{"name":"keyword.operator.assignment.groovy","match":"="},{"name":"keyword.operator.increment-decrement.groovy","match":"(\\-\\-|\\+\\+)"},{"name":"keyword.operator.arithmetic.groovy","match":"(\\-|\\+|\\*|\\/|%)"},{"name":"keyword.operator.logical.groovy","match":"(!|\u0026\u0026|\\|\\|)"}]},"language-variables":{"patterns":[{"name":"variable.language.groovy","match":"\\b(this|super)\\b"}]},"map-keys":{"patterns":[{"match":"(\\w+)\\s*(:)","captures":{"1":{"name":"constant.other.key.groovy"},"2":{"name":"punctuation.definition.seperator.key-value.groovy"}}}]},"method-call":{"name":"meta.method-call.groovy","begin":"([\\w$]+)(\\()","end":"\\)","patterns":[{"name":"punctuation.definition.seperator.parameter.groovy","match":","},{"include":"#groovy-code"}],"beginCaptures":{"1":{"name":"meta.method.groovy"},"2":{"name":"punctuation.definition.method-parameters.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.method-parameters.end.groovy"}}},"method-content":{"patterns":[{"match":"\\s"},{"include":"#annotations"},{"name":"meta.method.return-type.java","begin":"(?=(?:\\w|\u003c)[^\\(]*\\s+(?:[\\w$]|\u003c)+\\s*\\()","end":"(?=[\\w$]+\\s*\\()","patterns":[{"include":"#storage-modifiers"},{"include":"#types"}]},{"name":"meta.definition.method.signature.java","begin":"([\\w$]+)\\s*\\(","end":"\\)","patterns":[{"name":"meta.method.parameters.groovy","begin":"(?=[^)])","end":"(?=\\))","patterns":[{"name":"meta.method.parameter.groovy","begin":"(?=[^,)])","end":"(?=,|\\))","patterns":[{"name":"punctuation.definition.separator.groovy","match":","},{"name":"meta.parameter.default.groovy","begin":"=","end":"(?=,|\\))","patterns":[{"include":"#groovy-code"}],"beginCaptures":{"0":{"name":"keyword.operator.assignment.groovy"}}},{"include":"#parameters"}]}]}],"beginCaptures":{"1":{"name":"entity.name.function.java"}}},{"name":"meta.method.paramerised-type.groovy","begin":"(?=\u003c)","end":"(?=\\s)","patterns":[{"name":"storage.type.parameters.groovy","begin":"\u003c","end":"\u003e","patterns":[{"include":"#types"},{"name":"punctuation.definition.seperator.groovy","match":","}]}]},{"name":"meta.throwables.groovy","begin":"throws","end":"(?={|;)|^(?=\\s*(?:[^{\\s]|$))","patterns":[{"include":"#object-types"}],"beginCaptures":{"0":{"name":"storage.modifier.groovy"}}},{"name":"meta.method.body.java","begin":"{","end":"(?=})","patterns":[{"include":"#groovy-code"}]}]},"methods":{"name":"meta.definition.method.groovy","begin":"(?x:(?\u003c=;|^|{)(?=\\s*\n (?:\n (?:private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final) # visibility/modifier\n |\n (?:def)\n |\n (?:\n (?:\n (?:void|boolean|byte|char|short|int|float|long|double)\n |\n (?:@?(?:[a-zA-Z]\\w*\\.)*[A-Z]+\\w*) # object type\n )\n [\\[\\]]*\n (?:\u003c.*\u003e)?\n ) \n \n )\n \\s+\n ([^=]+\\s+)?\\w+\\s*\\(\n\t\t\t))","end":"}|(?=[^{])","patterns":[{"include":"#method-content"}],"applyEndPatternLast":true},"nest_curly":{"begin":"\\{","end":"\\}","patterns":[{"include":"#nest_curly"}],"captures":{"0":{"name":"punctuation.section.scope.groovy"}}},"numbers":{"patterns":[{"name":"constant.numeric.groovy","match":"((0(x|X)[0-9a-fA-F]*)|(\\+|-)?\\b(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)([LlFfUuDdg]|UL|ul)?\\b"}]},"object-types":{"patterns":[{"name":"storage.type.generic.groovy","begin":"\\b((?:[a-z]\\w*\\.)*(?:[A-Z]+\\w*[a-z]+\\w*|UR[LI]))\u003c","end":"\u003e|[^\\w\\s,\\?\u003c\\[\\]]","patterns":[{"include":"#object-types"},{"name":"storage.type.generic.groovy","begin":"\u003c","end":"\u003e|[^\\w\\s,\\[\\]\u003c]"}]},{"name":"storage.type.object.array.groovy","begin":"\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*[a-z]+\\w*)(?=\\[)","end":"(?=[^\\]\\s])","patterns":[{"begin":"\\[","end":"\\]","patterns":[{"include":"#groovy"}]}]},{"name":"storage.type.groovy","match":"\\b(?:[a-zA-Z]\\w*\\.)*(?:[A-Z]+\\w*[a-z]+\\w*|UR[LI])\\b"}]},"object-types-inherited":{"patterns":[{"name":"entity.other.inherited-class.groovy","begin":"\\b((?:[a-zA-Z]\\w*\\.)*[A-Z]+\\w*[a-z]+\\w*)\u003c","end":"\u003e|[^\\w\\s,\\?\u003c\\[\\]]","patterns":[{"include":"#object-types-inherited"},{"name":"storage.type.generic.groovy","begin":"\u003c","end":"\u003e|[^\\w\\s,\\[\\]\u003c]"}]},{"name":"entity.other.inherited-class.groovy","match":"\\b(?:[a-zA-Z]\\w*(\\.))*[A-Z]+\\w*[a-z]+\\w*\\b","captures":{"1":{"name":"keyword.operator.dereference.groovy"}}}]},"parameters":{"patterns":[{"include":"#annotations"},{"include":"#storage-modifiers"},{"include":"#types"},{"name":"variable.parameter.method.groovy","match":"\\w+"}]},"parens":{"begin":"\\(","end":"\\)","patterns":[{"include":"#groovy-code"}]},"primitive-arrays":{"patterns":[{"name":"storage.type.primitive.array.groovy","match":"\\b(?:void|boolean|byte|char|short|int|float|long|double)(\\[\\])*\\b"}]},"primitive-types":{"patterns":[{"name":"storage.type.primitive.groovy","match":"\\b(?:void|boolean|byte|char|short|int|float|long|double)\\b"}]},"regexp":{"patterns":[{"name":"string.regexp.groovy","begin":"/(?=[^/]+/([^\u003e]|$))","end":"/","patterns":[{"name":"constant.character.escape.groovy","match":"\\\\."}],"beginCaptures":{"0":{"name":"punctuation.definition.string.regexp.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.string.regexp.end.groovy"}}},{"name":"string.regexp.compiled.groovy","begin":"~\"","end":"\"","patterns":[{"name":"constant.character.escape.groovy","match":"\\\\."}],"beginCaptures":{"0":{"name":"punctuation.definition.string.regexp.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.string.regexp.end.groovy"}}}]},"storage-modifiers":{"patterns":[{"name":"storage.modifier.access-control.groovy","match":"\\b(private|protected|public)\\b"},{"name":"storage.modifier.static.groovy","match":"\\b(static)\\b"},{"name":"storage.modifier.final.groovy","match":"\\b(final)\\b"},{"name":"storage.modifier.other.groovy","match":"\\b(native|synchronized|abstract|threadsafe|transient)\\b"}]},"string-quoted-double":{"name":"string.quoted.double.groovy","begin":"\"","end":"\"","patterns":[{"include":"#string-quoted-double-contents"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.groovy"}}},"string-quoted-double-contents":{"patterns":[{"name":"constant.character.escape.groovy","match":"\\\\."},{"name":"variable.other.interpolated.groovy","begin":"\\$\\w","end":"(?=\\W)","patterns":[{"name":"variable.other.interpolated.groovy","match":"\\w"},{"name":"keyword.other.dereference.groovy","match":"\\."}],"applyEndPatternLast":true},{"name":"source.groovy.embedded.source","begin":"\\$\\{","end":"\\}","patterns":[{"include":"#nest_curly"}],"captures":{"0":{"name":"punctuation.section.embedded.groovy"}}}]},"string-quoted-double-multiline":{"name":"string.quoted.double.multiline.groovy","begin":"\"\"\"","end":"\"\"\"","patterns":[{"include":"#string-quoted-double-contents"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.groovy"}}},"string-quoted-single":{"name":"string.quoted.single.groovy","begin":"'","end":"'","patterns":[{"include":"#string-quoted-single-contents"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.groovy"}}},"string-quoted-single-contents":{"patterns":[{"name":"constant.character.escape.groovy","match":"\\\\."}]},"string-quoted-single-multiline":{"name":"string.quoted.single.multiline.groovy","begin":"'''","end":"'''","patterns":[{"include":"#string-quoted-single-contents"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.groovy"}}},"strings":{"patterns":[{"include":"#string-quoted-double-multiline"},{"include":"#string-quoted-single-multiline"},{"include":"#string-quoted-double"},{"include":"#string-quoted-single"},{"include":"#regexp"}]},"structures":{"name":"meta.structure.groovy","begin":"\\[","end":"\\]","patterns":[{"include":"#groovy-code"},{"name":"punctuation.definition.separator.groovy","match":","}],"beginCaptures":{"0":{"name":"punctuation.definition.structure.begin.groovy"}},"endCaptures":{"0":{"name":"punctuation.definition.structure.end.groovy"}}},"support-functions":{"patterns":[{"name":"support.function.print.groovy","match":"(?x)\\b(?:sprintf|print(?:f|ln)?)\\b"},{"name":"support.function.testing.groovy","match":"(?x)\\b(?:shouldFail|fail(?:NotEquals)?|ass(?:ume|ert(?:S(?:cript|ame)|N(?:ot(?:Same|\n\t\t\t\t\tNull)|ull)|Contains|T(?:hat|oString|rue)|Inspect|Equals|False|Length|\n\t\t\t\t\tArrayEquals)))\\b"}]},"types":{"patterns":[{"name":"storage.type.def.groovy","match":"\\b(def)\\b"},{"include":"#primitive-types"},{"include":"#primitive-arrays"},{"include":"#object-types"}]},"values":{"patterns":[{"include":"#language-variables"},{"include":"#strings"},{"include":"#numbers"},{"include":"#constants"},{"include":"#types"},{"include":"#structures"},{"include":"#method-call"}]},"variables":{"patterns":[{"name":"meta.definition.variable.groovy","begin":"(?x:(?=\n (?:\n (?:private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final) # visibility/modifier\n |\n (?:def)\n |\n (?:void|boolean|byte|char|short|int|float|long|double)\n |\n (?:(?:[a-z]\\w*\\.)*[A-Z]+\\w*) # object type\n )\n \\s+\n [\\w\\d_\u003c\u003e\\[\\],\\s]+\n (?:=|$)\n \n \t\t\t))","end":";|$","patterns":[{"match":"\\s"},{"match":"([A-Z_0-9]+)\\s+(?=\\=)","captures":{"1":{"name":"constant.variable.groovy"}}},{"match":"(\\w[^\\s,]*)\\s+(?=\\=)","captures":{"1":{"name":"meta.definition.variable.name.groovy"}}},{"begin":"=","end":"$","patterns":[{"include":"#groovy-code"}],"beginCaptures":{"0":{"name":"keyword.operator.assignment.groovy"}}},{"match":"(\\w[^\\s=]*)(?=\\s*($|;))","captures":{"1":{"name":"meta.definition.variable.name.groovy"}}},{"include":"#groovy-code"}]}],"applyEndPatternLast":true}}}