// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mit`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.swift'], names: ['swift'], patterns: [{include: '#root'}], repository: { 'async-throws': { captures: { 1: {name: 'invalid.illegal.await-must-precede-throws.swift'}, 2: {name: 'storage.modifier.exception.swift'}, 3: {name: 'storage.modifier.async.swift'} }, match: '\\b(?:(throws\\s+async|rethrows\\s+async)|(throws|rethrows)|(async))\\b' }, attributes: { patterns: [ { begin: '((@)available)(\\()', beginCaptures: { 1: {name: 'storage.modifier.attribute.swift'}, 2: {name: 'punctuation.definition.attribute.swift'}, 3: {name: 'punctuation.definition.arguments.begin.swift'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.arguments.end.swift'} }, name: 'meta.attribute.available.swift', patterns: [ { captures: { 1: {name: 'keyword.other.platform.os.swift'}, 2: {name: 'constant.numeric.swift'} }, match: '\\b(swift|(?:iOS|macOS|OSX|watchOS|tvOS|visionOS|UIKitForMac)(?:ApplicationExtension)?)\\b(?:\\s+([0-9]+(?:\\.[0-9]+)*\\b))?' }, { begin: '\\b(introduced|deprecated|obsoleted)\\s*(:)\\s*', beginCaptures: { 1: {name: 'keyword.other.swift'}, 2: {name: 'punctuation.separator.key-value.swift'} }, end: '(?!\\G)', patterns: [ { match: '\\b[0-9]+(?:\\.[0-9]+)*\\b', name: 'constant.numeric.swift' } ] }, { begin: '\\b(message|renamed)\\s*(:)\\s*(?=")', beginCaptures: { 1: {name: 'keyword.other.swift'}, 2: {name: 'punctuation.separator.key-value.swift'} }, end: '(?!\\G)', patterns: [{include: '#literals'}] }, { captures: { 1: {name: 'keyword.other.platform.all.swift'}, 2: {name: 'keyword.other.swift'}, 3: {name: 'invalid.illegal.character-not-allowed-here.swift'} }, match: '(?:(\\*)|\\b(deprecated|unavailable|noasync)\\b)\\s*(.*?)(?=[,)])' } ] }, { begin: '((@)objc)(\\()', beginCaptures: { 1: {name: 'storage.modifier.attribute.swift'}, 2: {name: 'punctuation.definition.attribute.swift'}, 3: {name: 'punctuation.definition.arguments.begin.swift'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.arguments.end.swift'} }, name: 'meta.attribute.objc.swift', patterns: [ { captures: { 1: { name: 'invalid.illegal.missing-colon-after-selector-piece.swift' } }, match: '\\w*(?::(?:\\w*:)*(\\w*))?', name: 'entity.name.function.swift' } ] }, { begin: '(@)(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)', beginCaptures: { 0: {name: 'storage.modifier.attribute.swift'}, 1: {name: 'punctuation.definition.attribute.swift'}, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'} }, end: '(?!\\G\\()', name: 'meta.attribute.swift', patterns: [ { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.definition.arguments.begin.swift'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.arguments.end.swift'} }, name: 'meta.arguments.attribute.swift', patterns: [{include: '#expressions'}] } ] } ] }, 'builtin-functions': { patterns: [ { match: '(?<=\\.)(?:s(?:ort(?:ed)?|plit)|contains|index|partition|f(?:i(?:lter|rst)|orEach|latMap)|with(?:MutableCharacters|CString|U(?:nsafe(?:Mutable(?:BufferPointer|Pointer(?:s|To(?:Header|Elements)))|BufferPointer)|TF8Buffer))|m(?:in|a(?:p|x)))(?=\\s*[({])\\b', name: 'support.function.swift' }, { match: '(?<=\\.)(?:s(?:ymmetricDifference|t(?:oreBytes|arts|ride)|ortInPlace|u(?:ccessor|ffix|btract(?:ing|InPlace|WithOverflow)?)|quareRoot|amePosition)|h(?:oldsUnique(?:Reference|OrPinnedReference)|as(?:Suffix|Prefix))|ne(?:gate(?:d)?|xt)|c(?:o(?:untByEnumerating|py(?:Bytes)?)|lamp(?:ed)?|reate)|t(?:o(?:IntMax|Opaque|UIntMax)|ake(?:RetainedValue|UnretainedValue)|r(?:uncatingRemainder|a(?:nscodedLength|ilSurrogate)))|i(?:s(?:MutableAndUniquelyReferenced(?:OrPinned)?|S(?:trictSu(?:perset(?:Of)?|bset(?:Of)?)|u(?:perset(?:Of)?|bset(?:Of)?))|Continuation|T(?:otallyOrdered|railSurrogate)|Disjoint(?:With)?|Unique(?:Reference|lyReferenced(?:OrPinned)?)|Equal|Le(?:ss(?:ThanOrEqualTo)?|adSurrogate))|n(?:sert(?:ContentsOf)?|tersect(?:ion|InPlace)?|itialize(?:Memory|From)?|dex(?:Of|ForKey)))|o(?:verlaps|bjectAt)|d(?:i(?:stance(?:To)?|vide(?:d|WithOverflow)?)|e(?:s(?:cendant|troy)|code(?:CString)?|initialize|alloc(?:ate(?:Capacity)?)?)|rop(?:First|Last))|u(?:n(?:ion(?:InPlace)?|derestimateCount|wrappedOrError)|p(?:date(?:Value)?|percased))|join(?:ed|WithSeparator)|p(?:op(?:First|Last)|ass(?:Retained|Unretained)|re(?:decessor|fix))|e(?:scape(?:d)?|n(?:code|umerate(?:d)?)|lementsEqual|xclusiveOr(?:InPlace)?)|f(?:orm(?:Remainder|S(?:ymmetricDifference|quareRoot)|TruncatingRemainder|In(?:tersection|dex)|Union)|latten|rom(?:CString(?:RepairingIllFormedUTF8)?|Opaque))|w(?:i(?:thMemoryRebound|dth)|rite(?:To)?)|l(?:o(?:wercased|ad)|e(?:adSurrogate|xicographical(?:Compare|lyPrecedes)))|a(?:ss(?:ign(?:BackwardFrom|From)?|umingMemoryBound)|d(?:d(?:ing(?:Product)?|Product|WithOverflow)?|vanced(?:By)?)|utorelease|ppend(?:ContentsOf)?|lloc(?:ate)?|bs)|r(?:ound(?:ed)?|e(?:serveCapacity|tain|duce|place(?:Range|Subrange)?|verse(?:d)?|quest(?:NativeBuffer|UniqueMutableBackingBuffer)|lease|m(?:ove(?:Range|Subrange|Value(?:ForKey)?|First|Last|A(?:tIndex|ll))?|ainder(?:WithOverflow)?)))|ge(?:nerate|t(?:Objects|Element))|m(?:in(?:imum(?:Magnitude)?|Element)|ove(?:Initialize(?:Memory|BackwardFrom|From)?|Assign(?:From)?)?|ultipl(?:y(?:WithOverflow)?|ied)|easure|a(?:ke(?:Iterator|Description)|x(?:imum(?:Magnitude)?|Element)))|bindMemory)(?=\\s*\\()', name: 'support.function.swift' }, { match: '(?<=\\.)(?:s(?:uperclassMirror|amePositionIn|tartsWith)|nextObject|c(?:haracterAtIndex|o(?:untByEnumeratingWithState|pyWithZone)|ustom(?:Mirror|PlaygroundQuickLook))|is(?:EmptyInput|ASCII)|object(?:Enumerator|ForKey|AtIndex)|join|put|keyEnumerator|withUnsafeMutablePointerToValue|length|getMirror|m(?:oveInitializeAssignFrom|ember))(?=\\s*\\()', name: 'support.function.swift' } ] }, 'builtin-global-functions': { patterns: [ { begin: '\\b(type)(\\()\\s*(of)(:)', beginCaptures: { 1: {name: 'support.function.dynamic-type.swift'}, 2: {name: 'punctuation.definition.arguments.begin.swift'}, 3: {name: 'support.variable.parameter.swift'}, 4: {name: 'punctuation.separator.argument-label.begin.swift'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.arguments.end.swift'} }, patterns: [{include: '#expressions'}] }, { match: '\\b(?:anyGenerator|autoreleasepool)(?=\\s*[({])\\b', name: 'support.function.swift' }, { match: '\\b(?:s(?:tride(?:of(?:Value)?)?|izeof(?:Value)?|equence|wap)|numericCast|transcode|is(?:UniquelyReferenced(?:NonObjC)?|KnownUniquelyReferenced)|zip|d(?:ump|ebugPrint)|unsafe(?:BitCast|Downcast|Unwrap|Address(?:Of)?)|pr(?:int|econdition(?:Failure)?)|fatalError|with(?:Unsafe(?:MutablePointer|Pointer)|ExtendedLifetime|VaList)|a(?:ssert(?:ionFailure)?|lignof(?:Value)?|bs)|re(?:peatElement|adLine)|getVaList|m(?:in|ax))(?=\\s*\\()', name: 'support.function.swift' }, { match: '\\b(?:s(?:ort|uffix|pli(?:ce|t))|insert|overlaps|d(?:istance|rop(?:First|Last))|join|prefix|extend|withUnsafe(?:MutablePointers|Pointers)|lazy|advance|re(?:flect|move(?:Range|Last|A(?:tIndex|ll))))(?=\\s*\\()', name: 'support.function.swift' } ] }, 'builtin-properties': { patterns: [ { match: '(?<=^Process\\.|\\WProcess\\.|^CommandLine\\.|\\WCommandLine\\.)(arguments|argc|unsafeArgv)', name: 'support.variable.swift' }, { match: '(?<=\\.)(?:s(?:t(?:artIndex|ri(?:ngValue|de))|i(?:ze|gn(?:BitIndex|ificand(?:Bit(?:Count|Pattern)|Width)?|alingNaN)?)|u(?:perclassMirror|mmary|bscriptBaseAddress))|h(?:eader|as(?:hValue|PointerRepresentation))|n(?:ulTerminatedUTF8|ext(?:Down|Up)|a(?:n|tiveOwner))|c(?:haracters|ount(?:TrailingZeros)?|ustom(?:Mirror|PlaygroundQuickLook)|apacity)|i(?:s(?:S(?:ign(?:Minus|aling(?:NaN)?)|ubnormal)|N(?:ormal|aN)|Canonical|Infinite|Zero|Empty|Finite|ASCII)|n(?:dices|finity)|dentity)|owner|de(?:scription|bugDescription)|u(?:n(?:safelyUnwrapped|icodeScalar(?:s)?|derestimatedCount)|tf(?:16|8(?:Start|C(?:String|odeUnitCount))?)|intValue|ppercaseString|lp(?:OfOne)?)|p(?:i|ointee)|e(?:ndIndex|lements|xponent(?:Bit(?:Count|Pattern))?)|value(?:s)?|keys|quietNaN|f(?:irst(?:ElementAddress(?:IfContiguous)?)?|loatingPointClass)|l(?:ittleEndian|owercaseString|eastNo(?:nzeroMagnitude|rmalMagnitude)|a(?:st|zy))|a(?:l(?:ignment|l(?:ocatedElementCount|Zeros))|rray(?:PropertyIsNativeTypeChecked)?)|ra(?:dix|wValue)|greatestFiniteMagnitude|m(?:in|emory|ax)|b(?:yteS(?:ize|wapped)|i(?:nade|tPattern|gEndian)|uffer|ase(?:Address)?))\\b', name: 'support.variable.swift' }, { match: '(?<=\\.)(?:boolValue|disposition|end|objectIdentifier|quickLookObject|start|valueType)\\b', name: 'support.variable.swift' }, { match: '(?<=\\.)(?:s(?:calarValue|i(?:ze|gnalingNaN)|o(?:und|me)|uppressed|prite|et)|n(?:one|egative(?:Subnormal|Normal|Infinity|Zero))|c(?:ol(?:or|lection)|ustomized)|t(?:o(?:NearestOr(?:Even|AwayFromZero)|wardZero)|uple|ext)|i(?:nt|mage)|optional|d(?:ictionary|o(?:uble|wn))|u(?:Int|p|rl)|p(?:o(?:sitive(?:Subnormal|Normal|Infinity|Zero)|int)|lus)|e(?:rror|mptyInput)|view|quietNaN|float|a(?:ttributedString|wayFromZero)|r(?:ectangle|ange)|generated|minus|b(?:ool|ezierPath))\\b', name: 'support.variable.swift' } ] }, 'builtin-types': { patterns: [ {include: '#builtin-types-builtin-class-type'}, {include: '#builtin-types-builtin-enum-type'}, {include: '#builtin-types-builtin-protocol-type'}, {include: '#builtin-types-builtin-struct-type'}, {include: '#builtin-types-builtin-typealias'}, {match: '\\bAny\\b', name: 'support.type.any.swift'} ] }, 'builtin-types-builtin-class-type': { match: '\\b(Managed(Buffer|ProtoBuffer)|NonObjectiveCBase|AnyGenerator)\\b', name: 'support.class.swift' }, 'builtin-types-builtin-enum-type': { patterns: [ { match: '\\b(?:CommandLine|Process(?=\\.))\\b', name: 'support.constant.swift' }, {match: '\\bNever\\b', name: 'support.constant.never.swift'}, { match: '\\b(?:ImplicitlyUnwrappedOptional|Representation|MemoryLayout|FloatingPointClassification|SetIndexRepresentation|SetIteratorRepresentation|FloatingPointRoundingRule|UnicodeDecodingResult|Optional|DictionaryIndexRepresentation|AncestorRepresentation|DisplayStyle|PlaygroundQuickLook|Never|FloatingPointSign|Bit|DictionaryIteratorRepresentation)\\b', name: 'support.type.swift' }, { match: '\\b(?:MirrorDisposition|QuickLookObject)\\b', name: 'support.type.swift' } ] }, 'builtin-types-builtin-protocol-type': { patterns: [ { match: '\\b(?:Ra(?:n(?:domAccess(?:Collection|Indexable)|geReplaceable(?:Collection|Indexable))|wRepresentable)|M(?:irrorPath|utable(?:Collection|Indexable))|Bi(?:naryFloatingPoint|twiseOperations|directional(?:Collection|Indexable))|S(?:tr(?:ideable|eamable)|igned(?:Number|Integer)|e(?:tAlgebra|quence))|Hashable|C(?:o(?:llection|mparable)|ustom(?:Reflectable|StringConvertible|DebugStringConvertible|PlaygroundQuickLookable|LeafReflectable)|VarArg)|TextOutputStream|I(?:n(?:teger(?:Arithmetic)?|dexable(?:Base)?)|teratorProtocol)|OptionSet|Un(?:signedInteger|icodeCodec)|E(?:quatable|rror|xpressibleBy(?:BooleanLiteral|String(?:Interpolation|Literal)|NilLiteral|IntegerLiteral|DictionaryLiteral|UnicodeScalarLiteral|ExtendedGraphemeClusterLiteral|FloatLiteral|ArrayLiteral))|FloatingPoint|L(?:osslessStringConvertible|azy(?:SequenceProtocol|CollectionProtocol))|A(?:nyObject|bsoluteValuable))\\b', name: 'support.type.swift' }, { match: '\\b(?:Ran(?:domAccessIndexType|geReplaceableCollectionType)|GeneratorType|M(?:irror(?:Type|PathType)|utable(?:Sliceable|CollectionType))|B(?:i(?:twiseOperationsType|directionalIndexType)|oolean(?:Type|LiteralConvertible))|S(?:tring(?:InterpolationConvertible|LiteralConvertible)|i(?:nkType|gned(?:NumberType|IntegerType))|e(?:tAlgebraType|quenceType)|liceable)|NilLiteralConvertible|C(?:ollectionType|VarArgType)|Inte(?:rvalType|ger(?:Type|LiteralConvertible|ArithmeticType))|O(?:utputStreamType|ptionSetType)|DictionaryLiteralConvertible|Un(?:signedIntegerType|icode(?:ScalarLiteralConvertible|CodecType))|E(?:rrorType|xten(?:sibleCollectionType|dedGraphemeClusterLiteralConvertible))|F(?:orwardIndexType|loat(?:ingPointType|LiteralConvertible))|A(?:nyCollectionType|rrayLiteralConvertible))\\b', name: 'support.type.swift' } ] }, 'builtin-types-builtin-struct-type': { patterns: [ { match: '\\b(?:R(?:e(?:peat(?:ed)?|versed(?:RandomAccess(?:Collection|Index)|Collection|Index))|an(?:domAccessSlice|ge(?:Replaceable(?:RandomAccessSlice|BidirectionalSlice|Slice)|Generator)?))|Generator(?:Sequence|OfOne)|M(?:irror|utable(?:Ran(?:domAccessSlice|geReplaceable(?:RandomAccessSlice|BidirectionalSlice|Slice))|BidirectionalSlice|Slice)|anagedBufferPointer)|B(?:idirectionalSlice|ool)|S(?:t(?:aticString|ri(?:ng|deT(?:hrough(?:Generator|Iterator)?|o(?:Generator|Iterator)?)))|et(?:I(?:ndex|terator))?|lice)|HalfOpenInterval|C(?:haracter(?:View)?|o(?:ntiguousArray|untable(?:Range|ClosedRange)|llectionOfOne)|OpaquePointer|losed(?:Range(?:I(?:ndex|terator))?|Interval)|VaListPointer)|I(?:n(?:t(?:16|8|32|64)?|d(?:ices|ex(?:ing(?:Generator|Iterator))?))|terator(?:Sequence|OverOne)?)|Zip2(?:Sequence|Iterator)|O(?:paquePointer|bjectIdentifier)|D(?:ictionary(?:I(?:ndex|terator)|Literal)?|ouble|efault(?:RandomAccessIndices|BidirectionalIndices|Indices))|U(?:n(?:safe(?:RawPointer|Mutable(?:RawPointer|BufferPointer|Pointer)|BufferPointer(?:Generator|Iterator)?|Pointer)|icodeScalar(?:View)?|foldSequence|managed)|TF(?:16(?:View)?|8(?:View)?|32)|Int(?:16|8|32|64)?)|Join(?:Generator|ed(?:Sequence|Iterator))|PermutationGenerator|E(?:numerate(?:Generator|Sequence|d(?:Sequence|Iterator))|mpty(?:Generator|Collection|Iterator))|Fl(?:oat(?:80)?|atten(?:Generator|BidirectionalCollection(?:Index)?|Sequence|Collection(?:Index)?|Iterator))|L(?:egacyChildren|azy(?:RandomAccessCollection|Map(?:RandomAccessCollection|Generator|BidirectionalCollection|Sequence|Collection|Iterator)|BidirectionalCollection|Sequence|Collection|Filter(?:Generator|BidirectionalCollection|Sequence|Collection|I(?:ndex|terator))))|A(?:ny(?:RandomAccessCollection|Generator|BidirectionalCollection|Sequence|Hashable|Collection|I(?:ndex|terator))|utoreleasingUnsafeMutablePointer|rray(?:Slice)?))\\b', name: 'support.type.swift' }, { match: '\\b(?:R(?:everse(?:RandomAccess(?:Collection|Index)|Collection|Index)|awByte)|Map(?:Generator|Sequence|Collection)|S(?:inkOf|etGenerator)|Zip2Generator|DictionaryGenerator|Filter(?:Generator|Sequence|Collection(?:Index)?)|LazyForwardCollection|Any(?:RandomAccessIndex|BidirectionalIndex|Forward(?:Collection|Index)))\\b', name: 'support.type.swift' } ] }, 'builtin-types-builtin-typealias': { patterns: [ { match: '\\b(?:Raw(?:Significand|Exponent|Value)|B(?:ooleanLiteralType|uffer|ase)|S(?:t(?:orage|r(?:i(?:ngLiteralType|de)|eam(?:1|2)))|ubSequence)|NativeBuffer|C(?:hild(?:ren)?|Bool|S(?:hort|ignedChar)|odeUnit|Char(?:16|32)?|Int|Double|Unsigned(?:Short|Char|Int|Long(?:Long)?)|Float|WideChar|Long(?:Long)?)|I(?:n(?:t(?:Max|egerLiteralType)|d(?:ices|ex(?:Distance)?))|terator)|Distance|U(?:n(?:icodeScalar(?:Type|Index|View|LiteralType)|foldFirstSequence)|TF(?:16(?:Index|View)|8Index)|IntMax)|E(?:lement(?:s)?|x(?:tendedGraphemeCluster(?:Type|LiteralType)|ponent))|V(?:oid|alue)|Key|Float(?:32|LiteralType|64)|AnyClass)\\b', name: 'support.type.swift' }, { match: '\\b(?:Generator|PlaygroundQuickLook|UWord|Word)\\b', name: 'support.type.swift' } ] }, 'code-block': { begin: '\\{', beginCaptures: {0: {name: 'punctuation.section.scope.begin.swift'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.section.scope.end.swift'}}, patterns: [{include: '$self'}] }, comments: { patterns: [ { captures: {1: {name: 'punctuation.definition.comment.swift'}}, match: '\\A^(#!).*$\\n?', name: 'comment.line.number-sign.swift' }, { begin: '/\\*\\*(?!/)', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.swift'} }, end: '\\*/', endCaptures: {0: {name: 'punctuation.definition.comment.end.swift'}}, name: 'comment.block.documentation.swift', patterns: [{include: '#comments-nested'}] }, { begin: '/\\*:', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.swift'} }, end: '\\*/', endCaptures: {0: {name: 'punctuation.definition.comment.end.swift'}}, name: 'comment.block.documentation.playground.swift', patterns: [{include: '#comments-nested'}] }, { begin: '/\\*', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.swift'} }, end: '\\*/', endCaptures: {0: {name: 'punctuation.definition.comment.end.swift'}}, name: 'comment.block.swift', patterns: [{include: '#comments-nested'}] }, { match: '\\*/', name: 'invalid.illegal.unexpected-end-of-block-comment.swift' }, { begin: '(^[ \\t]+)?(?=//)', beginCaptures: { 1: {name: 'punctuation.whitespace.comment.leading.swift'} }, end: '(?!\\G)', patterns: [ { begin: '///', beginCaptures: { 0: {name: 'punctuation.definition.comment.swift'} }, end: '$', name: 'comment.line.triple-slash.documentation.swift' }, { begin: '//:', beginCaptures: { 0: {name: 'punctuation.definition.comment.swift'} }, end: '$', name: 'comment.line.double-slash.documentation.swift' }, { begin: '//', beginCaptures: { 0: {name: 'punctuation.definition.comment.swift'} }, end: '$', name: 'comment.line.double-slash.swift' } ] } ] }, 'comments-nested': { begin: '/\\*', end: '\\*/', patterns: [{include: '#comments-nested'}] }, 'compiler-control': { patterns: [ { begin: '^\\s*(#)(if|elseif)\\s+(false)\\b.*?(?=$|//|/\\*)', beginCaptures: { 0: {name: 'meta.preprocessor.conditional.swift'}, 1: {name: 'punctuation.definition.preprocessor.swift'}, 2: {name: 'keyword.control.import.preprocessor.conditional.swift'}, 3: {name: 'constant.language.boolean.swift'} }, contentName: 'comment.block.preprocessor.swift', end: '(?=^\\s*(#(elseif|else|endif)\\b))' }, { begin: '^\\s*(#)(if|elseif)\\s+', captures: { 1: {name: 'punctuation.definition.preprocessor.swift'}, 2: {name: 'keyword.control.import.preprocessor.conditional.swift'} }, end: '(?=\\s*(?://|/\\*))|$', name: 'meta.preprocessor.conditional.swift', patterns: [ {match: '(&&|\\|\\|)', name: 'keyword.operator.logical.swift'}, { match: '\\b(true|false)\\b', name: 'constant.language.boolean.swift' }, { captures: { 1: {name: 'keyword.other.condition.swift'}, 2: {name: 'punctuation.definition.parameters.begin.swift'}, 3: {name: 'support.constant.platform.architecture.swift'}, 4: {name: 'punctuation.definition.parameters.end.swift'} }, match: '\\b(arch)\\s*(\\()\\s*(?:(arm|arm64|powerpc64|powerpc64le|i386|x86_64|s390x)|\\w+)\\s*(\\))' }, { captures: { 1: {name: 'keyword.other.condition.swift'}, 2: {name: 'punctuation.definition.parameters.begin.swift'}, 3: {name: 'support.constant.platform.os.swift'}, 4: {name: 'punctuation.definition.parameters.end.swift'} }, match: '\\b(os)\\s*(\\()\\s*(?:(macOS|OSX|iOS|tvOS|watchOS|visionOS|Android|Linux|FreeBSD|Windows|PS4)|\\w+)\\s*(\\))' }, { captures: { 1: {name: 'keyword.other.condition.swift'}, 2: {name: 'punctuation.definition.parameters.begin.swift'}, 3: {name: 'entity.name.type.module.swift'}, 4: {name: 'punctuation.definition.parameters.end.swift'} }, match: '\\b(canImport)\\s*(\\()([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)(\\))' }, { begin: '\\b(targetEnvironment)\\s*(\\()', beginCaptures: { 1: {name: 'keyword.other.condition.swift'}, 2: {name: 'punctuation.definition.parameters.begin.swift'} }, end: '(\\))|$', endCaptures: { 1: {name: 'punctuation.definition.parameters.end.swift'} }, patterns: [ { match: '\\b(simulator|UIKitForMac)\\b', name: 'support.constant.platform.environment.swift' } ] }, { begin: '\\b(swift|compiler)\\s*(\\()', beginCaptures: { 1: {name: 'keyword.other.condition.swift'}, 2: {name: 'punctuation.definition.parameters.begin.swift'} }, end: '(\\))|$', endCaptures: { 1: {name: 'punctuation.definition.parameters.end.swift'} }, patterns: [ {match: '>=|<', name: 'keyword.operator.comparison.swift'}, { match: '\\b[0-9]+(?:\\.[0-9]+)*\\b', name: 'constant.numeric.swift' } ] } ] }, { captures: { 1: {name: 'punctuation.definition.preprocessor.swift'}, 2: {name: 'keyword.control.import.preprocessor.conditional.swift'}, 3: { patterns: [ { match: '\\S+', name: 'invalid.illegal.character-not-allowed-here.swift' } ] } }, match: '^\\s*(#)(else|endif)(.*?)(?=$|//|/\\*)', name: 'meta.preprocessor.conditional.swift' }, { captures: { 1: {name: 'punctuation.definition.preprocessor.swift'}, 2: { name: 'keyword.control.import.preprocessor.sourcelocation.swift' }, 4: {name: 'punctuation.definition.parameters.begin.swift'}, 5: { patterns: [ { begin: '(file)\\s*(:)\\s*(?=")', beginCaptures: { 1: {name: 'support.variable.parameter.swift'}, 2: {name: 'punctuation.separator.key-value.swift'} }, end: '(?!\\G)', patterns: [{include: '#literals'}] }, { captures: { 1: {name: 'support.variable.parameter.swift'}, 2: {name: 'punctuation.separator.key-value.swift'}, 3: {name: 'constant.numeric.integer.swift'} }, match: '(line)\\s*(:)\\s*([0-9]+)' }, {match: ',', name: 'punctuation.separator.parameters.swift'}, { match: '\\S+', name: 'invalid.illegal.character-not-allowed-here.swift' } ] }, 6: {name: 'punctuation.definition.parameters.begin.swift'}, 7: { patterns: [ { match: '\\S+', name: 'invalid.illegal.character-not-allowed-here.swift' } ] } }, match: '^\\s*(#)(sourceLocation)((\\()([^)]*)(\\)))(.*?)(?=$|//|/\\*)', name: 'meta.preprocessor.sourcelocation.swift' } ] }, conditionals: { patterns: [ { begin: '(?&|\\^~.])(->)(?![/=\\-+!*%<>&|\\^~.])' }, { captures: {1: {name: 'keyword.operator.type.composition.swift'}}, match: '(?&|\\^~.])(&)(?![/=\\-+!*%<>&|\\^~.])' }, {match: '[?!]', name: 'keyword.operator.type.optional.swift'}, { match: '\\.\\.\\.', name: 'keyword.operator.function.variadic-parameter.swift' }, {match: '\\bprotocol\\b', name: 'keyword.other.type.composition.swift'}, { match: '(?<=\\.)(?:Protocol|Type)\\b', name: 'keyword.other.type.metatype.swift' }, {include: '#declarations-available-types-tuple-type'}, {include: '#declarations-available-types-collection-type'}, {include: '#declarations-generic-argument-clause'} ] }, 'declarations-available-types-collection-type': { begin: '\\[', beginCaptures: { 0: {name: 'punctuation.section.collection-type.begin.swift'} }, end: '\\]|(?=[>){}])', endCaptures: {0: {name: 'punctuation.section.collection-type.end.swift'}}, patterns: [ {include: '#declarations-available-types'}, {include: '#literals-numeric'}, {match: '\\b_\\b', name: 'support.variable.inferred.swift'}, { match: '(?<=\\s)\\bof\\b(?=\\s+[\\p{L}_\\d\\p{N}\\p{M}\\[(])', name: 'keyword.other.inline-array.swift' }, { begin: ':', beginCaptures: {0: {name: 'punctuation.separator.key-value.swift'}}, end: '(?=\\]|[>){}])', patterns: [ { match: ':', name: 'invalid.illegal.extra-colon-in-dictionary-type.swift' }, {include: '#declarations-available-types'} ] } ] }, 'declarations-available-types-tuple-type': { begin: '\\(', beginCaptures: {0: {name: 'punctuation.section.tuple-type.begin.swift'}}, end: '\\)|(?=[>\\]{}])', endCaptures: {0: {name: 'punctuation.section.tuple-type.end.swift'}}, patterns: [{include: '#declarations-available-types'}] }, 'declarations-extension': { begin: '\\b(extension)\\s+', beginCaptures: {1: {name: 'storage.type.$1.swift'}}, end: '(?<=\\})', name: 'meta.definition.type.$1.swift', patterns: [ { begin: '\\G(?!\\s*[:{\\n])', end: '(?=\\s*[:{\\n])|(?!\\G)(?=\\s*where\\b)', name: 'entity.name.type.swift', patterns: [{include: '#declarations-available-types'}] }, {include: '#comments'}, {include: '#declarations-generic-where-clause'}, {include: '#declarations-inheritance-clause'}, { begin: '\\{', beginCaptures: {0: {name: 'punctuation.definition.type.begin.swift'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.definition.type.end.swift'}}, name: 'meta.definition.type.body.swift', patterns: [{include: '$self'}] } ] }, 'declarations-function': { begin: '(?x)\n\\b\n(func)\n\\s+\n(\n (?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)\n | (?:\n (\n (? # operator-head\n [/=\\-+!*%<>&|^~?]\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n )\n (\n \\g\n | (? # operator-character\n [\\x{0300}-\\x{036F}]\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n )*\n )\n | ( \\. ( \\g | \\g | \\. )+ ) # Dot operators\n )\n)\n\\s*\n(?=\\(|<)', beginCaptures: { 1: {name: 'storage.type.function.swift'}, 2: {name: 'entity.name.function.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '(?<=\\})|$(?# functions in protocol declarations or generated interfaces have no body)', name: 'meta.definition.function.swift', patterns: [ {include: '#comments'}, {include: '#declarations-generic-parameter-clause'}, {include: '#declarations-parameter-clause'}, {include: '#declarations-function-result'}, {include: '#async-throws'}, {include: '#declarations-generic-where-clause'}, { begin: '(\\{)', beginCaptures: { 1: {name: 'punctuation.section.function.begin.swift'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.section.function.end.swift'}}, name: 'meta.definition.function.body.swift', patterns: [{include: '$self'}] } ] }, 'declarations-function-initializer': { begin: '(?&|\\^~.])(->)(?![/=\\-+!*%<>&|\\^~.])\\s*', beginCaptures: {1: {name: 'keyword.operator.function-result.swift'}}, end: '(?!\\G)(?=\\{|\\bwhere\\b|;|=)|$', name: 'meta.function-result.swift', patterns: [ {match: '\\bsending\\b', name: 'storage.modifier.swift'}, {include: '#declarations-available-types'} ] }, 'declarations-function-subscript': { begin: '(?|(?=[)\\]{}])', endCaptures: { 0: {name: 'punctuation.separator.generic-argument-clause.end.swift'} }, name: 'meta.generic-argument-clause.swift', patterns: [ {include: '#literals-numeric'}, {include: '#declarations-available-types'} ] }, 'declarations-generic-parameter-clause': { begin: '<', beginCaptures: { 0: {name: 'punctuation.separator.generic-parameter-clause.begin.swift'} }, end: ">|(?=[^\\w\\d:<>\\s,=&`])(?# characters besides these are never valid in a generic param list -- even if it's not really a valid clause, we should stop trying to parse it if we see one of them.)", endCaptures: { 0: {name: 'punctuation.separator.generic-parameter-clause.end.swift'} }, name: 'meta.generic-parameter-clause.swift', patterns: [ {include: '#comments'}, {include: '#declarations-generic-where-clause'}, {match: '\\blet\\b', name: 'keyword.other.declaration-specifier.swift'}, {match: '\\beach\\b', name: 'keyword.control.loop.swift'}, { captures: {1: {name: 'variable.language.generic-parameter.swift'}}, match: '\\b((?!\\d)\\w[\\w\\d]*)\\b' }, {match: ',', name: 'punctuation.separator.generic-parameters.swift'}, { begin: '(:)\\s*', beginCaptures: { 1: { name: 'punctuation.separator.generic-parameter-constraint.swift' } }, end: '(?=[,>]|(?!\\G)\\bwhere\\b)', name: 'meta.generic-parameter-constraint.swift', patterns: [ { begin: '\\G', end: '(?=[,>]|(?!\\G)\\bwhere\\b)', name: 'entity.other.inherited-class.swift', patterns: [ {include: '#declarations-type-identifier'}, {include: '#declarations-type-operators'} ] } ] } ] }, 'declarations-generic-where-clause': { begin: '\\b(where)\\b\\s*', beginCaptures: { 1: {name: 'keyword.other.generic-constraint-introducer.swift'} }, end: '(?!\\G)$|(?=[>{};\\n]|//|/\\*)', name: 'meta.generic-where-clause.swift', patterns: [ {include: '#comments'}, {include: '#declarations-generic-where-clause-requirement-list'} ] }, 'declarations-generic-where-clause-requirement-list': { begin: '\\G|,\\s*', end: '(?=[,>{};\\n]|//|/\\*)', patterns: [ {include: '#comments'}, {include: '#constraint'}, {include: '#declarations-available-types'}, { begin: '(?&|\\^~.])(==)(?![/=\\-+!*%<>&|\\^~.])', beginCaptures: { 1: {name: 'keyword.operator.generic-constraint.same-type.swift'} }, end: '(?=\\s*[,>{};\\n]|//|/\\*)', name: 'meta.generic-where-clause.same-type-requirement.swift', patterns: [{include: '#declarations-available-types'}] }, { begin: '(?&|\\^~.])(:)(?![/=\\-+!*%<>&|\\^~.])', beginCaptures: { 1: {name: 'keyword.operator.generic-constraint.conforms-to.swift'} }, end: '(?=\\s*[,>{};\\n]|//|/\\*)', name: 'meta.generic-where-clause.conformance-requirement.swift', patterns: [ { begin: '\\G\\s*', contentName: 'entity.other.inherited-class.swift', end: '(?=\\s*[,>{};\\n]|//|/\\*)', patterns: [{include: '#declarations-available-types'}] } ] } ] }, 'declarations-import': { begin: '(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)', name: 'entity.name.type.swift' }, { match: '(?x)\n(?<=\\G|\\.)\n\\$[0-9]+', name: 'entity.name.type.swift' }, { captures: { 1: { patterns: [ { match: '\\.', name: 'invalid.illegal.dot-not-allowed-here.swift' } ] } }, match: '(?x)\n(?<=\\G|\\.)\n(?:\n (\n (? # operator-head\n [/=\\-+!*%<>&|^~?]\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n )\n (\n \\g\n | (? # operator-character\n [\\x{0300}-\\x{036F}]\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n )*\n )\n | ( \\. ( \\g | \\g | \\. )+ ) # Dot operators\n)\n(?=\\.|;|$|//|/\\*|\\s)', name: 'entity.name.type.swift' }, {match: '\\.', name: 'punctuation.separator.import.swift'}, { begin: '(?!\\s*(;|$|//|/\\*))', end: '(?=\\s*(;|$|//|/\\*))', name: 'invalid.illegal.character-not-allowed-here.swift' } ] } ] }, 'declarations-inheritance-clause': { begin: '(:)(?=\\s*\\{)|(:)\\s*', beginCaptures: { 1: {name: 'invalid.illegal.empty-inheritance-clause.swift'}, 2: {name: 'punctuation.separator.inheritance-clause.swift'} }, end: '(?!\\G)$|(?=[={}]|(?!\\G)\\bwhere\\b)', name: 'meta.inheritance-clause.swift', patterns: [ { begin: '\\bclass\\b', beginCaptures: {0: {name: 'storage.type.class.swift'}}, end: '(?=[={}]|(?!\\G)\\bwhere\\b)', patterns: [ {include: '#comments'}, {include: '#declarations-inheritance-clause-more-types'} ] }, { begin: '\\G', end: '(?!\\G)$|(?=[={}]|(?!\\G)\\bwhere\\b)', patterns: [ {include: '#attributes'}, {include: '#comments'}, {include: '#declarations-inheritance-clause-inherited-type'}, {include: '#declarations-inheritance-clause-more-types'}, {include: '#declarations-type-operators'} ] } ] }, 'declarations-inheritance-clause-inherited-type': { begin: '(?=[`\\p{L}_])', end: '(?!\\G)', name: 'entity.other.inherited-class.swift', patterns: [{include: '#declarations-type-identifier'}] }, 'declarations-inheritance-clause-more-types': { begin: ',\\s*', end: '(?!\\G)(?!//|/\\*)|(?=[,={}]|(?!\\G)\\bwhere\\b)', name: 'meta.inheritance-list.more-types', patterns: [ {include: '#attributes'}, {include: '#comments'}, {include: '#declarations-inheritance-clause-inherited-type'}, {include: '#declarations-inheritance-clause-more-types'}, {include: '#declarations-type-operators'} ] }, 'declarations-macro': { begin: '(?x)\n\\b\n(macro)\n\\s+\n((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\n\\s*\n(?=\\(|<|=)', beginCaptures: { 1: {name: 'storage.type.function.swift'}, 2: {name: 'entity.name.function.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '$|(?=;|//|/\\*|\\}|=)', name: 'meta.definition.macro.swift', patterns: [ {include: '#comments'}, {include: '#declarations-generic-parameter-clause'}, {include: '#declarations-parameter-clause'}, {include: '#declarations-function-result'}, {include: '#async-throws'}, {include: '#declarations-generic-where-clause'} ] }, 'declarations-operator': { begin: '(?x)\n(?:\n \\b(prefix|infix|postfix)\n \\s+\n)?\n\\b\n(operator)\n\\s+\n(\n (\n (? # operator-head\n [/=\\-+!*%<>&|^~?]\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n )\n (\n \\g\n | \\. # Invalid dot\n | (? # operator-character\n [\\x{0300}-\\x{036F}]\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n )*+\n )\n | ( \\. ( \\g | \\g | \\. )++ ) # Dot operators\n)\n\\s*', beginCaptures: { 1: {name: 'storage.modifier.swift'}, 2: {name: 'storage.type.function.operator.swift'}, 3: {name: 'entity.name.function.operator.swift'}, 4: { name: 'entity.name.function.operator.swift', patterns: [ {match: '\\.', name: 'invalid.illegal.dot-not-allowed-here.swift'} ] } }, end: '(;)|$\\n?|(?=//|/\\*)', endCaptures: {1: {name: 'punctuation.terminator.statement.swift'}}, name: 'meta.definition.operator.swift', patterns: [ {include: '#declarations-operator-swift2'}, {include: '#declarations-operator-swift3'}, { match: '((?!$|;|//|/\\*)\\S)+', name: 'invalid.illegal.character-not-allowed-here.swift' } ] }, 'declarations-operator-swift2': { begin: '\\G(\\{)', beginCaptures: {1: {name: 'punctuation.definition.operator.begin.swift'}}, end: '(\\})', endCaptures: {1: {name: 'punctuation.definition.operator.end.swift'}}, patterns: [ {include: '#comments'}, { captures: { 1: {name: 'storage.modifier.swift'}, 2: {name: 'keyword.other.operator.associativity.swift'} }, match: '\\b(associativity)\\s+(left|right)\\b' }, { captures: { 1: {name: 'storage.modifier.swift'}, 2: {name: 'constant.numeric.integer.swift'} }, match: '\\b(precedence)\\s+([0-9]+)\\b' }, { captures: {1: {name: 'storage.modifier.swift'}}, match: '\\b(assignment)\\b' } ] }, 'declarations-operator-swift3': { captures: { 2: { name: 'entity.other.inherited-class.swift', patterns: [{include: '#declarations-types-precedencegroup'}] }, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, match: '\\G(:)\\s*((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))' }, 'declarations-parameter-clause': { begin: '(\\()', beginCaptures: { 1: {name: 'punctuation.definition.parameters.begin.swift'} }, end: '(\\))(?:\\s*(async)\\b)?', endCaptures: { 1: {name: 'punctuation.definition.parameters.end.swift'}, 2: {name: 'storage.modifier.async.swift'} }, name: 'meta.parameter-clause.swift', patterns: [{include: '#declarations-parameter-list'}] }, 'declarations-parameter-list': { patterns: [ { captures: { 1: {name: 'entity.name.function.swift'}, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'variable.parameter.function.swift'}, 5: {name: 'punctuation.definition.identifier.swift'}, 6: {name: 'punctuation.definition.identifier.swift'} }, match: '((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))(?=\\s*:)' }, { captures: { 1: {name: 'variable.parameter.function.swift'}, 2: {name: 'entity.name.function.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, match: '(((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)))(?=\\s*:)' }, { begin: ':\\s*(?!\\s)', end: '(?=[,)])', patterns: [ {match: '\\bsending\\b', name: 'storage.modifier.swift'}, {include: '#declarations-available-types'}, { match: ':', name: 'invalid.illegal.extra-colon-in-parameter-list.swift' }, { begin: '=', beginCaptures: {0: {name: 'keyword.operator.assignment.swift'}}, end: '(?=[,)])', patterns: [{include: '#expressions'}] } ] } ] }, 'declarations-precedencegroup': { begin: '\\b(precedencegroup)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*(?=\\{)', beginCaptures: { 1: {name: 'storage.type.precedencegroup.swift'}, 2: {name: 'entity.name.type.precedencegroup.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '(?!\\G)', name: 'meta.definition.precedencegroup.swift', patterns: [ { begin: '\\{', beginCaptures: { 0: {name: 'punctuation.definition.precedencegroup.begin.swift'} }, end: '\\}', endCaptures: { 0: {name: 'punctuation.definition.precedencegroup.end.swift'} }, patterns: [ {include: '#comments'}, { captures: { 1: {name: 'storage.modifier.swift'}, 2: { name: 'entity.other.inherited-class.swift', patterns: [{include: '#declarations-types-precedencegroup'}] }, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, match: '\\b(higherThan|lowerThan)\\s*:\\s*((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))' }, { captures: { 1: {name: 'storage.modifier.swift'}, 2: {name: 'keyword.other.operator.associativity.swift'} }, match: '\\b(associativity)\\b(?:\\s*:\\s*(right|left|none)\\b)?' }, { captures: { 1: {name: 'storage.modifier.swift'}, 2: {name: 'constant.language.boolean.swift'} }, match: '\\b(assignment)\\b(?:\\s*:\\s*(true|false)\\b)?' } ] } ] }, 'declarations-protocol': { begin: '\\b(protocol)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))', beginCaptures: { 1: {name: 'storage.type.$1.swift'}, 2: {name: 'entity.name.type.$1.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '(?<=\\})', name: 'meta.definition.type.protocol.swift', patterns: [ {include: '#comments'}, {include: '#declarations-inheritance-clause'}, {include: '#declarations-generic-where-clause'}, { begin: '\\{', beginCaptures: {0: {name: 'punctuation.definition.type.begin.swift'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.definition.type.end.swift'}}, name: 'meta.definition.type.body.swift', patterns: [ {include: '#declarations-protocol-protocol-method'}, {include: '#declarations-protocol-protocol-initializer'}, {include: '#declarations-protocol-associated-type'}, {include: '$self'} ] } ] }, 'declarations-protocol-associated-type': { begin: '\\b(associatedtype)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*', beginCaptures: { 1: {name: 'keyword.other.declaration-specifier.swift'}, 2: {name: 'variable.language.associatedtype.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '(?!\\G)$|(?=[;}]|$)', name: 'meta.definition.associatedtype.swift', patterns: [ {include: '#declarations-inheritance-clause'}, {include: '#declarations-generic-where-clause'}, {include: '#declarations-typealias-assignment'} ] }, 'declarations-protocol-protocol-initializer': { begin: '(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)\n | (?:\n (\n (? # operator-head\n [/=\\-+!*%<>&|^~?]\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n )\n (\n \\g\n | (? # operator-character\n [\\x{0300}-\\x{036F}]\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n )*\n )\n | ( \\. ( \\g | \\g | \\. )+ ) # Dot operators\n )\n )\n\\s*\n(?=\\(|<)', beginCaptures: { 1: {name: 'storage.type.function.swift'}, 2: {name: 'entity.name.function.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '$|(?=;|//|/\\*|\\})', name: 'meta.definition.function.swift', patterns: [ {include: '#comments'}, {include: '#declarations-generic-parameter-clause'}, {include: '#declarations-parameter-clause'}, {include: '#declarations-function-result'}, {include: '#async-throws'}, {include: '#declarations-generic-where-clause'}, { begin: '\\{', beginCaptures: { 0: {name: 'punctuation.section.function.begin.swift'} }, end: '\\}', endCaptures: {0: {name: 'punctuation.section.function.end.swift'}}, name: 'invalid.illegal.function-body-not-allowed-in-protocol.swift', patterns: [{include: '$self'}] } ] }, 'declarations-type': { patterns: [ { begin: '\\b(class(?!\\s+(?:func|var|let)\\b)|struct|actor)\\b\\s*((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))', beginCaptures: { 1: {name: 'storage.type.$1.swift'}, 2: {name: 'entity.name.type.$1.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '(?<=\\})', name: 'meta.definition.type.$1.swift', patterns: [ {include: '#comments'}, {include: '#declarations-generic-parameter-clause'}, {include: '#declarations-generic-where-clause'}, {include: '#declarations-inheritance-clause'}, { begin: '\\{', beginCaptures: { 0: {name: 'punctuation.definition.type.begin.swift'} }, end: '\\}', endCaptures: {0: {name: 'punctuation.definition.type.end.swift'}}, name: 'meta.definition.type.body.swift', patterns: [{include: '$self'}] } ] }, {include: '#declarations-type-enum'} ] }, 'declarations-type-enum': { begin: '\\b(enum)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))', beginCaptures: { 1: {name: 'storage.type.$1.swift'}, 2: {name: 'entity.name.type.$1.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '(?<=\\})', name: 'meta.definition.type.$1.swift', patterns: [ {include: '#comments'}, {include: '#declarations-generic-parameter-clause'}, {include: '#declarations-generic-where-clause'}, {include: '#declarations-inheritance-clause'}, { begin: '\\{', beginCaptures: {0: {name: 'punctuation.definition.type.begin.swift'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.definition.type.end.swift'}}, name: 'meta.definition.type.body.swift', patterns: [ {include: '#declarations-type-enum-enum-case-clause'}, {include: '$self'} ] } ] }, 'declarations-type-enum-associated-values': { begin: '\\G\\(', beginCaptures: { 0: {name: 'punctuation.definition.parameters.begin.swift'} }, end: '\\)', endCaptures: {0: {name: 'punctuation.definition.parameters.end.swift'}}, patterns: [ {include: '#comments'}, { begin: '(?x)\n(?:(_)|((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\k))\n\\s+\n(((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\k))\n\\s*(:)', beginCaptures: { 1: {name: 'entity.name.function.swift'}, 2: {name: 'invalid.illegal.distinct-labels-not-allowed.swift'}, 5: {name: 'variable.parameter.function.swift'}, 7: {name: 'punctuation.separator.argument-label.swift'} }, end: '(?=[,)\\]])', patterns: [{include: '#declarations-available-types'}] }, { begin: '(((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\k))\\s*(:)', beginCaptures: { 1: {name: 'entity.name.function.swift'}, 2: {name: 'variable.parameter.function.swift'}, 4: {name: 'punctuation.separator.argument-label.swift'} }, end: '(?=[,)\\]])', patterns: [{include: '#declarations-available-types'}] }, { begin: '(?![,)\\]])(?=\\S)', end: '(?=[,)\\]])', patterns: [ {include: '#declarations-available-types'}, { match: ':', name: 'invalid.illegal.extra-colon-in-parameter-list.swift' } ] } ] }, 'declarations-type-enum-enum-case': { begin: '(?x)((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*', beginCaptures: {1: {name: 'variable.other.enummember.swift'}}, end: '(?<=\\))|(?![=(])', patterns: [ {include: '#comments'}, {include: '#declarations-type-enum-associated-values'}, {include: '#declarations-type-enum-raw-value-assignment'} ] }, 'declarations-type-enum-enum-case-clause': { begin: '\\b(case)\\b\\s*', beginCaptures: {1: {name: 'storage.type.enum.case.swift'}}, end: '(?=[;}])|(?!\\G)(?!//|/\\*)(?=[^\\s,])', patterns: [ {include: '#comments'}, {include: '#declarations-type-enum-enum-case'}, {include: '#declarations-type-enum-more-cases'} ] }, 'declarations-type-enum-more-cases': { begin: ',\\s*', end: '(?!\\G)(?!//|/\\*)(?=[;}]|[^\\s,])', name: 'meta.enum-case.more-cases', patterns: [ {include: '#comments'}, {include: '#declarations-type-enum-enum-case'}, {include: '#declarations-type-enum-more-cases'} ] }, 'declarations-type-enum-raw-value-assignment': { begin: '(=)\\s*', beginCaptures: {1: {name: 'keyword.operator.assignment.swift'}}, end: '(?!\\G)', patterns: [{include: '#comments'}, {include: '#literals'}] }, 'declarations-type-identifier': { begin: '((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*', beginCaptures: { 1: { name: 'meta.type-name.swift', patterns: [{include: '#builtin-types'}] }, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'} }, end: '(?!<)', patterns: [ { begin: '(?=<)', end: '(?!\\G)', patterns: [{include: '#declarations-generic-argument-clause'}] } ] }, 'declarations-type-operators': { patterns: [ { captures: {1: {name: 'keyword.operator.type.composition.swift'}}, match: '(?&|\\^~.])(&)(?![/=\\-+!*%<>&|\\^~.])' }, { captures: { 1: {name: 'keyword.operator.type.requirement-suppression.swift'} }, match: '(?&|\\^~.])(~)(?![/=\\-+!*%<>&|\\^~.])' } ] }, 'declarations-typealias': { begin: '\\b(typealias)\\s+((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*', beginCaptures: { 1: {name: 'keyword.other.declaration-specifier.swift'}, 2: {name: 'entity.name.type.typealias.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.identifier.swift'} }, end: '(?!\\G)$|(?=;|//|/\\*|$)', name: 'meta.definition.typealias.swift', patterns: [ { begin: '\\G(?=<)', end: '(?!\\G)', patterns: [{include: '#declarations-generic-parameter-clause'}] }, {include: '#declarations-typealias-assignment'} ] }, 'declarations-typealias-assignment': { begin: '(=)\\s*', beginCaptures: {1: {name: 'keyword.operator.assignment.swift'}}, end: '(?!\\G)$|(?=;|//|/\\*|$)', patterns: [{include: '#declarations-available-types'}] }, 'declarations-typed-variable-declaration': { begin: '(?x)\n\\b(?:(async)\\s+)?(let|var)\\b\\s+\n(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)\\s*\n:', beginCaptures: { 1: {name: 'storage.modifier.async.swift'}, 2: {name: 'keyword.other.declaration-specifier.swift'} }, end: '(?=$|[={])', patterns: [{include: '#declarations-available-types'}] }, 'declarations-types-precedencegroup': { patterns: [ { match: '\\b(?:BitwiseShift|Assignment|RangeFormation|Casting|Addition|NilCoalescing|Comparison|LogicalConjunction|LogicalDisjunction|Default|Ternary|Multiplication|FunctionArrow)Precedence\\b', name: 'support.type.swift' } ] }, expressions: { patterns: [ { include: '#expressions-without-trailing-closures-or-member-references' }, {include: '#expressions-trailing-closure'}, {include: '#member-reference'} ] }, 'expressions-trailing-closure': { patterns: [ { captures: { 1: {name: 'support.function.any-method.swift'}, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'} }, match: '(#?(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))(?=\\s*\\{)', name: 'meta.function-call.trailing-closure-only.swift' }, { captures: { 1: { name: 'support.function.any-method.trailing-closure-label.swift' }, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.separator.argument-label.swift'} }, match: '((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*(:)(?=\\s*\\{)' } ] }, 'expressions-without-trailing-closures': { patterns: [ { include: '#expressions-without-trailing-closures-or-member-references' }, {include: '#member-references'} ] }, 'expressions-without-trailing-closures-or-member-references': { patterns: [ {include: '#comments'}, {include: '#code-block'}, {include: '#attributes'}, { include: '#expressions-without-trailing-closures-or-member-references-closure-parameter' }, {include: '#literals'}, {include: '#operators'}, {include: '#builtin-types'}, {include: '#builtin-functions'}, {include: '#builtin-global-functions'}, {include: '#builtin-properties'}, { include: '#expressions-without-trailing-closures-or-member-references-compound-name' }, {include: '#conditionals'}, {include: '#keywords'}, { include: '#expressions-without-trailing-closures-or-member-references-availability-condition' }, { include: '#expressions-without-trailing-closures-or-member-references-function-or-macro-call-expression' }, { include: '#expressions-without-trailing-closures-or-member-references-macro-expansion' }, { include: '#expressions-without-trailing-closures-or-member-references-subscript-expression' }, { include: '#expressions-without-trailing-closures-or-member-references-parenthesized-expression' }, {match: '\\b_\\b', name: 'support.variable.discard-value.swift'} ] }, 'expressions-without-trailing-closures-or-member-references-availability-condition': { begin: '\\B(#(?:un)?available)(\\()', beginCaptures: { 1: {name: 'support.function.availability-condition.swift'}, 2: {name: 'punctuation.definition.arguments.begin.swift'} }, end: '\\)', endCaptures: {0: {name: 'punctuation.definition.arguments.end.swift'}}, patterns: [ { captures: { 1: {name: 'keyword.other.platform.os.swift'}, 2: {name: 'constant.numeric.swift'} }, match: '\\s*\\b((?:iOS|macOS|OSX|watchOS|tvOS|visionOS|UIKitForMac)(?:ApplicationExtension)?)\\b(?:\\s+([0-9]+(?:\\.[0-9]+)*\\b))' }, { captures: { 1: {name: 'keyword.other.platform.all.swift'}, 2: {name: 'invalid.illegal.character-not-allowed-here.swift'} }, match: '(\\*)\\s*(.*?)(?=[,)])' }, { match: '[^\\s,)]+', name: 'invalid.illegal.character-not-allowed-here.swift' } ] }, 'expressions-without-trailing-closures-or-member-references-closure-parameter': {match: '\\$[0-9]+', name: 'variable.language.closure-parameter.swift'}, 'expressions-without-trailing-closures-or-member-references-compound-name': { captures: { 1: {name: 'entity.name.function.compound-name.swift'}, 2: {name: 'punctuation.definition.entity.swift'}, 3: {name: 'punctuation.definition.entity.swift'}, 4: { patterns: [ { captures: { 1: {name: 'punctuation.definition.entity.swift'}, 2: {name: 'punctuation.definition.entity.swift'} }, match: '(?`?)(?!_:)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k):', name: 'entity.name.function.compound-name.swift' } ] } }, match: '(?x)\n((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)) # function name\n\\(\n (\n (\n ((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k)) # argument label\n : # colon\n )+\n )\n\\)' }, 'expressions-without-trailing-closures-or-member-references-expression-element-list': { patterns: [ {include: '#comments'}, { begin: '((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*(:)', beginCaptures: { 1: {name: 'support.function.any-method.swift'}, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.separator.argument-label.swift'} }, end: '(?=[,)\\]])', patterns: [{include: '#expressions'}] }, { begin: '(?![,)\\]])(?=\\S)', end: '(?=[,)\\]])', patterns: [{include: '#expressions'}] } ] }, 'expressions-without-trailing-closures-or-member-references-function-or-macro-call-expression': { patterns: [ { begin: '(#?(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))\\s*(\\()', beginCaptures: { 1: {name: 'support.function.any-method.swift'}, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'}, 4: {name: 'punctuation.definition.arguments.begin.swift'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.arguments.end.swift'} }, name: 'meta.function-call.swift', patterns: [ { include: '#expressions-without-trailing-closures-or-member-references-expression-element-list' } ] }, { begin: '(?<=[`\\])}>\\p{L}_\\p{N}\\p{M}])\\s*(\\()', beginCaptures: { 1: {name: 'punctuation.definition.arguments.begin.swift'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.definition.arguments.end.swift'} }, name: 'meta.function-call.swift', patterns: [ { include: '#expressions-without-trailing-closures-or-member-references-expression-element-list' } ] } ] }, 'expressions-without-trailing-closures-or-member-references-macro-expansion': { match: '(#(?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))', name: 'support.function.any-method.swift' }, 'expressions-without-trailing-closures-or-member-references-parenthesized-expression': { begin: '\\(', beginCaptures: {0: {name: 'punctuation.section.tuple.begin.swift'}}, end: '(\\))\\s*((?:\\b(?:async|throws|rethrows)\\s)*)', endCaptures: { 1: {name: 'punctuation.section.tuple.end.swift'}, 2: { patterns: [ { match: '\\brethrows\\b', name: 'invalid.illegal.rethrows-only-allowed-on-function-declarations.swift' }, {include: '#async-throws'} ] } }, patterns: [ { include: '#expressions-without-trailing-closures-or-member-references-expression-element-list' } ] }, 'expressions-without-trailing-closures-or-member-references-subscript-expression': { begin: '(?<=[`\\p{L}_\\p{N}\\p{M}])\\s*(\\[)', beginCaptures: { 1: {name: 'punctuation.definition.arguments.begin.swift'} }, end: '\\]', endCaptures: {0: {name: 'punctuation.definition.arguments.end.swift'}}, name: 'meta.subscript-expression.swift', patterns: [ { include: '#expressions-without-trailing-closures-or-member-references-expression-element-list' } ] }, keywords: { patterns: [ { match: '(?\n (?> # no backtracking, avoids issues with negative lookbehind at end\n (?:\n \\\\Q\n (?:(?!\\\\E)(?!/).)*+\n # A quoted sequence may not have a closing E, in which case it extends to the end of the regex\n (?:\\\\E | (?=/))\n | \\\\.\n | \\(\\?\\#[^)]*\\)\n | \\(\\?\n # InterpolatedCallout\n (?>\n {[^{].*?}\n | {{[^{].*?}}\n | {{{[^{].*?}}}\n | {{{{[^{].*?}}}}\n | {{{{{[^{].*?}}}}}\n | {{{{{{.+?}}}}}}\n )\n (?:\\[(?!\\d)\\w+\\])?\n [X<>]?\n \\)\n # Allow nested character classes to a limited depth\n | \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\]\n )+\\]\n )+\\]\n )+\\]\n )+\\]\n | \\(\\g?+\\)\n | (?:(?!/)[^()\\[\\\\])+ # any character (until end)\n )+\n )\n )?+\n (?\n (?> # no backtracking, avoids issues with negative lookbehind at end\n (?:\n \\\\Q\n (?:(?!\\\\E)(?!/\\2).)*+\n # A quoted sequence may not have a closing E, in which case it extends to the end of the regex\n (?:\\\\E | (?=/\\2))\n | \\\\.\n | \\(\\?\\#[^)]*\\)\n | \\(\\?\n # InterpolatedCallout\n (?>\n {[^{].*?}\n | {{[^{].*?}}\n | {{{[^{].*?}}}\n | {{{{[^{].*?}}}}\n | {{{{{[^{].*?}}}}}\n | {{{{{{.+?}}}}}}\n )\n (?:\\[(?!\\d)\\w+\\])?\n [X<>]?\n \\)\n # Allow nested character classes to a limited depth\n | \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\]\n )+\\]\n )+\\]\n )+\\]\n )+\\]\n | \\(\\g?+\\)\n | (?:(?!/\\2)[^()\\[\\\\])+ # any character (until end)\n )+\n )\n)?+\n(/\\2) # (4)\n| \\#+/.+(\\n)', name: 'string.regexp.line.extended.swift' } ] }, 'literals-regular-expression-literal-backreference-or-subpattern': { patterns: [ { captures: { 1: {name: 'constant.character.escape.backslash.regexp'}, 2: {name: 'variable.other.group-name.regexp'}, 3: {name: 'keyword.operator.recursion-level.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'}, 5: {name: 'constant.numeric.integer.decimal.regexp'}, 6: {name: 'keyword.operator.recursion-level.regexp'}, 7: {name: 'constant.numeric.integer.decimal.regexp'}, 8: {name: 'constant.character.escape.backslash.regexp'} }, match: '(?x)(\\\\g\\{) (?: ((?!\\d)\\w+) (?:([+-])(\\d+))? | ([+-]?\\d+) (?:([+-])(\\d+))? ) (\\})' }, { captures: { 1: {name: 'constant.character.escape.backslash.regexp'}, 2: {name: 'constant.numeric.integer.decimal.regexp'}, 3: {name: 'keyword.operator.recursion-level.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'} }, match: '(?x)(\\\\g) ([+-]?\\d+) (?:([+-])(\\d+))?' }, { captures: { 1: {name: 'constant.character.escape.backslash.regexp'}, 2: {name: 'variable.other.group-name.regexp'}, 3: {name: 'keyword.operator.recursion-level.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'}, 5: {name: 'constant.numeric.integer.decimal.regexp'}, 6: {name: 'keyword.operator.recursion-level.regexp'}, 7: {name: 'constant.numeric.integer.decimal.regexp'}, 8: {name: 'constant.character.escape.backslash.regexp'} }, match: '(?x)(\\\\[gk]<) (?: ((?!\\d)\\w+) (?:([+-])(\\d+))? | ([+-]?\\d+) (?:([+-])(\\d+))? ) (>)' }, { captures: { 1: {name: 'constant.character.escape.backslash.regexp'}, 2: {name: 'variable.other.group-name.regexp'}, 3: {name: 'keyword.operator.recursion-level.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'}, 5: {name: 'constant.numeric.integer.decimal.regexp'}, 6: {name: 'keyword.operator.recursion-level.regexp'}, 7: {name: 'constant.numeric.integer.decimal.regexp'}, 8: {name: 'constant.character.escape.backslash.regexp'} }, match: "(?x)(\\\\[gk]') (?: ((?!\\d)\\w+) (?:([+-])(\\d+))? | ([+-]?\\d+) (?:([+-])(\\d+))? ) (')" }, { captures: { 1: {name: 'constant.character.escape.backslash.regexp'}, 2: {name: 'variable.other.group-name.regexp'}, 3: {name: 'keyword.operator.recursion-level.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'}, 5: {name: 'constant.character.escape.backslash.regexp'} }, match: '(?x)(\\\\k\\{) ((?!\\d)\\w+) (?:([+-])(\\d+))? (\\})' }, {match: '\\\\[1-9][0-9]+', name: 'keyword.other.back-reference.regexp'}, { captures: { 1: {name: 'keyword.other.back-reference.regexp'}, 2: {name: 'variable.other.group-name.regexp'}, 3: {name: 'keyword.operator.recursion-level.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'}, 5: {name: 'keyword.other.back-reference.regexp'} }, match: '(?x)(\\(\\?(?:P[=>]|&)) ((?!\\d)\\w+) (?:([+-])(\\d+))? (\\))' }, {match: '\\(\\?R\\)', name: 'keyword.other.back-reference.regexp'}, { captures: { 1: {name: 'keyword.other.back-reference.regexp'}, 2: {name: 'constant.numeric.integer.decimal.regexp'}, 3: {name: 'keyword.operator.recursion-level.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'}, 5: {name: 'keyword.other.back-reference.regexp'} }, match: '(?x)(\\(\\?) ([+-]?\\d+) (?:([+-])(\\d+))? (\\))' } ] }, 'literals-regular-expression-literal-backtracking-directive-or-global-matching-option': { captures: { 1: {name: 'keyword.control.directive.regexp'}, 2: {name: 'keyword.control.directive.regexp'}, 3: {name: 'keyword.control.directive.regexp'}, 4: {name: 'variable.language.tag.regexp'}, 5: {name: 'keyword.control.directive.regexp'}, 6: {name: 'keyword.operator.assignment.regexp'}, 7: {name: 'constant.numeric.integer.decimal.regexp'}, 8: {name: 'keyword.control.directive.regexp'}, 9: {name: 'keyword.control.directive.regexp'} }, match: '(?x)\n(\\(\\*)\n(?:\n (ACCEPT|FAIL|F|MARK(?=:)|(?=:)|COMMIT|PRUNE|SKIP|THEN)\n (?:(:)([^)]+))?\n | (?:(LIMIT_(?:DEPTH|HEAP|MATCH))(=)(\\d+))\n | (\n CRLF | CR | ANYCRLF | ANY | LF | NUL\n | BSR_ANYCRLF | BSR_UNICODE\n | NOTEMPTY_ATSTART | NOTEMPTY\n | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR\n | NO_JIT | NO_START_OPT | UTF | UCP\n )\n)\n(\\))' }, 'literals-regular-expression-literal-callout': { captures: { 1: {name: 'punctuation.definition.group.regexp'}, 10: {name: 'entity.name.function.callout.regexp'}, 11: {name: 'entity.name.function.callout.regexp'}, 12: {name: 'punctuation.definition.group.regexp'}, 13: {name: 'punctuation.definition.group.regexp'}, 14: {name: 'keyword.control.callout.regexp'}, 15: {name: 'entity.name.function.callout.regexp'}, 16: {name: 'variable.language.tag-name.regexp'}, 17: {name: 'punctuation.definition.group.regexp'}, 18: {name: 'punctuation.definition.group.regexp'}, 19: {name: 'keyword.control.callout.regexp'}, 2: {name: 'keyword.control.callout.regexp'}, 21: {name: 'variable.language.tag-name.regexp'}, 22: {name: 'keyword.control.callout.regexp'}, 23: {name: 'punctuation.definition.group.regexp'}, 3: {name: 'constant.numeric.integer.decimal.regexp'}, 4: {name: 'entity.name.function.callout.regexp'}, 5: {name: 'entity.name.function.callout.regexp'}, 6: {name: 'entity.name.function.callout.regexp'}, 7: {name: 'entity.name.function.callout.regexp'}, 8: {name: 'entity.name.function.callout.regexp'}, 9: {name: 'entity.name.function.callout.regexp'} }, match: '(?x)\n# PCRECallout\n(\\()(?\\?C)\n (?:\n (?\\d+)\n | `(?(?:[^`]|``)*)`\n | \'(?(?:[^\']|\'\')*)\'\n | "(?(?:[^"]|"")*)"\n | \\^(?(?:[^\\^]|\\^\\^)*)\\^\n | %(?(?:[^%]|%%)*)%\n | \\#(?(?:[^#]|\\#\\#)*)\\#\n | \\$(?(?:[^$]|\\$\\$)*)\\$\n | \\{(?(?:[^}]|\\}\\})*)\\}\n )?\n(\\))\n# NamedCallout\n| (\\()(?\\*)\n (?(?!\\d)\\w+)\n (?:\\[(?(?!\\d)\\w+)\\])?\n (?:\\{ [^,}]+ (?:,[^,}]+)* \\})?\n (\\))\n# InterpolatedCallout\n| (\\()(?\\?)\n (?>(\\{(?:\\g<-1>|(?!{).*?)\\}))\n (?:\\[(?(?!\\d)\\w+)\\])?\n (?[X<>]?)\n (\\))', name: 'meta.callout.regexp' }, 'literals-regular-expression-literal-character-properties': { captures: { 1: {name: 'support.variable.character-property.regexp'}, 2: {name: 'punctuation.definition.character-class.regexp'}, 3: {name: 'support.variable.character-property.regexp'}, 4: {name: 'punctuation.definition.character-class.regexp'} }, match: '(?x)\n\\\\[pP]\\{ ([\\s\\w-]+(?:=[\\s\\w-]+)?) \\}\n| (\\[:) ([\\s\\w-]+(?:=[\\s\\w-]+)?) (:\\])', name: 'constant.other.character-class.set.regexp' }, 'literals-regular-expression-literal-custom-char-class': { patterns: [ { begin: '(\\[)(\\^)?', beginCaptures: { 1: {name: 'punctuation.definition.character-class.regexp'}, 2: {name: 'keyword.operator.negation.regexp'} }, end: '\\]', endCaptures: { 0: {name: 'punctuation.definition.character-class.regexp'} }, name: 'constant.other.character-class.set.regexp', patterns: [ { include: '#literals-regular-expression-literal-custom-char-class-members' } ] } ] }, 'literals-regular-expression-literal-custom-char-class-members': { patterns: [ {match: '\\\\b', name: 'constant.character.escape.backslash.regexp'}, {include: '#literals-regular-expression-literal-custom-char-class'}, {include: '#literals-regular-expression-literal-quote'}, {include: '#literals-regular-expression-literal-set-operators'}, {include: '#literals-regular-expression-literal-unicode-scalars'}, {include: '#literals-regular-expression-literal-character-properties'} ] }, 'literals-regular-expression-literal-group-option-toggle': { match: '(?x)\n\\(\\?\n(?:\n \\^(?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})*\n | (?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})+\n | (?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})* - (?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})*\n)\n\\)', name: 'keyword.other.option-toggle.regexp' }, 'literals-regular-expression-literal-group-or-conditional': { patterns: [ { begin: '(\\()(\\?~)', beginCaptures: { 1: {name: 'punctuation.definition.group.regexp'}, 2: {name: 'keyword.control.conditional.absent.regexp'} }, end: '\\)', endCaptures: {0: {name: 'punctuation.definition.group.regexp'}}, name: 'meta.group.absent.regexp', patterns: [ {include: '#literals-regular-expression-literal-regex-guts'} ] }, { begin: "(?x)\n# KnownConditionalStart\n(\\() (?\\?\\()\n (?:\n (? (?[+-]?\\d+)(?:(?[+-])(?\\d+))? )\n | (?R) \\g?\n | (?R&) (? (?(?!\\d)\\w+) (?:(?[+-])(?\\d+))? )\n | (?<) (?:\\g|\\g) (?>)\n | (?') (?:\\g|\\g) (?')\n | (?DEFINE)\n | (?VERSION)(?>?=)(?\\d+\\.\\d+)\n )\n(?\\))\n| (\\()(?\\?)(?=\\()", beginCaptures: { 1: {name: 'punctuation.definition.group.regexp'}, 10: {name: 'variable.other.group-name.regexp'}, 11: {name: 'keyword.operator.recursion-level.regexp'}, 12: {name: 'constant.numeric.integer.decimal.regexp'}, 13: {name: 'keyword.control.conditional.regexp'}, 14: {name: 'keyword.control.conditional.regexp'}, 15: {name: 'keyword.control.conditional.regexp'}, 16: {name: 'keyword.control.conditional.regexp'}, 17: {name: 'keyword.control.conditional.regexp'}, 18: {name: 'keyword.control.conditional.regexp'}, 19: {name: 'keyword.operator.comparison.regexp'}, 2: {name: 'keyword.control.conditional.regexp'}, 20: {name: 'constant.numeric.integer.decimal.regexp'}, 21: {name: 'keyword.control.conditional.regexp'}, 22: {name: 'punctuation.definition.group.regexp'}, 23: {name: 'keyword.control.conditional.regexp'}, 4: {name: 'constant.numeric.integer.decimal.regexp'}, 5: {name: 'keyword.operator.recursion-level.regexp'}, 6: {name: 'constant.numeric.integer.decimal.regexp'}, 7: {name: 'keyword.control.conditional.regexp'}, 8: {name: 'keyword.control.conditional.regexp'} }, end: '\\)', endCaptures: {0: {name: 'punctuation.definition.group.regexp'}}, name: 'meta.group.conditional.regexp', patterns: [ {include: '#literals-regular-expression-literal-regex-guts'} ] }, { begin: "(?x)\n(\\()\n(\n # BasicGroupKind\n (\\?)\n (?:\n ([:|>=!*] | <[=!*])\n # named groups\n | P?< (?:((?!\\d)\\w+) (-))? ((?!\\d)\\w+) >\n | ' (?:((?!\\d)\\w+) (-))? ((?!\\d)\\w+) '\n # matching options\n | (?:\n \\^(?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})*\n | (?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})+\n | (?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})* - (?:[iJmnsUxwDPSW]|xx|y\\{[gw]\\})*\n ): # case without : is handled by group-option-toggle\n )\n # PCRE2GroupKind\n | \\*(\n atomic\n |pla|positive_lookahead\n |nla|negative_lookahead\n |plb|positive_lookbehind\n |nlb|negative_lookbehind\n |napla|non_atomic_positive_lookahead\n |naplb|non_atomic_positive_lookbehind\n |sr|script_run\n |asr|atomic_script_run\n ):\n)?+", beginCaptures: { 1: {name: 'punctuation.definition.group.regexp'}, 10: {name: 'variable.other.group-name.regexp'}, 2: {name: 'keyword.other.group-options.regexp'}, 3: {name: 'punctuation.definition.group.regexp'}, 4: {name: 'punctuation.definition.group.regexp'}, 5: {name: 'variable.other.group-name.regexp'}, 6: {name: 'keyword.operator.balancing-group.regexp'}, 7: {name: 'variable.other.group-name.regexp'}, 8: {name: 'variable.other.group-name.regexp'}, 9: {name: 'keyword.operator.balancing-group.regexp'} }, end: '\\)', endCaptures: {0: {name: 'punctuation.definition.group.regexp'}}, name: 'meta.group.regexp', patterns: [ {include: '#literals-regular-expression-literal-regex-guts'} ] } ] }, 'literals-regular-expression-literal-line-comment': { captures: {1: {name: 'punctuation.definition.comment.regexp'}}, match: '(\\#).*$', name: 'comment.line.regexp' }, 'literals-regular-expression-literal-quote': { begin: '\\\\Q', beginCaptures: {0: {name: 'constant.character.escape.backslash.regexp'}}, end: '\\\\E|(\\n)', endCaptures: { 0: {name: 'constant.character.escape.backslash.regexp'}, 1: {name: 'invalid.illegal.returns-not-allowed.regexp'} }, name: 'string.quoted.other.regexp.swift' }, 'literals-regular-expression-literal-regex-guts': { patterns: [ {include: '#literals-regular-expression-literal-quote'}, { begin: '\\(\\?\\#', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.regexp'} }, end: '\\)', endCaptures: {0: {name: 'punctuation.definition.comment.end.regexp'}}, name: 'comment.block.regexp' }, { begin: '<\\{', beginCaptures: { 0: {name: 'punctuation.section.embedded.begin.regexp'} }, end: '\\}>', endCaptures: {0: {name: 'punctuation.section.embedded.end.regexp'}}, name: 'meta.embedded.expression.regexp' }, {include: '#literals-regular-expression-literal-unicode-scalars'}, {include: '#literals-regular-expression-literal-character-properties'}, { match: '[$^]|\\\\[AbBGyYzZ]|\\\\K', name: 'keyword.control.anchor.regexp' }, { include: '#literals-regular-expression-literal-backtracking-directive-or-global-matching-option' }, {include: '#literals-regular-expression-literal-callout'}, { include: '#literals-regular-expression-literal-backreference-or-subpattern' }, { match: '\\.|\\\\[CdDhHNORsSvVwWX]', name: 'constant.character.character-class.regexp' }, { match: '\\\\c.', name: 'constant.character.entity.control-character.regexp' }, {match: '\\\\[^c]', name: 'constant.character.escape.backslash.regexp'}, {match: '\\|', name: 'keyword.operator.or.regexp'}, {match: '[*+?]', name: 'keyword.operator.quantifier.regexp'}, { match: '\\{\\s*\\d+\\s*(?:,\\s*\\d*\\s*)?\\}|\\{\\s*,\\s*\\d+\\s*\\}', name: 'keyword.operator.quantifier.regexp' }, {include: '#literals-regular-expression-literal-custom-char-class'}, {include: '#literals-regular-expression-literal-group-option-toggle'}, {include: '#literals-regular-expression-literal-group-or-conditional'} ] }, 'literals-regular-expression-literal-set-operators': { patterns: [ {match: '&&', name: 'keyword.operator.intersection.regexp.swift'}, {match: '--', name: 'keyword.operator.subtraction.regexp.swift'}, { match: '\\~\\~', name: 'keyword.operator.symmetric-difference.regexp.swift' } ] }, 'literals-regular-expression-literal-unicode-scalars': { match: '(?x)\n\\\\u\\{\\s*(?:[0-9a-fA-F]+\\s*)+\\}\n| \\\\u[0-9a-fA-F]{4}\n| \\\\x\\{[0-9a-fA-F]+\\}\n| \\\\x[0-9a-fA-F]{0,2}\n| \\\\U[0-9a-fA-F]{8}\n| \\\\o\\{[0-7]+\\}\n| \\\\0[0-7]{0,3}\n| \\\\N\\{(?:U\\+[0-9a-fA-F]{1,8} | [\\s\\w-]+)\\}', name: 'constant.character.numeric.regexp' }, 'literals-string': { patterns: [ { begin: '"""', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.swift'} }, end: '"""(#*)', endCaptures: { 0: {name: 'punctuation.definition.string.end.swift'}, 1: {name: 'invalid.illegal.extra-closing-delimiter.swift'} }, name: 'string.quoted.double.block.swift', patterns: [ { match: '\\G.+(?=""")|\\G.+', name: 'invalid.illegal.content-after-opening-delimiter.swift' }, { match: '\\\\\\s*\\n', name: 'constant.character.escape.newline.swift' }, {include: '#literals-string-string-guts'}, { match: '\\S((?!\\\\\\().)*(?=""")', name: 'invalid.illegal.content-before-closing-delimiter.swift' } ] }, { begin: '#"""', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.swift'} }, end: '"""#(#*)', endCaptures: { 0: {name: 'punctuation.definition.string.end.swift'}, 1: {name: 'invalid.illegal.extra-closing-delimiter.swift'} }, name: 'string.quoted.double.block.raw.swift', patterns: [ { match: '\\G.+(?=""")|\\G.+', name: 'invalid.illegal.content-after-opening-delimiter.swift' }, { match: '\\\\#\\s*\\n', name: 'constant.character.escape.newline.swift' }, {include: '#literals-string-raw-string-guts'}, { match: '\\S((?!\\\\#\\().)*(?=""")', name: 'invalid.illegal.content-before-closing-delimiter.swift' } ] }, { begin: '(##+)"""', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.swift'} }, end: '"""\\1(#*)', endCaptures: { 0: {name: 'punctuation.definition.string.end.swift'}, 1: {name: 'invalid.illegal.extra-closing-delimiter.swift'} }, name: 'string.quoted.double.block.raw.swift', patterns: [ { match: '\\G.+(?=""")|\\G.+', name: 'invalid.illegal.content-after-opening-delimiter.swift' } ] }, { begin: '"', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.swift'} }, end: '"(#*)', endCaptures: { 0: {name: 'punctuation.definition.string.end.swift'}, 1: {name: 'invalid.illegal.extra-closing-delimiter.swift'} }, name: 'string.quoted.double.single-line.swift', patterns: [ { match: '\\r|\\n', name: 'invalid.illegal.returns-not-allowed.swift' }, {include: '#literals-string-string-guts'} ] }, { begin: '(##+)"', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.raw.swift'} }, end: '"\\1(#*)', endCaptures: { 0: {name: 'punctuation.definition.string.end.raw.swift'}, 1: {name: 'invalid.illegal.extra-closing-delimiter.swift'} }, name: 'string.quoted.double.single-line.raw.swift', patterns: [ { match: '\\r|\\n', name: 'invalid.illegal.returns-not-allowed.swift' } ] }, { begin: '#"', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.raw.swift'} }, end: '"#(#*)', endCaptures: { 0: {name: 'punctuation.definition.string.end.raw.swift'}, 1: {name: 'invalid.illegal.extra-closing-delimiter.swift'} }, name: 'string.quoted.double.single-line.raw.swift', patterns: [ { match: '\\r|\\n', name: 'invalid.illegal.returns-not-allowed.swift' }, {include: '#literals-string-raw-string-guts'} ] } ] }, 'literals-string-raw-string-guts': { patterns: [ {match: '\\\\#[0\\\\tnr"\']', name: 'constant.character.escape.swift'}, { match: '\\\\#u\\{[0-9a-fA-F]{1,8}\\}', name: 'constant.character.escape.unicode.swift' }, { begin: '\\\\#\\(', beginCaptures: { 0: {name: 'punctuation.section.embedded.begin.swift'} }, contentName: 'source.swift', end: '\\)', endCaptures: {0: {name: 'punctuation.section.embedded.end.swift'}}, name: 'meta.embedded.line.swift', patterns: [{include: '$self'}, {begin: '\\(', end: '\\)'}] }, {match: '\\\\#.', name: 'invalid.illegal.escape-not-recognized'} ] }, 'literals-string-string-guts': { patterns: [ {match: '\\\\[0\\\\tnr"\']', name: 'constant.character.escape.swift'}, { match: '\\\\u\\{[0-9a-fA-F]{1,8}\\}', name: 'constant.character.escape.unicode.swift' }, { begin: '\\\\\\(', beginCaptures: { 0: {name: 'punctuation.section.embedded.begin.swift'} }, contentName: 'source.swift', end: '\\)', endCaptures: {0: {name: 'punctuation.section.embedded.end.swift'}}, name: 'meta.embedded.line.swift', patterns: [{include: '$self'}, {begin: '\\(', end: '\\)'}] }, {match: '\\\\.', name: 'invalid.illegal.escape-not-recognized'} ] }, 'member-reference': { patterns: [ { captures: { 1: {name: 'variable.other.swift'}, 2: {name: 'punctuation.definition.identifier.swift'}, 3: {name: 'punctuation.definition.identifier.swift'} }, match: '(?<=\\.)((?`?)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*(\\k))' } ] }, operators: { patterns: [ { match: '\\b(is\\b|as([!?]\\B|\\b))', name: 'keyword.operator.type-casting.swift' }, { begin: '(?x)\n(?=\n (? # operator-head\n [/=\\-+!*%<>&|^~?]\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n )\n | \\.\n (\n \\g # operator-head\n | \\.\n | [\\x{0300}-\\x{036F}] # operator-character\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n)', end: '(?!\\G)', patterns: [ { captures: { 0: { patterns: [ { match: '\\G(\\+\\+|\\-\\-)$', name: 'keyword.operator.increment-or-decrement.swift' }, { match: '\\G(\\+|\\-)$', name: 'keyword.operator.arithmetic.unary.swift' }, { match: '\\G!$', name: 'keyword.operator.logical.not.swift' }, { match: '\\G~$', name: 'keyword.operator.bitwise.not.swift' }, {match: '.+', name: 'keyword.operator.custom.prefix.swift'} ] } }, match: '(?x)\n\\G # Matching from the beginning ensures\n # that we start with operator-head\n(?<=^|[\\s(\\[{,;:])\n(\n (?!(//|/\\*|\\*/))\n (\n [/=\\-+!*%<>&|^~?] # operator-head\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n \n | [\\x{0300}-\\x{036F}] # operator-character\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n)++\n(?![\\s)\\]},;:]|\\z)' }, { captures: { 0: { patterns: [ { match: '\\G(\\+\\+|\\-\\-)$', name: 'keyword.operator.increment-or-decrement.swift' }, { match: '\\G!$', name: 'keyword.operator.increment-or-decrement.swift' }, {match: '.+', name: 'keyword.operator.custom.postfix.swift'} ] } }, match: '(?x)\n\\G # Matching from the beginning ensures\n # that we start with operator-head\n(?&|^~?] # operator-head\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n \n | [\\x{0300}-\\x{036F}] # operator-character\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n)++\n(?=[\\s)\\]},;:]|\\z)' }, { captures: { 0: { patterns: [ {match: '\\G=$', name: 'keyword.operator.assignment.swift'}, { match: '\\G(\\+|\\-|\\*|/|%|<<|>>|&|\\^|\\||&&|\\|\\|)=$', name: 'keyword.operator.assignment.compound.swift' }, { match: '\\G(\\+|\\-|\\*|/)$', name: 'keyword.operator.arithmetic.swift' }, { match: '\\G&(\\+|\\-|\\*)$', name: 'keyword.operator.arithmetic.overflow.swift' }, { match: '\\G%$', name: 'keyword.operator.arithmetic.remainder.swift' }, { match: '\\G(==|!=|>|<|>=|<=|~=)$', name: 'keyword.operator.comparison.swift' }, { match: '\\G\\?\\?$', name: 'keyword.operator.coalescing.swift' }, { match: '\\G(&&|\\|\\|)$', name: 'keyword.operator.logical.swift' }, { match: '\\G(&|\\||\\^|<<|>>)$', name: 'keyword.operator.bitwise.swift' }, { match: '\\G(===|!==)$', name: 'keyword.operator.bitwise.swift' }, {match: '\\G\\?$', name: 'keyword.operator.ternary.swift'}, {match: '.+', name: 'keyword.operator.custom.infix.swift'} ] } }, match: '(?x)\n\\G # Matching from the beginning ensures\n # that we start with operator-head\n(\n (?!(//|/\\*|\\*/))\n (\n [/=\\-+!*%<>&|^~?] # operator-head\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n \n | [\\x{0300}-\\x{036F}] # operator-character\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n)++' }, { captures: { 0: { patterns: [ { match: '.+', name: 'keyword.operator.custom.prefix.dot.swift' } ] } }, match: '(?x)\n\\G # Matching from the beginning ensures\n # that we start with operator-head\n(?<=^|[\\s(\\[{,;:])\n\\. # dot\n(\n (?!(//|/\\*|\\*/))\n (\n \\. # dot\n | [/=\\-+!*%<>&|^~?] # operator-head\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n \n | [\\x{0300}-\\x{036F}] # operator-character\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n)++\n(?![\\s)\\]},;:]|\\z)' }, { captures: { 0: { patterns: [ { match: '.+', name: 'keyword.operator.custom.postfix.dot.swift' } ] } }, match: '(?x)\n\\G # Matching from the beginning ensures\n # that we start with operator-head\n(?&|^~?] # operator-head\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n \n | [\\x{0300}-\\x{036F}] # operator-character\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n)++\n(?=[\\s)\\]},;:]|\\z)' }, { captures: { 0: { patterns: [ { match: '\\G\\.\\.[.<]$', name: 'keyword.operator.range.swift' }, { match: '.+', name: 'keyword.operator.custom.infix.dot.swift' } ] } }, match: '(?x)\n\\G # Matching from the beginning ensures\n # that we start with operator-head\n\\. # dot\n(\n (?!(//|/\\*|\\*/))\n (\n \\. # dot\n | [/=\\-+!*%<>&|^~?] # operator-head\n | [\\x{00A1}-\\x{00A7}]\n | [\\x{00A9}\\x{00AB}]\n | [\\x{00AC}\\x{00AE}]\n | [\\x{00B0}-\\x{00B1}\\x{00B6}\\x{00BB}\\x{00BF}\\x{00D7}\\x{00F7}]\n | [\\x{2016}-\\x{2017}\\x{2020}-\\x{2027}]\n | [\\x{2030}-\\x{203E}]\n | [\\x{2041}-\\x{2053}]\n | [\\x{2055}-\\x{205E}]\n | [\\x{2190}-\\x{23FF}]\n | [\\x{2500}-\\x{2775}]\n | [\\x{2794}-\\x{2BFF}]\n | [\\x{2E00}-\\x{2E7F}]\n | [\\x{3001}-\\x{3003}]\n | [\\x{3008}-\\x{3030}]\n \n | [\\x{0300}-\\x{036F}] # operator-character\n | [\\x{1DC0}-\\x{1DFF}]\n | [\\x{20D0}-\\x{20FF}]\n | [\\x{FE00}-\\x{FE0F}]\n | [\\x{FE20}-\\x{FE2F}]\n | [\\x{E0100}-\\x{E01EF}]\n )\n)++' } ] }, {match: ':', name: 'keyword.operator.ternary.swift'} ] }, root: { patterns: [ {include: '#compiler-control'}, {include: '#declarations'}, {include: '#expressions'} ] } }, scopeName: 'source.swift' } export default grammar