mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			278 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" This source file is part of the Swift.org open source project
 | 
						|
"
 | 
						|
" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
 | 
						|
" Licensed under Apache License v2.0 with Runtime Library Exception
 | 
						|
"
 | 
						|
" See https://swift.org/LICENSE.txt for license information
 | 
						|
" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
 | 
						|
"
 | 
						|
" Vim syntax file
 | 
						|
" Language: swift
 | 
						|
" Maintainer: Joe Groff <jgroff@apple.com>
 | 
						|
" Last Change: 2018 Jan 21
 | 
						|
"
 | 
						|
" Vim maintainer: Emir SARI <bitigchi@me.com>
 | 
						|
 | 
						|
if exists("b:current_syntax")
 | 
						|
    finish
 | 
						|
endif
 | 
						|
 | 
						|
let s:keepcpo = &cpo
 | 
						|
set cpo&vim
 | 
						|
 | 
						|
syn keyword swiftKeyword
 | 
						|
      \ associatedtype
 | 
						|
      \ break
 | 
						|
      \ catch
 | 
						|
      \ continue
 | 
						|
      \ defer
 | 
						|
      \ do
 | 
						|
      \ else
 | 
						|
      \ fallthrough
 | 
						|
      \ for
 | 
						|
      \ guard
 | 
						|
      \ if
 | 
						|
      \ in
 | 
						|
      \ repeat
 | 
						|
      \ return
 | 
						|
      \ switch
 | 
						|
      \ throw
 | 
						|
      \ try
 | 
						|
      \ where
 | 
						|
      \ while
 | 
						|
syn match swiftMultiwordKeyword
 | 
						|
      \ "indirect case"
 | 
						|
 | 
						|
syn keyword swiftImport skipwhite skipempty nextgroup=swiftImportModule
 | 
						|
      \ import
 | 
						|
 | 
						|
syn keyword swiftDefinitionModifier
 | 
						|
      \ convenience
 | 
						|
      \ dynamic
 | 
						|
      \ fileprivate
 | 
						|
      \ final
 | 
						|
      \ internal
 | 
						|
      \ lazy
 | 
						|
      \ nonmutating
 | 
						|
      \ open
 | 
						|
      \ override
 | 
						|
      \ prefix
 | 
						|
      \ private
 | 
						|
      \ public
 | 
						|
      \ required
 | 
						|
      \ rethrows
 | 
						|
      \ static
 | 
						|
      \ throws
 | 
						|
      \ weak
 | 
						|
 | 
						|
syn keyword swiftInOutKeyword skipwhite skipempty nextgroup=swiftTypeName
 | 
						|
      \ inout
 | 
						|
 | 
						|
syn keyword swiftIdentifierKeyword
 | 
						|
      \ Self
 | 
						|
      \ metatype
 | 
						|
      \ self
 | 
						|
      \ super
 | 
						|
 | 
						|
syn keyword swiftFuncKeywordGeneral skipwhite skipempty nextgroup=swiftTypeParameters
 | 
						|
      \ init
 | 
						|
 | 
						|
syn keyword swiftFuncKeyword
 | 
						|
      \ deinit
 | 
						|
      \ subscript
 | 
						|
 | 
						|
syn keyword swiftScope
 | 
						|
      \ autoreleasepool
 | 
						|
 | 
						|
syn keyword swiftMutating skipwhite skipempty nextgroup=swiftFuncDefinition
 | 
						|
      \ mutating
 | 
						|
syn keyword swiftFuncDefinition skipwhite skipempty nextgroup=swiftTypeName,swiftOperator
 | 
						|
      \ func
 | 
						|
 | 
						|
syn keyword swiftTypeDefinition skipwhite skipempty nextgroup=swiftTypeName
 | 
						|
      \ class
 | 
						|
      \ enum
 | 
						|
      \ extension
 | 
						|
      \ protocol
 | 
						|
      \ struct
 | 
						|
 | 
						|
syn keyword swiftTypeAliasDefinition skipwhite skipempty nextgroup=swiftTypeAliasName
 | 
						|
      \ typealias
 | 
						|
 | 
						|
syn match swiftMultiwordTypeDefinition skipwhite skipempty nextgroup=swiftTypeName
 | 
						|
      \ "indirect enum"
 | 
						|
 | 
						|
syn keyword swiftVarDefinition skipwhite skipempty nextgroup=swiftVarName
 | 
						|
      \ let
 | 
						|
      \ var
 | 
						|
 | 
						|
syn keyword swiftLabel
 | 
						|
      \ get
 | 
						|
      \ set
 | 
						|
      \ didSet
 | 
						|
      \ willSet
 | 
						|
 | 
						|
syn keyword swiftBoolean
 | 
						|
      \ false
 | 
						|
      \ true
 | 
						|
 | 
						|
syn keyword swiftNil
 | 
						|
      \ nil
 | 
						|
 | 
						|
syn match swiftImportModule contained nextgroup=swiftImportComponent
 | 
						|
      \ /\<[A-Za-z_][A-Za-z_0-9]*\>/
 | 
						|
