diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2015-12-06 11:31:38 +0100 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2015-12-06 11:31:38 +0100 |
commit | 303b3f1b434f26f936c241789c84dca6e2f50df2 (patch) | |
tree | 1507706b422e3ec29c0e5f30bcf14681e04ab374 /indent | |
parent | bf849731731a7da008c891476b878735e8280bdc (diff) | |
download | vim-polyglot-303b3f1b434f26f936c241789c84dca6e2f50df2.tar.gz vim-polyglot-303b3f1b434f26f936c241789c84dca6e2f50df2.zip |
Update all bundles
Diffstat (limited to 'indent')
-rw-r--r-- | indent/handlebars.vim | 104 | ||||
-rw-r--r-- | indent/rust.vim | 7 | ||||
-rw-r--r-- | indent/swift.vim | 229 |
3 files changed, 331 insertions, 9 deletions
diff --git a/indent/handlebars.vim b/indent/handlebars.vim new file mode 100644 index 00000000..a3ffbb88 --- /dev/null +++ b/indent/handlebars.vim @@ -0,0 +1,104 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'handlebars') == -1 + +" Mustache & Handlebars syntax +" Language: Mustache, Handlebars +" Maintainer: Juvenn Woo <machese@gmail.com> +" Screenshot: http://imgur.com/6F408 +" Version: 2 +" Last Change: Oct 10th 2015 +" Remarks: based on eruby indent plugin by tpope +" References: +" [Mustache](http://github.com/defunkt/mustache) +" [Handlebars](https://github.com/wycats/handlebars.js) +" [ctemplate](http://code.google.com/p/google-ctemplate/) +" [ctemplate doc](http://google-ctemplate.googlecode.com/svn/trunk/doc/howto.html) +" [et](http://www.ivan.fomichev.name/2008/05/erlang-template-engine-prototype.html) + +if exists("b:did_indent_hbs") + finish +endif + +unlet! b:did_indent +setlocal indentexpr= + +runtime! indent/html.vim +unlet! b:did_indent + +" Force HTML indent to not keep state. +let b:html_indent_usestate = 0 + +if &l:indentexpr == '' + if &l:cindent + let &l:indentexpr = 'cindent(v:lnum)' + else + let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))' + endif +endif +let b:handlebars_subtype_indentexpr = &l:indentexpr + +let b:did_indent = 1 +let b:did_indent_hbs = 1 + +setlocal indentexpr=GetHandlebarsIndent() +setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when + +" Only define the function once. +if exists("*GetHandlebarsIndent") + finish +endif + +function! GetHandlebarsIndent(...) + " The value of a single shift-width + if exists('*shiftwidth') + let sw = shiftwidth() + else + let sw = &sw + endif + + if a:0 && a:1 == '.' + let v:lnum = line('.') + elseif a:0 && a:1 =~ '^\d' + let v:lnum = a:1 + endif + let vcol = col('.') + call cursor(v:lnum,1) + call cursor(v:lnum,vcol) + exe "let ind = ".b:handlebars_subtype_indentexpr + + " Workaround for Andy Wokula's HTML indent. This should be removed after + " some time, since the newest version is fixed in a different way. + if b:handlebars_subtype_indentexpr =~# '^HtmlIndent(' + \ && exists('b:indent') + \ && type(b:indent) == type({}) + \ && has_key(b:indent, 'lnum') + " Force HTML indent to not keep state + let b:indent.lnum = -1 + endif + let lnum = prevnonblank(v:lnum-1) + let line = getline(lnum) + let cline = getline(v:lnum) + + " all indent rules only apply if the block opening/closing + " tag is on a separate line + + " indent after block {{#block + if line =~# '\v\s*\{\{\#.*\s*' + let ind = ind + sw + endif + " unindent after block close {{/block}} + if cline =~# '\v^\s*\{\{\/\S*\}\}\s*' + let ind = ind - sw + endif + " unindent {{else}} + if cline =~# '\v^\s*\{\{else.*\}\}\s*$' + let ind = ind - sw + endif + " indent again after {{else}} + if line =~# '\v^\s*\{\{else.*\}\}\s*$' + let ind = ind + sw + endif + + return ind +endfunction + +endif diff --git a/indent/rust.vim b/indent/rust.vim index 3033f063..0a3c3344 100644 --- a/indent/rust.vim +++ b/indent/rust.vim @@ -123,6 +123,13 @@ function GetRustIndent(lnum) let prevlinenum = prevnonblank(prevlinenum - 1) let prevline = s:get_line_trimmed(prevlinenum) endwhile + + " Handle where clauses nicely: subsequent values should line up nicely. + if prevline[len(prevline) - 1] == "," + \ && prevline =~# '^\s*where\s' + return indent(prevlinenum) + 6 + endif + if prevline[len(prevline) - 1] == "," \ && s:get_line_trimmed(a:lnum) !~ '^\s*[\[\]{}]' \ && prevline !~ '^\s*fn\s' diff --git a/indent/swift.vim b/indent/swift.vim index 472b3cf7..ba6d65ea 100644 --- a/indent/swift.vim +++ b/indent/swift.vim @@ -1,19 +1,230 @@ 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: The indent file for Swift +" Last Modified: December 05, 2014 -" Only load this indent file when no other was loaded. if exists("b:did_indent") - finish + finish endif let b:did_indent = 1 -" C indenting is built-in, thus this is very simple -setlocal cindent +let s:cpo_save = &cpo +set cpo&vim -let b:undo_indent = "setl cin<" +setlocal nosmartindent +setlocal indentkeys-=: +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 name ==# "swiftComment" || name ==# "swiftString" +endfunction + +function! s:IsExcludedFromIndent() + return s:SyntaxName() ==# "swiftComment" || s:SyntaxName() ==# "swiftString" +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 + + return indent(openingSquare) + endif + + if s:IsExcludedFromIndent() + return previousIndent + endif + + if line =~ ":$" + let switch = search("switch", "bWn") + return indent(switch) + elseif previous =~ ":$" + 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()") + return indent(openingBracket) + elseif currentCloseBrackets > currentOpenBrackets + let column = col(".") + 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) + endif + return indent(openingBracket) + else + return -1 + 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, "(") + 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 indent(openingParen) + 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 + + if numOpenParens > 0 + let previousParen = match(previous, "(") + return previousParen + 1 + endif + + return cindent +endfunction + +let &cpo = s:cpo_save +unlet s:cpo_save endif |