[{"displayName":"Odin","name":"odin","patterns":[{"include":"#file-tags"},{"include":"#package-name-declaration"},{"include":"#import-declaration"},{"include":"#statements"}],"repository":{"assignments":{"patterns":[{"include":"#procedure-assignment"},{"include":"#type-assignment"},{"include":"#distinct-type-assignment"},{"include":"#constant-assignment"},{"include":"#variable-assignment"},{"include":"#type-annotation"}]},"attribute":{"patterns":[{"captures":{"1":{"name":"keyword.control.attribute.odin"},"2":{"name":"entity.other.attribute-name.odin"}},"match":"(@)\\s*([A-Z_a-z]\\w*)\\b","name":"meta.attribute.odin"},{"begin":"(@)\\s*(\\()","beginCaptures":{"1":{"name":"keyword.control.attribute.odin"},"2":{"name":"meta.brace.round.odin"}},"end":"\\)","endCaptures":{"0":{"name":"meta.brace.round.odin"}},"name":"meta.attribute.odin","patterns":[{"match":"\\b([A-Z_a-z]\\w*)\\b","name":"entity.other.attribute-name.odin"},{"match":",","name":"punctuation.odin"},{"begin":"=","beginCaptures":{"0":{"name":"keyword.operator.assignment.odin"}},"end":"(?=[),])","patterns":[{"include":"#expressions"}]}]}]},"basic-types":{"patterns":[{"match":"\\b(i(?:8|16|32|64|128|nt))\\b","name":"support.type.primitive.odin"},{"match":"\\b(u(?:8|16|32|64|128|int|intptr))\\b","name":"support.type.primitive.odin"},{"match":"\\b((?:u16|u32|u64|u128|i16|i32|i64|i128)le)\\b","name":"support.type.primitive.odin"},{"match":"\\b((?:i16|i32|i64|i128|u16|u32|u64|u128)be)\\b","name":"support.type.primitive.odin"},{"match":"\\b(f(?:16|32|64))\\b","name":"support.type.primitive.odin"},{"match":"\\b(f(?:16|32|64)le)\\b","name":"support.type.primitive.odin"},{"match":"\\b(f(?:16|32|64)be)\\b","name":"support.type.primitive.odin"},{"match":"\\b(complex(?:32|64|128))\\b","name":"support.type.primitive.odin"},{"match":"\\b(quaternion(?:64|128|256))\\b","name":"support.type.primitive.odin"},{"match":"\\b(b(?:ool|8|16|32|64))\\b","name":"support.type.primitive.odin"},{"match":"\\b(string|cstring|rune)\\b","name":"support.type.primitive.odin"},{"match":"\\b(rawptr)\\b","name":"support.type.primitive.odin"},{"match":"\\b(any|typeid)\\b","name":"support.type.primitive.odin"},{"match":"\\b(byte)\\b","name":"support.type.primitive.odin"}]},"block-comment":{"begin":"/\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.odin"}},"end":"\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.odin"}},"name":"comment.block.odin","patterns":[{"include":"#block-comment"}]},"block-definition":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.odin"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.odin"}},"name":"meta.block.odin","patterns":[{"include":"#statements"}]},"block-label":{"captures":{"1":{"name":"entity.name.label.odin"},"2":{"name":"punctuation.definition.label.odin"}},"match":"(\\w+)(:)\\s*(?=for|switch|if|\\{)","name":"meta.block.label.odin"},"case-clause":{"begin":"\\b(case)\\b","beginCaptures":{"1":{"name":"keyword.control.case.odin"}},"end":":","endCaptures":{"0":{"name":"punctuation.definition.section.case-statement.odin"}},"name":"meta.case-clause.expr.odin","patterns":[{"include":"#expressions"}]},"comments":{"patterns":[{"include":"#block-comment"},{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.odin"}},"end":"\\n","name":"comment.line.double-slash.odin"},{"begin":"#!","beginCaptures":{"0":{"name":"punctuation.definition.comment.odin"}},"end":"\\n","name":"comment.line.shebang.odin"}]},"constant-assignment":{"captures":{"1":{"name":"variable.other.constant.odin"},"2":{"name":"keyword.operator.assignment.odin"}},"match":"([A-Z_a-z]\\w*)\\s*(:\\s*:)","name":"meta.definition.variable.odin"},"distinct-type-assignment":{"begin":"\\b([A-Z_a-z]\\w*)\\s*(:\\s*:)\\s*(?=(distinct)\\b)","beginCaptures":{"1":{"name":"entity.name.type.odin"},"2":{"name":"keyword.operator.assignment.odin"},"3":{"name":"storage.type.odin"}},"end":"(?=^)|(?<=})","name":"meta.definition.variable.odin","patterns":[{"include":"#type-declaration"}]},"expressions":{"patterns":[{"include":"#comments"},{"include":"#ternary"},{"include":"#map-bitset"},{"include":"#slice"},{"include":"#keywords"},{"include":"#type-parameter"},{"include":"#basic-types"},{"include":"#procedure-calls"},{"include":"#property-access"},{"include":"#union-member-access"},{"include":"#union-non-nil-access"},{"include":"#strings"},{"include":"#punctuation"},{"include":"#variable-name"}]},"file-tags":{"begin":"#\\+[A-Z_a-z][-0-9A-Z_a-z]*","beginCaptures":{"0":{"name":"entity.name.tag.odin"}},"end":"\\n","name":"comment.line.double-slash.odin","patterns":[{"match":",","name":"punctuation.odin"},{"match":"!","name":"keyword.operator.logical.odin"},{"match":"[A-Z_a-z][-0-9A-Z_a-z]*","name":"entity.other.attribute-name.odin"}]},"import-declaration":{"begin":"\\b((?:|foreign\\s+)import)\\b","beginCaptures":{"0":{"name":"keyword.control.import.odin"}},"end":"(?=^|;)","name":"meta.import.odin","patterns":[{"begin":"\\b[A-Z_a-z]\\w*","beginCaptures":{"0":{"name":"entity.name.namespace.odin"}},"end":"(?=^|;)","name":"entity.name.alias.odin","patterns":[{"include":"#strings"},{"include":"#comments"}]},{"include":"#strings"},{"include":"#comments"}]},"keywords":{"patterns":[{"match":"\\b(import|foreign|package)\\b","name":"keyword.control.odin"},{"match":"\\b(if|else|or_else|when|where|for|in|not_in|defer|switch|return|or_return)\\b","name":"keyword.control.odin"},{"captures":{"1":{"name":"keyword.control.odin"},"2":{"name":"entity.name.label.odin"}},"match":"\\b((?:|or_)(?:break|continue))\\b\\s*(\\w+)?"},{"match":"\\b(fallthrough|case|dynamic)\\b","name":"keyword.control.odin"},{"match":"\\b(do|force_inline|no_inline)\\b","name":"keyword.control.odin"},{"match":"\\b(asm)\\b","name":"keyword.control.odin"},{"match":"\\b(auto_cast|distinct|using)\\b","name":"storage.modifier.odin"},{"match":"\\b(context)\\b","name":"keyword.context.odin"},{"match":"\\b(ODIN_(?:ARCH|OS))\\b","name":"variable.other.constant.odin"},{"match":"\\b(nil|true|false)\\b","name":"constant.language.odin"},{"match":"---","name":"constant.language.odin"},{"match":"\\b(\\d([_\\d])*(\\.\\d([_\\d])*)?)(([Ee])([-+])?\\d+)?[ijk]?\\b","name":"constant.numeric.odin"},{"match":"\\b((0b([01_])+)|(0o([_\\d])+)|(0d([_\\d])+)|(0[Xhx]([_\\h])+))i?\\b","name":"constant.numeric.odin"},{"match":"\\b(struct|enum|union|map|bit_set|bit_field|matrix)\\b","name":"storage.type.odin"},{"match":"[-%*+/]=|%%=","name":"keyword.operator.assignment.compound.odin"},{"match":"(?:[|~]|&~?|<<|>>)=","name":"keyword.operator.assignment.compound.bitwise.odin"},{"match":"[!=]=","name":"keyword.operator.comparison.odin"},{"match":"[<>]=?","name":"keyword.operator.relational.odin"},{"match":"\\.\\.[<=]","name":"keyword.operator.range.odin"},{"match":"\\.\\.","name":"keyword.operator.spread.odin"},{"match":":[:=]|=","name":"keyword.operator.assignment.odin"},{"match":"&","name":"keyword.operator.address.odin"},{"match":"\\^","name":"keyword.operator.address.odin"},{"match":"->","name":"storage.type.function.arrow.odin"},{"match":"@|([-!%*+/:|]|<<?|>>?|~)=?|=|: : ?|\\$","name":"keyword.operator.odin"},{"match":"#[A-Z_a-z]\\w*","name":"entity.name.tag.odin"}]},"map-bitset":{"begin":"\\b(bit_set|map)\\b","beginCaptures":{"0":{"name":"storage.type.odin"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.bracket.square.odin"}},"patterns":[{"match":"\\[","name":"punctuation.definition.bracket.square.odin"},{"include":"#type-declaration"}]},"object-definition":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.odin"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.odin"}},"name":"meta.object.type.odin","patterns":[{"include":"#statements"}]},"package-name-declaration":{"captures":{"1":{"name":"keyword.control.odin"},"2":{"name":"entity.name.type.module.odin"}},"match":"^\\s*(package)\\s+([A-Z_a-z]\\w*)"},"parameters":{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.odin"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.odin"}},"name":"meta.parameters.odin","patterns":[{"include":"#assignments"},{"include":"#expressions"}]},"procedure-assignment":{"begin":"\\b([A-Z_a-z]\\w*)\\s*(:\\s*:|=)\\s*(#\\w+)?\\s*(?=proc\\b)","beginCaptures":{"1":{"name":"meta.definition.function.odin entity.name.function.odin"},"2":{"name":"keyword.operator.assignment.odin"},"3":{"name":"keyword.other.odin"}},"end":"(?=^)|(?<=})","name":"meta.definition.variable.odin","patterns":[{"include":"#type-declaration"}]},"procedure-calls":{"patterns":[{"begin":"\\b(cast|transmute)\\b\\s*(\\()","beginCaptures":{"1":{"name":"keyword.function.odin"},"2":{"name":"meta.brace.round.odin"}},"end":"\\)","endCaptures":{"0":{"name":"meta.brace.round.odin"}},"name":"meta.function-call.odin","patterns":[{"include":"#type-declaration"}]},{"begin":"\\b((?:size|align)_of)\\b\\s*(\\()","beginCaptures":{"1":{"name":"support.function.builtin.odin"},"2":{"name":"meta.brace.round.odin"}},"end":"\\)","endCaptures":{"0":{"name":"meta.brace.round.odin"}},"name":"meta.function-call.odin","patterns":[{"include":"#type-declaration"}]},{"begin":"\\b(len|cap|offset_of_selector|offset_of_member|offset_of|offset_of_by_string|type_of|type_info_of|typeid_of|swizzle|complex|quaternion|real|imag|jmag|kmag|conj|expand_values|min|max|abs|clamp|soa_zip|soa_unzip|make|new|new_clone|resize|reserve|append|delete|free|free_all|assert|panic)\\b\\s*(\\()","beginCaptures":{"1":{"name":"support.function.builtin.odin"},"2":{"name":"meta.brace.round.odin"}},"end":"\\)","endCaptures":{"0":{"name":"meta.brace.round.odin"}},"name":"meta.function-call.odin","patterns":[{"include":"#expressions"}]},{"begin":"([A-Z_a-z]\\w*)\\s*(\\()","beginCaptures":{"1":{"name":"entity.name.function.odin"},"2":{"name":"meta.brace.round.odin"}},"end":"\\)","endCaptures":{"0":{"name":"meta.brace.round.odin"}},"name":"meta.function-call.odin","patterns":[{"include":"#expressions"}]}]},"property-access":{"captures":{"1":{"name":"variable.other.object.odin"},"2":{"name":"punctuation.accessor.odin"}},"match":"([A-Z_a-z]\\w*)\\s*(\\.)\\s*(?=[A-Z_a-z]\\w*)"},"punctuation":{"match":"[](),.;\\[\\\\{}]","name":"punctuation.odin"},"return-type-declaration":{"begin":"->","beginCaptures":{"0":{"name":"storage.type.function.arrow.odin"}},"end":"(?=^|[),;{]|where)","name":"meta.return.type.odin","patterns":[{"include":"#comments"},{"include":"#keywords"},{"include":"#basic-types"},{"include":"#property-access"},{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.odin"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.odin"}},"name":"meta.parameters.odin","patterns":[{"include":"#comments"},{"include":"#assignments"},{"include":"#keywords"},{"include":"#basic-types"},{"include":"#property-access"},{"include":"#type-name"},{"include":"#punctuation"}]},{"include":"#type-name"}]},"slice":{"begin":"\\[","beginCaptures":{"0":{"name":"meta.brace.square.odin"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.odin"}},"name":"meta.slice.odin","patterns":[{"match":"\\?","name":"keyword.operator.array.odin"},{"match":":","name":"keyword.operator.slice.odin"},{"include":"#expressions"}]},"statements":{"patterns":[{"include":"#attribute"},{"include":"#procedure-assignment"},{"include":"#type-assignment"},{"include":"#distinct-type-assignment"},{"include":"#constant-assignment"},{"include":"#variable-assignment"},{"include":"#case-clause"},{"include":"#block-label"},{"include":"#type-annotation"},{"include":"#block-definition"},{"include":"#expressions"}]},"string-escaped-char":{"patterns":[{"match":"\\\\(x1b|e|033)\\[[0-9;]*m","name":"constant.character.escape.ansi-color-sequence.odin"},{"match":"\\\\([\"'\\\\abefnrtuv]|x\\h{2}|u\\h{4}|U\\h{8}|[0-7]{3})","name":"constant.character.escape.odin"},{"match":"%([%E-HMTUXb-imo-tvwxz])","name":"constant.character.escape.placeholders.odin"},{"match":"%(\\d*\\.?\\d*f)","name":"constant.character.escape.placeholders-floats.odin"},{"match":"\\\\.","name":"invalid.illegal.unknown-escape.odin"}]},"strings":{"patterns":[{"begin":"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.odin"}},"end":"\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.odin"}},"name":"string.quoted.double.odin","patterns":[{"include":"#string-escaped-char"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.odin"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.odin"}},"name":"string.quoted.single.odin","patterns":[{"include":"#string-escaped-char"}]},{"begin":"`","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.odin"}},"end":"`","endCaptures":{"0":{"name":"punctuation.definition.string.end.odin"}},"name":"string.quoted.raw.odin"}]},"ternary":{"begin":"\\?","beginCaptures":{"0":{"name":"keyword.operator.ternary.odin"}},"end":":","endCaptures":{"0":{"name":"keyword.operator.ternary.odin"}},"name":"meta.ternary.odin","patterns":[{"include":"#expressions"}]},"type-annotation":{"begin":"(?:([A-Z_a-z]\\w*)\\s*(,)\\s*)?(?:([A-Z_a-z]\\w*)\\s*(,)\\s*)?([A-Z_a-z]\\w*)\\s*(:)","beginCaptures":{"1":{"name":"variable.name.odin"},"2":{"name":"punctuation.odin"},"3":{"name":"variable.name.odin"},"4":{"name":"punctuation.odin"},"5":{"name":"variable.name.odin"},"6":{"name":"keyword.operator.type.annotation.odin"}},"end":"(?=^|[),:;=]|for|switch|if|\\{)","name":"meta.type.annotation.odin","patterns":[{"include":"#type-declaration"}]},"type-assignment":{"begin":"\\b([A-Z_a-z]\\w*)\\s*(:\\s*:)\\s*(?=(struct|union|enum|bit_set|bit_field)\\b)","beginCaptures":{"1":{"name":"entity.name.type.odin"},"2":{"name":"keyword.operator.assignment.odin"},"3":{"name":"storage.type.odin"}},"end":"(?=^)|(?<=})","name":"meta.definition.variable.odin","patterns":[{"include":"#type-declaration"}]},"type-declaration":{"name":"meta.type.declaration.odin","patterns":[{"include":"#map-bitset"},{"begin":"\\b(proc|struct|union|enum|bit_field)\\b","beginCaptures":{"1":{"name":"storage.type.odin"}},"end":"(?=^|[),;])|(?<=})","patterns":[{"include":"#parameters"},{"include":"#return-type-declaration"},{"include":"#object-definition"},{"include":"#expressions"}]},{"include":"#comments"},{"include":"#strings"},{"include":"#block-definition"},{"include":"#keywords"},{"include":"#basic-types"},{"include":"#slice"},{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.odin"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.odin"}},"patterns":[{"include":"#type-declaration"}]},{"include":"#property-access"},{"include":"#punctuation"},{"include":"#type-name"}]},"type-name":{"match":"\\b[A-Z_a-z]\\w*\\b","name":"entity.name.type.odin"},"type-parameter":{"captures":{"1":{"name":"keyword.operator.odin"},"2":{"name":"entity.name.type.parameter.odin"}},"match":"(\\$)\\s*\\b([A-Z_a-z]\\w*)\\b"},"union-member-access":{"begin":"([A-Z_a-z]\\w*)\\s*(\\.)\\s*(\\()","beginCaptures":{"1":{"name":"variable.other.object.odin"},"2":{"name":"punctuation.accessor.odin"},"3":{"name":"meta.brace.round.odin"}},"end":"\\)","endCaptures":{"0":{"name":"meta.brace.round.odin"}},"patterns":[{"include":"#type-declaration"}]},"union-non-nil-access":{"captures":{"1":{"name":"variable.other.object.odin"},"2":{"name":"punctuation.accessor.odin"},"3":{"name":"punctuation.accessor.optional.odin"}},"match":"([A-Z_a-z]\\w*)\\s*(\\.)\\s*(\\?)"},"variable-assignment":{"captures":{"1":{"name":"variable.name.odin"},"2":{"name":"punctuation.odin"},"3":{"name":"variable.name.odin"},"4":{"name":"punctuation.odin"},"5":{"name":"variable.name.odin"},"6":{"name":"keyword.operator.assignment.odin"}},"match":"(?:([A-Z_a-z]\\w*)\\s*(,)\\s*)?(?:([A-Z_a-z]\\w*)\\s*(,)\\s*)?([A-Z_a-z]\\w*)\\s*(:\\s*=)","name":"meta.definition.variable.odin"},"variable-name":{"match":"\\b[A-Z_a-z]\\w*\\b","name":"variable.name.odin"}},"scopeName":"source.odin"}]