mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-11 13:03:50 -05:00
Change provider for puppet, closes #424
This commit is contained in:
@@ -16,6 +16,7 @@ let b:did_indent = 1
|
||||
setlocal autoindent smartindent
|
||||
setlocal indentexpr=GetPuppetIndent()
|
||||
setlocal indentkeys+=0],0)
|
||||
setlocal formatexpr=puppet#format#Format()
|
||||
|
||||
if exists("*GetPuppetIndent")
|
||||
finish
|
||||
@@ -33,7 +34,7 @@ function! s:PartOfInclude(lnum)
|
||||
if line !~ ',$'
|
||||
break
|
||||
endif
|
||||
if line =~ '^\s*include\s\+[^,]\+,$'
|
||||
if line =~ '^\s*include\s\+[^,]\+,$' && line !~ '[=>]>'
|
||||
return 1
|
||||
endif
|
||||
endwhile
|
||||
@@ -42,24 +43,70 @@ endfunction
|
||||
|
||||
function! s:OpenBrace(lnum)
|
||||
call cursor(a:lnum, 1)
|
||||
return searchpair('{\|\[\|(', '', '}\|\]\|)', 'nbW')
|
||||
return searchpair('{\|\[\|(', '', '}\|\]\|)', 'nbW',
|
||||
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "comment\\|string"')
|
||||
endfunction
|
||||
|
||||
function! GetPuppetIndent()
|
||||
let pnum = prevnonblank(v:lnum - 1)
|
||||
function! s:InsideMultilineString(lnum)
|
||||
return synIDattr(synID(a:lnum, 1, 0), 'name') =~? 'string'
|
||||
endfunction
|
||||
|
||||
function! s:PrevNonMultilineString(lnum)
|
||||
let l:lnum = a:lnum
|
||||
while l:lnum > 0 && s:InsideMultilineString(lnum)
|
||||
let l:lnum = l:lnum - 1
|
||||
endwhile
|
||||
|
||||
return l:lnum
|
||||
endfunction
|
||||
|
||||
""
|
||||
" Get indent number for line, line can be given as params, otherwise function
|
||||
" use line where cursor is
|
||||
" @param a:1 (optional) line number in current buffer
|
||||
" @return integer
|
||||
function! GetPuppetIndent(...)
|
||||
let l:lnum = get(a:, 1, v:lnum)
|
||||
|
||||
let pnum = prevnonblank(l:lnum - 1)
|
||||
if pnum == 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
let line = getline(v:lnum)
|
||||
let line = getline(l:lnum)
|
||||
let pline = getline(pnum)
|
||||
let ind = indent(pnum)
|
||||
|
||||
" Avoid cases of closing braces or parens on the current line: returning
|
||||
" the same indent here would be premature since for that particular case
|
||||
" we want to instead get the indent level of the matching opening brace or
|
||||
" parenthenses.
|
||||
if pline =~ '^\s*#' && line !~ '^\s*\(}\(,\|;\)\?$\|]:\|],\|}]\|];\?$\|)\)'
|
||||
return ind
|
||||
endif
|
||||
|
||||
" We are inside a multi-line string: if we interfere with indentation here
|
||||
" we're actually changing the contents of of the string!
|
||||
if s:InsideMultilineString(l:lnum)
|
||||
return indent(l:lnum)
|
||||
endif
|
||||
|
||||
" Previous line was inside a multi-line string: we've lost the indent
|
||||
" level. We need to find this value from the last line that was not inside
|
||||
" of a multi-line string to restore proper alignment.
|
||||
if s:InsideMultilineString(pnum)
|
||||
if pnum - 1 == 0
|
||||
return ind
|
||||
endif
|
||||
|
||||
let ind = indent(s:PrevNonMultilineString(pnum - 1))
|
||||
endif
|
||||
|
||||
if pline =~ '\({\|\[\|(\|:\)\s*\(#.*\)\?$'
|
||||
let ind += &sw
|
||||
elseif pline =~ ';$' && pline !~ '[^:]\+:.*[=+]>.*'
|
||||
let ind -= &sw
|
||||
elseif pline =~ '^\s*include\s\+.*,$'
|
||||
elseif pline =~ '^\s*include\s\+.*,$' && pline !~ '[=+]>'
|
||||
let ind += &sw
|
||||
endif
|
||||
|
||||
@@ -76,7 +123,6 @@ function! GetPuppetIndent()
|
||||
if line =~ '^\s*}\s*els\(e\|if\).*{\s*$'
|
||||
let ind -= &sw
|
||||
endif
|
||||
|
||||
" Don't indent resources that are one after another with a ->(ordering arrow)
|
||||
" file {'somefile':
|
||||
" ...
|
||||
|
||||
Reference in New Issue
Block a user