{ "name": "Java", "scopeName": "source.java", "patterns": [ { "name": "meta.package.java", "match": "^\\s*(package)\\b(?:\\s*([^ ;$]+)\\s*(;)?)?", "captures": { "1": { "name": "keyword.other.package.java" }, "2": { "name": "storage.modifier.package.java" }, "3": { "name": "punctuation.terminator.java" } } }, { "name": "meta.import.java", "contentName": "storage.modifier.import.java", "begin": "(import static)\\b\\s*", "end": "\\s*(?:$|(;))", "patterns": [ { "name": "punctuation.separator.java", "match": "\\." }, { "name": "invalid.illegal.character_not_allowed_here.java", "match": "\\s" } ], "captures": { "1": { "name": "keyword.other.import.java" }, "2": { "name": "storage.modifier.import.java" }, "3": { "name": "punctuation.terminator.java" } }, "beginCaptures": { "1": { "name": "keyword.other.import.static.java" } }, "endCaptures": { "1": { "name": "punctuation.terminator.java" } } }, { "name": "meta.import.java", "contentName": "storage.modifier.import.java", "begin": "(import)\\b\\s*", "end": "\\s*(?:$|(;))", "patterns": [ { "name": "punctuation.separator.java", "match": "\\." }, { "name": "invalid.illegal.character_not_allowed_here.java", "match": "\\s" } ], "captures": { "1": { "name": "keyword.other.import.java" }, "2": { "name": "storage.modifier.import.java" }, "3": { "name": "punctuation.terminator.java" } }, "beginCaptures": { "1": { "name": "keyword.other.import.java" } }, "endCaptures": { "1": { "name": "punctuation.terminator.java" } } }, { "include": "#code" } ], "repository": { "all-types": { "patterns": [ { "include": "#primitive-arrays" }, { "include": "#primitive-types" }, { "include": "#object-types" } ] }, "annotations": { "patterns": [ { "name": "meta.declaration.annotation.java", "begin": "(@[^ (]+)(\\()", "end": "(\\))", "patterns": [ { "match": "(\\w*)\\s*(=)", "captures": { "1": { "name": "constant.other.key.java" }, "2": { "name": "keyword.operator.assignment.java" } } }, { "include": "#code" }, { "name": "punctuation.separator.property.java", "match": "," } ], "beginCaptures": { "1": { "name": "storage.type.annotation.java" }, "2": { "name": "punctuation.definition.annotation-arguments.begin.java" } }, "endCaptures": { "1": { "name": "punctuation.definition.annotation-arguments.end.java" } } }, { "name": "storage.type.annotation.java", "match": "@\\w*" } ] }, "anonymous-classes-and-new": { "begin": "\\bnew\\b", "end": "(?\u003c=\\)|\\])(?!\\s*{)|(?\u003c=})|(?=;)", "patterns": [ { "begin": "(\\w+)\\s*(?=\\[)", "end": "(})|(?=\\s*(?:,|;|\\)))", "patterns": [ { "begin": "\\[", "end": "\\]", "patterns": [ { "include": "#code" } ] }, { "begin": "{", "end": "(?=})", "patterns": [ { "include": "#code" } ], "beginCaptures": { "0": { "name": "punctuation.section.block.begin.java" } } } ], "beginCaptures": { "1": { "name": "storage.type.java" } }, "endCaptures": { "1": { "name": "punctuation.section.block.end.java" } } }, { "begin": "(?=\\w.*\\()", "end": "(?\u003c=\\))", "patterns": [ { "include": "#object-types" }, { "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#code" } ], "beginCaptures": { "1": { "name": "storage.type.java" } } } ] }, { "name": "meta.inner-class.java", "begin": "{", "end": "}", "patterns": [ { "include": "#class-body" } ], "beginCaptures": { "0": { "name": "punctuation.section.inner-class.begin.java" } }, "endCaptures": { "0": { "name": "punctuation.section.inner-class.end.java" } } } ], "beginCaptures": { "0": { "name": "keyword.control.new.java" } } }, "assertions": { "patterns": [ { "name": "meta.declaration.assertion.java", "begin": "\\b(assert)\\s", "end": "$", "patterns": [ { "name": "keyword.operator.assert.expression-seperator.java", "match": ":" }, { "include": "#code" } ], "beginCaptures": { "1": { "name": "keyword.control.assert.java" } } } ] }, "class": { "name": "meta.class.java", "begin": "(?=\\w?[\\w\\s]*(?:class|(?:@)?interface|enum)\\s+\\w+)", "end": "}", "patterns": [ { "include": "#storage-modifiers" }, { "include": "#comments" }, { "name": "meta.class.identifier.java", "match": "(class|(?:@)?interface|enum)\\s+(\\w+)", "captures": { "1": { "name": "storage.modifier.java" }, "2": { "name": "entity.name.type.class.java" } } }, { "name": "meta.definition.class.inherited.classes.java", "begin": "extends", "end": "(?={|implements)", "patterns": [ { "include": "#object-types-inherited" }, { "include": "#comments" } ], "beginCaptures": { "0": { "name": "storage.modifier.extends.java" } } }, { "name": "meta.definition.class.implemented.interfaces.java", "begin": "(implements)\\s", "end": "(?=\\s*extends|\\{)", "patterns": [ { "include": "#object-types-inherited" }, { "include": "#comments" } ], "beginCaptures": { "1": { "name": "storage.modifier.implements.java" } } }, { "name": "meta.class.body.java", "begin": "{", "end": "(?=})", "patterns": [ { "include": "#class-body" } ], "beginCaptures": { "0": { "name": "punctuation.section.class.begin.java" } } } ], "endCaptures": { "0": { "name": "punctuation.section.class.end.java" } } }, "class-body": { "patterns": [ { "include": "#comments" }, { "include": "#class" }, { "include": "#enums" }, { "include": "#variables" }, { "include": "#methods" }, { "include": "#annotations" }, { "include": "#storage-modifiers" }, { "include": "#code" } ] }, "code": { "patterns": [ { "include": "#comments" }, { "include": "#class" }, { "begin": "{", "end": "}", "patterns": [ { "include": "#code" } ], "beginCaptures": { "0": { "name": "punctuation.section.block.begin.java" } }, "endCaptures": { "0": { "name": "punctuation.section.block.end.java" } } }, { "include": "#assertions" }, { "include": "#parens" }, { "include": "#constants-and-special-vars" }, { "include": "#anonymous-classes-and-new" }, { "include": "#annotations" }, { "include": "#keywords" }, { "include": "#storage-modifiers" }, { "include": "#method-call" }, { "include": "#strings" }, { "include": "#all-types" } ] }, "comments": { "patterns": [ { "name": "comment.block.empty.java", "match": "/\\*\\*/", "captures": { "0": { "name": "punctuation.definition.comment.java" } } }, { "include": "text.html.javadoc" }, { "include": "#comments-inline" } ] }, "comments-inline": { "patterns": [ { "name": "comment.block.java", "begin": "/\\*", "end": "\\*/", "captures": { "0": { "name": "punctuation.definition.comment.java" } } }, { "begin": "(^[ \\t]+)?(?=//)", "end": "(?!\\G)", "patterns": [ { "name": "comment.line.double-slash.java", "begin": "//", "end": "\\n", "beginCaptures": { "0": { "name": "punctuation.definition.comment.java" } } } ], "beginCaptures": { "1": { "name": "punctuation.whitespace.comment.leading.java" } } } ] }, "constants-and-special-vars": { "patterns": [ { "name": "constant.language.java", "match": "\\b(true|false|null)\\b" }, { "name": "variable.language.java", "match": "\\b(this|super)\\b" }, { "name": "constant.numeric.hex.java", "match": "\\b0[xX][0-9A-Fa-f]([0-9A-Fa-f_]*[0-9A-Fa-f])?[lL]?(?!\\w|\\.)" }, { "name": "constant.numeric.octal.java", "match": "\\b0[0-7_]*[0-7][lL]?\\b" }, { "name": "constant.numeric.binary.java", "match": "\\b0[bB][01]([01_]*[01])?[lL]?\\b" }, { "name": "constant.numeric.integer.java", "match": "\\b(0|[1-9]([0-9_]*[0-9])?)[lL]?(?!\\w|\\.)" }, { "name": "constant.numeric.hex-float.java", "match": "(?x)\n\t\t\t\t\t\t(?\u003c!\\w)\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t\t(?\u003e\n\t\t\t\t\t\t\t0[xX]\t\t\t\t\t\t\t\t\t# Start literal\n\t\t\t\t\t\t\t([0-9A-Fa-f]([0-9A-Fa-f_]*[0-9A-Fa-f])?)?\t\t\t\t\t\t# Optional Number\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(?\u003c=[0-9A-Fa-f])\\.\t\t\t\t\t\t\t# A number must exist on\n\t\t\t\t\t\t | \\.(?=[0-9A-Fa-f])\t\t\t\t\t\t\t# one side of the decimal\n\t\t\t\t\t\t | (?\u003c=[0-9A-Fa-f])\t\t\t\t\t\t\t\t# Decimal not required\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t([0-9A-Fa-f]([0-9A-Fa-f_]*[0-9A-Fa-f])?)?\t\t\t\t\t\t# Optional Number\n\t\t\t\t\t\t\t[pP]\t\t\t\t\t\t\t\t\t# Exponent Indicator\n\t\t\t\t\t\t\t[+-]?(0|[1-9]([0-9_]*[0-9])?)\t\t\t# Signed Integer\n\t\t\t\t\t\t\t[fFdD]?\t\t\t\t\t\t\t\t\t# Float Type Suffix\n\t\t\t\t\t\t)\n\t\t\t\t\t\t(?!\\w)\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t" }, { "name": "constant.numeric.float.java", "match": "(?x)\n\t\t\t\t\t\t(?\u003c!\\w)\t\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t\t(?\u003e\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(0|[1-9]([0-9_]*[0-9])?)\t\t\t\t# Leading digits\n\t\t\t\t\t\t\t\t(?=[eEfFdD.])\t\t\t\t\t\t\t# Allow for numbers without .\n\t\t\t\t\t\t\t)?\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(?\u003c=[0-9])(?=[eEfFdD])\t\t\t\t\t# Allow for numbers without .\n\t\t\t\t\t\t\t | \\.\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t[0-9]([0-9_]*[0-9])?\t\t\t\t\t# Numbers after .\n\t\t\t\t\t\t\t)?\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t[eE][+-]?(0|[1-9]([0-9_]*[0-9])?)\t\t# Exponent\n\t\t\t\t\t\t\t)?\n\t\t\t\t\t\t\t[fFdD]?\t\t\t\t\t\t\t\t\t\t# Float Type Suffix\n\t\t\t\t\t\t)\n\t\t\t\t\t\t(?!\\w)\t\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t" }, { "name": "constant.other.java", "match": "(\\.)?\\b([A-Z][A-Z0-9_]+)(?!\u003c|\\.class|\\s*\\w+\\s*=)\\b", "captures": { "1": { "name": "keyword.operator.dereference.java" } } } ] }, "enums": { "begin": "^(?=\\s*[A-Z0-9_]+\\s*({|\\(|,))", "end": "(?=;|})", "patterns": [ { "name": "meta.enum.java", "begin": "\\w+", "end": "(?=,|;|})", "patterns": [ { "include": "#parens" }, { "begin": "{", "end": "}", "patterns": [ { "include": "#class-body" } ], "beginCaptures": { "0": { "name": "punctuation.section.enum.begin.java" } }, "endCaptures": { "0": { "name": "punctuation.section.enum.end.java" } } } ], "beginCaptures": { "0": { "name": "constant.other.enum.java" } } }, { "include": "#comments" }, { "include": "#annotations" } ] }, "keywords": { "patterns": [ { "name": "keyword.control.catch-exception.java", "match": "\\b(try|catch|finally|throw)\\b" }, { "name": "keyword.control.ternary.java", "match": "\\?|:" }, { "name": "keyword.control.java", "match": "\\b(return|break|case|continue|default|do|while|for|switch|if|else)\\b" }, { "name": "keyword.operator.java", "match": "\\b(instanceof)\\b" }, { "name": "keyword.operator.bitwise.java", "match": "(\u003c\u003c|\u003e\u003e\u003e?|~|\\^)" }, { "name": "keyword.operator.assignment.bitwise.java", "match": "((\u0026|\\^|\\||\u003c\u003c|\u003e\u003e\u003e?)=)" }, { "name": "keyword.operator.comparison.java", "match": "(===?|!=|\u003c=|\u003e=|\u003c\u003e|\u003c|\u003e)" }, { "name": "keyword.operator.assignment.arithmetic.java", "match": "([+*/%-]=)" }, { "name": "keyword.operator.assignment.java", "match": "(=)" }, { "name": "keyword.operator.increment-decrement.java", "match": "(\\-\\-|\\+\\+)" }, { "name": "keyword.operator.arithmetic.java", "match": "(\\-|\\+|\\*|\\/|%)" }, { "name": "keyword.operator.logical.java", "match": "(!|\u0026\u0026|\\|\\|)" }, { "name": "keyword.operator.bitwise.java", "match": "(\\||\u0026)" }, { "name": "keyword.operator.dereference.java", "match": "(?\u003c=\\S)\\.(?=\\S)" }, { "name": "punctuation.terminator.java", "match": ";" } ] }, "method-call": { "name": "meta.method-call.java", "begin": "([\\w$]+)(\\()", "end": "\\)", "patterns": [ { "name": "punctuation.definition.seperator.parameter.java", "match": "," }, { "include": "#code" } ], "beginCaptures": { "1": { "name": "meta.method.java" }, "2": { "name": "punctuation.definition.method-parameters.begin.java" } }, "endCaptures": { "0": { "name": "punctuation.definition.method-parameters.end.java" } } }, "methods": { "name": "meta.method.java", "begin": "(?!new)(?=[\\w\u003c].*\\s+)(?=([^=/]|/(?!/))+\\()", "end": "(})|(?=;)", "patterns": [ { "include": "#storage-modifiers" }, { "name": "meta.method.identifier.java", "begin": "(\\w+)\\s*\\(", "end": "\\)", "patterns": [ { "include": "#parameters" }, { "include": "#comments" } ], "beginCaptures": { "1": { "name": "entity.name.function.java" } } }, { "name": "storage.type.token.java", "begin": "\u003c", "end": "\u003e", "patterns": [ { "include": "#object-types" }, { "name": "storage.type.generic.java", "begin": "\u003c", "end": "\u003e|[^\\w\\s,\\[\\]\u003c]" } ] }, { "name": "meta.method.return-type.java", "begin": "(?=\\w.*\\s+\\w+\\s*\\()", "end": "(?=\\w+\\s*\\()", "patterns": [ { "include": "#all-types" }, { "include": "#comments" } ] }, { "include": "#throws" }, { "name": "meta.method.body.java", "begin": "{", "end": "(?=})", "patterns": [ { "include": "#code" } ], "beginCaptures": { "0": { "name": "punctuation.section.method.begin.java" } } }, { "include": "#comments" } ], "endCaptures": { "1": { "name": "punctuation.section.method.end.java" } } }, "object-types": { "patterns": [ { "name": "storage.type.generic.java", "begin": "\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)\u003c", "end": "\u003e|[^\\w\\s,\\?\u003c\\[\\]]", "patterns": [ { "include": "#object-types" }, { "name": "storage.type.generic.java", "begin": "\u003c", "end": "\u003e|[^\\w\\s,\\[\\]\u003c]" } ] }, { "name": "storage.type.object.array.java", "begin": "\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)(?=\\[)", "end": "(?=[^\\]\\s])", "patterns": [ { "begin": "\\[", "end": "\\]", "patterns": [ { "include": "#code" } ] } ] }, { "name": "storage.type.java", "match": "\\b(?:[a-z]\\w*(\\.))*[A-Z]+\\w*\\b", "captures": { "1": { "name": "keyword.operator.dereference.java" } } } ] }, "object-types-inherited": { "patterns": [ { "name": "entity.other.inherited-class.java", "begin": "\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)\u003c", "end": "\u003e|[^\\w\\s,\u003c]", "patterns": [ { "include": "#object-types" }, { "name": "storage.type.generic.java", "begin": "\u003c", "end": "\u003e|[^\\w\\s,\u003c]" } ] }, { "name": "entity.other.inherited-class.java", "match": "\\b(?:[a-z]\\w*(\\.))*[A-Z]+\\w*", "captures": { "1": { "name": "keyword.operator.dereference.java" } } } ] }, "parameters": { "patterns": [ { "name": "storage.modifier.java", "match": "final" }, { "include": "#annotations" }, { "include": "#primitive-arrays" }, { "include": "#primitive-types" }, { "include": "#object-types" }, { "name": "variable.parameter.java", "match": "\\w+" } ] }, "parens": { "begin": "\\(", "end": "\\)", "patterns": [ { "include": "#code" } ] }, "primitive-arrays": { "patterns": [ { "name": "storage.type.primitive.array.java", "match": "\\b(?:void|boolean|byte|char|short|int|float|long|double)(\\[\\])*\\b" } ] }, "primitive-types": { "patterns": [ { "name": "storage.type.primitive.java", "match": "\\b(?:void|var|boolean|byte|char|short|int|float|long|double)\\b" } ] }, "storage-modifiers": { "match": "\\b(public|private|protected|static|final|native|synchronized|volatile|abstract|threadsafe|transient)\\b", "captures": { "1": { "name": "storage.modifier.java" } } }, "strings": { "patterns": [ { "name": "string.quoted.double.java", "begin": "\"", "end": "\"", "patterns": [ { "name": "constant.character.escape.java", "match": "\\\\." } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.java" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.java" } } }, { "name": "string.quoted.single.java", "begin": "'", "end": "'", "patterns": [ { "name": "constant.character.escape.java", "match": "\\\\." } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.java" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.java" } } } ] }, "throws": { "name": "meta.throwables.java", "begin": "throws", "end": "(?={|;)", "patterns": [ { "include": "#object-types" } ], "beginCaptures": { "0": { "name": "storage.modifier.java" } } }, "values": { "patterns": [ { "include": "#strings" }, { "include": "#object-types" }, { "include": "#constants-and-special-vars" } ] }, "variables": { "patterns": [ { "name": "meta.definition.variable.java", "begin": "(?x:(?=\n (?:\n (?:private|protected|public|native|synchronized|volatile|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 (?!private|protected|public|native|synchronized|volatile|abstract|threadsafe|transient|static|final|def|void|boolean|byte|char|short|int|float|long|double)\n [\\w\\d_\u003c\u003e\\[\\],\\?][\\w\\d_\u003c\u003e\\[\\],\\? \\t]*\n (?:=|$)\n \n\t\t\t\t\t))", "end": "(?=;)", "patterns": [ { "match": "\\s" }, { "match": "([A-Z_0-9]+)\\s+(?=\\=)", "captures": { "1": { "name": "constant.other.variable.java" } } }, { "match": "(\\w[^\\s,]*)\\s+(?=\\=)", "captures": { "1": { "name": "meta.definition.variable.name.java" } } }, { "begin": "=", "end": "(?=;)", "patterns": [ { "include": "#code" } ], "beginCaptures": { "0": { "name": "keyword.operator.assignment.java" } } }, { "match": "(\\w[^\\s=]*)(?=\\s*;)", "captures": { "1": { "name": "meta.definition.variable.name.java" } } }, { "include": "#code" } ] } ], "applyEndPatternLast": true } } }