syn match swiftImportComponent contained nextgroup=swiftImportComponent
 | 
						|
      \ /\.\<[A-Za-z_][A-Za-z_0-9]*\>/
 | 
						|
 | 
						|
syn match swiftTypeAliasName contained skipwhite skipempty nextgroup=swiftTypeAliasValue
 | 
						|
      \ /\<[A-Za-z_][A-Za-z_0-9]*\>/
 | 
						|
syn match swiftTypeName contained skipwhite skipempty nextgroup=swiftTypeParameters
 | 
						|
      \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>/
 | 
						|
syn match swiftVarName contained skipwhite skipempty nextgroup=swiftTypeDeclaration
 | 
						|
      \ /\<[A-Za-z_][A-Za-z_0-9]*\>/
 | 
						|
syn match swiftImplicitVarName
 | 
						|
      \ /\$\<[A-Za-z_0-9]\+\>/
 | 
						|
 | 
						|
" TypeName[Optionality]?
 | 
						|
syn match swiftType contained skipwhite skipempty nextgroup=swiftTypeParameters
 | 
						|
      \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/
 | 
						|
" [Type:Type] (dictionary) or [Type] (array)
 | 
						|
syn region swiftType contained contains=swiftTypePair,swiftType
 | 
						|
      \ matchgroup=Delimiter start=/\[/ end=/\]/
 | 
						|
syn match swiftTypePair contained skipwhite skipempty nextgroup=swiftTypeParameters,swiftTypeDeclaration
 | 
						|
      \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/
 | 
						|
" (Type[, Type]) (tuple)
 | 
						|
" FIXME: we should be able to use skip="," and drop swiftParamDelim
 | 
						|
syn region swiftType contained contains=swiftType,swiftParamDelim
 | 
						|
      \ matchgroup=Delimiter start="[^@]\?(" end=")" matchgroup=NONE skip=","
 | 
						|
syn match swiftParamDelim contained
 | 
						|
      \ /,/
 | 
						|
" <Generic Clause> (generics)
 | 
						|
syn region swiftTypeParameters contained contains=swiftVarName,swiftConstraint
 | 
						|
      \ matchgroup=Delimiter start="<" end=">" matchgroup=NONE skip=","
 | 
						|
syn keyword swiftConstraint contained
 | 
						|
      \ where
 | 
						|
 | 
						|
syn match swiftTypeAliasValue skipwhite skipempty nextgroup=swiftType
 | 
						|
      \ /=/
 | 
						|
syn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType,swiftInOutKeyword
 | 
						|
      \ /:/
 | 
						|
syn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType
 | 
						|
      \ /->/
 | 
						|
 | 
						|
syn match swiftKeyword
 | 
						|
      \ /\<case\>/
 | 
						|
syn region swiftCaseLabelRegion
 | 
						|
      \ matchgroup=swiftKeyword start=/\<case\>/ matchgroup=Delimiter end=/:/ oneline contains=TOP
 | 
						|
syn region swiftDefaultLabelRegion
 | 
						|
      \ matchgroup=swiftKeyword start=/\<default\>/ matchgroup=Delimiter end=/:/ oneline
 | 
						|
 | 
						|
syn region swiftParenthesisRegion contains=TOP
 | 
						|
      \ matchgroup=NONE start=/(/ end=/)/
 | 
						|
 | 
						|
syn region swiftString contains=swiftInterpolationRegion
 | 
						|
      \ start=/"/ skip=/\\\\\|\\"/ end=/"/
 | 
						|
syn region swiftInterpolationRegion contained contains=TOP
 | 
						|
      \ matchgroup=swiftInterpolation start=/\\(/ end=/)/
 | 
						|
syn region swiftComment contains=swiftComment,swiftLineComment,swiftTodo
 | 
						|
      \ start="/\*" end="\*/"
 | 
						|
syn region swiftLineComment contains=swiftComment,swiftTodo
 | 
						|
      \ start="//" end="$"
 | 
						|
 | 
						|
syn match swiftDecimal
 | 
						|
      \ /[+\-]\?\<\([0-9][0-9_]*\)\([.][0-9_]*\)\?\([eE][+\-]\?[0-9][0-9_]*\)\?\>/
 | 
						|
syn match swiftHex
 | 
						|
      \ /[+\-]\?\<0x[0-9A-Fa-f][0-9A-Fa-f_]*\(\([.][0-9A-Fa-f_]*\)\?[pP][+\-]\?[0-9][0-9_]*\)\?\>/
 | 
						|
syn match swiftOct
 | 
						|
      \ /[+\-]\?\<0o[0-7][0-7_]*\>/
 | 
						|
syn match swiftBin
 | 
						|
      \ /[+\-]\?\<0b[01][01_]*\>/
 | 
						|
 | 
						|
syn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters
 | 
						|
      \ "\.\@<!\.\.\.\@!\|[/=\-+*%<>!&|^~]\@<!\(/[/*]\@![/=\-+*%<>!&|^~]*\|*/\@![/=\-+*%<>!&|^~]*\|->\@![/=\-+*%<>!&|^~]*\|[=+%<>!&|^~][/=\-+*%<>!&|^~]*\)"
 | 
						|
