{"name":"Candid","scopeName":"source.did","patterns":[{"include":"#comment"},{"include":"#attribute"},{"include":"#literal"},{"include":"#operator"},{"include":"#keyword"},{"include":"#type"},{"include":"#boolean"}],"repository":{"arithmetic-operator":{"name":"keyword.operator.arithmetic.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\\+|\\-|\\*|\\/)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"array-type":{"name":"meta.array.candid","begin":"\\b(Array)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.array.candid"},"2":{"name":"punctuation.array.begin.candid"}},"endCaptures":{"1":{"name":"punctuation.array.end.candid"}}},"assignment-operator":{"name":"keyword.operator.assignment.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\\+|\\-|\\*|\\/|%|\u003c\u003c\u003e?|\u003c?\u003e\u003e|\u0026|\\^|\\||\u0026\u0026|\\|\\|)?=(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"async-await-keyword":{"name":"keyword.async-await.candid","match":"\\b(async|await)\\b"},"attribute":{"name":"meta.attribute.candid","patterns":[{"contentName":"meta.attribute.arguments.candid","begin":"((@)(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B))(\\()","end":"\\)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"storage.modifier.attribute.candid"},"2":{"name":"punctuation.definition.attribute.candid"},"3":{"name":"punctuation.definition.attribute-arguments.begin.candid"}},"endCaptures":{"0":{"name":"punctuation.definition.attribute-arguments.end.candid"}}},{"match":"((@)(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B))","captures":{"1":{"name":"storage.modifier.attribute.candid"},"2":{"name":"punctuation.definition.attribute.candid"}}}]},"bitwise-operator":{"name":"keyword.operator.bitwise.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\u0026|\\||\\^|\u003c\u003c\u003e?|\u003c?\u003e\u003e)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"block-comment":{"name":"comment.block.candid","begin":"/\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.block.begin.candid"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.block.end.candid"}}},"boolean":{"name":"keyword.constant.boolean.candid","match":"\\b(true|false)\\b"},"branch-statement-keyword":{"name":"keyword.control.branch.candid","patterns":[{"include":"#if-statement-keyword"},{"include":"#switch-statement-keyword"}]},"catch-statement-keyword":{"name":"kewyord.control.catch.candid","match":"\\b(catch|do)\\b"},"char-literal":{"name":"meta.literal.char.candid","begin":"'","end":"'","patterns":[{"name":"constant.character.escape.candid","match":"\\\\([0tnr\\\"\\'\\\\]|x[[:xdigit:]]{2}|u[[:xdigit:]]{4}|U[[:xdigit:]]{8})"},{"name":"invalid.illegal.candid","match":"(\\'|\\\\)"},{"name":"string.quoted.single.candid","match":"(.)"}],"beginCaptures":{"0":{"name":"string.quoted.double.candid"}},"endCaptures":{"0":{"name":"string.quoted.single.candid"}}},"code-block":{"begin":"(\\{)","end":"(\\})","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.code-block.begin.candid"}},"endCaptures":{"1":{"name":"punctuation.definition.code-block.end.candid"}}},"comment":{"patterns":[{"include":"#documentation-comment"},{"include":"#block-comment"},{"include":"#in-line-comment"}]},"comparative-operator":{"name":"keyword.operator.comparative.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])((=|!)==?|(\u003c|\u003e)=?|~=)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"control-transfer-statement-keyword":{"name":"keyword.control.transfer.candid","match":"\\b(continue|break|return)\\b"},"custom-operator":{"patterns":[{"name":"keyword.operator.custom.prefix.unary.candid","match":"(?\u003c=[\\s(\\[{,;:])([/=\\-+!*%\u003c\u003e\u0026|\\^~.]++)(?![\\s)\\]},;:])"},{"name":"keyword.operator.custom.postfix.unary.candid","match":"(?\u003c![\\s(\\[{,;:])([/=\\-+!*%\u003c\u003e\u0026|\\^~.]++)(?![\\s)\\]},;:\\.])"},{"name":"keyword.operator.custom.binary.candid","match":"(?\u003c=[\\s(\\[{,;:])([/=\\-+!*%\u003c\u003e\u0026|\\^~.]++)(?=[\\s)\\]},;:])"}]},"declaration-modifier":{"name":"keyword.other.declaration-modifier.candid","match":"\\b(class|object|type|shared)\\b"},"dictionary-type":{"name":"meta.dictionary.candid","begin":"\\b(Dictionary)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.dictionary.candid"},"2":{"name":"punctuation.dictionary.begin.candid"}},"endCaptures":{"1":{"name":"punctuation.dictionary.end.candid"}}},"documentation-comment":{"name":"comment.block.documentation.candid","begin":"/\\*\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.block.documentation.begin.candid"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.block.documentation.end.candid"}}},"floating-point-literal":{"name":"constant.numeric.floating-point.candid","patterns":[{"match":"\\b([0-9][0-9_]*)(\\.([0-9][0-9_]*))?([eE][+\\-]?([0-9][0-9_]*))?\\b"},{"match":"\\b(0x[[:xdigit:]][[[:xdigit:]]_]*)(\\.(0x[[:xdigit:]][[[:xdigit:]]_]*))?([pP][+\\-]?(0x[[:xdigit:]][[[:xdigit:]]_]*))\\b"}]},"function-body":{"name":"meta.function-body.candid","patterns":[{"include":"#code-block"}]},"generic-parameter-clause":{"name":"meta.generic-parameter-clause.candid","begin":"(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.generic-parameter-clause.begin.candid"}},"endCaptures":{"1":{"name":"punctuation.definition.generic-parameter-clause.end.candid"}}},"identifier":{"name":"meta.identifier.candid","match":"(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B)"},"if-statement-keyword":{"name":"keyword.control.if.candid","match":"\\b(if|else)\\b"},"in-line-comment":{"name":"comment.line.double-slash.candid","match":"(//).*","captures":{"1":{"name":"punctuation.definition.comment.line.double-slash.candid"}}},"increment-decrement-operator":{"name":"keyword.operator.increment-or-decrement.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\\+\\+|\\-\\-)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"integer-literal":{"name":"constant.numeric.integer.candid","patterns":[{"name":"constant.numeric.integer.binary.candid","match":"(\\B\\-|\\b)(0b[01][01_]*)\\b"},{"name":"constant.numeric.integer.octal.candid","match":"(\\B\\-|\\b)(0o[0-7][0-7_]*)\\b"},{"name":"constant.numeric.integer.decimal.candid","match":"(\\B\\-|\\b)([0-9][0-9_]*)\\b"},{"name":"constant.numeric.integer.hexadecimal.candid","match":"(\\B\\-|\\b)(0x[[:xdigit:]][[[:xdigit:]]_]*)\\b"}]},"keyword":{"patterns":[{"include":"#branch-statement-keyword"},{"include":"#control-transfer-statement-keyword"},{"include":"#loop-statement-keyword"},{"include":"#catch-statement-keyword"},{"include":"#async-await-keyword"},{"include":"#operator-declaration-modifier"},{"include":"#declaration-modifier"},{"name":"keyword.declaration.candid","match":"\\b(import|service|type)\\b"},{"name":"keyword.statement.candid","match":"\\b(opt|vec|record|variant|func|null|empty|oneway|query|composite_query)\\b"},{"name":"keyword.other.candid","match":"\\b(reserved)\\b"}]},"literal":{"patterns":[{"include":"#integer-literal"},{"include":"#floating-point-literal"},{"include":"#nil-literal"},{"include":"#string-literal"},{"include":"#char-literal"}]},"logical-operator":{"name":"keyword.operator.logical.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(!|\u0026\u0026|\\|\\|)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"loop-statement-keyword":{"name":"keyword.control.loop.candid","match":"\\b(while|repeat|for|in|loop)\\b"},"null-literal":{"name":"constant.null.candid","match":"\\bnull\\b"},"operator":{"patterns":[{"include":"#comparative-operator"},{"include":"#assignment-operator"},{"include":"#logical-operator"},{"include":"#remainder-operator"},{"include":"#increment-decrement-operator"},{"include":"#overflow-operator"},{"include":"#range-operator"},{"include":"#bitwise-operator"},{"include":"#arithmetic-operator"},{"include":"#ternary-operator"},{"include":"#type-casting-operator"},{"include":"#custom-operator"}]},"optional-type":{"name":"meta.optional.candid","match":"\\b(Optional)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.optional.candid"},"2":{"name":"punctuation.optional.begin.candid"}},"endCaptures":{"1":{"name":"punctuation.optional.end.candid"}}},"overflow-operator":{"name":"keyword.operator.overflow.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])\\\u0026(\\+|\\-|\\*|\\/|%)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"parameter-clause":{"name":"meta.parameter-clause.candid","begin":"(\\()","end":"(\\))","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.function-arguments.begin.candid"}},"endCaptures":{"1":{"name":"punctuation.definition.function-arguments.end.candid"}}},"primitive-type":{"name":"support.type.candid","match":"\\b(blob|bool|char|float(32|64)|(int|nat)(8|16|32|64)?|principal|text)\\b"},"protocol-composition-type":{"name":"meta.protocol.candid","match":"\\b(protocol)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.protocol.candid"},"2":{"name":"punctuation.protocol.begin.candid"}},"endCaptures":{"1":{"name":"punctuation.protocol.end.candid"}}},"range-operator":{"name":"keyword.operator.range.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])\\.\\.(?:\\.)?(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"remainder-operator":{"name":"keyword.operator.remainder.candid","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])\\%(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"resolved-type":{"name":"support.type.candid","match":"\\b[A-Z].*?\\b"},"string-literal":{"name":"meta.literal.string.candid","begin":"\\\"","end":"\\\"","patterns":[{"name":"constant.character.escape.candid","match":"\\\\([0tnr\\\"\\'\\\\]|x[[:xdigit:]]{2}|u[[:xdigit:]]{4}|U[[:xdigit:]]{8})"},{"name":"invalid.illegal.candid","match":"(\\\"|\\\\)"},{"name":"string.quoted.double.candid","match":"(.)"}],"beginCaptures":{"0":{"name":"string.quoted.double.candid"}},"endCaptures":{"0":{"name":"string.quoted.double.candid"}}},"switch-statement-keyword":{"name":"keyword.control.switch.candid","match":"\\b(switch|case|default)\\b"},"type":{"patterns":[{"include":"#primitive-type"},{"include":"#resolved-type"},{"include":"#optional-type"},{"include":"#protocol-composition-type"}]}}}