{"name":"Cairo","scopeName":"source.cairo","patterns":[{"include":"#directives"},{"include":"#statements"}],"repository":{"class-instance":{"patterns":[{"name":"support.class.cairo","match":"[[:upper:]][_$[:alnum:]]+[[:lower:]]+[_$[:alnum:]]+"}]},"comment":{"patterns":[{"name":"comment.line.number-sign","begin":"#","end":"$","patterns":[{"name":"comment.line.number-sign","match":"TODO"}],"beginCaptures":{"0":{"name":"punctuation.definition.comment"}}}]},"declaration":{"patterns":[{"include":"#import"}]},"directives":{"patterns":[{"match":"(?\u003c!\\w)\\s*(%builtins|%lang)\\s+","captures":{"1":{"name":"keyword.directive.cairo"}}}]},"expression":{"patterns":[{"include":"#expression-without-identifiers"},{"include":"#identifiers"},{"include":"#expression-punctuations"}]},"expression-operators":{"patterns":[{"name":"keyword.brackets.python-hints.cairo","match":"\\%\\{|\\%\\}"},{"name":"keyword.operator","match":"=|!|\u003e|\u003c|\\||\u0026|\\?|\\^|~|\\*|\\+|\\-|\\/|\\%"},{"name":"keyword.operator.cast.cairo","match":"(?\u003c![\\w$])(cast)(?![\\w$])"}]},"expression-punctuations":{"patterns":[{"include":"#punctuation-accessor"}]},"expression-without-identifiers":{"patterns":[{"include":"#string"},{"include":"#comment"},{"include":"#literal"},{"include":"#function-expression"},{"include":"#storages"},{"include":"#keywords"},{"include":"#parameters"},{"include":"#expression-operators"},{"include":"#function-call"},{"include":"#support-objects"}]},"function-call":{"patterns":[{"begin":"([_$[:alpha:]][_$[:alnum:]]+)\\s*(?=\\()","end":"(?\u003c=\\))","patterns":[{"include":"#string"},{"include":"#comment"},{"include":"#literal"},{"include":"#identifiers"},{"include":"#expression-operators"}],"beginCaptures":{"1":{"name":"entity.name.function.cairo"}}}]},"function-expression":{"patterns":[{"name":"meta.function.expression.cairo","begin":"\\s*(func)\\s+([_$[:alpha:]][_$[:alnum:]]*)\\s*","end":"(?\u003c=:)","patterns":[{"include":"#comment"},{"include":"#function-implicit"},{"include":"#function-params"},{"name":"keyword.function.return.cairo","match":"-\u003e"}],"beginCaptures":{"1":{"name":"storage.type.function.cairo"},"2":{"name":"entity.name.function.cairo"}}}]},"function-implicit":{"patterns":[{"begin":"\\{","end":"\\}","patterns":[{"include":"#parameters"}]}]},"function-params":{"patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#parameters"}]}]},"identifiers":{"patterns":[{"name":"variable.other.constant.cairo","match":"(?\u003c!\\w)([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])"}]},"import":{"patterns":[{"begin":"(?\u003c!\\w)\\s*(from)\\s","end":"\\s*(import)\\s","patterns":[{"include":"#string"},{"include":"#comment"},{"include":"#punctuation-accessor"},{"name":"meta.import.from.location.cairo","match":"[_$[:alpha:]][_$[:alnum:]]+"}],"beginCaptures":{"1":{"name":"keyword.declaration.cairo"}},"endCaptures":{"1":{"name":"keyword.declaration.cairo"}}}]},"keywords":{"patterns":[{"name":"keyword.controls.cairo","match":"\\b(else|if|in|return|end|assert|with_attr)\\b"},{"name":"keyword.declaration.cairo","match":"\\b(from|import|func|namespace)\\b"},{"name":"keyword.others.cairo","match":"^\\s*@(constructor|storage_var|view|external|contract_interface|known_ap_change|event)\\s+"}]},"literal":{"patterns":[{"include":"#numeric-literal"}]},"numeric-literal":{"patterns":[{"name":"constant.numeric.decimal.cairo","match":"\\b(?:([0-9]+)|(0x[0-9a-fA-F]+))\\b"}]},"parameters":{"patterns":[{"include":"#comment"},{"include":"#punctuation-accessor"},{"match":"(:)\\s*([_$[:alpha:]][_$[:alnum:]]+)","captures":{"1":{"name":"punctuation.separator"},"2":{"name":"support.type.cairo"}}}]},"punctuation-accessor":{"patterns":[{"match":"(\\.)|(\\*)","captures":{"1":{"name":"punctuation.separator.dot-accessor.cairo"},"2":{"name":"keyword.operator"}}}]},"punctuation-semicolon":{"patterns":[{"name":"punctuation.terminator.statement.cairo","match":";"}]},"statements":{"patterns":[{"include":"#string"},{"include":"#comment"},{"include":"#declaration"},{"include":"#expression"},{"include":"#punctuation-semicolon"}]},"storages":{"patterns":[{"name":"storage.type.cairo","match":"\\b(let|const|local|struct|member|alloc_locals|tempvar)\\b"}]},"string":{"patterns":[{"name":"string.quoted.double.cairo","begin":"\"","end":"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cairo"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cairo"}}},{"name":"string.quoted.single.cairo","begin":"'","end":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cairo"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cairo"}}}]},"support-objects":{"patterns":[{"include":"#class-instance"}]}}}