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