summaryrefslogtreecommitdiffstats
path: root/syntax
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2015-12-17 10:48:07 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2015-12-17 10:48:07 +0100
commitde3110b733880502b23faf9af4d450f22a4b15f7 (patch)
treedd18074c197a91640abb246ec158dc1895d980be /syntax
parent7cbd509b6ca5522b33c8bf299468ec1be9052416 (diff)
downloadvim-polyglot-2.4.0.tar.gz
vim-polyglot-2.4.0.zip
Add ansible support, closes #96v2.4.0
Diffstat (limited to 'syntax')
-rw-r--r--syntax/ansible.vim90
-rw-r--r--syntax/ansible_hosts.vim35
-rw-r--r--syntax/ansible_template.vim31
-rw-r--r--syntax/jinja2.vim139
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