syn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters
 | 
						|
      \ "\.\.[<.]"
 | 
						|
 | 
						|
syn match swiftChar
 | 
						|
      \ /'\([^'\\]\|\\\(["'tnr0\\]\|x[0-9a-fA-F]\{2}\|u[0-9a-fA-F]\{4}\|U[0-9a-fA-F]\{8}\)\)'/
 | 
						|
 | 
						|
syn match swiftTupleIndexNumber contains=swiftDecimal
 | 
						|
      \ /\.[0-9]\+/
 | 
						|
syn match swiftDecimal contained
 | 
						|
      \ /[0-9]\+/
 | 
						|
 | 
						|
syn match swiftPreproc
 | 
						|
      \ /#\(\<file\>\|\<line\>\|\<function\>\)/
 | 
						|
syn match swiftPreproc
 | 
						|
      \ /^\s*#\(\<if\>\|\<else\>\|\<elseif\>\|\<endif\>\|\<error\>\|\<warning\>\)/
 | 
						|
syn region swiftPreprocFalse
 | 
						|
      \ start="^\s*#\<if\>\s\+\<false\>" end="^\s*#\(\<else\>\|\<elseif\>\|\<endif\>\)"
 | 
						|
 | 
						|
syn match swiftAttribute
 | 
						|
      \ /@\<\w\+\>/ skipwhite skipempty nextgroup=swiftType,swiftTypeDefinition
 | 
						|
 | 
						|
syn keyword swiftTodo MARK TODO FIXME contained
 | 
						|
 | 
						|
syn match swiftCastOp skipwhite skipempty nextgroup=swiftType
 | 
						|
      \ "\<is\>"
 | 
						|
syn match swiftCastOp skipwhite skipempty nextgroup=swiftType
 | 
						|
      \ "\<as\>[!?]\?"
 | 
						|
 | 
						|
syn match swiftNilOps
 | 
						|
      \ "??"
 | 
						|
 | 
						|
syn region swiftReservedIdentifier oneline
 | 
						|
      \ start=/`/ end=/`/
 | 
						|
 | 
						|
hi def link swiftImport Include
 | 
						|
hi def link swiftImportModule Title
 | 
						|
hi def link swiftImportComponent Identifier
 | 
						|
hi def link swiftKeyword Statement
 | 
						|
hi def link swiftMultiwordKeyword Statement
 | 
						|
hi def link swiftTypeDefinition Define
 | 
						|
hi def link swiftMultiwordTypeDefinition Define
 | 
						|
hi def link swiftType Type
 | 
						|
hi def link swiftTypePair Type
 | 
						|
hi def link swiftTypeAliasName Identifier
 | 
						|
hi def link swiftTypeName Function
 | 
						|
hi def link swiftConstraint Special
 | 
						|
hi def link swiftFuncDefinition Define
 | 
						|
hi def link swiftDefinitionModifier Operator
 | 
						|
hi def link swiftInOutKeyword Define
 | 
						|
hi def link swiftFuncKeyword Function
 | 
						|
hi def link swiftFuncKeywordGeneral Function
 | 
						|
hi def link swiftTypeAliasDefinition Define
 | 
						|
hi def link swiftVarDefinition Define
 | 
						|
hi def link swiftVarName Identifier
 | 
						|
hi def link swiftImplicitVarName Identifier
 | 
						|
hi def link swiftIdentifierKeyword Identifier
 | 
						|
hi def link swiftTypeAliasValue Delimiter
 | 
						|
hi def link swiftTypeDeclaration Delimiter
 | 
						|
hi def link swiftTypeParameters Delimiter
 | 
						|
hi def link swiftBoolean Boolean
 | 
						|
hi def link swiftString String
 | 
						|
hi def link swiftInterpolation Special
 | 
						|
hi def link swiftComment Comment
 | 
						|
hi def link swiftLineComment Comment
 | 
						|
hi def link swiftDecimal Number
 | 
						|
hi def link swiftHex Number
 | 
						|
hi def link swiftOct Number
 | 
						|
hi def link swiftBin Number
 | 
						|
hi def link swiftOperator Function
 | 
						|
hi def link swiftChar Character
 | 
						|
hi def link swiftLabel Operator
 | 
						|
hi def link swiftMutating Statement
 | 
						|
hi def link swiftPreproc PreCondit
 | 
						|
hi def link swiftPreprocFalse Comment
 | 
						|
hi def link swiftAttribute Type
 | 
						|
hi def link swiftTodo Todo
 | 
						|
hi def link swiftNil Constant
 | 
						|
hi def link swiftCastOp Operator
 | 
						|
hi def link swiftNilOps Operator
 | 
						|
hi def link swiftScope PreProc
 | 
						|
 | 
						|
let b:current_syntax = "swift"
 | 
						|
 | 
						|
let &cpo = s:keepcpo
 | 
						|
unlet s:keepcpo
 |