fuc-new/doc/node_modules/tm-grammars/grammars/ballerina.json
hellcat 6adbc04d4b 1
2025-10-03 17:17:08 +08:00

3828 lines
98 KiB
JSON

{
"displayName": "Ballerina",
"fileTypes": [
"bal"
],
"name": "ballerina",
"patterns": [
{
"include": "#statements"
}
],
"repository": {
"access-modifier": {
"patterns": [
{
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(p(?:ublic|rivate))(?![$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "storage.modifier.ballerina keyword.other.ballerina"
}
]
},
"annotationAttachment": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.decorator.ballerina"
},
"2": {
"name": "support.type.ballerina"
},
"3": {
"name": "punctuation.decorator.ballerina"
},
"4": {
"name": "support.type.ballerina"
}
},
"match": "(@)([$_[:alpha:]][$_[:alnum:]]*)\\s*(:?)\\s*((?:[$_[:alpha:]][$_[:alnum:]]*)?)"
}
]
},
"annotationDefinition": {
"patterns": [
{
"begin": "\\bannotation\\b",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": ";",
"patterns": [
{
"include": "#code"
}
]
}
]
},
"array-literal": {
"begin": "\\s*(\\[)",
"beginCaptures": {
"1": {
"name": "meta.brace.square.ballerina"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "meta.brace.square.ballerina"
}
},
"name": "meta.array.literal.ballerina",
"patterns": [
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
}
]
},
"booleans": {
"patterns": [
{
"match": "\\b(true|false)\\b",
"name": "constant.language.boolean.ballerina"
}
]
},
"butClause": {
"patterns": [
{
"begin": "=>",
"beginCaptures": {
"0": {
"name": "meta.arrow.ballerina storage.type.function.arrow.ballerina"
}
},
"end": ",|(?=})",
"patterns": [
{
"include": "#code"
}
]
}
]
},
"butExp": {
"patterns": [
{
"begin": "\\bbut\\b",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina.documentation"
}
},
"patterns": [
{
"include": "#butExpBody"
},
{
"include": "#comment"
}
]
}
]
},
"butExpBody": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina.documentation"
}
},
"end": "(?=})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina.documentation"
}
},
"patterns": [
{
"include": "#parameter"
},
{
"include": "#butClause"
},
{
"include": "#comment"
}
]
}
]
},
"call": {
"patterns": [
{
"match": "'?([$_[:alpha:]][$_[:alnum:]]*)\\s*(?=\\()",
"name": "entity.name.function.ballerina"
}
]
},
"callableUnitBody": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "(?=})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#workerDef"
},
{
"include": "#service-decl"
},
{
"include": "#objectDec"
},
{
"include": "#function-defn"
},
{
"include": "#forkStatement"
},
{
"include": "#code"
}
]
}
]
},
"class-body": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"name": "meta.class.body.ballerina",
"patterns": [
{
"include": "#comment"
},
{
"include": "#mdDocumentation"
},
{
"include": "#function-defn"
},
{
"include": "#var-expr"
},
{
"include": "#variable-initializer"
},
{
"include": "#access-modifier"
},
{
"include": "#keywords"
},
{
"begin": "(?<=:)\\s*",
"end": "(?=[-\\])+,:;}\\s]|^\\s*$|^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|service|type|var)\\b)"
},
{
"include": "#decl-block"
},
{
"include": "#expression"
},
{
"include": "#punctuation-comma"
},
{
"include": "#punctuation-semicolon"
}
]
},
"class-defn": {
"begin": "(\\s+)(class)\\b|^class\\b(?=\\s+|/[*/])",
"beginCaptures": {
"0": {
"name": "storage.type.class.ballerina keyword.other.ballerina"
}
},
"end": "(?<=})",
"name": "meta.class.ballerina",
"patterns": [
{
"include": "#keywords"
},
{
"captures": {
"0": {
"name": "entity.name.type.class.ballerina"
}
},
"match": "[$_[:alpha:]][$_[:alnum:]]*"
},
{
"include": "#class-body"
}
]
},
"code": {
"patterns": [
{
"include": "#booleans"
},
{
"include": "#matchStatement"
},
{
"include": "#butExp"
},
{
"include": "#xml"
},
{
"include": "#stringTemplate"
},
{
"include": "#keywords"
},
{
"include": "#strings"
},
{
"include": "#comment"
},
{
"include": "#mdDocumentation"
},
{
"include": "#annotationAttachment"
},
{
"include": "#numbers"
},
{
"include": "#maps"
},
{
"include": "#paranthesised"
},
{
"include": "#paranthesisedBracket"
},
{
"include": "#regex"
}
]
},
"comment": {
"patterns": [
{
"match": "//.*",
"name": "comment.ballerina"
}
]
},
"constrainType": {
"patterns": [
{
"begin": "<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.parameters.begin.ballerina"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.definition.parameters.end.ballerina"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#constrainType"
},
{
"match": "\\b([$_[:alpha:]][$_[:alnum:]]*)\\b",
"name": "storage.type.ballerina"
}
]
}
]
},
"control-statement": {
"patterns": [
{
"begin": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(return)(?![$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"beginCaptures": {
"0": {
"name": "keyword.control.flow.ballerina"
}
},
"end": "(?=[;}]|$|;|^\\s*$|^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|service|type|var)\\b)",
"patterns": [
{
"include": "#expression"
}
]
},
{
"include": "#for-loop"
},
{
"include": "#if-statement"
},
{
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(else|if)(?![$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "keyword.control.conditional.ballerina"
}
]
},
"decl-block": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "(?=} external;)|(})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"name": "meta.block.ballerina",
"patterns": [
{
"include": "#statements"
},
{
"include": "#mdDocumentation"
}
]
},
"declaration": {
"patterns": [
{
"include": "#import-declaration"
},
{
"include": "#var-expr"
},
{
"include": "#typeDefinition"
},
{
"include": "#function-defn"
},
{
"include": "#service-decl"
},
{
"include": "#class-defn"
},
{
"include": "#enum-decl"
},
{
"include": "#source"
},
{
"include": "#keywords"
}
]
},
"defaultValue": {
"patterns": [
{
"begin": "[:=]",
"beginCaptures": {
"0": {
"name": "keyword.operator.ballerina"
}
},
"end": "(?=[),])",
"patterns": [
{
"include": "#code"
}
]
}
]
},
"defaultWithParentheses": {
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
}
}
]
},
"documentationBody": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina.documentation"
}
},
"end": "(?=})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina.documentation"
}
},
"patterns": [
{
"captures": {
"1": {
"name": "keyword.other.ballerina.documentation"
},
"2": {
"name": "keyword.other.ballerina.documentation"
},
"3": {
"name": "variable.parameter.ballerina.documentation"
},
"4": {
"name": "keyword.other.ballerina.documentation"
}
},
"match": "([FPRTV])(\\{\\{)(.*)(}})"
},
{
"begin": "```",
"end": "```",
"name": "comment.block.code.ballerina.documentation"
},
{
"begin": "``",
"end": "``",
"name": "comment.block.code.ballerina.documentation"
},
{
"begin": "`",
"end": "`",
"name": "comment.block.code.ballerina.documentation"
},
{
"match": ".",
"name": "comment.block.ballerina.documentation"
}
]
}
]
},
"documentationDef": {
"patterns": [
{
"begin": "\\bd(?:ocumentation|eprecated)\\b",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "delimiter.curly"
}
},
"patterns": [
{
"include": "#documentationBody"
},
{
"include": "#comment"
}
]
}
]
},
"enum-decl": {
"begin": "(?:\\b(const)\\s+)?\\b(enum)\\s+([$_[:alpha:]][$_[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "storage.modifier.ballerina"
},
"2": {
"name": "keyword.other.ballerina"
},
"3": {
"name": "entity.name.type.enum.ballerina"
}
},
"end": "(?<=})",
"name": "meta.enum.declaration.ballerina",
"patterns": [
{
"include": "#comment"
},
{
"include": "#mdDocumentation"
},
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#mdDocumentation"
},
{
"begin": "([$_[:alpha:]][$_[:alnum:]]*)",
"beginCaptures": {
"0": {
"name": "variable.other.enummember.ballerina"
}
},
"end": "(?=[,}]|$)",
"patterns": [
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
},
{
"begin": "(?=(('([^'\\\\]|\\\\.)*')|(\"([^\"\\\\]|\\\\.)*\")|(`([^\\\\`]|\\\\.)*`)|(\\[([^]\\[]|\\[[^]\\[]*])+])))",
"end": "(?=[,}]|$)",
"patterns": [
{
"include": "#string"
},
{
"include": "#array-literal"
},
{
"include": "#comment"
},
{
"include": "#variable-initializer"
}
]
},
{
"include": "#punctuation-comma"
}
]
}
]
},
"errorDestructure": {
"patterns": [
{
"begin": "error",
"beginCaptures": {
"0": {
"name": "storage.type.ballerina"
}
},
"end": "(?==>)",
"patterns": [
{
"include": "#code"
}
]
}
]
},
"expression": {
"patterns": [
{
"include": "#keywords"
},
{
"include": "#expressionWithoutIdentifiers"
},
{
"include": "#identifiers"
},
{
"include": "#regex"
}
]
},
"expression-operators": {
"patterns": [
{
"match": "(?:\\*|(?<!\\()/|[-%+])=",
"name": "keyword.operator.assignment.compound.ballerina"
},
{
"match": "(?:[\\&^]|<<|>>>??|\\|)=",
"name": "keyword.operator.assignment.compound.bitwise.ballerina"
},
{
"match": "<<|>>>?",
"name": "keyword.operator.bitwise.shift.ballerina"
},
{
"match": "[!=]==?",
"name": "keyword.operator.comparison.ballerina"
},
{
"match": "<=|>=|<>|[<>]",
"name": "keyword.operator.relational.ballerina"
},
{
"captures": {
"1": {
"name": "keyword.operator.logical.ballerina"
},
"2": {
"name": "keyword.operator.assignment.compound.ballerina"
},
"3": {
"name": "keyword.operator.arithmetic.ballerina"
}
},
"match": "(?<=[$_[:alnum:]])(!)\\s*(?:(/=)|(/)(?![*/]))"
},
{
"match": "!|&&|\\|\\||\\?\\?",
"name": "keyword.operator.logical.ballerina"
},
{
"match": "[\\&^|~]",
"name": "keyword.operator.bitwise.ballerina"
},
{
"match": "=",
"name": "keyword.operator.assignment.ballerina"
},
{
"match": "--",
"name": "keyword.operator.decrement.ballerina"
},
{
"match": "\\+\\+",
"name": "keyword.operator.increment.ballerina"
},
{
"match": "[-%*+/]",
"name": "keyword.operator.arithmetic.ballerina"
}
]
},
"expressionWithoutIdentifiers": {
"patterns": [
{
"include": "#xml"
},
{
"include": "#string"
},
{
"include": "#stringTemplate"
},
{
"include": "#comment"
},
{
"include": "#object-literal"
},
{
"include": "#ternary-expression"
},
{
"include": "#expression-operators"
},
{
"include": "#literal"
},
{
"include": "#paranthesised"
},
{
"include": "#regex"
}
]
},
"flags-on-off": {
"name": "meta.flags.regexp.ballerina",
"patterns": [
{
"begin": "(\\??)([imsx]*)(-?)([imsx]*)(:)",
"beginCaptures": {
"1": {
"name": "punctuation.other.non-capturing-group-begin.regexp.ballerina"
},
"2": {
"name": "keyword.other.non-capturing-group.flags-on.regexp.ballerina"
},
"3": {
"name": "punctuation.other.non-capturing-group.off.regexp.ballerina"
},
"4": {
"name": "keyword.other.non-capturing-group.flags-off.regexp.ballerina"
},
"5": {
"name": "punctuation.other.non-capturing-group-end.regexp.ballerina"
}
},
"end": "()",
"name": "constant.other.flag.regexp.ballerina",
"patterns": [
{
"include": "#regexp"
},
{
"include": "#template-substitution-element"
}
]
}
]
},
"for-loop": {
"begin": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))foreach\\s*",
"beginCaptures": {
"0": {
"name": "keyword.control.loop.ballerina"
},
"1": {
"name": "support.type.primitive.ballerina"
}
},
"end": "(?=\\{)",
"patterns": [
{
"match": "\\bin\\b",
"name": "keyword.other.ballerina"
},
{
"include": "#identifiers"
},
{
"include": "#comment"
},
{
"include": "#var-expr"
},
{
"include": "#expression"
}
]
},
"forkBody": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "(?=})",
"patterns": [
{
"include": "#workerDef"
}
]
}
]
},
"forkStatement": {
"patterns": [
{
"begin": "\\bfork\\b",
"beginCaptures": {
"0": {
"name": "keyword.control.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#forkBody"
}
]
}
]
},
"function-body": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#functionParameters"
},
{
"include": "#decl-block"
},
{
"begin": "=>",
"beginCaptures": {
"0": {
"name": "meta.arrow.ballerina storage.type.function.arrow.ballerina"
}
},
"end": "(?=;)|(?=,)|(?=\\);)",
"name": "meta.block.ballerina",
"patterns": [
{
"include": "#natural-expr"
},
{
"include": "#statements"
},
{
"include": "#punctuation-comma"
}
]
},
{
"match": "\\*",
"name": "keyword.generator.asterisk.ballerina"
}
]
},
"function-defn": {
"begin": "(?:(p(?:ublic|rivate))\\s+)?(function)\\b",
"beginCaptures": {
"1": {
"name": "keyword.other.ballerina"
},
"2": {
"name": "keyword.other.ballerina"
}
},
"end": "(?<=;)|(?<=})|(?<=,)|(?=\\);)",
"name": "meta.function.ballerina",
"patterns": [
{
"match": "\\bexternal\\b",
"name": "keyword.ballerina"
},
{
"include": "#stringTemplate"
},
{
"include": "#annotationAttachment"
},
{
"include": "#functionReturns"
},
{
"include": "#functionName"
},
{
"include": "#functionParameters"
},
{
"include": "#punctuation-semicolon"
},
{
"include": "#function-body"
},
{
"include": "#regex"
}
]
},
"function-parameters-body": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#numbers"
},
{
"include": "#string"
},
{
"include": "#annotationAttachment"
},
{
"include": "#recordLiteral"
},
{
"include": "#keywords"
},
{
"include": "#parameter-name"
},
{
"include": "#array-literal"
},
{
"include": "#variable-initializer"
},
{
"include": "#identifiers"
},
{
"include": "#regex"
},
{
"match": ",",
"name": "punctuation.separator.parameter.ballerina"
}
]
},
"functionName": {
"patterns": [
{
"match": "\\bfunction\\b",
"name": "keyword.other.ballerina"
},
{
"include": "#type-primitive"
},
{
"include": "#self-literal"
},
{
"include": "#string"
},
{
"captures": {
"2": {
"name": "variable.language.this.ballerina"
},
"3": {
"name": "keyword.other.ballerina"
},
"4": {
"name": "support.type.primitive.ballerina"
},
"5": {
"name": "storage.type.ballerina"
},
"6": {
"name": "meta.definition.function.ballerina entity.name.function.ballerina"
}
},
"match": "\\s+(\\b(self)|\\b(is|new|isolated|null|function|in)\\b|(string|int|boolean|float|byte|decimal|json|xml|anydata)\\b|\\b(readonly|error|map)\\b|([$_[:alpha:]][$_[:alnum:]]*))"
}
]
},
"functionParameters": {
"begin": "[(\\[]",
"beginCaptures": {
"0": {
"name": "punctuation.definition.parameters.begin.ballerina"
}
},
"end": "[])]",
"endCaptures": {
"0": {
"name": "punctuation.definition.parameters.end.ballerina"
}
},
"name": "meta.parameters.ballerina",
"patterns": [
{
"include": "#function-parameters-body"
}
]
},
"functionReturns": {
"begin": "\\s*(returns)\\s*",
"beginCaptures": {
"1": {
"name": "keyword.other.ballerina"
}
},
"end": "(?==>)|(=)|(?=\\{)|(\\))|(?=;)",
"endCaptures": {
"1": {
"name": "keyword.operator.ballerina"
}
},
"name": "meta.type.function.return.ballerina",
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#numbers"
},
{
"include": "#keywords"
},
{
"include": "#type-primitive"
},
{
"captures": {
"1": {
"name": "support.type.primitive.ballerina"
}
},
"match": "\\s*\\b(var)(?=\\s+|[?\\[])"
},
{
"match": "\\|",
"name": "keyword.operator.ballerina"
},
{
"match": "\\?",
"name": "keyword.operator.optional.ballerina"
},
{
"include": "#type-annotation"
},
{
"include": "#type-tuple"
},
{
"include": "#keywords"
},
{
"match": "[$_[:alpha:]][$_[:alnum:]]*",
"name": "variable.other.readwrite.ballerina"
}
]
},
"functionType": {
"patterns": [
{
"begin": "\\bfunction\\b",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": "(?=,)|(?=\\|)|(?=:)|(?==>)|(?=\\))|(?=])",
"patterns": [
{
"include": "#comment"
},
{
"include": "#functionTypeParamList"
},
{
"include": "#functionTypeReturns"
}
]
}
]
},
"functionTypeParamList": {
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "delimiter.parenthesis"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "delimiter.parenthesis"
}
},
"patterns": [
{
"match": "public",
"name": "keyword"
},
{
"include": "#annotationAttachment"
},
{
"include": "#recordLiteral"
},
{
"include": "#record"
},
{
"include": "#objectDec"
},
{
"include": "#functionType"
},
{
"include": "#constrainType"
},
{
"include": "#parameterTuple"
},
{
"include": "#functionTypeType"
},
{
"include": "#comment"
}
]
}
]
},
"functionTypeReturns": {
"patterns": [
{
"begin": "\\breturns\\b",
"beginCaptures": {
"0": {
"name": "keyword"
}
},
"end": "(?=,)|\\||(?=])|(?=\\))",
"patterns": [
{
"include": "#functionTypeReturnsParameter"
},
{
"include": "#comment"
}
]
}
]
},
"functionTypeReturnsParameter": {
"patterns": [
{
"begin": "((?=record|object|function)|[$_[:alpha:]][$_[:alnum:]]*)",
"beginCaptures": {
"0": {
"name": "storage.type.ballerina"
}
},
"end": "(?=,)|[:|]|(?==>)|(?=\\))|(?=])",
"patterns": [
{
"include": "#record"
},
{
"include": "#objectDec"
},
{
"include": "#functionType"
},
{
"include": "#constrainType"
},
{
"include": "#defaultValue"
},
{
"include": "#comment"
},
{
"include": "#parameterTuple"
},
{
"match": "[$_[:alpha:]][$_[:alnum:]]*",
"name": "default.variable.parameter.ballerina"
}
]
}
]
},
"functionTypeType": {
"patterns": [
{
"begin": "[$_[:alpha:]][$_[:alnum:]]*",
"beginCaptures": {
"0": {
"name": "storage.type.ballerina"
}
},
"end": "(?=,)|\\||(?=])|(?=\\))"
}
]
},
"identifiers": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.accessor.ballerina"
},
"2": {
"name": "punctuation.accessor.optional.ballerina"
},
"3": {
"name": "entity.name.function.ballerina"
}
},
"match": "(?:(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\s*=\\s*((((function\\s*[(*<])|(function\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\s*=>)))|((((<\\s*)$|((<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*((([\\[{]\\s*)?)$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\s*:)))|((<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[$_[:alpha:]]))([^\"'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|('([^'\\\\]|\\\\.)*')|(\"([^\"\\\\]|\\\\.)*\")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))"
},
{
"captures": {
"1": {
"name": "punctuation.accessor.ballerina"
},
"2": {
"name": "punctuation.accessor.optional.ballerina"
},
"3": {
"name": "entity.name.function.ballerina"
}
},
"match": "(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)\\s*(?=\\()"
},
{
"captures": {
"1": {
"name": "punctuation.accessor.ballerina"
},
"2": {
"name": "punctuation.accessor.optional.ballerina"
},
"3": {
"name": "variable.other.property.ballerina"
}
},
"match": "(?:(\\.)|(\\?\\.(?!\\s*\\d)))\\s*(#?[$_[:alpha:]][$_[:alnum:]]*)"
},
{
"include": "#type-primitive"
},
{
"include": "#self-literal"
},
{
"match": "\\b(check|foreach|if|checkpanic)\\b",
"name": "keyword.control.ballerina"
},
{
"include": "#natural-expr"
},
{
"include": "#call"
},
{
"match": "\\b(var)\\b",
"name": "support.type.primitive.ballerina"
},
{
"captures": {
"1": {
"name": "variable.other.readwrite.ballerina"
},
"3": {
"name": "punctuation.accessor.ballerina"
},
"4": {
"name": "entity.name.function.ballerina"
},
"5": {
"name": "punctuation.definition.parameters.begin.ballerina"
},
"6": {
"name": "punctuation.definition.parameters.end.ballerina"
}
},
"match": "([$_[:alpha:]][$_[:alnum:]]*)((\\.)([$_[:alpha:]][$_[:alnum:]]*)(\\()(\\)))?"
},
{
"match": "(')([$_[:alpha:]][$_[:alnum:]]*)",
"name": "variable.other.property.ballerina"
},
{
"include": "#type-annotation"
}
]
},
"if-statement": {
"patterns": [
{
"begin": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=\\bif\\b\\s*(?!\\{))",
"end": "(?<=})",
"patterns": [
{
"include": "#comment"
},
{
"begin": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(if)\\s*(\\()?",
"beginCaptures": {
"1": {
"name": "keyword.control.conditional.ballerina"
},
"2": {
"name": "meta.brace.round.ballerina"
}
},
"end": "(\\))|(?=\\{)",
"endCaptures": {
"1": {
"name": "meta.brace.round.ballerina"
}
},
"patterns": [
{
"include": "#decl-block"
},
{
"include": "#keywords"
},
{
"include": "#identifiers"
},
{
"include": "#type-primitive"
},
{
"include": "#xml"
},
{
"include": "#string"
},
{
"include": "#stringTemplate"
},
{
"include": "#comment"
},
{
"include": "#ternary-expression"
},
{
"include": "#expression-operators"
},
{
"include": "#literal"
},
{
"include": "#paranthesised"
},
{
"include": "#regex"
}
]
},
{
"begin": "(?<=\\))(?=[=\\s])",
"end": "(?=\\{)",
"patterns": [
{
"include": "#literal"
},
{
"include": "#keywords"
}
]
},
{
"include": "#decl-block"
}
]
}
]
},
"import-clause": {
"patterns": [
{
"include": "#comment"
},
{
"captures": {
"1": {
"name": "keyword.control.default.ballerina"
},
"3": {
"name": "variable.other.readwrite.ballerina meta.import.module.ballerina"
},
"5": {
"name": "keyword.control.default.ballerina"
},
"6": {
"name": "variable.other.readwrite.alias.ballerina"
}
},
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:\\b(default)|(\\*)|\\b([$_[:alpha:]][$_[:alnum:]]*))"
},
{
"match": "([$_[:alpha:]][$_[:alnum:]]*)",
"name": "variable.other.readwrite.alias.ballerina"
}
]
},
"import-declaration": {
"begin": "\\bimport\\b",
"beginCaptures": {
"0": {
"name": "keyword.control.import.ballerina"
}
},
"end": ";",
"endCaptures": {
"0": {
"name": "punctuation.terminator.statement.ballerina"
}
},
"name": "meta.import.ballerina",
"patterns": [
{
"match": "(')([$_[:alpha:]][$_[:alnum:]]*)",
"name": "variable.other.property.ballerina"
},
{
"include": "#keywords"
},
{
"include": "#comment"
},
{
"include": "#import-clause"
},
{
"include": "#punctuation-accessor"
}
]
},
"keywords": {
"patterns": [
{
"match": "\\b(fork|join|while|returns|transaction|transactional|retry|commit|rollback|typeof|enum|wait|match)\\b",
"name": "keyword.control.ballerina"
},
{
"match": "\\b(return|break|continue|check|checkpanic|panic|trap|from|where)\\b",
"name": "keyword.control.flow.ballerina"
},
{
"match": "\\b(public|private|external|return|record|object|remote|abstract|client|true|false|fail|import|version)\\b",
"name": "keyword.other.ballerina"
},
{
"match": "\\b(as|on|function|resource|listener|const|final|is|null|lock|annotation|source|worker|parameter|field|isolated|in)\\b",
"name": "keyword.other.ballerina"
},
{
"match": "\\b(xmlns|table|key|let|new|select|start|flush|default|do|base16|base64|conflict)\\b",
"name": "keyword.other.ballerina"
},
{
"match": "\\b(limit|outer|equals|order|by|ascending|descending|class|configurable|variable|module|service|group|collect)\\b",
"name": "keyword.other.ballerina"
},
{
"match": "(=>)",
"name": "meta.arrow.ballerina storage.type.function.arrow.ballerina"
},
{
"match": "([-!%+]|~=|===?|=|!==??|[\\&<>|]|\\?:|\\.\\.\\.|<=|>=|&&|\\|\\||~|>>>??)",
"name": "keyword.operator.ballerina"
},
{
"include": "#types"
},
{
"include": "#self-literal"
},
{
"include": "#type-primitive"
}
]
},
"literal": {
"patterns": [
{
"include": "#booleans"
},
{
"include": "#numbers"
},
{
"include": "#strings"
},
{
"include": "#maps"
},
{
"include": "#self-literal"
},
{
"include": "#array-literal"
}
]
},
"maps": {
"patterns": [
{
"begin": "\\{",
"end": "}",
"patterns": [
{
"include": "#code"
}
]
}
]
},
"matchBindingPattern": {
"patterns": [
{
"begin": "var",
"beginCaptures": {
"0": {
"name": "storage.type.ballerina"
}
},
"end": "(?==>)|,",
"patterns": [
{
"include": "#errorDestructure"
},
{
"include": "#code"
},
{
"match": "[$_[:alpha:]][$_[:alnum:]]*",
"name": "variable.parameter.ballerina"
}
]
}
]
},
"matchStatement": {
"patterns": [
{
"begin": "\\bmatch\\b",
"beginCaptures": {
"0": {
"name": "keyword.control.ballerina"
}
},
"end": "}",
"patterns": [
{
"include": "#matchStatementBody"
},
{
"include": "#comment"
},
{
"include": "#code"
}
]
}
]
},
"matchStatementBody": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina.documentation"
}
},
"end": "(?=})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina.documentation"
}
},
"patterns": [
{
"include": "#literal"
},
{
"include": "#matchBindingPattern"
},
{
"include": "#matchStatementPatternClause"
},
{
"include": "#comment"
},
{
"include": "#code"
}
]
}
]
},
"matchStatementPatternClause": {
"patterns": [
{
"begin": "=>",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": "((})|[,;])",
"patterns": [
{
"include": "#callableUnitBody"
},
{
"include": "#code"
}
]
}
]
},
"mdDocumentation": {
"begin": "#",
"end": "[\\n\\r]+",
"name": "comment.mddocs.ballerina",
"patterns": [
{
"include": "#mdDocumentationReturnParamDescription"
},
{
"include": "#mdDocumentationParamDescription"
}
]
},
"mdDocumentationParamDescription": {
"patterns": [
{
"begin": "(\\+\\s+)('?[$_[:alpha:]][$_[:alnum:]]*)(\\s*-\\s+)",
"beginCaptures": {
"1": {
"name": "keyword.operator.ballerina"
},
"2": {
"name": "variable.other.readwrite.ballerina"
},
"3": {
"name": "keyword.operator.ballerina"
}
},
"end": "(?=[^\\n\\r#]|# *?\\+)",
"patterns": [
{
"match": "#.*",
"name": "comment.mddocs.paramdesc.ballerina"
}
]
}
]
},
"mdDocumentationReturnParamDescription": {
"patterns": [
{
"begin": "(#) *?(\\+) *(return) *(-)?(.*)",
"beginCaptures": {
"1": {
"name": "comment.mddocs.ballerina"
},
"2": {
"name": "keyword.ballerina"
},
"3": {
"name": "keyword.ballerina"
},
"4": {
"name": "keyword.ballerina"
},
"5": {
"name": "comment.mddocs.returnparamdesc.ballerina"
}
},
"end": "(?=[^\\n\\r#]|# *?\\+)",
"patterns": [
{
"match": "#.*",
"name": "comment.mddocs.returnparamdesc.ballerina"
}
]
}
]
},
"multiType": {
"patterns": [
{
"match": "(?<=\\|)([$_[:alpha:]][$_[:alnum:]]*)|([$_[:alpha:]][$_[:alnum:]]*)(?=\\|)",
"name": "storage.type.ballerina"
},
{
"match": "\\|",
"name": "keyword.operator.ballerina"
}
]
},
"natural-expr": {
"patterns": [
{
"begin": "natural",
"beginCaptures": {
"0": {
"name": "keyword.other.ballerina"
}
},
"end": "(?=})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#natural-expr-body"
}
]
}
]
},
"natural-expr-body": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"contentName": "string.template.ballerina",
"end": "(?=})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#template-substitution-element"
},
{
"include": "#string-character-escape"
},
{
"include": "#templateVariable"
}
]
}
]
},
"numbers": {
"patterns": [
{
"match": "\\b(?:0[Xx][A-Fa-f\\d]+\\b|\\d+(?:\\.(?:\\d+|$))?)",
"name": "constant.numeric.decimal.ballerina"
}
]
},
"object-literal": {
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"name": "meta.objectliteral.ballerina",
"patterns": [
{
"include": "#object-member"
},
{
"include": "#punctuation-comma"
}
]
},
"object-member": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#function-defn"
},
{
"include": "#literal"
},
{
"include": "#keywords"
},
{
"include": "#expression"
},
{
"begin": "(?=\\[)",
"end": "(?=:)|((?<=])(?=\\s*[(<]))",
"name": "meta.object.member.ballerina meta.object-literal.key.ballerina",
"patterns": [
{
"include": "#comment"
}
]
},
{
"begin": "(?=[\"'`])",
"end": "(?=:)|((?<=[\"'`])(?=((\\s*[(,<}])|(\\n*})|(\\s+(as)\\s+))))",
"name": "meta.object.member.ballerina meta.object-literal.key.ballerina",
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
}
]
},
{
"begin": "(?=\\b((?<!\\$)0[Xx]\\h[_\\h]*(n)?\\b(?!\\$))|\\b((?<!\\$)0[Bb][01][01_]*(n)?\\b(?!\\$))|\\b((?<!\\$)0[Oo]?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\B(\\.)[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*[Ee][-+]?[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(\\.)(n)?\\B|\\B(\\.)[0-9][0-9_]*(n)?\\b|\\b[0-9][0-9_]*(n)?\\b(?!\\.))(?!\\$)))",
"end": "(?=:)|(?=\\s*([(,<}])|(\\s+as\\s+))",
"name": "meta.object.member.ballerina meta.object-literal.key.ballerina",
"patterns": [
{
"include": "#comment"
},
{
"include": "#numbers"
}
]
},
{
"begin": "(?<=[]\"'`])(?=\\s*[(<])",
"end": "(?=[,;}])|(?<=})",
"name": "meta.method.declaration.ballerina",
"patterns": [
{
"include": "#function-body"
}
]
},
{
"captures": {
"0": {
"name": "meta.object-literal.key.ballerina"
},
"1": {
"name": "constant.numeric.decimal.ballerina"
}
},
"match": "(?![$_[:alpha:]])(\\d+)\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*:)",
"name": "meta.object.member.ballerina"
},
{
"captures": {
"0": {
"name": "meta.object-literal.key.ballerina"
},
"1": {
"name": "entity.name.function.ballerina"
}
},
"match": "([$_[:alpha:]][$_[:alnum:]]*)\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*:(\\s*/\\*([^*]|(\\*[^/]))*\\*/)*\\s*((((function\\s*[(*<])|(function\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\s*=>)))|((((<\\s*)$|((<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*((([\\[{]\\s*)?)$|((\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})\\s*((:\\s*\\{?)$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*)))|((\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])\\s*((:\\s*\\[?)$|((\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+\\s*)?=\\s*))))))|((<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*((\\)\\s*:)|((\\.\\.\\.\\s*)?[$_[:alpha:]][$_[:alnum:]]*\\s*:)))|((<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<]|<\\s*([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*]))([^<=>]|=[^<])*>)*>)*>\\s*)?\\(\\s*(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*(([$_[:alpha:]]|(\\{([^{}]|(\\{([^{}]|\\{[^{}]*})*}))*})|(\\[([^]\\[]|(\\[([^]\\[]|\\[[^]\\[]*])*]))*])|(\\.\\.\\.\\s*[$_[:alpha:]]))([^\"'()`]|(\\(([^()]|(\\(([^()]|\\([^()]*\\))*\\)))*\\))|('([^'\\\\]|\\\\.)*')|(\"([^\"\\\\]|\\\\.)*\")|(`([^\\\\`]|\\\\.)*`))*)?\\)(\\s*:\\s*([^()<>{}]|<([^<>]|<([^<>]|<[^<>]+>)+>)+>|\\([^()]+\\)|\\{[^{}]+})+)?\\s*=>)))))",
"name": "meta.object.member.ballerina"
},
{
"captures": {
"0": {
"name": "meta.object-literal.key.ballerina"
}
},
"match": "[$_[:alpha:]][$_[:alnum:]]*\\s*(?=(/\\*([^*]|(\\*[^/]))*\\*/\\s*)*:)",
"name": "meta.object.member.ballerina"
},
{
"begin": "\\.\\.\\.",
"beginCaptures": {
"0": {
"name": "keyword.operator.spread.ballerina"
}
},
"end": "(?=[,}])",
"name": "meta.object.member.ballerina",
"patterns": [
{
"include": "#expression"
}
]
},
{
"captures": {
"1": {
"name": "variable.other.readwrite.ballerina"
}
},
"match": "([$_[:alpha:]][$_[:alnum:]]*)\\s*(?=[,}]|$|//|/\\*)",
"name": "meta.object.member.ballerina"
},
{
"captures": {
"1": {
"name": "keyword.control.as.ballerina"
},
"2": {
"name": "storage.modifier.ballerina"
}
},
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*([,}]|$))",
"name": "meta.object.member.ballerina"
},
{
"begin": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+",
"beginCaptures": {
"1": {
"name": "keyword.control.as.ballerina"
}
},
"end": "(?=[-\\])+,:;>?}]|\\|\\||&&|!==|$|^|((?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+))",
"name": "meta.object.member.ballerina"
},
{
"begin": "(?=[$_[:alpha:]][$_[:alnum:]]*\\s*=)",
"end": "(?=[,}]|$|//|/\\*)",
"name": "meta.object.member.ballerina",
"patterns": [
{
"include": "#expression"
}
]
}
]
},
"objectDec": {
"patterns": [
{
"begin": "\\bobject\\b(?!:)",
"beginCaptures": {
"0": {
"name": "keyword.other.ballerina"
}
},
"end": "(?<=})",
"patterns": [
{
"include": "#decl-block"
}
]
}
]
},
"objectInitBody": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "(?=})",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#code"
}
]
}
]
},
"objectInitParameters": {
"patterns": [
{
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "punctuation.definition.parameters.begin.ballerina"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.parameters.end.ballerina"
}
},
"patterns": [
{
"include": "#code"
},
{
"match": "\\b([$_[:alpha:]][$_[:alnum:]]*)\\b",
"name": "variable.parameter.ballerina"
}
]
}
]
},
"objectMemberFunctionDec": {
"patterns": [
{
"begin": "\\bfunction\\b",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": ";",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#functionParameters"
},
{
"match": "\\breturns\\b",
"name": "keyword.ballerina"
},
{
"include": "#code"
}
]
}
]
},
"parameter": {
"patterns": [
{
"begin": "((?=record|object|function)|([$_[:alpha:]][$_[:alnum:]]*)(?=\\|)|[$_[:alpha:]][$_[:alnum:]]*)",
"beginCaptures": {
"0": {
"name": "storage.type.ballerina"
}
},
"end": "[,:|]|(?==>)|(?=\\))|(?=])",
"patterns": [
{
"include": "#parameterWithDescriptor"
},
{
"include": "#record"
},
{
"include": "#objectDec"
},
{
"include": "#functionType"
},
{
"include": "#constrainType"
},
{
"include": "#defaultValue"
},
{
"include": "#comment"
},
{
"include": "#parameterTuple"
},
{
"match": "[$_[:alpha:]][$_[:alnum:]]*",
"name": "default.variable.parameter.ballerina"
}
]
}
]
},
"parameter-name": {
"patterns": [
{
"captures": {
"1": {
"name": "support.type.primitive.ballerina"
}
},
"match": "\\s*\\b(var)\\s+"
},
{
"captures": {
"10": {
"name": "keyword.operator.optional.ballerina"
},
"2": {
"name": "keyword.operator.rest.ballerina"
},
"3": {
"name": "support.type.primitive.ballerina"
},
"4": {
"name": "keyword.other.ballerina"
},
"5": {
"name": "constant.language.boolean.ballerina"
},
"6": {
"name": "keyword.control.flow.ballerina"
},
"7": {
"name": "storage.type.ballerina"
},
"8": {
"name": "variable.parameter.ballerina"
},
"9": {
"name": "variable.parameter.ballerina"
}
},
"match": "(?:(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\s+)?(?:(\\.\\.\\.)\\s*)?(?<![:=])(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(this)|(string|int|boolean|float|byte|decimal|json|xml|anydata)|\\b(is|new|isolated|null|function|in)\\b|\\b(true|false)\\b|\\b(check|foreach|if|checkpanic)\\b|\\b(readonly|error|map)\\b|([$_[:alpha:]][$_[:alnum:]]*))(?![$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))\\s*(\\??)"
}
]
},
"parameterTuple": {
"patterns": [
{
"begin": "\\[",
"end": "(?=,)|(?=\\|)|(?=:)|(?==>)|(?=\\))",
"patterns": [
{
"include": "#record"
},
{
"include": "#objectDec"
},
{
"include": "#parameterTupleType"
},
{
"include": "#parameterTupleEnd"
},
{
"include": "#comment"
}
]
}
]
},
"parameterTupleEnd": {
"patterns": [
{
"begin": "]",
"end": "(?=,)|(?=\\|)|(?=:)|(?==>)|(?=\\))",
"patterns": [
{
"include": "#defaultWithParentheses"
},
{
"match": "[$_[:alpha:]][$_[:alnum:]]*",
"name": "default.variable.parameter.ballerina"
}
]
}
]
},
"parameterTupleType": {
"patterns": [
{
"begin": "[$_[:alpha:]][$_[:alnum:]]*",
"beginCaptures": {
"0": {
"name": "storage.type.ballerina"
}
},
"end": "[,|]|(?=])"
}
]
},
"parameterWithDescriptor": {
"patterns": [
{
"begin": "&",
"beginCaptures": {
"0": {
"name": "keyword.operator.ballerina"
}
},
"end": "(?=,)|(?=\\|)|(?=\\))",
"patterns": [
{
"include": "#parameter"
}
]
}
]
},
"parameters": {
"patterns": [
{
"match": "\\s*(return|break|continue|check|checkpanic|panic|trap|from|where)\\b",
"name": "keyword.control.flow.ballerina"
},
{
"match": "\\s*(let|select)\\b",
"name": "keyword.other.ballerina"
},
{
"match": ",",
"name": "punctuation.separator.parameter.ballerina"
}
]
},
"paranthesised": {
"begin": "\\(",
"beginCaptures": {
"0": {
"name": "meta.brace.round.ballerina"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "meta.brace.round.ballerina"
}
},
"name": "meta.brace.round.block.ballerina",
"patterns": [
{
"include": "#self-literal"
},
{
"include": "#function-defn"
},
{
"include": "#decl-block"
},
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#parameters"
},
{
"include": "#annotationAttachment"
},
{
"include": "#recordLiteral"
},
{
"include": "#stringTemplate"
},
{
"include": "#parameter-name"
},
{
"include": "#variable-initializer"
},
{
"include": "#expression"
},
{
"include": "#regex"
}
]
},
"paranthesisedBracket": {
"patterns": [
{
"begin": "\\[",
"end": "]",
"patterns": [
{
"include": "#comment"
},
{
"include": "#code"
}
]
}
]
},
"punctuation-accessor": {
"patterns": [
{
"captures": {
"1": {
"name": "punctuation.accessor.ballerina"
},
"2": {
"name": "punctuation.accessor.optional.ballerina"
}
},
"match": "(\\.)|(\\?\\.(?!\\s*\\d))"
}
]
},
"punctuation-comma": {
"patterns": [
{
"match": ",",
"name": "punctuation.separator.comma.ballerina"
}
]
},
"punctuation-semicolon": {
"patterns": [
{
"match": ";",
"name": "punctuation.terminator.statement.ballerina"
}
]
},
"record": {
"begin": "\\brecord\\b",
"beginCaptures": {
"0": {
"name": "keyword.other.ballerina"
}
},
"end": "(?<=})",
"name": "meta.record.ballerina",
"patterns": [
{
"include": "#recordBody"
}
]
},
"recordBody": {
"patterns": [
{
"include": "#decl-block"
}
]
},
"recordLiteral": {
"patterns": [
{
"begin": "\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.ballerina"
}
},
"patterns": [
{
"include": "#code"
}
]
}
]
},
"regex": {
"patterns": [
{
"begin": "\\b(re)(\\s*)(`)",
"beginCaptures": {
"1": {
"name": "support.type.primitive.ballerina"
},
"3": {
"name": "punctuation.definition.regexp.template.begin.ballerina"
}
},
"end": "`",
"endCaptures": {
"1": {
"name": "punctuation.definition.regexp.template.end.ballerina"
}
},
"name": "regexp.template.ballerina",
"patterns": [
{
"include": "#template-substitution-element"
},
{
"include": "#regexp"
}
]
}
]
},
"regex-character-class": {
"patterns": [
{
"match": "\\\\[DSWdnrstw]|\\.",
"name": "keyword.other.character-class.regexp.ballerina"
},
{
"match": "\\\\[^Ppu]",
"name": "constant.character.escape.backslash.regexp"
}
]
},
"regex-unicode-properties-general-category": {
"patterns": [
{
"match": "(Lu|Ll|Lt|Lm|Lo?|Mn|Mc|Me?|Nd|Nl|No?|Pc|Pd|Ps|Pe|Pi|Pf|Po?|Sm|Sc|Sk|So?|Zs|Zl|Zp?|Cf|Cc|Cn|Co?)",
"name": "constant.other.unicode-property-general-category.regexp.ballerina"
}
]
},
"regex-unicode-property-key": {
"patterns": [
{
"begin": "([gs]c=)",
"beginCaptures": {
"1": {
"name": "keyword.other.unicode-property-key.regexp.ballerina"
}
},
"end": "()",
"endCaptures": {
"1": {
"name": "punctuation.other.unicode-property.end.regexp.ballerina"
}
},
"name": "keyword.other.unicode-property-key.regexp.ballerina",
"patterns": [
{
"include": "#regex-unicode-properties-general-category"
}
]
}
]
},
"regexp": {
"patterns": [
{
"match": "[$^]",
"name": "keyword.control.assertion.regexp.ballerina"
},
{
"match": "[*+?]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)}\\??",
"name": "keyword.operator.quantifier.regexp.ballerina"
},
{
"match": "\\|",
"name": "keyword.operator.or.regexp.ballerina"
},
{
"begin": "(\\()",
"beginCaptures": {
"1": {
"name": "punctuation.definition.group.regexp.ballerina"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.group.regexp.ballerina"
}
},
"name": "meta.group.assertion.regexp.ballerina",
"patterns": [
{
"include": "#template-substitution-element"
},
{
"include": "#regexp"
},
{
"include": "#flags-on-off"
},
{
"include": "#unicode-property-escape"
}
]
},
{
"begin": "(\\[)(\\^)?",
"beginCaptures": {
"1": {
"name": "punctuation.definition.character-class.start.regexp.ballerina"
},
"2": {
"name": "keyword.operator.negation.regexp.ballerina"
}
},
"end": "(])",
"endCaptures": {
"1": {
"name": "punctuation.definition.character-class.end.regexp.ballerina"
}
},
"name": "constant.other.character-class.set.regexp.ballerina",
"patterns": [
{
"captures": {
"1": {
"name": "constant.character.numeric.regexp"
},
"2": {
"name": "constant.character.escape.backslash.regexp"
},
"3": {
"name": "constant.character.numeric.regexp"
},
"4": {
"name": "constant.character.escape.backslash.regexp"
}
},
"match": "(?:.|(\\\\(?:[0-7]{3}|x\\h{2}|u\\h{4}))|(\\\\[^Ppu]))-(?:[^]\\\\]|(\\\\(?:[0-7]{3}|x\\h{2}|u\\h{4}))|(\\\\[^Ppu]))",
"name": "constant.other.character-class.range.regexp.ballerina"
},
{
"include": "#regex-character-class"
},
{
"include": "#unicode-values"
},
{
"include": "#unicode-property-escape"
}
]
},
{
"include": "#template-substitution-element"
},
{
"include": "#regex-character-class"
},
{
"include": "#unicode-values"
},
{
"include": "#unicode-property-escape"
}
]
},
"self-literal": {
"patterns": [
{
"captures": {
"1": {
"name": "variable.language.this.ballerina"
},
"2": {
"name": "punctuation.accessor.ballerina"
},
"3": {
"name": "entity.name.function.ballerina"
}
},
"match": "\\b(self)\\b\\s*(.)\\s*([$_[:alpha:]][$_[:alnum:]]*)\\s*(?=\\()"
},
{
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))self\\b(?!\\$)",
"name": "variable.language.this.ballerina"
}
]
},
"service-decl": {
"begin": "\\bservice\\b",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": "(?=;|^\\s*$|^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|service|type|var)\\b)|(?<=})|(?<=,)",
"name": "meta.service.declaration.ballerina",
"patterns": [
{
"include": "#class-defn"
},
{
"include": "#serviceName"
},
{
"include": "#serviceOn"
},
{
"include": "#serviceBody"
},
{
"include": "#objectDec"
}
]
},
"serviceBody": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#mdDocumentation"
},
{
"include": "#documentationDef"
},
{
"include": "#decl-block"
}
]
},
"serviceName": {
"patterns": [
{
"include": "#string"
},
{
"match": "(/([$_[:alpha:]][$_[:alnum:]]*)|\"[$_[:alpha:]][$_[:alnum:]]*\")",
"name": "entity.service.path.ballerina"
}
]
},
"serviceOn": {
"patterns": [
{
"begin": "on",
"beginCaptures": {
"0": {
"name": "keyword.other.ballerina"
}
},
"end": "(?=\\{)",
"patterns": [
{
"include": "#code"
}
]
}
]
},
"source": {
"patterns": [
{
"begin": "\\b(source)\\b\\s+([$_[:alpha:]][$_[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "keyword.other.ballerina"
},
"2": {
"name": "variable.other.readwrite.ballerina"
}
},
"end": "(?=,)|(?=;)"
}
]
},
"statements": {
"patterns": [
{
"include": "#stringTemplate"
},
{
"include": "#declaration"
},
{
"include": "#control-statement"
},
{
"include": "#decl-block"
},
{
"include": "#expression"
},
{
"include": "#punctuation-semicolon"
},
{
"include": "#string"
},
{
"include": "#comment"
},
{
"include": "#mdDocumentation"
},
{
"include": "#keywords"
},
{
"include": "#annotationAttachment"
},
{
"include": "#regex"
}
]
},
"string": {
"patterns": [
{
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.ballerina"
}
},
"end": "(\")|([^\\n\\\\])$",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.ballerina"
},
"2": {
"name": "invalid.illegal.newline.ballerina"
}
},
"name": "string.quoted.double.ballerina",
"patterns": [
{
"include": "#string-character-escape"
}
]
}
]
},
"string-character-escape": {
"patterns": [
{
"match": "\\\\(x\\h{2}|u\\h{4}|u\\{\\h+}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)",
"name": "constant.character.escape.ballerina"
}
]
},
"stringTemplate": {
"patterns": [
{
"begin": "((string)|([$_[:alpha:]][$_[:alnum:]]*))?(`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.ballerina"
},
"2": {
"name": "support.type.primitive.ballerina"
},
"4": {
"name": "punctuation.definition.string.template.begin.ballerina"
}
},
"end": "\\\\?`",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.template.end.ballerina"
}
},
"name": "string.template.ballerina",
"patterns": [
{
"include": "#template-substitution-element"
},
{
"include": "#string-character-escape"
}
]
}
]
},
"strings": {
"patterns": [
{
"begin": "\"",
"beginCaptures": {
"0": {
"name": "string.begin.ballerina"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "string.end.ballerina"
}
},
"patterns": [
{
"match": "\\\\.",
"name": "constant.character.escape.ballerina"
},
{
"match": ".",
"name": "string"
}
]
}
]
},
"template-substitution-element": {
"patterns": [
{
"begin": "\\$\\{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.template-expression.begin.ballerina"
}
},
"contentName": "meta.embedded.line.ballerina",
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.template-expression.end.ballerina"
}
},
"name": "meta.template.expression.ballerina",
"patterns": [
{
"include": "#expression"
}
]
}
]
},
"templateVariable": {
"patterns": [
{
"begin": "\\$\\{",
"beginCaptures": {
"0": {
"name": "constant.character.escape.ballerina"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "constant.character.escape.ballerina"
}
},
"patterns": [
{
"include": "#code"
}
]
}
]
},
"ternary-expression": {
"begin": "(?!\\?\\.\\s*\\D)(\\?)(?!\\?)",
"beginCaptures": {
"1": {
"name": "keyword.operator.ternary.ballerina"
}
},
"end": "\\s*",
"endCaptures": {
"1": {
"name": "keyword.operator.ternary.ballerina"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"tupleType": {
"patterns": [
{
"begin": "\\[",
"end": "(?=[];])",
"patterns": [
{
"include": "#comment"
},
{
"include": "#constrainType"
},
{
"include": "#paranthesisedBracket"
},
{
"match": "\\b([$_[:alpha:]][$_[:alnum:]]*)\\b",
"name": "storage.type.ballerina"
}
]
}
]
},
"type": {
"patterns": [
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#numbers"
},
{
"include": "#type-primitive"
},
{
"include": "#type-tuple"
}
]
},
"type-annotation": {
"patterns": [
{
"begin": "(:)",
"beginCaptures": {
"1": {
"name": "keyword.operator.type.annotation.ballerina"
}
},
"end": "(?<![\\&:|])((?=$|^|[]),;=>?}]|//)|(?==[^>])|((?<=[]$)>_}[:alpha:]])\\s*(?=\\{)))(\\?)?",
"name": "meta.type.annotation.ballerina",
"patterns": [
{
"include": "#booleans"
},
{
"include": "#stringTemplate"
},
{
"include": "#regex"
},
{
"include": "#self-literal"
},
{
"include": "#xml"
},
{
"include": "#call"
},
{
"captures": {
"1": {
"name": "keyword.other.ballerina"
},
"10": {
"name": "punctuation.definition.parameters.begin.ballerina"
},
"11": {
"name": "punctuation.definition.parameters.end.ballerina"
},
"2": {
"name": "constant.language.boolean.ballerina"
},
"3": {
"name": "keyword.control.ballerina"
},
"4": {
"name": "storage.type.ballerina"
},
"5": {
"name": "support.type.primitive.ballerina"
},
"6": {
"name": "variable.other.readwrite.ballerina"
},
"8": {
"name": "punctuation.accessor.ballerina"
},
"9": {
"name": "entity.name.function.ballerina"
}
},
"match": "\\b(is|new|isolated|null|function|in)\\b|\\b(true|false)\\b|\\b(check|foreach|if|checkpanic)\\b|\\b(readonly|error|map)\\b|\\b(var)\\b|([$_[:alpha:]][$_[:alnum:]]*)((\\.)([$_[:alpha:]][$_[:alnum:]]*)(\\()(\\)))?"
},
{
"match": "\\?",
"name": "keyword.operator.optional.ballerina"
},
{
"include": "#multiType"
},
{
"include": "#type"
},
{
"include": "#paranthesised"
}
]
}
]
},
"type-primitive": {
"patterns": [
{
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(string|int|boolean|float|byte|decimal|json|xml|anydata)(?![$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "support.type.primitive.ballerina"
}
]
},
"type-tuple": {
"begin": "\\[",
"beginCaptures": {
"0": {
"name": "meta.brace.square.ballerina"
}
},
"end": "]",
"endCaptures": {
"0": {
"name": "meta.brace.square.ballerina"
}
},
"name": "meta.type.tuple.ballerina",
"patterns": [
{
"include": "#self-literal"
},
{
"include": "#booleans"
},
{
"match": "\\.\\.\\.",
"name": "keyword.operator.rest.ballerina"
},
{
"captures": {
"1": {
"name": "entity.name.label.ballerina"
},
"2": {
"name": "keyword.operator.optional.ballerina"
},
"3": {
"name": "punctuation.separator.label.ballerina"
}
},
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))([$_[:alpha:]][$_[:alnum:]]*)\\s*(\\?)?\\s*(:)"
},
{
"include": "#identifiers"
},
{
"include": "#type"
},
{
"include": "#punctuation-comma"
}
]
},
"typeDefinition": {
"patterns": [
{
"begin": "\\b(type)\\b\\s+([$_[:alpha:]][$_[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "keyword.other.ballerina"
},
"2": {
"name": "entity.name.type.ballerina"
}
},
"end": ";",
"endCaptures": {
"0": {
"name": "punctuation.terminator.statement.ballerina"
}
},
"patterns": [
{
"include": "#functionParameters"
},
{
"include": "#functionReturns"
},
{
"include": "#mdDocumentation"
},
{
"include": "#record"
},
{
"include": "#string"
},
{
"include": "#keywords"
},
{
"include": "#multiType"
},
{
"include": "#type-primitive"
},
{
"match": "[$_[:alpha:]][$_[:alnum:]]*",
"name": "variable.other.readwrite.ballerina"
},
{
"include": "#type-annotation"
},
{
"include": "#typeDescription"
},
{
"include": "#decl-block"
}
]
}
]
},
"typeDescription": {
"patterns": [
{
"begin": "[$_[:alpha:]][$_[:alnum:]]*",
"end": "(?=;)",
"patterns": [
{
"include": "#numbers"
},
{
"include": "#decl-block"
},
{
"include": "#type-primitive"
},
{
"match": "[$_[:alpha:]][$_[:alnum:]]*",
"name": "storage.type.ballerina"
}
]
}
]
},
"types": {
"patterns": [
{
"match": "\\b(handle|any|future|typedesc)\\b",
"name": "storage.type.ballerina"
},
{
"match": "\\b(boolean|int|string|float|decimal|byte|json|xml|anydata)\\b",
"name": "support.type.primitive.ballerina"
},
{
"match": "\\b(map|error|never|readonly|distinct)\\b",
"name": "storage.type.ballerina"
},
{
"match": "\\b(stream)\\b",
"name": "storage.type.ballerina"
}
]
},
"unicode-property-escape": {
"patterns": [
{
"begin": "(\\\\[Pp])(\\{)",
"beginCaptures": {
"1": {
"name": "keyword.other.unicode-property.regexp.ballerina"
},
"2": {
"name": "punctuation.other.unicode-property.begin.regexp.ballerina"
}
},
"end": "(})",
"endCaptures": {
"1": {
"name": "punctuation.other.unicode-property.end.regexp.ballerina"
}
},
"name": "keyword.other.unicode-property.regexp.ballerina",
"patterns": [
{
"include": "#regex-unicode-properties-general-category"
},
{
"include": "#regex-unicode-property-key"
}
]
}
]
},
"unicode-values": {
"patterns": [
{
"begin": "(\\\\u)(\\{)",
"beginCaptures": {
"1": {
"name": "keyword.other.unicode-value.regexp.ballerina"
},
"2": {
"name": "punctuation.other.unicode-value.begin.regexp.ballerina"
}
},
"end": "(})",
"endCaptures": {
"1": {
"name": "punctuation.other.unicode-value.end.regexp.ballerina"
}
},
"name": "keyword.other.unicode-value.ballerina",
"patterns": [
{
"match": "(\\h{1,6})",
"name": "constant.other.unicode-value.regexp.ballerina"
}
]
}
]
},
"var-expr": {
"patterns": [
{
"begin": "(?=\\b(var))",
"beginCaptures": {
"0": {
"name": "storage.modifier.ballerina support.type.primitive.ballerina"
}
},
"end": "(?!\\b(var))((?=[;}]|^\\s*$|^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|service|type|var)\\b)|((?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?=(if)\\s+))|((?<!^string|[^$._[:alnum:]]string|^int|[^$._[:alnum:]]int)(?=\\s*$)))",
"name": "meta.var.expr.ballerina",
"patterns": [
{
"begin": "\\b(var)(?=\\s+|[:?\\[|])",
"beginCaptures": {
"0": {
"name": "support.type.primitive.ballerina"
}
},
"end": "(?=\\S)"
},
{
"match": "\\|",
"name": "keyword.operator.type.annotation.ballerina"
},
{
"match": "\\bin\\b",
"name": "keyword.other.ballerina"
},
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#stringTemplate"
},
{
"include": "#numbers"
},
{
"include": "#multiType"
},
{
"include": "#self-literal"
},
{
"include": "#var-single-variable"
},
{
"include": "#variable-initializer"
},
{
"include": "#punctuation-comma"
},
{
"include": "#type-annotation"
},
{
"include": "#keywords"
},
{
"include": "#type-tuple"
},
{
"include": "#regex"
}
]
},
{
"include": "#punctuation-comma"
},
{
"begin": "(?=\\b(const(?!\\s+enum\\b)))",
"end": "(?!\\b(const(?!\\s+enum\\b)))((?=\\bannotation\\b|[;}]|^\\s*$|^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|service|type|var)\\b)|((?<!^string|[^$._[:alnum:]]string|^int|[^$._[:alnum:]]int)(?=\\s*$)))",
"name": "meta.var.expr.ballerina",
"patterns": [
{
"begin": "\\b(const(?!\\s+enum\\b))\\s+",
"beginCaptures": {
"0": {
"name": "keyword.other.ballerina"
}
},
"end": "(?=\\S)"
},
{
"include": "#comment"
},
{
"include": "#string"
},
{
"include": "#stringTemplate"
},
{
"include": "#var-single-const"
},
{
"include": "#variable-initializer"
},
{
"include": "#punctuation-comma"
},
{
"include": "#type-annotation"
}
]
},
{
"include": "#punctuation-comma"
},
{
"begin": "(string|int|boolean|float|byte|decimal|json|xml|anydata)(?=\\s+|[:?\\[|])",
"beginCaptures": {
"0": {
"name": "support.type.primitive.ballerina"
}
},
"end": "(?!\\b(var))((?=[;}]|^\\s*$|^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|service|type|var)\\b)|((?<!^string|[^$._[:alnum:]]string|^int|[^$._[:alnum:]]int)(?=\\s*$)))",
"name": "meta.var.expr.ballerina",
"patterns": [
{
"include": "#xml"
},
{
"begin": "(string|int|boolean|float|byte|decimal|json|xml|anydata)(?=\\s+|[:?\\[|])",
"beginCaptures": {
"0": {
"name": "support.type.primitive.ballerina"
}
},
"end": "(?=\\S)"
},
{
"match": "\\|",
"name": "keyword.operator.type.annotation.ballerina"
},
{
"include": "#string"
},
{
"include": "#stringTemplate"
},
{
"include": "#numbers"
},
{
"include": "#multiType"
},
{
"include": "#var-single-variable"
},
{
"include": "#variable-initializer"
},
{
"include": "#punctuation-comma"
},
{
"include": "#type-annotation"
},
{
"include": "#keywords"
},
{
"include": "#type-tuple"
},
{
"include": "#regex"
}
]
},
{
"include": "#punctuation-comma"
}
]
},
"var-single-const": {
"patterns": [
{
"name": "meta.var-single-variable.expr.ballerina"
},
{
"begin": "\\b(var)\\s*",
"beginCaptures": {
"0": {
"name": "support.type.primitive.ballerina"
}
},
"end": "(?=\\S)"
},
{
"include": "#types"
},
{
"begin": "([$_[:alpha:]][$_[:alnum:]]*)",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.ballerina variable.other.constant.ballerina"
}
},
"end": "(?=$|^|[,;=}]|((?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\s+))"
}
]
},
"var-single-variable": {
"patterns": [
{
"begin": "((string|int|boolean|float|byte|decimal|json|xml|anydata)|\\b(readonly|error|map)\\b|([$_[:alpha:]][$_[:alnum:]]*))(?=\\s+|[;>|])",
"beginCaptures": {
"2": {
"name": "support.type.primitive.ballerina"
},
"3": {
"name": "storage.type.ballerina"
},
"4": {
"name": "meta.definition.variable.ballerina variable.other.readwrite.ballerina"
}
},
"end": "(?=$|^|[,;=}])",
"endCaptures": {
"0": {
"name": "punctuation.terminator.statement.ballerina"
}
},
"name": "meta.var-single-variable.expr.ballerina",
"patterns": [
{
"include": "#call"
},
{
"include": "#self-literal"
},
{
"include": "#if-statement"
},
{
"include": "#string"
},
{
"include": "#numbers"
},
{
"include": "#keywords"
}
]
},
{
"begin": "([$_[:alpha:]][$_[:alnum:]]*)\\s+(!)?",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.ballerina variable.other.readwrite.ballerina"
},
"2": {
"name": "keyword.operator.definiteassignment.ballerina"
}
},
"end": "(?=$|^|[,;=}]|((?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\s+))",
"name": "meta.var-single-variable.expr.ballerina"
}
]
},
"variable-initializer": {
"patterns": [
{
"begin": "(?<![!=])(=)(?![=>])(?=\\s*\\S)",
"beginCaptures": {
"1": {
"name": "keyword.operator.assignment.ballerina"
}
},
"end": "(?=$|[]),;}])",
"patterns": [
{
"match": "(')([$_[:alpha:]][$_[:alnum:]]*)",
"name": "variable.other.property.ballerina"
},
{
"include": "#xml"
},
{
"include": "#function-defn"
},
{
"include": "#expression"
},
{
"include": "#punctuation-accessor"
},
{
"include": "#regex"
}
]
},
{
"begin": "(?<![!=])(=)(?![=>])",
"beginCaptures": {
"1": {
"name": "keyword.operator.assignment.ballerina"
}
},
"end": "(?=[]),;}]|((?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))\\s+))|(?=^\\s*$)|(?<=\\S)(?<!=)(?=\\s*$)",
"patterns": [
{
"include": "#expression"
}
]
}
]
},
"variableDef": {
"patterns": [
{
"begin": "(?!\\+)[$_[:alpha:]][$_[:alnum:]]*[\\t ]|(?=\\()",
"beginCaptures": {
"0": {
"name": "storage.type.ballerina"
}
},
"end": "[$_[:alpha:]][$_[:alnum:]]*|(?=,)|(?=;)|\\.\\.\\.",
"patterns": [
{
"include": "#tupleType"
},
{
"include": "#constrainType"
},
{
"include": "#comment"
}
]
}
]
},
"variableDefInline": {
"patterns": [
{
"begin": "(?=record)|(?=object)",
"end": "(?=;)",
"patterns": [
{
"include": "#record"
},
{
"include": "#objectDec"
}
]
}
]
},
"workerBody": {
"patterns": [
{
"begin": "\\{",
"end": "(?=})",
"patterns": [
{
"include": "#code"
}
]
}
]
},
"workerDef": {
"patterns": [
{
"begin": "\\bworker\\b",
"beginCaptures": {
"0": {
"name": "keyword.ballerina"
}
},
"end": "}",
"patterns": [
{
"include": "#functionReturns"
},
{
"include": "#workerBody"
}
]
}
]
},
"xml": {
"patterns": [
{
"begin": "\\b(xml)(\\s*)(`)",
"beginCaptures": {
"1": {
"name": "support.type.primitive.ballerina"
},
"3": {
"name": "punctuation.definition.string.template.begin.ballerina"
}
},
"end": "`",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.template.end.ballerina"
}
},
"name": "string.template.ballerina",
"patterns": [
{
"include": "#xmlTag"
},
{
"include": "#xmlComment"
},
{
"include": "#templateVariable"
},
{
"match": ".",
"name": "string"
}
]
}
]
},
"xmlComment": {
"patterns": [
{
"begin": "<!--",
"beginCaptures": {
"0": {
"name": "comment.block.xml.ballerina"
}
},
"end": "-->",
"endCaptures": {
"0": {
"name": "comment.block.xml.ballerina"
}
},
"name": "comment.block.xml.ballerina"
}
]
},
"xmlDoubleQuotedString": {
"patterns": [
{
"begin": "\"",
"beginCaptures": {
"0": {
"name": "string.begin.ballerina"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "string.end.ballerina"
}
},
"patterns": [
{
"match": "\\\\.",
"name": "constant.character.escape.ballerina"
},
{
"match": ".",
"name": "string"
}
]
}
]
},
"xmlSingleQuotedString": {
"patterns": [
{
"begin": "'",
"beginCaptures": {
"0": {
"name": "string.begin.ballerina"
}
},
"end": "'",
"endCaptures": {
"0": {
"name": "string.end.ballerina"
}
},
"patterns": [
{
"match": "\\\\.",
"name": "constant.character.escape.ballerina"
},
{
"match": ".",
"name": "string"
}
]
}
]
},
"xmlTag": {
"patterns": [
{
"begin": "(</?\\??)\\s*([-0-9A-Z_a-z]+)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.xml.ballerina"
},
"2": {
"name": "entity.name.tag.xml.ballerina"
}
},
"end": "\\??/?>",
"endCaptures": {
"0": {
"name": "punctuation.definition.tag.end.xml.ballerina"
}
},
"patterns": [
{
"include": "#xmlSingleQuotedString"
},
{
"include": "#xmlDoubleQuotedString"
},
{
"match": "xmlns",
"name": "keyword.other.ballerina"
},
{
"match": "([-0-9A-Za-z]+)",
"name": "entity.other.attribute-name.xml.ballerina"
}
]
}
]
}
},
"scopeName": "source.ballerina"
}