Partially import github.com/keith/swift.vim
This commit is contained in:
parent
f8edb175fa
commit
1c0cd8a576
4 changed files with 615 additions and 0 deletions
12
vim/ftdetect/swift.vim
Normal file
12
vim/ftdetect/swift.vim
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
autocmd BufNewFile,BufRead *.swift set filetype=swift
|
||||||
|
autocmd BufRead * call s:Swift()
|
||||||
|
function! s:Swift()
|
||||||
|
if !empty(&filetype)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let line = getline(1)
|
||||||
|
if line =~ "^#!.*swift"
|
||||||
|
setfiletype swift
|
||||||
|
endif
|
||||||
|
endfunction
|
4
vim/ftplugin/swift.vim
Normal file
4
vim/ftplugin/swift.vim
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
setlocal commentstring=//\ %s
|
||||||
|
" @-@ adds the literal @ to iskeyword for @IBAction and similar
|
||||||
|
setlocal iskeyword+=@-@,#
|
||||||
|
setlocal completefunc=syntaxcomplete#Complete
|
294
vim/indent/swift.vim
Normal file
294
vim/indent/swift.vim
Normal file
|
@ -0,0 +1,294 @@
|
||||||
|
" File: swift.vim
|
||||||
|
" Author: Keith Smiley
|
||||||
|
" Description: The indent file for Swift
|
||||||
|
" Last Modified: December 05, 2014
|
||||||
|
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
setlocal nosmartindent
|
||||||
|
setlocal indentkeys-=e
|
||||||
|
setlocal indentkeys+=0]
|
||||||
|
setlocal indentexpr=SwiftIndent()
|
||||||
|
|
||||||
|
function! s:NumberOfMatches(char, string, index)
|
||||||
|
let instances = 0
|
||||||
|
let i = 0
|
||||||
|
while i < strlen(a:string)
|
||||||
|
if a:string[i] == a:char && !s:IsExcludedFromIndentAtPosition(a:index, i + 1)
|
||||||
|
let instances += 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let i += 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
return instances
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:SyntaxNameAtPosition(line, column)
|
||||||
|
return synIDattr(synID(a:line, a:column, 0), "name")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:SyntaxName()
|
||||||
|
return s:SyntaxNameAtPosition(line("."), col("."))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IsExcludedFromIndentAtPosition(line, column)
|
||||||
|
let name = s:SyntaxNameAtPosition(a:line, a:column)
|
||||||
|
return s:IsSyntaxNameExcludedFromIndent(name)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IsExcludedFromIndent()
|
||||||
|
return s:IsSyntaxNameExcludedFromIndent(s:SyntaxName())
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IsSyntaxNameExcludedFromIndent(name)
|
||||||
|
return a:name ==# "swiftComment" || a:name ==# "swiftString" || a:name ==# "swiftInterpolatedWrapper" || a:name ==# "swiftMultilineInterpolatedWrapper" || a:name ==# "swiftMultilineString"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IsCommentLine(lnum)
|
||||||
|
return synIDattr(synID(a:lnum,
|
||||||
|
\ match(getline(a:lnum), "\\S") + 1, 0), "name")
|
||||||
|
\ ==# "swiftComment"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SwiftIndent(...)
|
||||||
|
let clnum = a:0 ? a:1 : v:lnum
|
||||||
|
|
||||||
|
let line = getline(clnum)
|
||||||
|
let previousNum = prevnonblank(clnum - 1)
|
||||||
|
while s:IsCommentLine(previousNum) != 0
|
||||||
|
let previousNum = prevnonblank(previousNum - 1)
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
let previous = getline(previousNum)
|
||||||
|
let cindent = cindent(clnum)
|
||||||
|
let previousIndent = indent(previousNum)
|
||||||
|
|
||||||
|
let numOpenParens = s:NumberOfMatches("(", previous, previousNum)
|
||||||
|
let numCloseParens = s:NumberOfMatches(")", previous, previousNum)
|
||||||
|
let numOpenBrackets = s:NumberOfMatches("{", previous, previousNum)
|
||||||
|
let numCloseBrackets = s:NumberOfMatches("}", previous, previousNum)
|
||||||
|
|
||||||
|
let currentOpenBrackets = s:NumberOfMatches("{", line, clnum)
|
||||||
|
let currentCloseBrackets = s:NumberOfMatches("}", line, clnum)
|
||||||
|
|
||||||
|
let numOpenSquare = s:NumberOfMatches("[", previous, previousNum)
|
||||||
|
let numCloseSquare = s:NumberOfMatches("]", previous, previousNum)
|
||||||
|
|
||||||
|
let currentCloseSquare = s:NumberOfMatches("]", line, clnum)
|
||||||
|
if numOpenSquare > numCloseSquare && currentCloseSquare < 1
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if currentCloseSquare > 0 && line !~ '\v\[.*\]'
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(line("."), 1)
|
||||||
|
let openingSquare = searchpair("\\[", "", "\\]", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line("."), column)
|
||||||
|
|
||||||
|
if openingSquare == 0
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" - Line starts with closing square, indent as opening square
|
||||||
|
if line =~ '\v^\s*]'
|
||||||
|
return indent(openingSquare)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" - Line contains closing square and more, indent a level above opening
|
||||||
|
return indent(openingSquare) + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if line =~ ":$" && (line =~ '^\s*case\W' || line =~ '^\s*default\W')
|
||||||
|
let switch = search("switch", "bWn")
|
||||||
|
return indent(switch)
|
||||||
|
elseif previous =~ ":$" && (previous =~ '^\s*case\W' || previous =~ '^\s*default\W')
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if numOpenParens == numCloseParens
|
||||||
|
if numOpenBrackets > numCloseBrackets
|
||||||
|
if currentCloseBrackets > currentOpenBrackets || line =~ "\\v^\\s*}"
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(line("."), 1)
|
||||||
|
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line("."), column)
|
||||||
|
if openingBracket == 0
|
||||||
|
return -1
|
||||||
|
else
|
||||||
|
return indent(openingBracket)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
elseif previous =~ "}.*{"
|
||||||
|
if line =~ "\\v^\\s*}"
|
||||||
|
return previousIndent
|
||||||
|
endif
|
||||||
|
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
elseif line =~ "}.*{"
|
||||||
|
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
|
||||||
|
let bracketLine = getline(openingBracket)
|
||||||
|
let numOpenParensBracketLine = s:NumberOfMatches("(", bracketLine, openingBracket)
|
||||||
|
let numCloseParensBracketLine = s:NumberOfMatches(")", bracketLine, openingBracket)
|
||||||
|
if numOpenParensBracketLine > numCloseParensBracketLine
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(openingParen, column)
|
||||||
|
let openingParenCol = searchpairpos("(", "", ")", "bWn", "s:IsExcludedFromIndent()")[1]
|
||||||
|
call cursor(line, column)
|
||||||
|
return openingParenCol
|
||||||
|
endif
|
||||||
|
|
||||||
|
return indent(openingBracket)
|
||||||
|
elseif currentCloseBrackets > currentOpenBrackets
|
||||||
|
let column = col(".")
|
||||||
|
let line = line(".")
|
||||||
|
call cursor(line, 1)
|
||||||
|
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
|
||||||
|
let bracketLine = getline(openingBracket)
|
||||||
|
|
||||||
|
let numOpenParensBracketLine = s:NumberOfMatches("(", bracketLine, openingBracket)
|
||||||
|
let numCloseParensBracketLine = s:NumberOfMatches(")", bracketLine, openingBracket)
|
||||||
|
if numCloseParensBracketLine > numOpenParensBracketLine
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(openingParen, column)
|
||||||
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
return indent(openingParen)
|
||||||
|
elseif numOpenParensBracketLine > numCloseParensBracketLine
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(openingParen, column)
|
||||||
|
let openingParenCol = searchpairpos("(", "", ")", "bWn", "s:IsExcludedFromIndent()")[1]
|
||||||
|
call cursor(line, column)
|
||||||
|
return openingParenCol
|
||||||
|
endif
|
||||||
|
|
||||||
|
return indent(openingBracket)
|
||||||
|
elseif line =~ '^\s*)$'
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(line, 1)
|
||||||
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
return indent(openingParen)
|
||||||
|
else
|
||||||
|
" - Current line is blank, and the user presses 'o'
|
||||||
|
return previousIndent
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if numCloseParens > 0
|
||||||
|
if currentOpenBrackets > 0 || currentCloseBrackets > 0
|
||||||
|
if currentOpenBrackets > 0
|
||||||
|
if numOpenBrackets > numCloseBrackets
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if line =~ "}.*{"
|
||||||
|
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
return indent(openingBracket)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if numCloseParens > numOpenParens
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(line - 1, column)
|
||||||
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
return indent(openingParen)
|
||||||
|
endif
|
||||||
|
|
||||||
|
return previousIndent
|
||||||
|
endif
|
||||||
|
|
||||||
|
if currentCloseBrackets > 0
|
||||||
|
let openingBracket = searchpair("{", "", "}", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
return indent(openingBracket)
|
||||||
|
endif
|
||||||
|
|
||||||
|
return cindent
|
||||||
|
endif
|
||||||
|
|
||||||
|
if numCloseParens < numOpenParens
|
||||||
|
if numOpenBrackets > numCloseBrackets
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
let previousParen = match(previous, '\v\($')
|
||||||
|
if previousParen != -1
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(previousNum, col([previousNum, "$"]))
|
||||||
|
let previousParen = searchpairpos("(", "", ")", "cbWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
|
||||||
|
" Match the last non escaped paren on the previous line
|
||||||
|
return previousParen[1]
|
||||||
|
endif
|
||||||
|
|
||||||
|
if numOpenBrackets > numCloseBrackets
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(previousNum, column)
|
||||||
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
return openingParen + 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" - Previous line has close then open braces, indent previous + 1 'sw'
|
||||||
|
if previous =~ "}.*{"
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
let line = line(".")
|
||||||
|
let column = col(".")
|
||||||
|
call cursor(previousNum, column)
|
||||||
|
let openingParen = searchpair("(", "", ")", "bWn", "s:IsExcludedFromIndent()")
|
||||||
|
call cursor(line, column)
|
||||||
|
|
||||||
|
return indent(openingParen)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" - Line above has (unmatched) open paren, next line needs indent
|
||||||
|
if numOpenParens > 0
|
||||||
|
let savePosition = getcurpos()
|
||||||
|
let lastColumnOfPreviousLine = col([previousNum, "$"]) - 1
|
||||||
|
" Must be at EOL because open paren has to be above (left of) the cursor
|
||||||
|
call cursor(previousNum, lastColumnOfPreviousLine)
|
||||||
|
let previousParen = searchpairpos("(", "", ")", "cbWn", "s:IsExcludedFromIndent()")[1]
|
||||||
|
" If the paren on the last line is the last character, indent the contents
|
||||||
|
" at shiftwidth + previous indent
|
||||||
|
if previousParen == lastColumnOfPreviousLine
|
||||||
|
return previousIndent + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
" The previous line opens a closure and doesn't close it
|
||||||
|
if numOpenBrackets > numCloseBrackets
|
||||||
|
return previousParen + shiftwidth()
|
||||||
|
endif
|
||||||
|
|
||||||
|
call setpos(".", savePosition)
|
||||||
|
return previousParen
|
||||||
|
endif
|
||||||
|
|
||||||
|
return cindent
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
305
vim/syntax/swift.vim
Normal file
305
vim/syntax/swift.vim
Normal file
|
@ -0,0 +1,305 @@
|
||||||
|
" File: swift.vim
|
||||||
|
" Author: Keith Smiley
|
||||||
|
" Description: Runtime files for Swift
|
||||||
|
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Comments
|
||||||
|
" Shebang
|
||||||
|
syntax match swiftShebang "\v#!.*$"
|
||||||
|
|
||||||
|
" Comment contained keywords
|
||||||
|
syntax keyword swiftTodos contained TODO XXX FIXME NOTE
|
||||||
|
syntax keyword swiftMarker contained MARK
|
||||||
|
|
||||||
|
" In comment identifiers
|
||||||
|
function! s:CommentKeywordMatch(keyword)
|
||||||
|
execute "syntax match swiftDocString \"\\v^\\s*-\\s*". a:keyword . "\\W\"hs=s+1,he=e-1 contained"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
syntax case ignore
|
||||||
|
|
||||||
|
call s:CommentKeywordMatch("attention")
|
||||||
|
call s:CommentKeywordMatch("author")
|
||||||
|
call s:CommentKeywordMatch("authors")
|
||||||
|
call s:CommentKeywordMatch("bug")
|
||||||
|
call s:CommentKeywordMatch("complexity")
|
||||||
|
call s:CommentKeywordMatch("copyright")
|
||||||
|
call s:CommentKeywordMatch("date")
|
||||||
|
call s:CommentKeywordMatch("experiment")
|
||||||
|
call s:CommentKeywordMatch("important")
|
||||||
|
call s:CommentKeywordMatch("invariant")
|
||||||
|
call s:CommentKeywordMatch("note")
|
||||||
|
call s:CommentKeywordMatch("parameter")
|
||||||
|
call s:CommentKeywordMatch("postcondition")
|
||||||
|
call s:CommentKeywordMatch("precondition")
|
||||||
|
call s:CommentKeywordMatch("remark")
|
||||||
|
call s:CommentKeywordMatch("remarks")
|
||||||
|
call s:CommentKeywordMatch("requires")
|
||||||
|
call s:CommentKeywordMatch("returns")
|
||||||
|
call s:CommentKeywordMatch("see")
|
||||||
|
call s:CommentKeywordMatch("since")
|
||||||
|
call s:CommentKeywordMatch("throws")
|
||||||
|
call s:CommentKeywordMatch("todo")
|
||||||
|
call s:CommentKeywordMatch("version")
|
||||||
|
call s:CommentKeywordMatch("warning")
|
||||||
|
|
||||||
|
syntax case match
|
||||||
|
delfunction s:CommentKeywordMatch
|
||||||
|
|
||||||
|
|
||||||
|
" Literals
|
||||||
|
" Strings
|
||||||
|
syntax region swiftString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=swiftInterpolatedWrapper oneline
|
||||||
|
syntax region swiftMultilineString start=/"""/ end=/"""/ contains=swiftMultilineInterpolatedWrapper
|
||||||
|
syntax region swiftMultilineInterpolatedWrapper start='\v\zs\\\(\s*' end='\v\s*\)' contained containedin=swiftMultilineString contains=swiftInterpolatedString oneline
|
||||||
|
syntax region swiftInterpolatedWrapper start='\v(^|[^\\])\zs\\\(\s*' end='\v\s*\)' contained containedin=swiftString contains=swiftInterpolatedString,swiftString oneline
|
||||||
|
syntax match swiftInterpolatedString "\v\w+(\(\))?" contained containedin=swiftInterpolatedWrapper,swiftMultilineInterpolatedWrapper oneline
|
||||||
|
|
||||||
|
" 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[[:xdigit:]_]+([Pp]-?)?\x+>"
|
||||||
|
syntax match swiftNumber "\v<0b[01_]+>"
|
||||||
|
syntax match swiftNumber "\v<0o[0-7_]+>"
|
||||||
|
|
||||||
|
" 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\?\?"
|
||||||
|
|
||||||
|
" Methods/Functions/Properties
|
||||||
|
syntax match swiftMethod "\.\@<=\<\D\w*\>\ze("
|
||||||
|
syntax match swiftProperty "\.\@<=\<\D\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
|
||||||
|
\ associatedtype
|
||||||
|
\ associativity
|
||||||
|
\ atexit
|
||||||
|
\ break
|
||||||
|
\ case
|
||||||
|
\ catch
|
||||||
|
\ class
|
||||||
|
\ continue
|
||||||
|
\ convenience
|
||||||
|
\ default
|
||||||
|
\ defer
|
||||||
|
\ deinit
|
||||||
|
\ didSet
|
||||||
|
\ do
|
||||||
|
\ dynamic
|
||||||
|
\ else
|
||||||
|
\ extension
|
||||||
|
\ fallthrough
|
||||||
|
\ fileprivate
|
||||||
|
\ final
|
||||||
|
\ for
|
||||||
|
\ func
|
||||||
|
\ get
|
||||||
|
\ guard
|
||||||
|
\ if
|
||||||
|
\ import
|
||||||
|
\ in
|
||||||
|
\ infix
|
||||||
|
\ init
|
||||||
|
\ inout
|
||||||
|
\ internal
|
||||||
|
\ lazy
|
||||||
|
\ let
|
||||||
|
\ mutating
|
||||||
|
\ nil
|
||||||
|
\ nonmutating
|
||||||
|
\ open
|
||||||
|
\ operator
|
||||||
|
\ optional
|
||||||
|
\ override
|
||||||
|
\ postfix
|
||||||
|
\ precedence
|
||||||
|
\ precedencegroup
|
||||||
|
\ prefix
|
||||||
|
\ private
|
||||||
|
\ protocol
|
||||||
|
\ public
|
||||||
|
\ repeat
|
||||||
|
\ required
|
||||||
|
\ return
|
||||||
|
\ self
|
||||||
|
\ set
|
||||||
|
\ some
|
||||||
|
\ static
|
||||||
|
\ subscript
|
||||||
|
\ super
|
||||||
|
\ switch
|
||||||
|
\ throw
|
||||||
|
\ try
|
||||||
|
\ typealias
|
||||||
|
\ unowned
|
||||||
|
\ var
|
||||||
|
\ weak
|
||||||
|
\ where
|
||||||
|
\ while
|
||||||
|
\ willSet
|
||||||
|
|
||||||
|
syntax keyword swiftDefinitionModifier
|
||||||
|
\ rethrows
|
||||||
|
\ throws
|
||||||
|
|
||||||
|
syntax match swiftMultiwordKeywords "indirect case"
|
||||||
|
syntax match swiftMultiwordKeywords "indirect enum"
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" 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
|
||||||
|
\ @_exported
|
||||||
|
\ @_functionBuilder
|
||||||
|
\ @_implementationOnly
|
||||||
|
\ @_silgen_name
|
||||||
|
\ @assignment
|
||||||
|
\ @autoclosure
|
||||||
|
\ @available
|
||||||
|
\ @convention
|
||||||
|
\ @discardableResult
|
||||||
|
\ @escaping
|
||||||
|
\ @exported
|
||||||
|
\ @frozen
|
||||||
|
\ @IBAction
|
||||||
|
\ @IBDesignable
|
||||||
|
\ @IBInspectable
|
||||||
|
\ @IBOutlet
|
||||||
|
\ @inlinable
|
||||||
|
\ @noescape
|
||||||
|
\ @nonobjc
|
||||||
|
\ @noreturn
|
||||||
|
\ @NSApplicationMain
|
||||||
|
\ @NSCopying
|
||||||
|
\ @NSManaged
|
||||||
|
\ @objc
|
||||||
|
\ @propertyWrapper
|
||||||
|
\ @testable
|
||||||
|
\ @UIApplicationMain
|
||||||
|
\ @usableFromInline
|
||||||
|
\ @warn_unused_result
|
||||||
|
|
||||||
|
syntax keyword swiftConditionStatement #available
|
||||||
|
|
||||||
|
syntax keyword swiftStructure
|
||||||
|
\ struct
|
||||||
|
\ enum
|
||||||
|
|
||||||
|
syntax keyword swiftDebugIdentifier
|
||||||
|
\ #column
|
||||||
|
\ #file
|
||||||
|
\ #function
|
||||||
|
\ #line
|
||||||
|
\ __COLUMN__
|
||||||
|
\ __FILE__
|
||||||
|
\ __FUNCTION__
|
||||||
|
\ __LINE__
|
||||||
|
|
||||||
|
syntax keyword swiftLineDirective #setline
|
||||||
|
|
||||||
|
syntax region swiftTypeWrapper start=":\s*\(\.\)\@!\<\u" skip="\s*,\s*$*\s*" end="$\|/"me=e-1 contains=ALLBUT,swiftInterpolatedWrapper,swiftMultilineInterpolatedWrapper transparent
|
||||||
|
syntax region swiftTypeCastWrapper start="\(as\|is\)\(!\|?\)\=\s\+" end="\v(\s|$|\{)" contains=swiftType,swiftCastKeyword keepend transparent oneline
|
||||||
|
syntax region swiftGenericsWrapper start="\v\<" end="\v\>" contains=swiftType transparent oneline
|
||||||
|
syntax region swiftLiteralWrapper start="\v\=\s*" skip="\v[^\[\]]\(\)" end="\v(\[\]|\(\))" contains=ALL transparent oneline
|
||||||
|
syntax region swiftReturnWrapper start="\v-\>\s*" end="\v(\{|$)" contains=swiftType transparent oneline
|
||||||
|
syntax match swiftType "\v<\u\w*" contained containedin=swiftTypeWrapper,swiftLiteralWrapper,swiftGenericsWrapper,swiftTypeCastWrapper
|
||||||
|
syntax match swiftTypeDeclaration /->/ skipwhite nextgroup=swiftType
|
||||||
|
|
||||||
|
syntax keyword swiftImports import
|
||||||
|
syntax keyword swiftCastKeyword is as contained
|
||||||
|
|
||||||
|
" 'preprocesor' stuff
|
||||||
|
syntax keyword swiftPreprocessor
|
||||||
|
\ #if
|
||||||
|
\ #elseif
|
||||||
|
\ #else
|
||||||
|
\ #endif
|
||||||
|
\ #selector
|
||||||
|
\ #warning
|
||||||
|
\ #error
|
||||||
|
|
||||||
|
|
||||||
|
" Comment patterns
|
||||||
|
syntax match swiftComment "\v\/\/.*$"
|
||||||
|
\ contains=swiftTodos,swiftDocString,swiftMarker,@Spell oneline
|
||||||
|
syntax region swiftComment start="/\*" end="\*/"
|
||||||
|
\ contains=swiftTodos,swiftDocString,swiftMarker,@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 swiftMultilineString String
|
||||||
|
highlight default link swiftInterpolatedWrapper Delimiter
|
||||||
|
highlight default link swiftMultilineInterpolatedWrapper Delimiter
|
||||||
|
highlight default link swiftTypeDeclaration Delimiter
|
||||||
|
highlight default link swiftNumber Number
|
||||||
|
highlight default link swiftBoolean Boolean
|
||||||
|
|
||||||
|
highlight default link swiftOperator Operator
|
||||||
|
highlight default link swiftCastKeyword Keyword
|
||||||
|
highlight default link swiftKeywords Keyword
|
||||||
|
highlight default link swiftMultiwordKeywords 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 swiftProperty Identifier
|
||||||
|
|
||||||
|
highlight default link swiftDefinitionModifier Define
|
||||||
|
highlight default link swiftConditionStatement PreProc
|
||||||
|
highlight default link swiftAvailability Normal
|
||||||
|
highlight default link swiftAvailabilityArg Normal
|
||||||
|
highlight default link swiftPlatforms Keyword
|
||||||
|
highlight default link swiftDebugIdentifier PreProc
|
||||||
|
highlight default link swiftLineDirective PreProc
|
||||||
|
|
||||||
|
" 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"
|
Loading…
Add table
Add a link
Reference in a new issue