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 | 
