{"name":"Tact","scopeName":"source.tact","patterns":[{"include":"#comment"},{"include":"#annotation"},{"include":"#literal"},{"include":"#invalid"},{"include":"#constant"},{"include":"#type"},{"include":"#expression"},{"include":"#punctuation"},{"include":"#keyword"},{"include":"#function"},{"include":"#variable"}],"repository":{"annotation":{"patterns":[{"begin":"^\\s*(@name)\\s*(\\()","end":"\\)","patterns":[{"name":"entity.name.function.func.tact","match":"(.*?)"}],"beginCaptures":{"1":{"name":"entity.other.attribute-name.tact"},"2":{"name":"punctuation.brackets.round.tact"}},"endCaptures":{"0":{"name":"punctuation.brackets.round.tact"}}},{"begin":"(?\u003c!\\.)(@interface)\\s*(\\()","end":"\\)","patterns":[{"include":"#string"}],"beginCaptures":{"1":{"name":"entity.other.attribute-name.tact"},"2":{"name":"punctuation.brackets.round.tact"}},"endCaptures":{"0":{"name":"punctuation.brackets.round.tact"}}},{"begin":"(?\u003c!\\.)(asm)\\s*(\\()","end":"\\)","patterns":[{"include":"#variable"},{"name":"keyword.operator.mapsto.tact","match":"-\u003e"},{"name":"constant.numeric.decimal.tact","match":"\\b(0[0-9]*)\\b"},{"name":"constant.numeric.decimal.tact","match":"\\b([1-9](?:_?[0-9])*)\\b"}],"beginCaptures":{"1":{"name":"entity.other.attribute-name.tact"},"2":{"name":"punctuation.brackets.round.tact"}},"endCaptures":{"0":{"name":"punctuation.brackets.round.tact"}}},{"name":"entity.other.attribute-name.tact","match":"(?\u003c!\\.)\\b(@name|@interface|asm)\\b"}]},"as-tlb":{"patterns":[{"match":"(?\u003c!\\.)\\b(as)\\s+(coins|remaining|bytes32|bytes64|int257|u?int(?:2[0-5][0-6]|1[0-9][0-9]|[1-9][0-9]?))\\b","captures":{"1":{"name":"keyword.other.as.tact storage.modifier.tact"},"2":{"name":"entity.name.type.tact"}}}]},"comment":{"patterns":[{"name":"comment.line.double-slash.tact","begin":"//","end":"$","patterns":[{"include":"#todo"}],"beginCaptures":{"0":{"name":"punctuation.definition.comment.line.double-slash.tact"}}},{"name":"comment.block.tact","begin":"\\s*/\\*","end":"\\*/","patterns":[{"include":"#todo"}],"beginCaptures":{"0":{"name":"comment.block.begin.tact punctuation.definition.comment.begin.tact"}},"endCaptures":{"0":{"name":"comment.block.end.tact punctuation.definition.comment.end.tact"}}}]},"constant":{"patterns":[{"name":"constant.other.builtin.tact","match":"(?\u003c=self\\.)(storageReserve)\\b"},{"name":"constant.other.builtin.tact","match":"(?\u003c!\\.)\\b(SendRemainingValue|SendRemainingBalance|SendPayGasSeparately|SendIgnoreErrors|SendBounceIfActionFail|SendDestroyIfZero|SendOnlyEstimateFee|ReserveExact|ReserveAllExcept|ReserveAtMost|ReserveAddOriginalBalance|ReserveInvertSign|ReserveBounceIfActionFail)\\b"},{"name":"constant.other.caps.tact","match":"\\b([A-Z]{2}[A-Z0-9_]*)\\b"},{"match":"(?\u003c!\\.)\\b(const)\\s+([a-zA-Z_][A-Za-z0-9_]*)\\b","captures":{"1":{"name":"keyword.other.tact"},"2":{"name":"constant.other.declaration.tact"}}},{"name":"constant.language.null.tact","match":"(?\u003c!\\.)\\b(null)\\b"}]},"escape-sequence":{"name":"constant.character.escape.tact","match":"(?:\\\\)(?:(\\\\)|(\")|([nrtvbf])|(x[a-fA-F0-9]{2})|(u[a-fA-F0-9]{4})|(u\\{[a-fA-F0-9]{1,6}\\}))","captures":{"1":{"name":"constant.character.escape.backslash.tact"},"2":{"name":"constant.character.escape.double-quote.tact"},"3":{"name":"constant.character.escape.special.tact"},"4":{"name":"constant.character.escape.hex.tact"},"5":{"name":"constant.character.escape.unicode.tact"},"6":{"name":"constant.character.escape.unicodepoint.tact"}}},"expression":{"patterns":[{"name":"keyword.operator.logical.tact","match":"(\\|\\||\u0026\u0026|!!?)(?!=)"},{"name":"keyword.operator.bitwise.tact","match":"(\\^|\u0026|\\||~|\u003c\u003c|\u003e\u003e)(?!=)"},{"name":"keyword.operator.assignment.tact","match":"(\\+=|-=|\\*=|/=|%=|\\^=|\u0026=|\\|=|\u003c\u003c=|\u003e\u003e=)"},{"name":"keyword.operator.assignment.equal.tact","match":"(?\u003c![\u003c\u003e])=(?!=)"},{"name":"keyword.operator.comparison.tact","match":"([!=]=|\u003c=?|\u003e=?)"},{"name":"keyword.operator.arithmetic.tact","match":"([+%*\\-])|(/(?!/))"},{"name":"keyword.operator.new.tact","match":"\\b(initOf)\\b"},{"begin":"(?!\\?\\.\\s*[^[:digit:]])(\\?)(?!\\?)","end":"\\s*(:)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"keyword.operator.ternary.tact"}},"endCaptures":{"1":{"name":"keyword.operator.ternary.tact"}}}]},"function":{"match":"\\b((?:[a-zA-Z_][a-zA-Z0-9_]*))\\s*(\\()","captures":{"1":{"name":"entity.name.function.tact"},"2":{"name":"punctuation.brackets.round.tact"}}},"invalid":{"patterns":[{"name":"invalid.illegal.identifier.tact","match":"\\b__(?:gen|tact)[a-zA-Z0-9_]*\\b"}]},"keyword":{"patterns":[{"name":"keyword.control.import.tact","match":"(?\u003c!\\.)\\b(import)\\b"},{"name":"keyword.control.tact","match":"(?\u003c=\\.\\.)\\b(else|catch|until|in(?!\\s*\\())\\b"},{"name":"keyword.control.tact","match":"(?\u003c!\\.)\\b(if|else|try|catch|repeat|do|until|while|foreach|in(?!\\s*\\()|return)\\b"},{"name":"keyword.other.tact","match":"(?\u003c!\\.)\\b(let|const)\\b"},{"name":"keyword.other.as.tact storage.modifier.tact","match":"(?\u003c!\\.)\\b(as)\\b"},{"name":"keyword.other.struct.tact","match":"(?\u003c!\\.)\\b(struct)\\b"},{"name":"keyword.other.message.tact","match":"(?\u003c!\\.)\\b(message)\\b"},{"name":"keyword.other.trait.tact","match":"(?\u003c!\\.)\\b(trait)\\b"},{"name":"keyword.other.contract.tact","match":"(?\u003c!\\.)\\b(contract)\\b"},{"name":"keyword.other.attribute.tact storage.modifier.tact","match":"(?\u003c!\\.)\\b(abstract|virtual|override)\\b"},{"name":"keyword.other.attribute.tact","match":"(?\u003c!\\.)\\b(extends|get|inline|mutates)\\b"},{"name":"keyword.other.function.tact","match":"(?\u003c!\\.)\\b(fun|native)\\b"},{"name":"keyword.other.function.tact","match":"(?\u003c!\\.)\\b(init|receive|bounced|external)(?=\\s*\\()"},{"name":"keyword.other.reserved.tact","match":"(?\u003c!\\.)\\b(extend|public)\\b"},{"name":"keyword.other.tact","match":"(?\u003c!\\.)\\b(primitive|with)\\b"}]},"literal":{"patterns":[{"name":"constant.numeric.hex.tact","match":"\\b(0[xX][a-fA-F0-9](?:_?[a-fA-F0-9])*)\\b"},{"name":"constant.numeric.oct.tact","match":"\\b(0[oO][0-7](?:_?[0-7])*)\\b"},{"name":"constant.numeric.bin.tact","match":"\\b(0[bB][01](?:_?[01])*)\\b"},{"name":"constant.numeric.decimal.tact","match":"\\b(0[0-9]*)\\b"},{"name":"constant.numeric.decimal.tact","match":"\\b([1-9](?:_?[0-9])*)\\b"},{"name":"constant.language.bool.tact","match":"(?\u003c!\\.)\\b(true|false)\\b"},{"include":"#string"},{"name":"variable.language.this.tact","match":"(?\u003c!\\.)\\b(self)\\b"}]},"punctuation":{"patterns":[{"name":"punctuation.comma.tact","match":","},{"name":"punctuation.brackets.curly.tact","match":"[{}]"},{"name":"punctuation.brackets.round.tact","match":"[()]"},{"name":"punctuation.semi.tact","match":";"},{"name":"punctuation.colon.tact","match":":"},{"name":"punctuation.dot.tact","match":"\\."}]},"simple-type":{"match":"(?\u003c!\\.)\\b([A-Z][a-zA-Z0-9_]*)(\\??)","captures":{"1":{"name":"entity.name.type.tact"},"2":{"name":"keyword.operator.optional.tact"}}},"string":{"name":"string.quoted.double.tact","begin":"\"","end":"\"","patterns":[{"include":"#escape-sequence"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.tact"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.tact"}}},"todo":{"name":"keyword.comment.todo.tact","match":"(?i)\\b(FIXME|TODO|CHANGED|XXX|IDEA|HACK|NOTE|REVIEW|NB|BUG)\\b(?-i)"},"type":{"patterns":[{"include":"#simple-type"},{"begin":"(?\u003c!\\.)\\b(bounced)\\s*(\u003c)","end":"\u003e","patterns":[{"include":"#simple-type"}],"beginCaptures":{"1":{"name":"entity.name.type.tact"},"2":{"name":"punctuation.brackets.angle.tact"}},"endCaptures":{"0":{"name":"punctuation.brackets.angle.tact"}}},{"begin":"(?\u003c!\\.)\\b(map)\\s*(\u003c)","end":"\u003e","patterns":[{"include":"#simple-type"},{"name":"punctuation.comma.tact","match":","},{"include":"#as-tlb"}],"beginCaptures":{"1":{"name":"entity.name.type.tact"},"2":{"name":"punctuation.brackets.angle.tact"}},"endCaptures":{"0":{"name":"punctuation.brackets.angle.tact"}}},{"include":"#as-tlb"}]},"variable":{"patterns":[{"name":"comment.unused-identifier.tact","match":"(?\u003c!\\.)\\b(_)\\b"},{"name":"variable.other.tact","match":"\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b"}]}}}