[{"displayName":"V","fileTypes":[".v",".vh",".vsh"],"name":"v","patterns":[{"include":"#comments"},{"include":"#function-decl"},{"include":"#as-is"},{"include":"#attributes"},{"include":"#assignment"},{"include":"#module-decl"},{"include":"#import-decl"},{"include":"#hash-decl"},{"include":"#brackets"},{"include":"#builtin-fix"},{"include":"#escaped-fix"},{"include":"#operators"},{"include":"#function-limited-overload-decl"},{"include":"#function-extend-decl"},{"include":"#function-exist"},{"include":"#generic"},{"include":"#constants"},{"include":"#type"},{"include":"#enum"},{"include":"#interface"},{"include":"#struct"},{"include":"#keywords"},{"include":"#storage"},{"include":"#numbers"},{"include":"#strings"},{"include":"#types"},{"include":"#punctuations"},{"include":"#variable-assign"},{"include":"#function-decl"}],"repository":{"as-is":{"begin":"\\s+([ai]s)\\s+","beginCaptures":{"1":{"name":"keyword.$1.v"}},"end":"([.\\w]*)","endCaptures":{"1":{"name":"entity.name.alias.v"}}},"assignment":{"captures":{"1":{"patterns":[{"include":"#operators"}]}},"match":"\\s+([-%\\&*+/:^|]?=)\\s+","name":"meta.definition.variable.v"},"attributes":{"captures":{"1":{"name":"meta.function.attribute.v"},"2":{"name":"punctuation.definition.begin.bracket.square.v"},"3":{"name":"storage.modifier.attribute.v"},"4":{"name":"punctuation.definition.end.bracket.square.v"}},"match":"^\\s*((\\[)(deprecated|unsafe|console|heap|manualfree|typedef|live|inline|flag|ref_only|direct_array_access|callconv)(]))","name":"meta.definition.attribute.v"},"brackets":{"patterns":[{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.definition.bracket.curly.begin.v"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.bracket.curly.end.v"}},"patterns":[{"include":"$self"}]},{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.definition.bracket.round.begin.v"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.definition.bracket.round.end.v"}},"patterns":[{"include":"$self"}]},{"begin":"\\[","beginCaptures":{"0":{"name":"punctuation.definition.bracket.square.begin.v"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.bracket.square.end.v"}},"patterns":[{"include":"$self"}]}]},"builtin-fix":{"patterns":[{"patterns":[{"match":"(const)(?=\\s*\\()","name":"storage.modifier.v"},{"match":"\\b(fn|type|enum|struct|union|interface|map|assert|sizeof|typeof|__offsetof)\\b(?=\\s*\\()","name":"keyword.$1.v"}]},{"patterns":[{"match":"(\\$(?:if|else))(?=\\s*\\()","name":"keyword.control.v"},{"match":"\\b(as|in|is|or|break|continue|default|unsafe|match|if|else|for|go|spawn|goto|defer|return|shared|select|rlock|lock|atomic|asm)\\b(?=\\s*\\()","name":"keyword.control.v"}]},{"patterns":[{"captures":{"1":{"name":"storage.type.numeric.v"}},"match":"(?<!.)(i?(?:8|16|nt|64|128)|u?(?:16|32|64|128)|f?(?:32|64))(?=\\s*\\()","name":"meta.expr.numeric.cast.v"},{"captures":{"1":{"name":"storage.type.$1.v"}},"match":"(bool|byte|byteptr|charptr|voidptr|string|rune|size_t|[iu]size)(?=\\s*\\()","name":"meta.expr.bool.cast.v"}]}]},"comments":{"patterns":[{"begin":"/\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.v"}},"end":"\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.v"}},"name":"comment.block.documentation.v","patterns":[{"include":"#comments"}]},{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.v"}},"end":"$","name":"comment.line.double-slash.v"}]},"constants":{"match":"\\b(true|false|none)\\b","name":"constant.language.v"},"enum":{"captures":{"1":{"name":"storage.modifier.$1.v"},"2":{"name":"storage.type.enum.v"},"3":{"name":"entity.name.enum.v"}},"match":"^\\s*(?:(pub)?\\s+)?(enum)\\s+(?:\\w+\\.)?(\\w*)","name":"meta.definition.enum.v"},"function-decl":{"captures":{"1":{"name":"storage.modifier.v"},"2":{"name":"keyword.fn.v"},"3":{"name":"entity.name.function.v"},"4":{"patterns":[{"include":"#generic"}]}},"match":"^(\\bpub\\b\\s+)?\\b(fn)\\b\\s+(?:\\([^)]+\\)\\s+)?(?:C\\.)?(\\w+)\\s*((?<=[+\\w\\s])(<)(\\w+)(>))?","name":"meta.definition.function.v"},"function-exist":{"captures":{"0":{"name":"meta.function.call.v"},"1":{"patterns":[{"include":"#illegal-name"},{"match":"\\w+","name":"entity.name.function.v"}]},"2":{"patterns":[{"include":"#generic"}]}},"match":"(\\w+)((?<=[+\\w\\s])(<)(\\w+)(>))?(?=\\s*\\()","name":"meta.support.function.v"},"function-extend-decl":{"captures":{"1":{"name":"storage.modifier.v"},"2":{"name":"keyword.fn.v"},"3":{"name":"punctuation.definition.bracket.round.begin.v"},"4":{"patterns":[{"include":"#brackets"},{"include":"#storage"},{"include":"#generic"},{"include":"#types"},{"include":"#punctuation"}]},"5":{"name":"punctuation.definition.bracket.round.end.v"},"6":{"patterns":[{"include":"#illegal-name"},{"match":"\\w+","name":"entity.name.function.v"}]},"7":{"patterns":[{"include":"#generic"}]}},"match":"^\\s*(pub)?\\s*(fn)\\s*(\\()([^)]*)(\\))\\s*(?:C\\.)?(\\w+)\\s*((?<=[+\\w\\s])(<)(\\w+)(>))?","name":"meta.definition.function.v"},"function-limited-overload-decl":{"captures":{"1":{"name":"storage.modifier.v"},"2":{"name":"keyword.fn.v"},"3":{"name":"punctuation.definition.bracket.round.begin.v"},"4":{"patterns":[{"include":"#brackets"},{"include":"#storage"},{"include":"#generic"},{"include":"#types"},{"include":"#punctuation"}]},"5":{"name":"punctuation.definition.bracket.round.end.v"},"6":{"patterns":[{"include":"#operators"}]},"7":{"name":"punctuation.definition.bracket.round.begin.v"},"8":{"patterns":[{"include":"#brackets"},{"include":"#storage"},{"include":"#generic"},{"include":"#types"},{"include":"#punctuation"}]},"9":{"name":"punctuation.definition.bracket.round.end.v"},"10":{"patterns":[{"include":"#illegal-name"},{"match":"\\w+","name":"entity.name.function.v"}]}},"match":"^\\s*(pub)?\\s*(fn)\\s*(\\()([^)]*)(\\))\\s*([-*+/])?\\s*(\\()([^)]*)(\\))\\s*(?:C\\.)?(\\w+)","name":"meta.definition.function.v"},"generic":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.bracket.angle.begin.v"},"2":{"patterns":[{"include":"#illegal-name"},{"match":"\\w+","name":"entity.name.generic.v"}]},"3":{"name":"punctuation.definition.bracket.angle.end.v"}},"match":"(?<=[+\\w\\s])(<)(\\w+)(>)","name":"meta.definition.generic.v"}]},"hash-decl":{"begin":"^\\s*(#)","end":"$","name":"markup.bold.v"},"illegal-name":{"match":"\\d\\w+","name":"invalid.illegal.v"},"import-decl":{"begin":"^\\s*(import)\\s+","beginCaptures":{"1":{"name":"keyword.import.v"}},"end":"([.\\w]+)","endCaptures":{"1":{"name":"entity.name.import.v"}},"name":"meta.import.v"},"interface":{"captures":{"1":{"name":"storage.modifier.$1.v"},"2":{"name":"keyword.interface.v"},"3":{"patterns":[{"include":"#illegal-name"},{"match":"\\w+","name":"entity.name.interface.v"}]}},"match":"^\\s*(?:(pub)?\\s+)?(interface)\\s+(\\w*)","name":"meta.definition.interface.v"},"keywords":{"patterns":[{"match":"(\\$(?:if|else))","name":"keyword.control.v"},{"match":"(?<!@)\\b(as|it|is|in|or|break|continue|default|unsafe|match|if|else|for|go|spawn|goto|defer|return|shared|select|rlock|lock|atomic|asm)\\b","name":"keyword.control.v"},{"match":"(?<!@)\\b(fn|type|typeof|enum|struct|interface|map|assert|sizeof|__offsetof)\\b","name":"keyword.$1.v"}]},"module-decl":{"begin":"^\\s*(module)\\s+","beginCaptures":{"1":{"name":"keyword.module.v"}},"end":"([.\\w]+)","endCaptures":{"1":{"name":"entity.name.module.v"}},"name":"meta.module.v"},"numbers":{"patterns":[{"match":"([0-9]+(_?))+(\\.)([0-9]+[Ee][-+]?[0-9]+)","name":"constant.numeric.exponential.v"},{"match":"([0-9]+(_?))+(\\.)([0-9]+)","name":"constant.numeric.float.v"},{"match":"0b(?:[01]+_?)+","name":"constant.numeric.binary.v"},{"match":"0o(?:[0-7]+_?)+","name":"constant.numeric.octal.v"},{"match":"0x(?:\\h+_?)+","name":"constant.numeric.hex.v"},{"match":"(?:[0-9]+_?)+","name":"constant.numeric.integer.v"}]},"operators":{"patterns":[{"match":"([-%*+/]|\\+\\+|--|>>|<<)","name":"keyword.operator.arithmetic.v"},{"match":"(==|!=|[<>]|>=|<=)","name":"keyword.operator.relation.v"},{"match":"((?::?|[-%\\&*+/^|~]|&&|\\|\\||>>|<<)=)","name":"keyword.operator.assignment.v"},{"match":"([\\&^|~]|<(?!<)|>(?!>))","name":"keyword.operator.bitwise.v"},{"match":"(&&|\\|\\||!)","name":"keyword.operator.logical.v"},{"match":"\\?","name":"keyword.operator.optional.v"}]},"punctuation":{"patterns":[{"match":"\\.","name":"punctuation.delimiter.period.dot.v"},{"match":",","name":"punctuation.delimiter.comma.v"},{"match":":","name":"punctuation.separator.key-value.colon.v"},{"match":";","name":"punctuation.definition.other.semicolon.v"},{"match":"\\?","name":"punctuation.definition.other.questionmark.v"},{"match":"#","name":"punctuation.hash.v"}]},"punctuations":{"patterns":[{"match":"\\.","name":"punctuation.accessor.v"},{"match":",","name":"punctuation.separator.comma.v"}]},"storage":{"match":"\\b(const|mut|pub)\\b","name":"storage.modifier.v"},"string-escaped-char":{"patterns":[{"match":"\\\\([0-7]{3}|[\"$'\\\\abfnrtv]|x\\h{2}|u\\h{4}|U\\h{8})","name":"constant.character.escape.v"},{"match":"\\\\[^\"$'0-7Uabfnrtuvx]","name":"invalid.illegal.unknown-escape.v"}]},"string-interpolation":{"captures":{"1":{"patterns":[{"match":"\\$\\d[.\\w]+","name":"invalid.illegal.v"},{"match":"\\$([.\\w]+|\\{.*?})","name":"variable.other.interpolated.v"}]}},"match":"(\\$([.\\w]+|\\{.*?}))","name":"meta.string.interpolation.v"},"string-placeholder":{"match":"%(\\[\\d+])?([- #+0]{0,2}((\\d+|\\*)?(\\.?(\\d+|\\*|(\\[\\d+])\\*?)?(\\[\\d+])?)?))?[%EFGTUXb-gopqstvx]","name":"constant.other.placeholder.v"},"strings":{"patterns":[{"begin":"`","end":"`","name":"string.quoted.rune.v","patterns":[{"include":"#string-escaped-char"},{"include":"#string-interpolation"},{"include":"#string-placeholder"}]},{"begin":"(r)'","beginCaptures":{"1":{"name":"storage.type.string.v"}},"end":"'","name":"string.quoted.raw.v","patterns":[{"include":"#string-interpolation"},{"include":"#string-placeholder"}]},{"begin":"(r)\"","beginCaptures":{"1":{"name":"storage.type.string.v"}},"end":"\"","name":"string.quoted.raw.v","patterns":[{"include":"#string-interpolation"},{"include":"#string-placeholder"}]},{"begin":"(c?)'","beginCaptures":{"1":{"name":"storage.type.string.v"}},"end":"'","name":"string.quoted.v","patterns":[{"include":"#string-escaped-char"},{"include":"#string-interpolation"},{"include":"#string-placeholder"}]},{"begin":"(c?)\"","beginCaptures":{"1":{"name":"storage.type.string.v"}},"end":"\"","name":"string.quoted.v","patterns":[{"include":"#string-escaped-char"},{"include":"#string-interpolation"},{"include":"#string-placeholder"}]}]},"struct":{"patterns":[{"begin":"^\\s*(?:(mut|pub(?:\\s+mut)?|__global)\\s+)?(struct|union)\\s+([.\\w]+)\\s*|(\\{)","beginCaptures":{"1":{"name":"storage.modifier.$1.v"},"2":{"name":"storage.type.struct.v"},"3":{"name":"entity.name.type.v"},"4":{"name":"punctuation.definition.bracket.curly.begin.v"}},"end":"\\s*|(})","endCaptures":{"1":{"name":"punctuation.definition.bracket.curly.end.v"}},"name":"meta.definition.struct.v","patterns":[{"include":"#struct-access-modifier"},{"captures":{"1":{"name":"variable.other.property.v"},"2":{"patterns":[{"include":"#numbers"},{"include":"#brackets"},{"include":"#types"},{"match":"\\w+","name":"storage.type.other.v"}]},"3":{"name":"keyword.operator.assignment.v"},"4":{"patterns":[{"include":"$self"}]}},"match":"\\b(\\w+)\\s+([]\\&*.\\[\\w]+)(?:\\s*(=)\\s*((?:.(?=$|//|/\\*))*+))?"},{"include":"#types"},{"include":"$self"}]},{"captures":{"1":{"name":"storage.modifier.$1.v"},"2":{"name":"storage.type.struct.v"},"3":{"name":"entity.name.struct.v"}},"match":"^\\s*(mut|pub(?:\\s+mut)?|__global)\\s+?(struct)\\s+(?:\\s+([.\\w]+))?","name":"meta.definition.struct.v"}]},"struct-access-modifier":{"captures":{"1":{"name":"storage.modifier.$1.v"},"2":{"name":"punctuation.separator.struct.key-value.v"}},"match":"(?<=\\s|^)(mut|pub(?:\\s+mut)?|__global)(:|\\b)"},"type":{"captures":{"1":{"name":"storage.modifier.$1.v"},"2":{"name":"storage.type.type.v"},"3":{"patterns":[{"include":"#illegal-name"},{"include":"#types"},{"match":"\\w+","name":"entity.name.type.v"}]},"4":{"patterns":[{"include":"#illegal-name"},{"include":"#types"},{"match":"\\w+","name":"entity.name.type.v"}]}},"match":"^\\s*(?:(pub)?\\s+)?(type)\\s+(\\w*)\\s+(?:\\w+\\.+)?(\\w*)","name":"meta.definition.type.v"},"types":{"patterns":[{"match":"(?<!\\.)\\b(i(8|16|nt|64|128)|u(8|16|32|64|128)|f(32|64))\\b","name":"storage.type.numeric.v"},{"match":"(?<!\\.)\\b(bool|byte|byteptr|charptr|voidptr|string|ustring|rune)\\b","name":"storage.type.$1.v"}]},"variable-assign":{"captures":{"0":{"patterns":[{"match":"[A-Z_a-z]\\w*","name":"variable.other.assignment.v"},{"include":"#punctuation"}]}},"match":"[A-Z_a-z]\\w*(?:,\\s*[A-Z_a-z]\\w*)*(?=\\s*:??=)"}},"scopeName":"source.v"}]