puppet syntax highlighting

This commit is contained in:
Julian Scharrenbach 2019-02-14 16:22:21 +01:00
parent fbeace99e5
commit 95d1879950
2 changed files with 209 additions and 0 deletions

94
.vim/ftplugin/puppet.vim Normal file
View File

@ -0,0 +1,94 @@
" 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*$'
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

115
.vim/syntax/puppet.vim Normal file
View File

@ -0,0 +1,115 @@
" puppet syntax file
" Filename: puppet.vim
" Language: puppet configuration file
" Maintainer: Luke Kanies <luke@madstop.com>
" URL:
" Last Change:
" Version:
"
" Copied from the cfengine, ruby, and perl syntax files
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" match class/definition/node declarations
syn region puppetDefine start="^\s*\(class\|define\|node\)\s" end="{" contains=puppetDefType,puppetDefName,puppetDefArguments,puppetNodeRe
syn keyword puppetDefType class define node inherits contained
syn region puppetDefArguments start="(" end=")" contained contains=puppetArgument,puppetString
syn match puppetArgument "\w\+" contained
syn match puppetArgument "\$\w\+" contained
syn match puppetArgument "'[^']+'" contained
syn match puppetArgument '"[^"]+"' contained
syn match puppetDefName "\w\+" contained
syn match puppetNodeRe "/.*/" contained
" match 'foo' in 'class foo { ...'
" 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 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
" match 'present' in 'ensure => present'
" match '2755' in 'mode => 2755'
" don't match 'bar' in 'foo => bar'
syn match puppetParam "\w\+\s*[=+]>\s*[a-z0-9]\+" contains=puppetParamString,puppetParamName
syn match puppetParamString "[=+]>\s*\w\+" contains=puppetParamKeyword,puppetParamSpecial,puppetParamDigits contained
syn keyword puppetParamKeyword present absent purged latest installed running stopped mounted unmounted role configured file directory link contained
syn keyword puppetParamSpecial true false undef contained
syn match puppetParamDigits "[0-9]\+"
" match 'template' in 'content => template("...")'
syn match puppetParam "\w\+\s*[=+]>\s*\w\+\s*(" contains=puppetFunction,puppetParamName
" statements
syn region puppetFunction start="^\s*\(alert\|crit\|debug\|emerg\|err\|fail\|include\|info\|notice\|realize\|require\|search\|tag\|warning\)\s*(" end=")" contained contains=puppetString
" 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_:]\+}"
" 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 puppetControl case default if else elsif
syn keyword puppetSpecial true false undef
" 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
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_puppet_syn_inits")
if version < 508
let did_puppet_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink puppetVariable Identifier
HiLink puppetType Identifier
HiLink puppetKeyword Define
HiLink puppetComment Comment
HiLink puppetString String
HiLink puppetParamKeyword String
HiLink puppetParamDigits String
HiLink puppetNotVariable String
HiLink puppetParamSpecial Special
HiLink puppetSpecial Special
HiLink puppetTodo Todo
HiLink puppetControl Statement
HiLink puppetDefType Define
HiLink puppetDefName Type
HiLink puppetNodeRe Type
HiLink puppetTypeName Statement
HiLink puppetTypeDefault Type
HiLink puppetParamName Identifier
HiLink puppetArgument Identifier
HiLink puppetFunction Function
delcommand HiLink
endif
let b:current_syntax = "puppet"