diff options
Diffstat (limited to '')
-rw-r--r-- | after/ftplugin/puppet.vim | 11 | ||||
-rwxr-xr-x | build | 2 | ||||
-rw-r--r-- | ftdetect/polyglot.vim | 2 | ||||
-rw-r--r-- | ftplugin/puppet.vim | 143 | ||||
-rw-r--r-- | indent/puppet.vim | 15 | ||||
-rw-r--r-- | syntax/puppet.vim | 89 |
6 files changed, 98 insertions, 164 deletions
diff --git a/after/ftplugin/puppet.vim b/after/ftplugin/puppet.vim new file mode 100644 index 00000000..2bac2dc8 --- /dev/null +++ b/after/ftplugin/puppet.vim @@ -0,0 +1,11 @@ +inoremap <buffer> <silent> > ><Esc>:call <SID>puppetalign()<CR>A +function! s:puppetalign() + let p = '^\s*\w+\s*[=+]>.*$' + let lineContainsHashrocket = getline('.') =~# '^\s*\w+\s*[=+]>' + let hashrocketOnPrevLine = getline(line('.') - 1) =~# p + let hashrocketOnNextLine = getline(line('.') + 1) =~# p + if exists(':Tabularize') " && lineContainsHashrocket && (hashrocketOnPrevLine || hashrocketOnNextLine) + Tabularize /=>/l1 + normal! 0 + endif +endfunction @@ -97,7 +97,7 @@ PACKS=" opencl:petRUShka/vim-opencl perl:vim-perl/vim-perl php:StanAngeloff/php.vim - puppet:ajf/puppet-vim + puppet:rodjek/vim-puppet protobuf:uarun/vim-protobuf python:mitsuhiko/vim-python-combined r-lang:vim-scripts/R.vim diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 6be7b79c..28354d61 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -87,7 +87,7 @@ endif au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/*,*/nginx/vhosts.d/*,nginx.conf if &ft == '' | setfiletype nginx | endif au BufRead,BufNewFile *.cl set filetype=opencl autocmd BufNewFile,BufRead *.proto setfiletype proto -au BufRead,BufNewFile *.pp set filetype=puppet +au! BufRead,BufNewFile *.pp setfiletype puppet function! s:setf(filetype) abort if &filetype !=# a:filetype let &filetype = a:filetype diff --git a/ftplugin/puppet.vim b/ftplugin/puppet.vim index 1b008682..175ac126 100644 --- a/ftplugin/puppet.vim +++ b/ftplugin/puppet.vim @@ -1,137 +1,6 @@ -" Vim filetype plugin -" Language: Puppet -" Maintainer: Todd Zullinger <tmz@pobox.com> -" Last Change: 2009 Aug 19 -" vim: set sw=4 sts=4: - -if exists("b:did_ftplugin") - finish -endif -let b:did_ftplugin = 1 - -if !exists("no_plugin_maps") && !exists("no_puppet_maps") - if !hasmapto("<Plug>AlignRange") - map <buffer> <LocalLeader>= <Plug>AlignRange - endif -endif - -noremap <buffer> <unique> <script> <Plug>AlignArrows :call <SID>AlignArrows()<CR> -noremap <buffer> <unique> <script> <Plug>AlignRange :call <SID>AlignRange()<CR> - -iabbrev => =><C-R>=<SID>AlignArrows('=>')<CR> -iabbrev +> +><C-R>=<SID>AlignArrows('+>')<CR> - -if exists('*s:AlignArrows') - finish -endif - -let s:arrow_re = '[=+]>' -let s:selector_re = '[=+]>\s*\$.*\s*?\s*{\s*$' - -" set keywordprg to 'pi' (alias for puppet describe) -" this lets K invoke pi for word under cursor -setlocal keywordprg=puppet\ describe - -function! s:AlignArrows(op) - let cursor_pos = getpos('.') - let lnum = line('.') - let line = getline(lnum) - if line !~ s:arrow_re - return - endif - let pos = stridx(line, a:op) - let start = lnum - let end = lnum - let pnum = lnum - 1 - while 1 - let pline = getline(pnum) - if pline !~ s:arrow_re || pline =~ s:selector_re - break - endif - let start = pnum - let pnum -= 1 - endwhile - let cnum = end - while 1 - let cline = getline(cnum) - if cline !~ s:arrow_re || - \ (indent(cnum) != indent(cnum+1) && getline(cnum+1) !~ '\s*}') - break - endif - let end = cnum - let cnum += 1 - endwhile - call s:AlignSection(start, end) - let cursor_pos[2] = stridx(getline('.'), a:op) + strlen(a:op) + 1 - call setpos('.', cursor_pos) - return '' -endfunction - -function! s:AlignRange() range - call s:AlignSection(a:firstline, a:lastline) -endfunction - -" AlignSection and AlignLine are from the vim wiki: -" http://vim.wikia.com/wiki/Regex-based_text_alignment -function! s:AlignSection(start, end) - let extra = 1 - let sep = s:arrow_re - let maxpos = 0 - let section = getline(a:start, a:end) - for line in section - let pos = match(line, ' *'.sep) - if maxpos < pos - let maxpos = pos - endif - endfor - call map(section, 's:AlignLine(v:val, sep, maxpos, extra)') - call setline(a:start, section) -endfunction - -function! s:AlignLine(line, sep, maxpos, extra) - let m = matchlist(a:line, '\(.\{-}\) \{-}\('.a:sep.'.*\)') - if empty(m) - return a:line - endif - let spaces = repeat(' ', a:maxpos - strlen(m[1]) + a:extra) - return m[1] . spaces . m[2] -endfunction - -" detect if we are in a module and set variables for classpath (autoloader), -" modulename, modulepath, and classname -" useful to use in templates -function! s:SetModuleVars() - - " set these to any dirs you want to stop searching on - " useful to stop vim from spinning disk looking all over for init.pp - " probably only a macosx problem with /tmp since it's really /private/tmp - " but it's here if you find vim spinning on new files in certain places - if !exists("g:puppet_stop_dirs") - let g:puppet_stop_dirs = '/tmp;/private/tmp' - endif - - " search path for init.pp - let b:search_path = './**' - let b:search_path = b:search_path . ';' . getcwd() . ';' . g:puppet_stop_dirs - - " find what we assume to be our module dir - let b:initpp = findfile("init.pp", b:search_path) " find an init.pp up or down - let b:module_path = fnamemodify(b:initpp, ":p:h:h") " full path to module name - let b:module_name = fnamemodify(b:module_path, ":t") " just the module name - - " sub out the full path to the module with the name and replace slashes with :: - let b:classpath = fnamemodify(expand("%:p:r"), ':s#' . b:module_path . '/manifests#' . b:module_name . '#'. ":gs?/?::?") - let b:classname = expand("%:t:r") - - " if we don't start with a word we didn't replace the module_path - " probably b/c we couldn't find an init.pp / not a module - " so we assume that root of the filename is the class (sane for throwaway - " manifests - if b:classpath =~ '^::' - let b:classpath = b:classname - endif -endfunction - -if exists("g:puppet_module_detect") - call s:SetModuleVars() -endif +setl ts=2 +setl sts=2 +setl sw=2 +setl et +setl keywordprg=puppet\ describe\ --providers +setl iskeyword=-,:,@,48-57,_,192-255 diff --git a/indent/puppet.vim b/indent/puppet.vim index 689e0687..56ee46d5 100644 --- a/indent/puppet.vim +++ b/indent/puppet.vim @@ -1,7 +1,7 @@ " Vim indent file -" Language: Puppet -" Maintainer: Todd Zullinger <tmz@pobox.com> -" Last Change: 2009 Aug 19 +" Language: Puppet +" Maintainer: Todd Zullinger <tmz@pobox.com> +" Last Change: 2009 Aug 19 " vim: set sw=4 sts=4: if exists("b:did_indent") @@ -67,10 +67,15 @@ function! GetPuppetIndent() let ind -= &sw endif - " Match } }, }; ] ]: ) - if line =~ '^\s*\(}\(,\|;\)\?$\|]:\?$\|)\)' + " Match } }, }; ] ]: ], ]; ) + if line =~ '^\s*\(}\(,\|;\)\?$\|]:\|],\|}]\|];\?$\|)\)' let ind = indent(s:OpenBrace(v:lnum)) endif + " Don't actually shift over for } else { + if line =~ '^\s*}\s*els\(e\|if\).*{\s*$' + let ind -= &sw + endif + return ind endfunction diff --git a/syntax/puppet.vim b/syntax/puppet.vim index 8cdada18..010ada45 100644 --- a/syntax/puppet.vim +++ b/syntax/puppet.vim @@ -17,9 +17,9 @@ elseif exists("b:current_syntax") endif " match class/definition/node declarations -syn region puppetDefine start="^\s*\(class\|define\|node\)\s" end="{" contains=puppetDefType,puppetDefName,puppetDefArguments,puppetNodeRe +syn region puppetDefine start="^\s*\(class\|define\|node\)\s" end="{" contains=puppetDefType,puppetDefName,puppetDefArguments,puppetNodeRe,@NoSpell syn keyword puppetDefType class define node inherits contained -syn region puppetDefArguments start="(" end=")" contained contains=puppetArgument,puppetString +syn region puppetDefArguments start="(" end=")" contained contains=puppetArgument,puppetString,puppetComment,puppetMultilineComment syn match puppetArgument "\w\+" contained syn match puppetArgument "\$\w\+" contained syn match puppetArgument "'[^']+'" contained @@ -31,15 +31,24 @@ syn match puppetNodeRe "/.*/" contained " match 'foo::bar' in 'class foo::bar { ...' " match 'Foo::Bar' in 'Foo::Bar["..."] "FIXME: "Foo-bar" doesn't get highlighted as expected, although "foo-bar" does. -syn match puppetInstance "[A-Za-z0-9_-]\+\(::[A-Za-z0-9_-]\+\)*\s*{" contains=puppetTypeName,puppetTypeDefault -syn match puppetInstance "[A-Z][a-z_-]\+\(::[A-Z][a-z_-]\+\)*\s*[[{]" contains=puppetTypeName,puppetTypeDefault -syn match puppetInstance "[A-Z][a-z_-]\+\(::[A-Z][a-z_-]\+\)*\s*<\?<|" contains=puppetTypeName,puppetTypeDefault +syn match puppetInstance "[A-Za-z0-9_-]\+\(::[A-Za-z0-9_-]\+\)*\s*{" contains=puppetTypeName,puppetTypeDefault,@NoSpell +syn match puppetInstance "[A-Z][a-z_-]\+\(::[A-Z][a-z_-]\+\)*\s*[[{]" contains=puppetTypeName,puppetTypeDefault,@NoSpell +syn match puppetInstance "[A-Z][a-z_-]\+\(::[A-Z][a-z_-]\+\)*\s*<\?<|" contains=puppetTypeName,puppetTypeDefault,@NoSpell syn match puppetTypeName "[a-z]\w*" contained syn match puppetTypeDefault "[A-Z]\w*" contained -" match 'foo' in 'foo => "bar"' -syn match puppetParam "\w\+\s*[=+]>" contains=puppetParamName -syn match puppetParamName "\w\+" contained +syn match puppetParam "\w\+\s*\(=\|+\)>" contains=puppetTypeRArrow,puppetParamName +syn match puppetParamRArrow "\(=\|+\)>" contained +syn match puppetParamName "\w\+" contained contains=@NoSpell +syn match puppetVariable "$\(\(\(::\)\?\w\+\)\+\|{\(\(::\)\?\w\+\)\+}\)" +syn match puppetParen "(" +syn match puppetParen ")" +syn match puppetBrace "{" +syn match puppetBrace "}" +syn match puppetBrack "\[" +syn match puppetBrack "\]" +syn match puppetBrack "<|" +syn match puppetBrack "|>" " match 'present' in 'ensure => present' " match '2755' in 'mode => 2755' @@ -57,25 +66,49 @@ syn region puppetFunction start="^\s*\(alert\|crit\|debug\|emerg\|err\|fai " rvalues syn region puppetFunction start="^\s*\(defined\|file\|fqdn_rand\|generate\|inline_template\|regsubst\|sha1\|shellquote\|split\|sprintf\|tagged\|template\|versioncmp\)\s*(" end=")" contained contains=puppetString -syn match puppetVariable "$[a-zA-Z0-9_:]\+" -syn match puppetVariable "${[a-zA-Z0-9_:]\+}" +syn match puppetVariable "$[a-zA-Z0-9_:]\+" contains=@NoSpell +syn match puppetVariable "${[a-zA-Z0-9_:]\+}" contains=@NoSpell " match anything between simple/double quotes. " don't match variables if preceded by a backslash. syn region puppetString start=+'+ skip=+\\\\\|\\'+ end=+'+ syn region puppetString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=puppetVariable,puppetNotVariable -syn match puppetString "/[^/]*/" syn match puppetNotVariable "\\$\w\+" contained syn match puppetNotVariable "\\${\w\+}" contained -syn keyword puppetKeyword import inherits include +syn keyword puppetKeyword import inherits include require syn keyword puppetControl case default if else elsif syn keyword puppetSpecial true false undef +syn match puppetClass "[A-Za-z0-9_-]\+\(::[A-Za-z0-9_-]\+\)\+" contains=@NoSpell + +" Match the Regular Expression type +" XXX: Puppet does not currently support a few features available in the +" full Ruby Regexp class, namely, interpolation, lookbehind and named +" sub-expressions. Matches for these features are included in the +" commented-out versions of puppetRegexParen and puppetRegexSubName, +" plus the supporting groups puppetRegexAngBrack and puppetRegexTick. +syn region puppetRegex start="/" skip="\\/" end="/" contains=puppetRegexParen,puppetRegexBrace,puppetRegexOrpuppetRegexBrack,puppetRegexComment +syn match puppetRegexParen "(\(?\([imx]\{0,4}:\|[=!]\)\)\?" contains=puppetRegexSpecChar,puppetRegexSubName contained +"syn match puppetRegexParen "(\(?\([imxo]\{0,4}:\|['<][[:alnum:]]\+[>']\|<?[=!]\)\)\?" contains=puppetRegexSpecChar,puppetRegexSubName contained +syn match puppetRegexParen ")" contained +syn match puppetRegexBrace "{" contained +syn match puppetRegexBrace "}" contained +syn match puppetRegexBrack "\[" contained +syn match puppetRegexBrack "\]" contained +"syn match puppetRegexAngBrack "<" contained +"syn match puppetRegexAngBrack ">" contained +"syn match puppetRegexTick +'+ contained +syn match puppetRegexOr "|" contained +"syn match puppetRegexSubName "['<][[:alnum:]]\+[>']" contains=puppetRegexAngBrack,puppetRegexTick contained +syn match puppetRegexSpecialChar "[?:imx]\|\(<?[=!]\)" contained +syn region puppetRegexComment start="(?#" skip="\\)" end=")" contained + " comments last overriding everything else -syn match puppetComment "\s*#.*$" contains=puppetTodo -syn region puppetComment start="/\*" end="\*/" contains=puppetTodo extend -syn keyword puppetTodo TODO NOTE FIXME XXX BUG HACK contained +syn match puppetComment "\s*#.*$" contains=puppetTodo,@Spell +syn region puppetMultilineComment start="/\*" end="\*/" contains=puppetTodo,@Spell +syn keyword puppetTodo TODO NOTE FIXME XXX BUG HACK contained +syn keyword puppetTodo TODO: NOTE: FIXME: XXX: BUG: HACK: contained " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -90,15 +123,32 @@ if version >= 508 || !exists("did_puppet_syn_inits") HiLink puppetVariable Identifier HiLink puppetType Identifier - HiLink puppetKeyword Define + HiLink puppetKeyword Keyword HiLink puppetComment Comment + HiLink puppetMultilineComment Comment HiLink puppetString String - HiLink puppetParamKeyword String + HiLink puppetRegex Constant + HiLink puppetRegexParen Delimiter + HiLink puppetRegexBrace Delimiter + HiLink puppetRegexBrack Delimiter + HiLink puppetRegexAngBrack Delimiter + HiLink puppetRegexTick Delimiter + HiLink puppetRegexOr Delimiter + HiLink puppetRegexSubName Identifier + HiLink puppetRegexSpecChar SpecialChar + HiLink puppetRegexComment Comment + HiLink puppetParamKeyword Keyword HiLink puppetParamDigits String HiLink puppetNotVariable String - HiLink puppetParamSpecial Special + HiLink puppetParamSpecial Boolean HiLink puppetSpecial Special HiLink puppetTodo Todo + HiLink puppetBrack Delimiter + HiLink puppetTypeBrack Delimiter + HiLink puppetBrace Delimiter + HiLink puppetTypeBrace Delimiter + HiLink puppetParen Delimiter + HiLink puppetDelimiter Delimiter HiLink puppetControl Statement HiLink puppetDefType Define HiLink puppetDefName Type @@ -108,10 +158,9 @@ if version >= 508 || !exists("did_puppet_syn_inits") HiLink puppetParamName Identifier HiLink puppetArgument Identifier HiLink puppetFunction Function + HiLink puppetClass Include delcommand HiLink endif let b:current_syntax = "puppet" -set iskeyword=-,:,@,48-57,_,192-255 - |