[{"displayName":"Luau","fileTypes":["luau"],"name":"luau","patterns":[{"include":"#function-definition"},{"include":"#number"},{"include":"#string"},{"include":"#shebang"},{"include":"#comment"},{"include":"#local-declaration"},{"include":"#const-declaration"},{"include":"#for-loop"},{"include":"#type-function"},{"include":"#type-alias-declaration"},{"include":"#keyword"},{"include":"#language_constant"},{"include":"#standard_library"},{"include":"#generics-instantiation"},{"include":"#identifier"},{"include":"#operator"},{"include":"#parentheses"},{"include":"#table"},{"include":"#type_cast"},{"include":"#type_annotation"},{"include":"#attribute"}],"repository":{"attribute":{"patterns":[{"captures":{"1":{"name":"keyword.operator.attribute.luau"},"2":{"name":"storage.type.attribute.luau"}},"match":"(@)([A-Z_a-z][0-9A-Z_a-z]*)","name":"meta.attribute.luau"}]},"comment":{"patterns":[{"begin":"--\\[(=*)\\[","end":"]\\1]","name":"comment.block.luau","patterns":[{"begin":"(```luau?)\\s*$","beginCaptures":{"1":{"name":"comment.luau"}},"name":"keyword.operator.other.luau","patterns":[{"include":"source.luau"}],"while":"^(?!\\s*```)"},{"captures":{"1":{"name":"comment.luau"}},"match":"(```)","name":"keyword.operator.other.luau"},{"include":"#doc_comment_tags"}]},{"begin":"---","end":"\\n","name":"comment.line.double-dash.documentation.luau","patterns":[{"include":"#doc_comment_tags"}]},{"begin":"--","end":"\\n","name":"comment.line.double-dash.luau"}]},"const-declaration":{"begin":"\\b(const)\\b","beginCaptures":{"1":{"name":"storage.modifier.const.luau"}},"end":"(?=\\s*[;=]|\\s*$)","patterns":[{"include":"#comment"},{"include":"#attribute"},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.luau"}},"end":"(?=\\s*[,;=]|\\s*$)","patterns":[{"include":"#type_literal"}]},{"match":"\\b([A-Z_][0-9A-Z_]*)\\b","name":"variable.other.constant.luau"},{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"variable.other.readwrite.luau"}]},"doc_comment_tags":{"patterns":[{"match":"@\\w+","name":"storage.type.class.luadoc.luau"},{"captures":{"1":{"name":"storage.type.class.luadoc.luau"},"2":{"name":"variable.parameter.luau"}},"match":"((?<=[!*/\\s])[@\\\\]param)\\s+\\b(\\w+)\\b"}]},"for-loop":{"begin":"\\b(for)\\b","beginCaptures":{"1":{"name":"keyword.control.luau"}},"end":"\\b(in)\\b|(=)","endCaptures":{"1":{"name":"keyword.control.luau"},"2":{"name":"keyword.operator.assignment.luau"}},"patterns":[{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.luau"}},"end":"(?=\\s*in\\b|\\s*[,=]|\\s*$)","patterns":[{"include":"#type_literal"}]},{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"variable.parameter.luau"}]},"function-definition":{"begin":"\\b(?:(local)\\s+|(const)\\s+)?(function)\\b(?![,:])","beginCaptures":{"1":{"name":"storage.modifier.local.luau"},"2":{"name":"storage.modifier.const.luau"},"3":{"name":"keyword.control.luau"}},"end":"(?<=[-\\]\"')\\[{}])","name":"meta.function.luau","patterns":[{"include":"#comment"},{"include":"#generics-declaration"},{"begin":"(\\()","beginCaptures":{"1":{"name":"punctuation.definition.parameters.begin.luau"}},"end":"(\\))","endCaptures":{"1":{"name":"punctuation.definition.parameters.end.luau"}},"name":"meta.parameter.luau","patterns":[{"include":"#comment"},{"match":"\\.\\.\\.","name":"variable.parameter.function.varargs.luau"},{"match":"[A-Z_a-z][0-9A-Z_a-z]*","name":"variable.parameter.function.luau"},{"match":",","name":"punctuation.separator.arguments.luau"},{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.luau"}},"end":"(?=[),])","patterns":[{"include":"#type_literal"}]}]},{"match":"\\b(__(?:add|call|concat|div|eq|index|len??|lt|metatable|mode??|mul|newindex|pow|sub|tostring|unm|iter|idiv))\\b","name":"variable.language.metamethod.luau"},{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"entity.name.function.luau"}]},"generics-declaration":{"begin":"(<)","end":"(>)","patterns":[{"match":"[A-Z_a-z][0-9A-Z_a-z]*","name":"entity.name.type.luau"},{"match":"=","name":"keyword.operator.assignment.luau"},{"include":"#type_literal"}]},"generics-instantiation":{"begin":"(<<)","beginCaptures":{"1":{"name":"punctuation.definition.typeparameters.begin.luau"}},"end":"(>>)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.luau"}},"patterns":[{"include":"#comment"},{"include":"#type_literal"}]},"identifier":{"patterns":[{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b(?=\\s*(?:<<|[\"'({]|\\[\\[))","name":"entity.name.function.luau"},{"match":"(?<=[^.]\\.|:)\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"variable.other.property.luau"},{"match":"\\b([A-Z_][0-9A-Z_]*)\\b","name":"variable.other.constant.luau"},{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"variable.other.readwrite.luau"}]},"interpolated_string_expression":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.definition.interpolated-string-expression.begin.luau"}},"contentName":"meta.embedded.line.luau","end":"}","endCaptures":{"0":{"name":"punctuation.definition.interpolated-string-expression.end.luau"}},"name":"meta.template.expression.luau","patterns":[{"include":"source.luau"}]},"keyword":{"patterns":[{"match":"\\b(break|do|else|for|if|elseif|return|then|repeat|while|until|end|in|continue)\\b","name":"keyword.control.luau"},{"match":"\\b(local)\\b","name":"storage.modifier.local.luau"},{"match":"\\b(const)\\b","name":"storage.modifier.const.luau"},{"match":"\\b(function)\\b(?![,:])","name":"keyword.control.luau"},{"match":"(?<![^.]\\.|:)\\b(self)\\b","name":"variable.language.self.luau"},{"match":"\\b(and|or|not)\\b","name":"keyword.operator.logical.luau keyword.operator.wordlike.luau"},{"match":"(?<=[^.]\\.|:)\\b(__(?:add|call|concat|div|eq|index|len??|lt|metatable|mode??|mul|newindex|pow|sub|tostring|unm))\\b","name":"variable.language.metamethod.luau"},{"match":"(?<!\\.)\\.{3}(?!\\.)","name":"keyword.other.unit.luau"}]},"language_constant":{"patterns":[{"match":"(?<![^.]\\.|:)\\b(false)\\b","name":"constant.language.boolean.false.luau"},{"match":"(?<![^.]\\.|:)\\b(true)\\b","name":"constant.language.boolean.true.luau"},{"match":"(?<![^.]\\.|:)\\b(nil(?!:))\\b","name":"constant.language.nil.luau"}]},"local-declaration":{"begin":"\\b(local)\\b","beginCaptures":{"1":{"name":"storage.modifier.local.luau"}},"end":"(?=\\s*do\\b|\\s*[;=]|\\s*$)","patterns":[{"include":"#comment"},{"include":"#attribute"},{"begin":"(:)","beginCaptures":{"1":{"name":"keyword.operator.type.luau"}},"end":"(?=\\s*do\\b|\\s*[,;=]|\\s*$)","patterns":[{"include":"#type_literal"}]},{"match":"\\b([A-Z_][0-9A-Z_]*)\\b","name":"variable.other.constant.luau"},{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"variable.other.readwrite.luau"}]},"number":{"patterns":[{"match":"\\b0_*[Xx]_*[A-F_a-f\\d]*(?:[Ee][-+]?_*\\d[_\\d]*(?:\\.[_\\d]*)?)?","name":"constant.numeric.hex.luau"},{"match":"\\b0_*[Bb][01_]+(?:[Ee][-+]?_*\\d[_\\d]*(?:\\.[_\\d]*)?)?","name":"constant.numeric.binary.luau"},{"match":"(?:\\d[_\\d]*(?:\\.[_\\d]*)?|\\.\\d[_\\d]*)(?:[Ee][-+]?_*\\d[_\\d]*(?:\\.[_\\d]*)?)?","name":"constant.numeric.decimal.luau"}]},"operator":{"patterns":[{"match":"==|~=|!=|<=?|>=?","name":"keyword.operator.comparison.luau"},{"match":"(?:[-+]|//??|[%*^]|\\.\\.|)=","name":"keyword.operator.assignment.luau"},{"match":"[-%*+]|//|[/^]","name":"keyword.operator.arithmetic.luau"},{"match":"#|(?<!\\.)\\.{2}(?!\\.)","name":"keyword.operator.other.luau"}]},"parentheses":{"begin":"(\\()","beginCaptures":{"1":{"name":"punctuation.arguments.begin.luau"}},"end":"(\\))","endCaptures":{"1":{"name":"punctuation.arguments.end.luau"}},"patterns":[{"match":",","name":"punctuation.separator.arguments.luau"},{"include":"source.luau"}]},"shebang":{"captures":{"1":{"name":"punctuation.definition.comment.luau"}},"match":"\\A(#!).*$\\n?","name":"comment.line.shebang.luau"},"standard_library":{"patterns":[{"match":"(?<![^.]\\.|:)\\b(assert|collectgarbage|error|gcinfo|getfenv|getmetatable|ipairs|loadstring|newproxy|next|pairs|pcall|print|rawequal|rawset|require|select|setfenv|setmetatable|tonumber|tostring|type|typeof|unpack|xpcall)\\b","name":"support.function.luau"},{"match":"(?<![^.]\\.|:)\\b(_(?:G|VERSION))\\b","name":"constant.language.luau"},{"match":"(?<![^.]\\.|:)\\b(bit32\\.(?:arshift|band|bnot|bor|btest|bxor|extract|lrotate|lshift|replace|rrotate|rshift|countlz|countrz|byteswap)|coroutine\\.(?:create|isyieldable|resume|running|status|wrap|yield|close)|debug\\.(?:info|loadmodule|profilebegin|profileend|traceback)|math\\.(?:abs|acos|asin|atan2??|ceil|clamp|cosh??|deg|exp|floor|fmod|frexp|ldexp|log|log10|max|min|modf|noise|pow|rad|random|randomseed|round|sign|sinh??|sqrt|tanh??)|os\\.(?:clock|date|difftime|time)|string\\.(?:byte|char|find|format|gmatch|gsub|len|lower|match|pack|packsize|rep|reverse|split|sub|unpack|upper)|table\\.(?:concat|create|find|foreachi??|getn|insert|maxn|move|pack|remove|sort|unpack|clear|freeze|isfrozen|clone)|task\\.(?:spawn|synchronize|desynchronize|wait|defer|delay)|utf8\\.(?:char|codepoint|codes|graphemes|len|nfcnormalize|nfdnormalize|offset)|buffer\\.(?:create|fromstring|tostring|len|readi8|readu8|readi16|readu16|readi32|readu32|readf32|readf64|writei8|writeu8|writei16|writeu16|writei32|writeu32|writef32|writef64|readstring|writestring|copy|fill)|vector\\.(?:abs|angle|ceil|clamp|create|cross|dot|floor|lerp|magnitude|max|min|normalize|sign))\\b","name":"support.function.luau"},{"match":"(?<![^.]\\.|:)\\b(bit32|buffer|coroutine|debug|math(\\.(huge|pi))?|os|string|table|task|utf8(\\.charpattern)?|vector(\\.(one|zero))?)\\b","name":"support.constant.luau"},{"match":"(?<![^.]\\.|:)\\b(delay|DebuggerManager|elapsedTime|PluginManager|printidentity|settings|spawn|stats|tick|time|UserSettings|version|wait|warn)\\b","name":"support.function.luau"},{"match":"(?<![^.]\\.|:)\\b(game|plugin|shared|script|workspace|Enum(?:\\.\\w+){0,2})\\b","name":"constant.language.luau"}]},"string":{"patterns":[{"begin":"\"","end":"\"","name":"string.quoted.double.luau","patterns":[{"include":"#string_escape"}]},{"begin":"'","end":"'","name":"string.quoted.single.luau","patterns":[{"include":"#string_escape"}]},{"begin":"\\[(=*)\\[","end":"]\\1]","name":"string.other.multiline.luau"},{"begin":"`","end":"`","name":"string.interpolated.luau","patterns":[{"include":"#interpolated_string_expression"},{"include":"#string_escape"}]}]},"string_escape":{"patterns":[{"match":"\\\\[\"'\\\\`abfnrtvz{]","name":"constant.character.escape.luau"},{"match":"\\\\\\d{1,3}","name":"constant.character.escape.luau"},{"match":"\\\\x\\h{2}","name":"constant.character.escape.luau"},{"match":"\\\\u\\{\\h*}","name":"constant.character.escape.luau"},{"match":"\\\\$","name":"constant.character.escape.luau"}]},"table":{"begin":"(\\{)","beginCaptures":{"1":{"name":"punctuation.table.begin.luau"}},"end":"(})","endCaptures":{"1":{"name":"punctuation.table.end.luau"}},"patterns":[{"match":"[,;]","name":"punctuation.separator.fields.luau"},{"include":"source.luau"}]},"type-alias-declaration":{"begin":"(?<![^.]\\.|:)\\b(?:(export)\\s+)?(type)\\b(?=\\s+(?!function\\b)[A-Z_a-z][0-9A-Z_a-z]*)","beginCaptures":{"1":{"name":"storage.modifier.visibility.luau"},"2":{"name":"storage.type.luau"}},"end":"(?=[]),}](?!\\s*[\\&|]))|(?=\\s*;)|(?=\\s*\\b(?:break|const|continue|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while)\\b)|(?=^\\s*$)|(?=^\\s*(?:@|\\b(?:export\\s+)?type\\b))|(?=^\\s*[A-Z_a-z][0-9A-Z_a-z]*(?:\\.[A-Z_a-z][0-9A-Z_a-z]*)*\\s*(?:(?:[-%*+/^]|\\.\\.)?=(?!=)|[(:\\[]))","patterns":[{"include":"#type_literal"},{"match":"=","name":"keyword.operator.assignment.luau"}]},"type-function":{"begin":"(?<![^.]\\.|:)\\b(?:(export)\\s+)?(type)\\s+(function)\\b","beginCaptures":{"1":{"name":"storage.modifier.visibility.luau"},"2":{"name":"storage.type.luau"},"3":{"name":"keyword.control.luau"}},"end":"(?<=[-\\]\"')\\[{}])","name":"meta.function.luau","patterns":[{"include":"#comment"},{"include":"#generics-declaration"},{"begin":"(\\()","beginCaptures":{"1":{"name":"punctuation.definition.parameters.begin.luau"}},"end":"(\\))","endCaptures":{"1":{"name":"punctuation.definition.parameters.end.luau"}},"name":"meta.parameter.luau","patterns":[{"include":"#comment"},{"match":"\\.\\.\\.","name":"variable.parameter.function.varargs.luau"},{"match":"[A-Z_a-z][0-9A-Z_a-z]*","name":"variable.parameter.function.luau"},{"match":",","name":"punctuation.separator.arguments.luau"},{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.luau"}},"end":"(?=[),])","patterns":[{"include":"#type_literal"}]}]},{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"entity.name.type.luau"}]},"type_annotation":{"begin":":(?!\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b(?=\\s*(?:<<|[\"'({]|\\[\\[)))","end":"(?<=\\))(?!\\s*->)|[;=]|$|(?=\\breturn\\b)|(?=\\bend\\b)","patterns":[{"include":"#comment"},{"include":"#type_literal"}]},"type_cast":{"begin":"(::)","beginCaptures":{"1":{"name":"keyword.operator.typecast.luau"}},"end":"(?=[]),}](?!\\s*[\\&|]))|(?=\\s*;)|(?=\\s*\\b(?:break|const|continue|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while)\\b)|(?=^\\s*$)|(?=^\\s*(?:@|\\b(?:export\\s+)?type\\b))|(?=^\\s*[A-Z_a-z][0-9A-Z_a-z]*(?:\\.[A-Z_a-z][0-9A-Z_a-z]*)*\\s*(?:(?:[-%*+/^]|\\.\\.)?=(?!=)|[(:\\[]))","patterns":[{"include":"#type_literal"}]},"type_literal":{"patterns":[{"include":"#comment"},{"include":"#string"},{"match":"[\\&?|]","name":"keyword.operator.type.luau"},{"match":"->","name":"keyword.operator.type.function.luau"},{"match":"\\b(false)\\b","name":"constant.language.boolean.false.luau"},{"match":"\\b(true)\\b","name":"constant.language.boolean.true.luau"},{"match":"\\b(nil|string|number|boolean|thread|userdata|symbol|vector|buffer|unknown|never|any)\\b","name":"support.type.primitive.luau"},{"begin":"\\b(typeof)\\b(\\()","beginCaptures":{"1":{"name":"support.function.luau"},"2":{"name":"punctuation.arguments.begin.typeof.luau"}},"end":"(\\))","endCaptures":{"1":{"name":"punctuation.arguments.end.typeof.luau"}},"patterns":[{"include":"source.luau"}]},{"begin":"(<)","beginCaptures":{"1":{"name":"punctuation.definition.typeparameters.begin.luau"}},"end":"(>)","endCaptures":{"1":{"name":"punctuation.definition.typeparameters.end.luau"}},"patterns":[{"match":"=","name":"keyword.operator.assignment.luau"},{"include":"#type_literal"}]},{"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b","name":"entity.name.type.luau"},{"begin":"\\{","end":"}","patterns":[{"begin":"\\[","end":"]","patterns":[{"include":"#type_literal"}]},{"captures":{"1":{"name":"storage.modifier.access.luau"},"2":{"name":"variable.property.luau"},"3":{"name":"keyword.operator.type.luau"}},"match":"\\b(?:(read|write)\\s+)?([A-Z_a-z][0-9A-Z_a-z]*)\\b(:)"},{"include":"#type_literal"},{"match":"[,;]","name":"punctuation.separator.fields.type.luau"}]},{"begin":"\\(","end":"\\)","patterns":[{"captures":{"1":{"name":"variable.parameter.luau"},"2":{"name":"keyword.operator.type.luau"}},"match":"\\b([A-Z_a-z][0-9A-Z_a-z]*)\\b(:)","name":"variable.parameter.luau"},{"include":"#type_literal"}]}]}},"scopeName":"source.luau"}]