diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2015-12-17 10:48:07 +0100 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2015-12-17 10:49:17 +0100 | 
| commit | 7679a92627661ef2d6878079a5c53bf3669aabf7 (patch) | |
| tree | 1c7d94fce4cf982d2bd57e31b886c6a112bb12c0 /syntax | |
| parent | ad44c4f7a316e798a9354197b20a80eabf280f1a (diff) | |
| download | vim-polyglot-7679a92627661ef2d6878079a5c53bf3669aabf7.tar.gz vim-polyglot-7679a92627661ef2d6878079a5c53bf3669aabf7.zip | |
Add ansible support, closes #96
Diffstat (limited to '')
| -rw-r--r-- | syntax/ansible.vim | 90 | ||||
| -rw-r--r-- | syntax/ansible_hosts.vim | 35 | ||||
| -rw-r--r-- | syntax/ansible_template.vim | 31 | ||||
| -rw-r--r-- | syntax/jinja2.vim | 139 | 
4 files changed, 295 insertions, 0 deletions
| diff --git a/syntax/ansible.vim b/syntax/ansible.vim new file mode 100644 index 00000000..ed0eafbf --- /dev/null +++ b/syntax/ansible.vim @@ -0,0 +1,90 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1 +   +" Vim syntax file +" Language: Ansible YAML/Jinja templates +" Maintainer: Dave Honneffer <pearofducks@gmail.com> +" Last Change: 2015.09.06 + +if exists("b:current_syntax") +  finish +endif + +if !exists("main_syntax") +  let main_syntax = 'yaml' +endif + +let b:current_syntax = '' +unlet b:current_syntax +runtime! syntax/yaml.vim + +let b:current_syntax = '' +unlet b:current_syntax +syntax include @Yaml syntax/yaml.vim + +let b:current_syntax = '' +unlet b:current_syntax +syntax include @Jinja syntax/jinja2.vim + +" Jinja +" ================================ + +syn cluster jinjaSLSBlocks add=jinjaTagBlock,jinjaVarBlock,jinjaComment +" https://github.com/mitsuhiko/jinja2/blob/6b7c0c23/ext/Vim/jinja.vim +syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks +syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks +syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,@jinjaSLSBlocks +highlight link jinjaVariable Constant +highlight link jinjaVarDelim Delimiter + +" YAML +" ================================ + +" Reset some YAML to plain styling +" the number 80 in Ansible isn't any more important than the word root +highlight link yamlInteger NONE +highlight link yamlBool NONE +highlight link yamlFlowString NONE +" but it does make sense we visualize quotes easily +highlight link yamlFlowStringDelimiter Delimiter + +fun! s:attribute_highlight(attributes) +  if a:attributes =~ 'a' +    syn match ansible_attributes "\v\w+\=" containedin=yamlPlainScalar +  else +    syn match ansible_attributes "\v^\s*\w+\=" containedin=yamlPlainScalar +  endif +  if a:attributes =~ 'n' +    highlight link ansible_attributes NONE +  elseif a:attributes =~ 'd' +    highlight link ansible_attributes Comment +  else +    highlight link ansible_attributes Structure +  endif +endfun + +if exists("g:ansible_attribute_highlight") +  call s:attribute_highlight(g:ansible_attribute_highlight) +else +  call s:attribute_highlight('ad') +endif + +if exists("g:ansible_name_highlight") +  syn keyword ansible_name name containedin=yamlBlockMappingKey contained +  if g:ansible_name_highlight =~ 'd' +    highlight link ansible_name Comment +  else +    highlight link ansible_name Underlined +  endif +endif + +syn keyword ansible_debug_keywords debug containedin=yamlBlockMappingKey contained +highlight link ansible_debug_keywords Debug + +syn match ansible_with_keywords "\vwith_.+" containedin=yamlBlockMappingKey contained +syn keyword ansible_special_keywords include until retries delay when only_if become become_user block rescue always notify containedin=yamlBlockMappingKey contained +highlight link ansible_with_keywords Statement +highlight link ansible_special_keywords Statement + +let b:current_syntax = "ansible" + +endif diff --git a/syntax/ansible_hosts.vim b/syntax/ansible_hosts.vim new file mode 100644 index 00000000..fde5bf6f --- /dev/null +++ b/syntax/ansible_hosts.vim @@ -0,0 +1,35 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1 +   +" Vim syntax file +" Language: Ansible hosts files +" Maintainer: Dave Honneffer <pearofducks@gmail.com> +" Last Change: 2015.09.23 + +if exists("b:current_syntax") +  finish +endif + +syn case ignore +syn match hostsFirstWord      "\v^\S+" +syn match hostsAttributes     "\v\S*\=" +syn region hostsHeader        start="\v^\s*\[" end="\v\]" +syn keyword hostsHeaderSpecials children vars containedin=hostsHeader contained +syn match  hostsComment       "\v^[#;].*$" + +highlight link hostsFirstWord        Label +highlight link hostsHeader           Define +highlight link hostsComment          Comment +highlight link hostsHeaderSpecials   Identifier +highlight link hostsAttributes       Structure + +if exists("g:ansible_attribute_highlight") +  if g:ansible_attribute_highlight =~ 'n' +    highlight link hostsAttributes NONE +  elseif g:ansible_attribute_highlight =~ 'd' +    highlight link hostsAttributes Comment +  endif +endif + +let b:current_syntax = "ansible_hosts" + +endif diff --git a/syntax/ansible_template.vim b/syntax/ansible_template.vim new file mode 100644 index 00000000..31ca4b24 --- /dev/null +++ b/syntax/ansible_template.vim @@ -0,0 +1,31 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1 +   +" Vim syntax file +" Language: Ansible YAML/Jinja templates +" Maintainer: Dave Honneffer <pearofducks@gmail.com> +" Last Change: 2015.09.06 + +if exists("b:current_syntax") +  finish +endif + +if !exists("main_syntax") +  let main_syntax = 'jinja2' +endif + +let b:current_syntax = '' +unlet b:current_syntax +runtime! syntax/jinja2.vim + +if exists("g:ansible_extra_syntaxes") +  let s:extra_syntax = split(g:ansible_extra_syntaxes) +  for syntax_name in s:extra_syntax +    let b:current_syntax = '' +    unlet b:current_syntax +    execute 'runtime!' "syntax/" . syntax_name +  endfor +endif + +let b:current_syntax = "ansible_template" + +endif diff --git a/syntax/jinja2.vim b/syntax/jinja2.vim new file mode 100644 index 00000000..3ddea85c --- /dev/null +++ b/syntax/jinja2.vim @@ -0,0 +1,139 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ansible') == -1 +   +" Vim syntax file +" Language:	Jinja template +" Maintainer:	Armin Ronacher <armin.ronacher@active-4.com> +" Last Change:	2008 May 9 +" Version:      1.1 +" +" Known Bugs: +"   because of odd limitations dicts and the modulo operator +"   appear wrong in the template. +" +" Changes: +" +"     2008 May 9:     Added support for Jinja2 changes (new keyword rules) + +" .vimrc variable to disable html highlighting +if !exists('g:jinja_syntax_html') +   let g:jinja_syntax_html=1 +endif + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if !exists("main_syntax") +  if version < 600 +    syntax clear +  elseif exists("b:current_syntax") +  finish +endif +  let main_syntax = 'jinja' +endif + +" Pull in the HTML syntax. +if g:jinja_syntax_html +  if version < 600 +    so <sfile>:p:h/html.vim +  else +    runtime! syntax/html.vim +    unlet b:current_syntax +  endif +endif + +syntax case match + +" Jinja template built-in tags and parameters (without filter, macro, is and raw, they +" have special threatment) +syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import + +syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter +syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction +syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName + +" Variable Names +syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/ +syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs + +" Filters +syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter +syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/ +syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/ +syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/ + +" Jinja template constants +syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\"/ end=/"/ +syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\'/ end=/'/ +syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/ + +" Operators +syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/ +syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/ +syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute +syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/ + +" Jinja template tag and variable blocks +syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained +syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained +syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained +syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment + +syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment + +" Jinja template 'raw' tag +syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment + +" Jinja comments +syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString + +" Block start keywords.  A bit tricker.  We only highlight at the start of a +" tag block and only if the name is not followed by a comma or equals sign +" which usually means that we have to deal with an assignment. +syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/ + +" and context modifiers +syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/ + + +" 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_jinja_syn_inits") +  if version < 508 +    let did_jinja_syn_inits = 1 +    command -nargs=+ HiLink hi link <args> +  else +    command -nargs=+ HiLink hi def link <args> +  endif + +  HiLink jinjaPunctuation jinjaOperator +  HiLink jinjaAttribute jinjaVariable +  HiLink jinjaFunction jinjaFilter + +  HiLink jinjaTagDelim jinjaTagBlock +  HiLink jinjaVarDelim jinjaVarBlock +  HiLink jinjaCommentDelim jinjaComment +  HiLink jinjaRawDelim jinja + +  HiLink jinjaSpecial Special +  HiLink jinjaOperator Normal +  HiLink jinjaRaw Normal +  HiLink jinjaTagBlock PreProc +  HiLink jinjaVarBlock PreProc +  HiLink jinjaStatement Statement +  HiLink jinjaFilter Function +  HiLink jinjaBlockName Function +  HiLink jinjaVariable Identifier +  HiLink jinjaString Constant +  HiLink jinjaNumber Constant +  HiLink jinjaComment Comment + +  delcommand HiLink +endif + +let b:current_syntax = "jinja" + +if main_syntax == 'jinja' +  unlet main_syntax +endif + +endif | 
