{"name":"Swift","scopeName":"source.mo","patterns":[{"include":"#shebang-line"},{"include":"#comment"},{"include":"#attribute"},{"include":"#literal"},{"include":"#operator"},{"include":"#declaration"},{"include":"#storage-type"},{"include":"#keyword"},{"include":"#type"},{"include":"#boolean"}],"repository":{"access-level-modifier":{"name":"keyword.other.access-level-modifier.swift","match":"\\b(open|public|internal|fileprivate|private)\\b(?:\\(set\\))?"},"arithmetic-operator":{"name":"keyword.operator.arithmetic.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\\+|\\-|\\*|\\/)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"array-type":{"name":"meta.array.swift","begin":"\\b(Array)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.array.swift"},"2":{"name":"punctuation.array.begin.swift"}},"endCaptures":{"1":{"name":"punctuation.array.end.swift"}}},"assignment-operator":{"name":"keyword.operator.assignment.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\\+|\\-|\\*|\\/|%|\u003c\u003c|\u003e\u003e|\u0026|\\^|\\||\u0026\u0026|\\|\\|)?=(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"attribute":{"name":"meta.attribute.swift","patterns":[{"contentName":"meta.attribute.arguments.swift","begin":"((@)(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B))(\\()","end":"\\)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"storage.modifier.attribute.swift"},"2":{"name":"punctuation.definition.attribute.swift"},"3":{"name":"punctuation.definition.attribute-arguments.begin.swift"}},"endCaptures":{"0":{"name":"punctuation.definition.attribute-arguments.end.swift"}}},{"match":"((@)(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B))","captures":{"1":{"name":"storage.modifier.attribute.swift"},"2":{"name":"punctuation.definition.attribute.swift"}}}]},"bitwise-operator":{"name":"keyword.operator.bitwise.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\u0026|\\||\\^|\u003c\u003c|\u003e\u003e)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"block-comment":{"name":"comment.block.swift","begin":"/\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.block.begin.swift"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.block.end.swift"}}},"boolean":{"name":"keyword.constant.boolean.swift","match":"\\b(true|false)\\b"},"branch-statement-keyword":{"name":"keyword.control.branch.swift","patterns":[{"include":"#if-statement-keyword"},{"include":"#switch-statement-keyword"}]},"catch-statement-keyword":{"name":"kewyord.control.catch.swift","match":"\\b(catch|do)\\b"},"code-block":{"begin":"(\\{)","end":"(\\})","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.code-block.begin.swift"}},"endCaptures":{"1":{"name":"punctuation.definition.code-block.end.swift"}}},"collection-type":{"patterns":[{"include":"#array-type"},{"include":"#dictionary-type"},{"name":"support.type.swift","match":"\\b(Array|Dictionary)\\b"}]},"comment":{"patterns":[{"include":"#documentation-comment"},{"include":"#block-comment"},{"include":"#in-line-comment"}]},"comparative-operator":{"name":"keyword.operator.comparative.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])((=|!)==?|(\u003c|\u003e)=?|~=)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"control-transfer-statement-keyword":{"name":"keyword.control.transfer.swift","match":"\\b(continue|break|fallthrough|return)\\b"},"custom-operator":{"patterns":[{"name":"keyword.operator.custom.prefix.unary.swift","match":"(?\u003c=[\\s(\\[{,;:])([/=\\-+!*%\u003c\u003e\u0026|\\^~.]++)(?![\\s)\\]},;:])"},{"name":"keyword.operator.custom.postfix.unary.swift","match":"(?\u003c![\\s(\\[{,;:])([/=\\-+!*%\u003c\u003e\u0026|\\^~.]++)(?![\\s)\\]},;:\\.])"},{"name":"keyword.operator.custom.binary.swift","match":"(?\u003c=[\\s(\\[{,;:])([/=\\-+!*%\u003c\u003e\u0026|\\^~.]++)(?=[\\s)\\]},;:])"}]},"declaration":{"name":"meta.declaration.swift","patterns":[{"include":"#import-declaration"},{"include":"#function-declaration"}]},"declaration-modifier":{"name":"keyword.other.declaration-modifier.swift","match":"\\b(class|object|type|shared|convenience|dynamic|final|lazy|(non)?mutating|optional|override|required|static|unowned((un)?safe)?|weak)\\b"},"dictionary-type":{"name":"meta.dictionary.swift","begin":"\\b(Dictionary)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.dictionary.swift"},"2":{"name":"punctuation.dictionary.begin.swift"}},"endCaptures":{"1":{"name":"punctuation.dictionary.end.swift"}}},"documentation-comment":{"name":"comment.block.documentation.swift","begin":"/\\*\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.block.documentation.begin.swift"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.block.documentation.end.swift"}}},"floating-point-literal":{"name":"constant.numeric.floating-point.swift","patterns":[{"match":"\\b([0-9][0-9_]*)(\\.([0-9][0-9_]*))?([eE][+\\-]?([0-9][0-9_]*))?\\b"},{"match":"\\b(0x[[:xdigit:]][[[:xdigit:]]_]*)(\\.(0x[[:xdigit:]][[[:xdigit:]]_]*))?([pP][+\\-]?(0x[[:xdigit:]][[[:xdigit:]]_]*))\\b"}]},"function-body":{"name":"meta.function-body.swift","patterns":[{"include":"#code-block"}]},"function-declaration":{"name":"meta.function-declaration.swift","begin":"\\b(func)\\s+(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B|[/=\\-+!*%\u003c\u003e\u0026|\\^~.]+)\\s*(?=\\(|\u003c)","end":"(?\u003c=\\})","patterns":[{"include":"#generic-parameter-clause"},{"include":"#parameter-clause"},{"include":"#function-result"},{"include":"#function-body"}],"beginCaptures":{"1":{"name":"storage.type.function.swift"},"2":{"name":"entity.type.function.swift"}}},"function-result":{"name":"meta.function-result.swift","begin":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\\-\u003e)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])\\s*","end":"\\s*(?=\\{)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.operator.function-result.swift"}}},"generic-parameter-clause":{"name":"meta.generic-parameter-clause.swift","begin":"(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.generic-parameter-clause.begin.swift"}},"endCaptures":{"1":{"name":"punctuation.definition.generic-parameter-clause.end.swift"}}},"identifier":{"name":"meta.identifier.swift","match":"(\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B)"},"if-statement-keyword":{"name":"keyword.control.if.swift","match":"\\b(if|else)\\b"},"import-declaration":{"name":"meta.import.swift","match":"\\b(import)\\s+(?:(class|var|func)\\s+)?((?:\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B|[/=\\-+!*%\u003c\u003e\u0026|\\^~.]+)(?:\\.(?:\\B\\$[0-9]+|\\b[\\w^\\d][\\w\\d]*\\b|\\B`[\\w^\\d][\\w\\d]*`\\B|[/=\\-+!*%\u003c\u003e\u0026|\\^~.]+))*)","captures":{"1":{"name":"keyword.other.import.swift"},"2":{"name":"storage.modifier.swift"},"3":{"name":"support.type.module.import.swift"}}},"in-line-comment":{"name":"comment.line.double-slash.swift","match":"(//).*","captures":{"1":{"name":"punctuation.definition.comment.line.double-slash.swift"}}},"increment-decrement-operator":{"name":"keyword.operator.increment-or-decrement.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(\\+\\+|\\-\\-)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"integer-literal":{"name":"constant.numeric.integer.swift","patterns":[{"name":"constant.numeric.integer.binary.swift","match":"(\\B\\-|\\b)(0b[01][01_]*)\\b"},{"name":"constant.numeric.integer.octal.swift","match":"(\\B\\-|\\b)(0o[0-7][0-7_]*)\\b"},{"name":"constant.numeric.integer.decimal.swift","match":"(\\B\\-|\\b)([0-9][0-9_]*)\\b"},{"name":"constant.numeric.integer.hexadecimal.swift","match":"(\\B\\-|\\b)(0x[[:xdigit:]][[[:xdigit:]]_]*)\\b"}]},"integer-type":{"name":"support.type.swift","match":"\\bU?Int(8|16|32|64)?\\b"},"keyword":{"patterns":[{"include":"#branch-statement-keyword"},{"include":"#control-transfer-statement-keyword"},{"include":"#loop-statement-keyword"},{"include":"#catch-statement-keyword"},{"include":"#operator-declaration-modifier"},{"include":"#declaration-modifier"},{"include":"#access-level-modifier"},{"name":"keyword.declaration.swift","match":"\\b(async|actor|and|class|func|import|let|module|not|or)\\b"},{"name":"keyword.statement.swift","match":"\\b(assert|async|await|break|case|continue|default|debug|debug_show|else|if|in|for|return|switch|while|loop|try|throw|query)\\b"},{"name":"keyword.other.swift","match":"\\b(associativity|didSet|get|infix|inout|left|mutating|none|nonmutating|operator|override|postfix|precedence|prefix|right|set|unowned((un)?safe)?|weak|willSet)\\b"}]},"literal":{"patterns":[{"include":"#integer-literal"},{"include":"#floating-point-literal"},{"include":"#nil-literal"},{"include":"#string-literal"},{"include":"#special-literal"}]},"logical-operator":{"name":"keyword.operator.logical.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])(!|\u0026\u0026|\\|\\|)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"loop-statement-keyword":{"name":"keyword.control.loop.swift","match":"\\b(while|repeat|for|in|loop)\\b"},"nil-literal":{"name":"constant.nil.swift","match":"\\bnil\\b"},"operator":{"patterns":[{"include":"#comparative-operator"},{"include":"#assignment-operator"},{"include":"#logical-operator"},{"include":"#remainder-operator"},{"include":"#increment-decrement-operator"},{"include":"#overflow-operator"},{"include":"#range-operator"},{"include":"#bitwise-operator"},{"include":"#arithmetic-operator"},{"include":"#ternary-operator"},{"include":"#type-casting-operator"},{"include":"#custom-operator"}]},"operator-declaration-modifier":{"name":"keyword.other.operator.swift","match":"\\b(operator|prefix|infix|postfix)\\b"},"optional-type":{"name":"meta.optional.swift","match":"\\b(Optional)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.optional.swift"},"2":{"name":"punctuation.optional.begin.swift"}},"endCaptures":{"1":{"name":"punctuation.optional.end.swift"}}},"overflow-operator":{"name":"keyword.operator.overflow.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])\\\u0026(\\+|\\-|\\*|\\/|%)(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"parameter-clause":{"name":"meta.parameter-clause.swift","begin":"(\\()","end":"(\\))","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.function-arguments.begin.swift"}},"endCaptures":{"1":{"name":"punctuation.definition.function-arguments.end.swift"}}},"primitive-type":{"name":"support.type.swift","match":"\\b[A-Z].*?\\b"},"protocol-composition-type":{"name":"meta.protocol.swift","match":"\\b(protocol)(\u003c)","end":"(\u003e)","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"support.type.protocol.swift"},"2":{"name":"punctuation.protocol.begin.swift"}},"endCaptures":{"1":{"name":"punctuation.protocol.end.swift"}}},"range-operator":{"name":"keyword.operator.range.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])\\.\\.(?:\\.)?(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"remainder-operator":{"name":"keyword.operator.remainder.swift","match":"(?\u003c![/=\\-+!*%\u003c\u003e\u0026|\\^~.])\\%(?![/=\\-+!*%\u003c\u003e\u0026|\\^~.])"},"shebang-line":{"name":"comment.line.shebang.swift","match":"^(#!).*$","captures":{"1":{"name":"punctuation.definition.comment.line.shebang.swift"}}},"special-literal":{"name":"keyword.other.literal.swift","match":"\\b__(FILE|LINE|COLUMN|FUNCTION)__\\b"},"storage-type":{"name":"storage.type.swift","match":"\\b(var|func|let|class|enum)\\b"},"string-literal":{"name":"meta.literal.string.swift","begin":"\\\"","end":"\\\"","patterns":[{"name":"constant.character.escape.swift","match":"\\\\([0tnr\\\"\\'\\\\]|x[[:xdigit:]]{2}|u[[:xdigit:]]{4}|U[[:xdigit:]]{8})"},{"contentName":"meta.expression.swift","begin":"(\\\\\\()","end":"(\\))","patterns":[{"include":"source.swift"}],"beginCaptures":{"1":{"name":"support.punctuation.expression.begin.swift"}},"endCaptures":{"1":{"name":"support.punctuation.expression.end.swift"}}},{"name":"invalid.illegal.swift","match":"(\\\"|\\\\)"},{"name":"string.quoted.double.swift","match":"(.)"}],"beginCaptures":{"0":{"name":"string.quoted.double.swift"}},"endCaptures":{"0":{"name":"string.quoted.double.swift"}}},"switch-statement-keyword":{"name":"keyword.control.switch.swift","match":"\\b(switch|case|default|where)\\b"},"ternary-operator":{"name":"keyword.operator.ternary.swift","match":"(?\u003c=[\\s(\\[{,;:])(\\?|:)(?=[\\s)\\]},;:])"},"type":{"patterns":[{"include":"#primitive-type"},{"include":"#integer-type"},{"include":"#collection-type"},{"include":"#optional-type"},{"include":"#protocol-composition-type"}]},"type-casting-operator":{"name":"keyword.operator.type-casting.swift","match":"\\b(is\\b|as(\\?\\B|\\b))"}}}