UNPKG

tm-grammars

Version:
1,949 lines 100 kB
{ "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": "me