diff options
Diffstat (limited to '')
-rw-r--r-- | syntax/swift.vim | 267 |
1 files changed, 214 insertions, 53 deletions
diff --git a/syntax/swift.vim b/syntax/swift.vim index cbe46d35..4f5230ae 100644 --- a/syntax/swift.vim +++ b/syntax/swift.vim @@ -1,68 +1,229 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'swift') == -1 -" Language: Swift<https://developer.apple.com/swift/> -" Maintainer: toyama satoshi <toyamarinyon@gmail.com> -" URL: http://github.com/toyamarinyon/vim-swift -" License: GPL +" File: swift.vim +" Author: Keith Smiley +" Description: Runtime files for Swift +" Last Modified: June 15, 2014 -" Bail if our syntax is already loaded. -if exists('b:current_syntax') && b:current_syntax == 'swift' +if exists("b:current_syntax") finish endif -" {{{ Whitespace and Comments -syntax region swiftComment start=#\/\*# end=#\*\/# -syntax match swiftComment /\/\/.*/ -highlight default link swiftComment Comment -" }}} +" Comments +" Shebang +syntax match swiftShebang "\v#!.*$" -" {{{ Identifiers -syntax match swiftIdentifier /[[:alpha:]_][[:alnum:]_]*/ -highlight default link swiftIdentifier Identifier -" }}} +" Comment contained keywords +syntax keyword swiftTodos contained TODO XXX FIXME NOTE +syntax keyword swiftMarker contained MARK +syntax match swiftDocString "\v^\s*-\s*parameter"hs=s+1 contained +syntax match swiftDocString "\v^\s*-\s*returns"hs=s+1 contained -" {{{ Keywords -" Keywords used in declarations: -syntax keyword swiftDeclarationKeywords class deinit enum extension func import init let protocol static struct subscript typealias var -highlight default link swiftDeclarationKeywords Keyword -" Keywords used in statements: -syntax keyword swiftStatementKeywords break case continue default do else fallthrough if in for return switch where while -highlight default link swiftStatementKeywords Keyword -" Keywords used in expressions and types: -syntax keyword swiftExpressionTypeKeywords as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ -highlight default link swiftExpressionTypeKeywords Keyword -" Keywords reserved in particular contexts: -syntax keyword swiftReserveKeywords associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned unowned(safe) unowned(unsafe) weak willSet -highlight default link swiftReserveKeywords Keyword -" }}} +" Literals +" Strings +syntax region swiftString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=swiftInterpolatedWrapper +syntax region swiftInterpolatedWrapper start="\v[^\\]\\\(\s*" end="\v\s*\)" contained containedin=swiftString contains=swiftInterpolatedString +syntax match swiftInterpolatedString "\v\w+(\(\))?" contained containedin=swiftInterpolatedWrapper -" {{{ Literals -" Integer literal -syntax match swiftIntegerLiteral /\<\d\+\%(_\d\+\)*\%(\.\d\+\%(_\d\+\)*\)\=\>/ -syntax match swiftIntegerLiteral /\<\d\+\%(_\d\+\)*\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>/ -syntax match swiftIntegerLiteral /\<0x\x\+\%(_\x\+\)*\>/ -syntax match swiftIntegerLiteral /\<0o\o\+\%(_\o\+\)*\>/ -syntax match swiftIntegerLiteral /\<0b[01]\+\%(_[01]\+\)*\>/ -highlight default link swiftIntegerLiteral Number -" String literal -syntax region swiftStringLiteral start=/"/ skip=/\\"/ end=/"/ -highlight default link swiftStringLiteral String -" }}} +" Numbers +syntax match swiftNumber "\v<\d+>" +syntax match swiftNumber "\v<(\d+_+)+\d+(\.\d+(_+\d+)*)?>" +syntax match swiftNumber "\v<\d+\.\d+>" +syntax match swiftNumber "\v<\d*\.?\d+([Ee]-?)?\d+>" +syntax match swiftNumber "\v<0x\x+([Pp]-?)?\x+>" +syntax match swiftNumber "\v<0b[01]+>" +syntax match swiftNumber "\v<0o\o+>" -" {{{ Operators -syntax keyword swiftOperatorKeywords / = - + ! * % < > & \| ^ ~ . -highlight default link swiftOperatorKeywords Operator -" }}} +" BOOLs +syntax keyword swiftBoolean + \ true + \ false + + +" Operators +syntax match swiftOperator "\v\~" +syntax match swiftOperator "\v\s+!" +syntax match swiftOperator "\v\%" +syntax match swiftOperator "\v\^" +syntax match swiftOperator "\v\&" +syntax match swiftOperator "\v\*" +syntax match swiftOperator "\v-" +syntax match swiftOperator "\v\+" +syntax match swiftOperator "\v\=" +syntax match swiftOperator "\v\|" +syntax match swiftOperator "\v\/" +syntax match swiftOperator "\v\." +syntax match swiftOperator "\v\<" +syntax match swiftOperator "\v\>" +syntax match swiftOperator "\v\?\?" -" {{{ Type -syntax match swiftTypeIdentifier /\<[[:alpha:]_][[:alnum:]_.]*/ contained -syntax match swiftType /: .*/ contains=swiftTypeIdentifier -highlight default link swiftType Operator -highlight default link swiftTypeIdentifier Type +" Methods/Functions +syntax match swiftMethod "\(\.\)\@<=\w\+\((\)\@=" + +" Swift closure arguments +syntax match swiftClosureArgument "\$\d\+\(\.\d\+\)\?" + +syntax match swiftAvailability "\v((\*(\s*,\s*[a-zA-Z="0-9.]+)*)|(\w+\s+\d+(\.\d+(.\d+)?)?\s*,\s*)+\*)" contains=swiftString +syntax keyword swiftPlatforms OSX iOS watchOS OSXApplicationExtension iOSApplicationExtension contained containedin=swiftAvailability +syntax keyword swiftAvailabilityArg renamed unavailable introduced deprecated obsoleted message contained containedin=swiftAvailability + +" Keywords {{{ +syntax keyword swiftKeywords + \ as + \ atexit + \ break + \ case + \ catch + \ class + \ continue + \ convenience + \ default + \ defer + \ deinit + \ didSet + \ do + \ dynamic + \ else + \ extension + \ fallthrough + \ final + \ for + \ func + \ get + \ guard + \ if + \ import + \ in + \ indirect + \ infix + \ init + \ inout + \ internal + \ is + \ lazy + \ let + \ mutating + \ nil + \ nonmutating + \ operator + \ optional + \ override + \ postfix + \ prefix + \ private + \ protocol + \ public + \ repeat + \ required + \ rethrows + \ return + \ self + \ set + \ static + \ subscript + \ super + \ switch + \ throw + \ throws + \ try + \ typealias + \ unowned + \ var + \ weak + \ where + \ while + \ willSet " }}} -if !exists('b:current_syntax') - let b:current_syntax = 'swift' -endif +" Names surrounded by backticks. This aren't limited to keywords because 1) +" Swift doesn't limit them to keywords and 2) I couldn't make the keywords not +" highlight at the same time +syntax region swiftEscapedReservedWord start="`" end="`" oneline + +syntax keyword swiftAttributes + \ @assignment + \ @autoclosure + \ @available + \ @convention + \ @exported + \ @IBAction + \ @IBDesignable + \ @IBInspectable + \ @IBOutlet + \ @noescape + \ @nonobjc + \ @noreturn + \ @NSApplicationMain + \ @NSCopying + \ @NSManaged + \ @objc + \ @testable + \ @UIApplicationMain + \ @warn_unused_result + +syntax keyword swiftConditionStatement #available + +syntax keyword swiftStructure + \ struct + \ enum + +syntax region swiftTypeWrapper start="\v:\s*" skip="\s*,\s*$*\s*" end="$" contains=swiftString,swiftBoolean,swiftNumber,swiftType,swiftGenericsWrapper transparent +syntax region swiftGenericsWrapper start="\v\<" end="\v\>" contains=swiftType transparent oneline +syntax region swiftLiteralWrapper start="\v\=\s*" skip="\v[^\[\]]\(\)" end="\v(\[\]|\(\))" contains=swiftType,swiftString transparent oneline +syntax region swiftReturnWrapper start="\v-\>\s*" end="\v(\{|$)" contains=swiftType transparent oneline +syntax match swiftType "\v<\u\w*" contained containedin=swiftGenericsWrapper,swiftTypeWrapper,swiftLiteralWrapper,swiftGenericsWrapper + +syntax keyword swiftImports import + + +" 'preprocesor' stuff +syntax keyword swiftPreprocessor + \ #if + \ #elseif + \ #else + \ #endif + + +" Comment patterns +syntax match swiftComment "\v\/\/.*$" + \ contains=swiftTodos,swiftDocString,swiftMarker,@Spell oneline +syntax region swiftComment start="/\*" end="\*/" + \ contains=swiftTodos,swiftDocString,swiftMarker,swiftComment,@Spell fold + + +" Set highlights +highlight default link swiftTodos Todo +highlight default link swiftDocString String +highlight default link swiftShebang Comment +highlight default link swiftComment Comment +highlight default link swiftMarker Comment + +highlight default link swiftString String +highlight default link swiftInterpolatedWrapper Delimiter +highlight default link swiftNumber Number +highlight default link swiftBoolean Boolean + +highlight default link swiftOperator Operator +highlight default link swiftKeywords Keyword +highlight default link swiftEscapedReservedWord Normal +highlight default link swiftClosureArgument Operator +highlight default link swiftAttributes PreProc +highlight default link swiftConditionStatement PreProc +highlight default link swiftStructure Structure +highlight default link swiftType Type +highlight default link swiftImports Include +highlight default link swiftPreprocessor PreProc +highlight default link swiftMethod Function + +highlight default link swiftConditionStatement PreProc +highlight default link swiftAvailability Normal +highlight default link swiftAvailabilityArg Normal +highlight default link swiftPlatforms Keyword + +" Force vim to sync at least x lines. This solves the multiline comment not +" being highlighted issue +syn sync minlines=100 + +let b:current_syntax = "swift" endif |