UNPKG

shiki

Version:
1,677 lines (1,676 loc) 94.9 kB
{ "name": "ballerina", "scopeName": "source.ballerina", "fileTypes": ["bal"], "uuid": "c01f5512-489a-41bd-ba5d-caf4b55ae3b3", "monarchVariables": { "typeScope": "type", "annotationScope": "type", "numberScope": "number", "xmlTagAngle": "tag", "xmlAttribute": "variable.parameter", "xmlTag": "tag", "primitiveScope": "type" }, "tmlVariables": { "typeScope": "storage.type.ballerina", "annotationScope": "support.type.ballerina", "numberScope": "constant.numeric.decimal.ballerina", "xmlTagAngle": "punctuation.definition.tag.begin.xml.ballerina", "xmlAttribute": "entity.other.attribute-name.xml.ballerina", "xmlTag": "entity.name.tag.xml.ballerina", "primitiveScope": "support.type.primitive.ballerina" }, "patterns": [ { "include": "#statements" } ], "repository": { "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" } ] }, "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" } ] }, "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" }, { "name": "keyword.control.conditional.ballerina", "match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(else|if)(?![_$[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))" } ] }, "expression": { "patterns": [ { "include": "#keywords" }, { "include": "#expressionWithoutIdentifiers" }, { "include": "#identifiers" } ] }, "expressionWithoutIdentifiers": { "patterns": [ { "include": "#xml" }, { "include": "#string" }, { "include": "#stringTemplate" }, { "include": "#comment" }, { "include": "#object-literal" }, { "include": "#ternary-expression" }, { "include": "#expression-operators" }, { "include": "#literal" }, { "include": "#paranthesised" } ] }, "object-literal": { "name": "meta.objectliteral.ballerina", "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "patterns": [ { "include": "#object-member" }, { "include": "#punctuation-comma" } ] }, "import-declaration": { "name": "meta.import.ballerina", "begin": "\\bimport\\b", "beginCaptures": { "0": { "name": "keyword.control.import.ballerina" } }, "end": "\\;", "endCaptures": { "0": { "name": "punctuation.terminator.statement.ballerina" } }, "patterns": [ { "match": "(\\')([_$[:alpha:]][_$[:alnum:]]*)", "name": "variable.other.property.ballerina" }, { "include": "#keywords" }, { "include": "#comment" }, { "include": "#import-clause" }, { "include": "#punctuation-accessor" } ] }, "identifiers": { "patterns": [ { "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", "captures": { "1": { "name": "punctuation.accessor.ballerina" }, "2": { "name": "punctuation.accessor.optional.ballerina" }, "3": { "name": "entity.name.function.ballerina" } } }, { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=\\()", "captures": { "1": { "name": "punctuation.accessor.ballerina" }, "2": { "name": "punctuation.accessor.optional.ballerina" }, "3": { "name": "entity.name.function.ballerina" } } }, { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)", "captures": { "1": { "name": "punctuation.accessor.ballerina" }, "2": { "name": "punctuation.accessor.optional.ballerina" }, "3": { "name": "variable.other.property.ballerina" } } }, { "include": "#type-primitive" }, { "include": "#self-literal" }, { "name": "keyword.control.ballerina", "match": "\\b(check|foreach|if|checkpanic)\\b" }, { "include": "#call" }, { "name": "support.type.primitive.ballerina", "match": "\\b(var)\\b" }, { "match": "([_$[:alpha:]][_$[:alnum:]]*)((\\.)([_$[:alpha:]][_$[:alnum:]]*)(\\()(\\)))?", "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:]]*)", "name": "variable.other.property.ballerina" }, { "include": "#type-annotation" } ] }, "object-member": { "patterns": [ { "include": "#comment" }, { "include": "#function-defn" }, { "include": "#literal" }, { "include": "#keywords" }, { "include": "#expression" }, { "name": "meta.object.member.ballerina meta.object-literal.key.ballerina", "begin": "(?=\\[)", "end": "(?=:)|((?<=[\\]])(?=\\s*[\\(\\<]))", "patterns": [ { "include": "#comment" } ] }, { "name": "meta.object.member.ballerina meta.object-literal.key.ballerina", "begin": "(?=[\\'\\\"\\`])", "end": "(?=:)|((?<=[\\'\\\"\\`])(?=((\\s*[\\(\\<,}])|(\\n*})|(\\s+(as)\\s+))))", "patterns": [ { "include": "#comment" }, { "include": "#string" } ] }, { "name": "meta.object.member.ballerina meta.object-literal.key.ballerina", "begin": "(?x)(?=(\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$))|(\\b(?<!\\$)0(?:o|O)?[0-7][0-7_]*(n)?\\b(?!\\$))|((?<!\\$)(?:\n (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.1E+3\n (?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1.E+3\n (?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # .1E+3\n (?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)| # 1E+3\n (?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)| # 1.1\n (?:\\b[0-9][0-9_]*(\\.)(n)?\\B)| # 1.\n (?:\\B(\\.)[0-9][0-9_]*(n)?\\b)| # .1\n (?:\\b[0-9][0-9_]*(n)?\\b(?!\\.)) # 1\n)(?!\\$)))", "end": "(?=:)|(?=\\s*([\\(\\<,}])|(\\s+as\\s+))", "patterns": [ { "include": "#comment" }, { "include": "#numbers" } ] }, { "name": "meta.method.declaration.ballerina", "begin": "(?<=[\\]\\'\\\"\\`])(?=\\s*[\\(\\<])", "end": "(?=\\}|;|,)|(?<=\\})", "patterns": [ { "include": "#function-body" } ] }, { "name": "meta.object.member.ballerina", "match": "(?![_$[:alpha:]])([[:digit:]]+)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)", "captures": { "0": { "name": "meta.object-literal.key.ballerina" }, "1": { "name": "constant.numeric.decimal.ballerina" } } }, { "name": "meta.object.member.ballerina", "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:(\\s*\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/)*\\s*(\n ((\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{([^\\{\\}]|\\{[^\\{\\}]*\\})*\\}))*\\})|(\\[([^\\[\\]]|(\\[([^\\[\\]]|\\[[^\\[\\]]*\\])*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()\\'\\\"\\`]|(\\(([^\\(\\)]|(\\(([^\\(\\)]|\\([^\\(\\)]*\\))*\\)))*\\))|(\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<([^<>]|\\<[^<>]+\\>)+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", "captures": { "0": { "name": "meta.object-literal.key.ballerina" }, "1": { "name": "entity.name.function.ballerina" } } }, { "name": "meta.object.member.ballerina", "match": "(?:[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)", "captures": { "0": { "name": "meta.object-literal.key.ballerina" } } }, { "name": "meta.object.member.ballerina", "begin": "\\.\\.\\.", "beginCaptures": { "0": { "name": "keyword.operator.spread.ballerina" } }, "end": "(?=,|\\})", "patterns": [ { "include": "#expression" } ] }, { "name": "meta.object.member.ballerina", "match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=,|\\}|$|\\/\\/|\\/\\*)", "captures": { "1": { "name": "variable.other.readwrite.ballerina" } } }, { "name": "meta.object.member.ballerina", "match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(as)\\s+(const)(?=\\s*([,}]|$))", "captures": { "1": { "name": "keyword.control.as.ballerina" }, "2": { "name": "storage.modifier.ballerina" } } }, { "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": "(?=,|\\}|$|\\/\\/|\\/\\*)", "patterns": [ { "include": "#expression" } ] } ] }, "expression-operators": { "patterns": [ { "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", "match": "<=|>=|<>|<|>" }, { "match": "(?<=[_$[:alnum:]])(\\!)\\s*(?:(/=)|(?:(/)(?![/*])))", "captures": { "1": { "name": "keyword.operator.logical.ballerina" }, "2": { "name": "keyword.operator.assignment.compound.ballerina" }, "3": { "name": "keyword.operator.arithmetic.ballerina" } } }, { "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", "match": "%|\\*|/|-|\\+" } ] }, "punctuation-comma": { "patterns": [ { "name": "punctuation.separator.comma.ballerina", "match": "," } ] }, "punctuation-semicolon": { "patterns": [ { "match": ";", "name": "punctuation.terminator.statement.ballerina" } ] }, "punctuation-accessor": { "patterns": [ { "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))", "captures": { "1": { "name": "punctuation.accessor.ballerina" }, "2": { "name": "punctuation.accessor.optional.ballerina" } } } ] }, "annotationAttachment": { "patterns": [ { "match": "(@)((?:[_$[:alpha:]][_$[:alnum:]]*))\\s*(:?)\\s*((?:[_$[:alpha:]][_$[:alnum:]]*)?)", "captures": { "1": { "name": "punctuation.decorator.ballerina" }, "2": { "name": "support.type.ballerina" }, "3": { "name": "punctuation.decorator.ballerina" }, "4": { "name": "support.type.ballerina" } } } ] }, "annotationDefinition": { "patterns": [ { "begin": "\\bannotation\\b", "beginCaptures": { "0": { "name": "keyword.ballerina" } }, "end": ";", "patterns": [ { "include": "#code" } ] } ] }, "booleans": { "patterns": [ { "match": "\\b(true|false)\\b", "name": "constant.language.boolean.ballerina" } ] }, "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" } ] } ] }, "butClause": { "patterns": [ { "begin": "=>", "beginCaptures": { "0": { "name": "meta.arrow.ballerina storage.type.function.arrow.ballerina" } }, "end": ",|(?=\\})", "patterns": [ { "include": "#code" } ] } ] }, "call": { "patterns": [ { "match": "(?:\\')?([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=\\()", "name": "entity.name.function.ballerina" } ] }, "comment": { "patterns": [ { "name": "comment.ballerina", "match": "\\/\\/.*" } ] }, "constrainType": { "patterns": [ { "begin": "<", "end": ">", "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.ballerina" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.ballerina" } }, "patterns": [ { "include": "#comment" }, { "include": "#constrainType" }, { "name": "storage.type.ballerina", "match": "\\b([_$[:alpha:]][_$[:alnum:]]*)\\b" } ] } ] }, "tupleType": { "patterns": [ { "begin": "\\[", "end": "(?=\\]|;)", "patterns": [ { "include": "#comment" }, { "include": "#constrainType" }, { "include": "#paranthesisedBracket" }, { "name": "storage.type.ballerina", "match": "\\b([_$[:alpha:]][_$[:alnum:]]*)\\b" } ] } ] }, "decl-block": { "name": "meta.block.ballerina", "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "end": "(?=\\} external;)|(\\})", "endCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "patterns": [ { "include": "#statements" }, { "include": "#mdDocumentation" } ] }, "defaultValue": { "patterns": [ { "begin": "[=:]", "beginCaptures": { "0": { "name": "keyword.operator.ballerina" } }, "end": "(?=[,)])", "patterns": [ { "include": "#code" } ] } ] }, "documentationDef": { "patterns": [ { "begin": "\\b(?:documentation|deprecated)\\b", "beginCaptures": { "0": { "name": "keyword.ballerina" } }, "end": "\\}", "endCaptures": { "0": { "name": "delimiter.curly" } }, "patterns": [ { "include": "#documentationBody" }, { "include": "#comment" } ] } ] }, "documentationBody": { "patterns": [ { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.block.ballerina.documentation" } }, "end": "(?=\\})", "endCaptures": { "0": { "name": "punctuation.definition.block.ballerina.documentation" } }, "patterns": [ { "match": "(P|R|T|F|V)({{)(.*)(}})", "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" } } }, { "name": "comment.block.code.ballerina.documentation", "begin": "\\```", "end": "\\```" }, { "name": "comment.block.code.ballerina.documentation", "begin": "\\``", "end": "\\``" }, { "name": "comment.block.code.ballerina.documentation", "begin": "\\`", "end": "\\`" }, { "name": "comment.block.ballerina.documentation", "match": "." } ] } ] }, "enum-decl": { "name": "meta.enum.declaration.ballerina", "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": "(?<=\\})", "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", "end": "(?==>)", "beginCaptures": { "0": { "name": "storage.type.ballerina" } }, "patterns": [ { "include": "#code" } ] } ] }, "callableUnitBody": { "patterns": [ { "begin": "\\{", "end": "(?=\\})", "beginCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "endCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "patterns": [ { "include": "#workerDef" }, { "include": "#service-decl" }, { "include": "#objectDec" }, { "include": "#function-defn" }, { "include": "#forkStatement" }, { "include": "#code" } ] } ] }, "for-loop": { "begin": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))foreach\\s*", "beginCaptures": { "0": { "name": "keyword.control.loop.ballerina" }, "1": { "name": "support.type.primitive.ballerina" } }, "end": "(?=\\{)", "patterns": [ { "name": "keyword.other.ballerina", "match": "\\bin\\b" }, { "include": "#identifiers" }, { "include": "#comment" }, { "include": "#var-expr" }, { "include": "#expression" } ] }, "forkBody": { "patterns": [ { "begin": "\\{", "end": "(?=\\})", "beginCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "patterns": [ { "include": "#workerDef" } ] } ] }, "forkStatement": { "patterns": [ { "begin": "\\bfork\\b", "end": "\\}", "beginCaptures": { "0": { "name": "keyword.control.ballerina" } }, "endCaptures": { "0": { "name": "punctuation.definition.block.ballerina" } }, "patterns": [ { "include": "#forkBody" } ] } ] }, "function-body": { "patterns": [ { "include": "#comment" }, { "include": "#functionParameters" }, { "include": "#decl-block" }, { "begin": "\\=>", "name": "meta.block.ballerina", "beginCaptures": { "0": { "name": "meta.arrow.ballerina storage.type.function.arrow.ballerina" } }, "end": "(?=\\;)|(?=\\,)|(?=)(?=\\);)", "patterns": [ { "include": "#statements" }, { "include": "#punctuation-comma" } ] }, { "name": "keyword.generator.asterisk.ballerina", "match": "\\*" } ] }, "function-defn": { "name": "meta.function.ballerina", "begin": "(?:(public|private)\\s+)?(function\\b)", "beginCaptures": { "1": { "name": "keyword.other.ballerina" }, "2": { "name": "keyword.other.ballerina" } }, "end": "(?<=\\;)|(?<=\\})|(?<=\\,)|(?=)(?=\\);)", "patterns": [ { "match": "\\bexternal\\b", "name": "keyword.ballerina" }, { "include": "#stringTemplate" }, { "include": "#annotationAttachment" }, { "include": "#functionReturns" }, { "include": "#functionName" }, { "include": "#functionParameters" }, { "include": "#punctuation-semicolon" }, { "include": "#function-body" } ] }, "functionName": { "patterns": [ { "name": "keyword.other.ballerina", "match": "\\bfunction\\b" }, { "include": "#type-primitive" }, { "include": "#self-literal" }, { "include": "#string" }, { "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:]]*))", "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" } } } ] }, "functionParameters": { "name": "meta.parameters.ballerina", "begin": "\\(|\\[", "end": "\\)|\\]", "beginCaptures": { "0": { "name": "punctuation.definition.parameters.begin.ballerina" } }, "endCaptures": { "0": { "name": "punctuation.definition.parameters.end.ballerina" } }, "patterns": [ { "include": "#function-parameters-body" } ] }, "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" }, { "name": "punctuation.separator.parameter.ballerina", "match": "\\," } ] }, "parameter-name": { "patterns": [ { "match": "\\s*\\b(var)\\s+", "captures": { "1": { "name": "support.type.primitive.ballerina" } } }, { "match": "(?x)(?:(?<![_$[: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*(\\??)", "captures": { "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" }, "10": { "name": "keyword.operator.optional.ballerina" } } } ] }, "functionReturns": { "name": "meta.type.function.return.ballerina", "begin": "\\s*(returns)\\s*", "beginCaptures": { "1": { "name": "keyword.other.ballerina" } }, "end": "(?==>)|(\\=)|(?=\\{)|(\\))|(?=\\;)", "endCaptures": { "1": { "name": "keyword.operator.ballerina" } }, "patterns": [ { "include": "#comment" }, { "include": "#string" }, { "include": "#numbers" }, { "include": "#keywords" }, { "include": "#type-primitive" }, { "match": "\\s*\\b(var)(?=\\s+|\\[|\\?)", "captures": { "1": { "name": "support.type.primitive.ballerina" } } }, { "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": "\\(", "end": "\\)", "beginCaptures": { "0": { "name": "delimiter.parenthesis" } }, "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" } ] } ] }, "functionTypeType": { "patterns": [ { "begin": "[_$[:alpha:]][_$[:alnum:]]*", "beginCaptures": { "0": { "name": "storage.type.ballerina" } }, "end": "(?=\\,)|(?:\\|)|(?=\\])|(?=\\))" } ] }, "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" } ] } ] }, "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" } ] }, { "begin": "(?<=\\))(?=\\s|\\=)", "end": "(?=\\{)", "patterns": [ { "include": "#literal" }, { "include": "#keywords" } ] }, { "include": "#decl-block" } ] } ] }, "import-clause": { "patterns": [ { "include": "#comment" }, { "match": "(?<![_$[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(?:(\\bdefault)|(\\*)|(\\b[_$[:alpha:]][_$[:alnum:]]*))", "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" } } }, { "name": "variable.other.readwrite.alias.ballerina", "match": "([_$[:alpha:]][_$[:alnum:]]*)" } ] }, "maps": { "patterns": [ { "begin": "\\{", "end": "\\}", "patterns": [ { "include": "#code" } ] } ] }, "matchStatementPatternClause": { "patterns": [ { "begin": "=>", "beginCaptures": { "0": { "name": "keyword.ballerina" } }, "end": "((\\})|;|,)", "patterns": [ { "include": "#callableUnitBody" }, { "include": "#code" } ] } ] }, "matchStatement": { "patterns": [ { "begin": "\\bmatch\\b", "beginCaptures": { "0": { "name": "keyword.control.ballerina" } }, "end": "\\}", "patterns": [ { "include": "#matchStatementBody" }, { "include": "#comment" }, { "include": "#code" } ] }