shiki
Version:
1,677 lines (1,676 loc) • 94.9 kB
JSON
{
"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"
}
]
}