xref: /vim-8.2.3635/runtime/syntax/swift.vim (revision 4072ba57)
11d9215b9SBram Moolenaar" This source file is part of the Swift.org open source project
21d9215b9SBram Moolenaar"
31d9215b9SBram Moolenaar" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
41d9215b9SBram Moolenaar" Licensed under Apache License v2.0 with Runtime Library Exception
51d9215b9SBram Moolenaar"
61d9215b9SBram Moolenaar" See https://swift.org/LICENSE.txt for license information
71d9215b9SBram Moolenaar" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
81d9215b9SBram Moolenaar"
91d9215b9SBram Moolenaar" Vim syntax file
101d9215b9SBram Moolenaar" Language: swift
111d9215b9SBram Moolenaar" Maintainer: Joe Groff <[email protected]>
121d9215b9SBram Moolenaar" Last Change: 2018 Jan 21
131d9215b9SBram Moolenaar"
141d9215b9SBram Moolenaar" Vim maintainer: Emir SARI <[email protected]>
151d9215b9SBram Moolenaar
161d9215b9SBram Moolenaarif exists("b:current_syntax")
171d9215b9SBram Moolenaar    finish
181d9215b9SBram Moolenaarendif
191d9215b9SBram Moolenaar
201d9215b9SBram Moolenaarlet s:keepcpo = &cpo
211d9215b9SBram Moolenaarset cpo&vim
221d9215b9SBram Moolenaar
231d9215b9SBram Moolenaarsyn keyword swiftKeyword
241d9215b9SBram Moolenaar      \ break
25*4072ba57SBram Moolenaar      \ case
261d9215b9SBram Moolenaar      \ catch
271d9215b9SBram Moolenaar      \ continue
28*4072ba57SBram Moolenaar      \ default
291d9215b9SBram Moolenaar      \ defer
301d9215b9SBram Moolenaar      \ do
311d9215b9SBram Moolenaar      \ else
321d9215b9SBram Moolenaar      \ fallthrough
331d9215b9SBram Moolenaar      \ for
341d9215b9SBram Moolenaar      \ guard
351d9215b9SBram Moolenaar      \ if
361d9215b9SBram Moolenaar      \ in
371d9215b9SBram Moolenaar      \ repeat
381d9215b9SBram Moolenaar      \ return
391d9215b9SBram Moolenaar      \ switch
401d9215b9SBram Moolenaar      \ throw
411d9215b9SBram Moolenaar      \ try
421d9215b9SBram Moolenaar      \ where
431d9215b9SBram Moolenaar      \ while
441d9215b9SBram Moolenaarsyn match swiftMultiwordKeyword
451d9215b9SBram Moolenaar      \ "indirect case"
461d9215b9SBram Moolenaar
47*4072ba57SBram Moolenaarsyn keyword swiftCoreTypes
48*4072ba57SBram Moolenaar      \ Any
49*4072ba57SBram Moolenaar      \ AnyObject
50*4072ba57SBram Moolenaar
511d9215b9SBram Moolenaarsyn keyword swiftImport skipwhite skipempty nextgroup=swiftImportModule
521d9215b9SBram Moolenaar      \ import
531d9215b9SBram Moolenaar
541d9215b9SBram Moolenaarsyn keyword swiftDefinitionModifier
551d9215b9SBram Moolenaar      \ convenience
561d9215b9SBram Moolenaar      \ dynamic
571d9215b9SBram Moolenaar      \ fileprivate
581d9215b9SBram Moolenaar      \ final
591d9215b9SBram Moolenaar      \ internal
601d9215b9SBram Moolenaar      \ lazy
611d9215b9SBram Moolenaar      \ nonmutating
621d9215b9SBram Moolenaar      \ open
631d9215b9SBram Moolenaar      \ override
641d9215b9SBram Moolenaar      \ prefix
651d9215b9SBram Moolenaar      \ private
661d9215b9SBram Moolenaar      \ public
671d9215b9SBram Moolenaar      \ required
681d9215b9SBram Moolenaar      \ rethrows
691d9215b9SBram Moolenaar      \ static
701d9215b9SBram Moolenaar      \ throws
711d9215b9SBram Moolenaar      \ weak
721d9215b9SBram Moolenaar
731d9215b9SBram Moolenaarsyn keyword swiftInOutKeyword skipwhite skipempty nextgroup=swiftTypeName
741d9215b9SBram Moolenaar      \ inout
751d9215b9SBram Moolenaar
761d9215b9SBram Moolenaarsyn keyword swiftIdentifierKeyword
771d9215b9SBram Moolenaar      \ Self
781d9215b9SBram Moolenaar      \ metatype
791d9215b9SBram Moolenaar      \ self
801d9215b9SBram Moolenaar      \ super
811d9215b9SBram Moolenaar
821d9215b9SBram Moolenaarsyn keyword swiftFuncKeywordGeneral skipwhite skipempty nextgroup=swiftTypeParameters
831d9215b9SBram Moolenaar      \ init
841d9215b9SBram Moolenaar
851d9215b9SBram Moolenaarsyn keyword swiftFuncKeyword
861d9215b9SBram Moolenaar      \ deinit
871d9215b9SBram Moolenaar      \ subscript
881d9215b9SBram Moolenaar
891d9215b9SBram Moolenaarsyn keyword swiftScope
901d9215b9SBram Moolenaar      \ autoreleasepool
911d9215b9SBram Moolenaar
921d9215b9SBram Moolenaarsyn keyword swiftMutating skipwhite skipempty nextgroup=swiftFuncDefinition
931d9215b9SBram Moolenaar      \ mutating
941d9215b9SBram Moolenaarsyn keyword swiftFuncDefinition skipwhite skipempty nextgroup=swiftTypeName,swiftOperator
951d9215b9SBram Moolenaar      \ func
961d9215b9SBram Moolenaar
971d9215b9SBram Moolenaarsyn keyword swiftTypeDefinition skipwhite skipempty nextgroup=swiftTypeName
981d9215b9SBram Moolenaar      \ class
991d9215b9SBram Moolenaar      \ enum
1001d9215b9SBram Moolenaar      \ extension
101*4072ba57SBram Moolenaar      \ operator
102*4072ba57SBram Moolenaar      \ precedencegroup
1031d9215b9SBram Moolenaar      \ protocol
1041d9215b9SBram Moolenaar      \ struct
1051d9215b9SBram Moolenaar
1061d9215b9SBram Moolenaarsyn keyword swiftTypeAliasDefinition skipwhite skipempty nextgroup=swiftTypeAliasName
107*4072ba57SBram Moolenaar      \ associatedtype
1081d9215b9SBram Moolenaar      \ typealias
1091d9215b9SBram Moolenaar
1101d9215b9SBram Moolenaarsyn match swiftMultiwordTypeDefinition skipwhite skipempty nextgroup=swiftTypeName
1111d9215b9SBram Moolenaar      \ "indirect enum"
1121d9215b9SBram Moolenaar
1131d9215b9SBram Moolenaarsyn keyword swiftVarDefinition skipwhite skipempty nextgroup=swiftVarName
1141d9215b9SBram Moolenaar      \ let
1151d9215b9SBram Moolenaar      \ var
1161d9215b9SBram Moolenaar
1171d9215b9SBram Moolenaarsyn keyword swiftLabel
1181d9215b9SBram Moolenaar      \ get
1191d9215b9SBram Moolenaar      \ set
1201d9215b9SBram Moolenaar      \ didSet
1211d9215b9SBram Moolenaar      \ willSet
1221d9215b9SBram Moolenaar
1231d9215b9SBram Moolenaarsyn keyword swiftBoolean
1241d9215b9SBram Moolenaar      \ false
1251d9215b9SBram Moolenaar      \ true
1261d9215b9SBram Moolenaar
1271d9215b9SBram Moolenaarsyn keyword swiftNil
1281d9215b9SBram Moolenaar      \ nil
1291d9215b9SBram Moolenaar
1301d9215b9SBram Moolenaarsyn match swiftImportModule contained nextgroup=swiftImportComponent
1311d9215b9SBram Moolenaar      \ /\<[A-Za-z_][A-Za-z_0-9]*\>/
1321d9215b9SBram Moolenaarsyn match swiftImportComponent contained nextgroup=swiftImportComponent
1331d9215b9SBram Moolenaar      \ /\.\<[A-Za-z_][A-Za-z_0-9]*\>/
1341d9215b9SBram Moolenaar
1351d9215b9SBram Moolenaarsyn match swiftTypeAliasName contained skipwhite skipempty nextgroup=swiftTypeAliasValue
1361d9215b9SBram Moolenaar      \ /\<[A-Za-z_][A-Za-z_0-9]*\>/
1371d9215b9SBram Moolenaarsyn match swiftTypeName contained skipwhite skipempty nextgroup=swiftTypeParameters
1381d9215b9SBram Moolenaar      \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>/
1391d9215b9SBram Moolenaarsyn match swiftVarName contained skipwhite skipempty nextgroup=swiftTypeDeclaration
1401d9215b9SBram Moolenaar      \ /\<[A-Za-z_][A-Za-z_0-9]*\>/
1411d9215b9SBram Moolenaarsyn match swiftImplicitVarName
1421d9215b9SBram Moolenaar      \ /\$\<[A-Za-z_0-9]\+\>/
1431d9215b9SBram Moolenaar
1441d9215b9SBram Moolenaar" TypeName[Optionality]?
1451d9215b9SBram Moolenaarsyn match swiftType contained skipwhite skipempty nextgroup=swiftTypeParameters
1461d9215b9SBram Moolenaar      \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/
1471d9215b9SBram Moolenaar" [Type:Type] (dictionary) or [Type] (array)
1481d9215b9SBram Moolenaarsyn region swiftType contained contains=swiftTypePair,swiftType
1491d9215b9SBram Moolenaar      \ matchgroup=Delimiter start=/\[/ end=/\]/
1501d9215b9SBram Moolenaarsyn match swiftTypePair contained skipwhite skipempty nextgroup=swiftTypeParameters,swiftTypeDeclaration
1511d9215b9SBram Moolenaar      \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/
1521d9215b9SBram Moolenaar" (Type[, Type]) (tuple)
1531d9215b9SBram Moolenaar" FIXME: we should be able to use skip="," and drop swiftParamDelim
1541d9215b9SBram Moolenaarsyn region swiftType contained contains=swiftType,swiftParamDelim
1551d9215b9SBram Moolenaar      \ matchgroup=Delimiter start="[^@]\?(" end=")" matchgroup=NONE skip=","
1561d9215b9SBram Moolenaarsyn match swiftParamDelim contained
1571d9215b9SBram Moolenaar      \ /,/
1581d9215b9SBram Moolenaar" <Generic Clause> (generics)
1591d9215b9SBram Moolenaarsyn region swiftTypeParameters contained contains=swiftVarName,swiftConstraint
1601d9215b9SBram Moolenaar      \ matchgroup=Delimiter start="<" end=">" matchgroup=NONE skip=","
1611d9215b9SBram Moolenaarsyn keyword swiftConstraint contained
1621d9215b9SBram Moolenaar      \ where
1631d9215b9SBram Moolenaar
1641d9215b9SBram Moolenaarsyn match swiftTypeAliasValue skipwhite skipempty nextgroup=swiftType
1651d9215b9SBram Moolenaar      \ /=/
1661d9215b9SBram Moolenaarsyn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType,swiftInOutKeyword
1671d9215b9SBram Moolenaar      \ /:/
1681d9215b9SBram Moolenaarsyn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType
1691d9215b9SBram Moolenaar      \ /->/
1701d9215b9SBram Moolenaar
1711d9215b9SBram Moolenaarsyn match swiftKeyword
1721d9215b9SBram Moolenaar      \ /\<case\>/
1731d9215b9SBram Moolenaarsyn region swiftCaseLabelRegion
1741d9215b9SBram Moolenaar      \ matchgroup=swiftKeyword start=/\<case\>/ matchgroup=Delimiter end=/:/ oneline contains=TOP
1751d9215b9SBram Moolenaarsyn region swiftDefaultLabelRegion
1761d9215b9SBram Moolenaar      \ matchgroup=swiftKeyword start=/\<default\>/ matchgroup=Delimiter end=/:/ oneline
1771d9215b9SBram Moolenaar
1781d9215b9SBram Moolenaarsyn region swiftParenthesisRegion contains=TOP
1791d9215b9SBram Moolenaar      \ matchgroup=NONE start=/(/ end=/)/
1801d9215b9SBram Moolenaar
1811d9215b9SBram Moolenaarsyn region swiftString contains=swiftInterpolationRegion
1821d9215b9SBram Moolenaar      \ start=/"/ skip=/\\\\\|\\"/ end=/"/
1831d9215b9SBram Moolenaarsyn region swiftInterpolationRegion contained contains=TOP
1841d9215b9SBram Moolenaar      \ matchgroup=swiftInterpolation start=/\\(/ end=/)/
1851d9215b9SBram Moolenaarsyn region swiftComment contains=swiftComment,swiftLineComment,swiftTodo
1861d9215b9SBram Moolenaar      \ start="/\*" end="\*/"
1871d9215b9SBram Moolenaarsyn region swiftLineComment contains=swiftComment,swiftTodo
1881d9215b9SBram Moolenaar      \ start="//" end="$"
1891d9215b9SBram Moolenaar
1901d9215b9SBram Moolenaarsyn match swiftDecimal
1911d9215b9SBram Moolenaar      \ /[+\-]\?\<\([0-9][0-9_]*\)\([.][0-9_]*\)\?\([eE][+\-]\?[0-9][0-9_]*\)\?\>/
1921d9215b9SBram Moolenaarsyn match swiftHex
1931d9215b9SBram Moolenaar      \ /[+\-]\?\<0x[0-9A-Fa-f][0-9A-Fa-f_]*\(\([.][0-9A-Fa-f_]*\)\?[pP][+\-]\?[0-9][0-9_]*\)\?\>/
1941d9215b9SBram Moolenaarsyn match swiftOct
1951d9215b9SBram Moolenaar      \ /[+\-]\?\<0o[0-7][0-7_]*\>/
1961d9215b9SBram Moolenaarsyn match swiftBin
1971d9215b9SBram Moolenaar      \ /[+\-]\?\<0b[01][01_]*\>/
1981d9215b9SBram Moolenaar
1991d9215b9SBram Moolenaarsyn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters
2001d9215b9SBram Moolenaar      \ "\.\@<!\.\.\.\@!\|[/=\-+*%<>!&|^~]\@<!\(/[/*]\@![/=\-+*%<>!&|^~]*\|*/\@![/=\-+*%<>!&|^~]*\|->\@![/=\-+*%<>!&|^~]*\|[=+%<>!&|^~][/=\-+*%<>!&|^~]*\)"
2011d9215b9SBram Moolenaarsyn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters
2021d9215b9SBram Moolenaar      \ "\.\.[<.]"
2031d9215b9SBram Moolenaar
2041d9215b9SBram Moolenaarsyn match swiftChar
2051d9215b9SBram Moolenaar      \ /'\([^'\\]\|\\\(["'tnr0\\]\|x[0-9a-fA-F]\{2}\|u[0-9a-fA-F]\{4}\|U[0-9a-fA-F]\{8}\)\)'/
2061d9215b9SBram Moolenaar
2071d9215b9SBram Moolenaarsyn match swiftTupleIndexNumber contains=swiftDecimal
2081d9215b9SBram Moolenaar      \ /\.[0-9]\+/
2091d9215b9SBram Moolenaarsyn match swiftDecimal contained
2101d9215b9SBram Moolenaar      \ /[0-9]\+/
2111d9215b9SBram Moolenaar
2121d9215b9SBram Moolenaarsyn match swiftPreproc
213*4072ba57SBram Moolenaar      \ /#\(\<column\>\|\<dsohandle\>\|\<file\>\|\<line\>\|\<function\>\)/
2141d9215b9SBram Moolenaarsyn match swiftPreproc
2151d9215b9SBram Moolenaar      \ /^\s*#\(\<if\>\|\<else\>\|\<elseif\>\|\<endif\>\|\<error\>\|\<warning\>\)/
2161d9215b9SBram Moolenaarsyn region swiftPreprocFalse
2171d9215b9SBram Moolenaar      \ start="^\s*#\<if\>\s\+\<false\>" end="^\s*#\(\<else\>\|\<elseif\>\|\<endif\>\)"
2181d9215b9SBram Moolenaar
2191d9215b9SBram Moolenaarsyn match swiftAttribute
2201d9215b9SBram Moolenaar      \ /@\<\w\+\>/ skipwhite skipempty nextgroup=swiftType,swiftTypeDefinition
2211d9215b9SBram Moolenaar
2221d9215b9SBram Moolenaarsyn keyword swiftTodo MARK TODO FIXME contained
2231d9215b9SBram Moolenaar
224*4072ba57SBram Moolenaarsyn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes
2251d9215b9SBram Moolenaar      \ "\<is\>"
226*4072ba57SBram Moolenaarsyn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes
2271d9215b9SBram Moolenaar      \ "\<as\>[!?]\?"
2281d9215b9SBram Moolenaar
2291d9215b9SBram Moolenaarsyn match swiftNilOps
2301d9215b9SBram Moolenaar      \ "??"
2311d9215b9SBram Moolenaar
2321d9215b9SBram Moolenaarsyn region swiftReservedIdentifier oneline
2331d9215b9SBram Moolenaar      \ start=/`/ end=/`/
2341d9215b9SBram Moolenaar
2351d9215b9SBram Moolenaarhi def link swiftImport Include
2361d9215b9SBram Moolenaarhi def link swiftImportModule Title
2371d9215b9SBram Moolenaarhi def link swiftImportComponent Identifier
2381d9215b9SBram Moolenaarhi def link swiftKeyword Statement
239*4072ba57SBram Moolenaarhi def link swiftCoreTypes Type
2401d9215b9SBram Moolenaarhi def link swiftMultiwordKeyword Statement
2411d9215b9SBram Moolenaarhi def link swiftTypeDefinition Define
2421d9215b9SBram Moolenaarhi def link swiftMultiwordTypeDefinition Define
2431d9215b9SBram Moolenaarhi def link swiftType Type
2441d9215b9SBram Moolenaarhi def link swiftTypePair Type
2451d9215b9SBram Moolenaarhi def link swiftTypeAliasName Identifier
2461d9215b9SBram Moolenaarhi def link swiftTypeName Function
2471d9215b9SBram Moolenaarhi def link swiftConstraint Special
2481d9215b9SBram Moolenaarhi def link swiftFuncDefinition Define
2491d9215b9SBram Moolenaarhi def link swiftDefinitionModifier Operator
2501d9215b9SBram Moolenaarhi def link swiftInOutKeyword Define
2511d9215b9SBram Moolenaarhi def link swiftFuncKeyword Function
2521d9215b9SBram Moolenaarhi def link swiftFuncKeywordGeneral Function
2531d9215b9SBram Moolenaarhi def link swiftTypeAliasDefinition Define
2541d9215b9SBram Moolenaarhi def link swiftVarDefinition Define
2551d9215b9SBram Moolenaarhi def link swiftVarName Identifier
2561d9215b9SBram Moolenaarhi def link swiftImplicitVarName Identifier
2571d9215b9SBram Moolenaarhi def link swiftIdentifierKeyword Identifier
2581d9215b9SBram Moolenaarhi def link swiftTypeAliasValue Delimiter
2591d9215b9SBram Moolenaarhi def link swiftTypeDeclaration Delimiter
2601d9215b9SBram Moolenaarhi def link swiftTypeParameters Delimiter
2611d9215b9SBram Moolenaarhi def link swiftBoolean Boolean
2621d9215b9SBram Moolenaarhi def link swiftString String
2631d9215b9SBram Moolenaarhi def link swiftInterpolation Special
2641d9215b9SBram Moolenaarhi def link swiftComment Comment
2651d9215b9SBram Moolenaarhi def link swiftLineComment Comment
2661d9215b9SBram Moolenaarhi def link swiftDecimal Number
2671d9215b9SBram Moolenaarhi def link swiftHex Number
2681d9215b9SBram Moolenaarhi def link swiftOct Number
2691d9215b9SBram Moolenaarhi def link swiftBin Number
2701d9215b9SBram Moolenaarhi def link swiftOperator Function
2711d9215b9SBram Moolenaarhi def link swiftChar Character
2721d9215b9SBram Moolenaarhi def link swiftLabel Operator
2731d9215b9SBram Moolenaarhi def link swiftMutating Statement
2741d9215b9SBram Moolenaarhi def link swiftPreproc PreCondit
2751d9215b9SBram Moolenaarhi def link swiftPreprocFalse Comment
2761d9215b9SBram Moolenaarhi def link swiftAttribute Type
2771d9215b9SBram Moolenaarhi def link swiftTodo Todo
2781d9215b9SBram Moolenaarhi def link swiftNil Constant
2791d9215b9SBram Moolenaarhi def link swiftCastOp Operator
2801d9215b9SBram Moolenaarhi def link swiftNilOps Operator
2811d9215b9SBram Moolenaarhi def link swiftScope PreProc
2821d9215b9SBram Moolenaar
2831d9215b9SBram Moolenaarlet b:current_syntax = "swift"
2841d9215b9SBram Moolenaar
2851d9215b9SBram Moolenaarlet &cpo = s:keepcpo
2861d9215b9SBram Moolenaarunlet s:keepcpo
287