From f591a8f5a7ab6a66f4de86ea4ec235aed25a1295 Mon Sep 17 00:00:00 2001 From: felixoid Date: Fri, 2 Mar 2018 13:13:10 +0100 Subject: [PATCH 1/2] Add universal ctags support --- ctags/puppet_u.ctags | 10 ++++++++++ ftplugin/puppet_tagbar.vim | 24 +++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 ctags/puppet_u.ctags diff --git a/ctags/puppet_u.ctags b/ctags/puppet_u.ctags new file mode 100644 index 0000000..2e68445 --- /dev/null +++ b/ctags/puppet_u.ctags @@ -0,0 +1,10 @@ +--langdef=puppet + --map-puppet=+.pp + --regex-puppet=/^[[:space:]]*node[[:space:]]*[\'|\"]*([a-zA-Z0-9_\.\-]+)[\'|\"]*/\1/n,node/{scope=set} + --regex-puppet=/^[[:space:]]*class[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)[[:space:]]*\{*/\1/c,class,classes/{scope=set} + --regex-puppet=/^[[:space:]]*define[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/d,definition/{scope=set} + --regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/'\2'/i,include,includes/{scope=ref} + --regex-puppet=/^[[:space:]]*[~|\-]?>?[[:space:]]*([a-z][a-zA-Z0-9_:]+)[[:space:]]*\{[[:space:]]*(.*):/\1[\2]/r,resource/{scope=ref} + --regex-puppet=/^[[:space:]]*([\$][a-zA-Z0-9_:]+)[[:space:]]*=/\1/v,variable/{scope=ref} + --regex-puppet=/([A-Z][a-zA-Z0-9_:]+)[[:space:]]*\{/\1/f,default/ + --regex-puppet=/^[[:space:]]*site[[:space:]]*([a-zA-Z0-9_\-]+)/\1/s,site/ diff --git a/ftplugin/puppet_tagbar.vim b/ftplugin/puppet_tagbar.vim index 040a73f..9472a6c 100644 --- a/ftplugin/puppet_tagbar.vim +++ b/ftplugin/puppet_tagbar.vim @@ -5,6 +5,7 @@ if !exists(':Tagbar') finish endif +let s:ctags_version = system('ctags --version') let g:tagbar_type_puppet = { \ 'ctagstype': 'puppet', \ 'kinds': [ @@ -17,5 +18,26 @@ let g:tagbar_type_puppet = { \ 'r:Resources', \ 'f:Defaults' \], - \ 'deffile' : expand(':p:h:h') . '/ctags/puppet.ctags', \} + +if s:ctags_version =~ 'Universal Ctags' + " There no sense to split objects by colon + let g:tagbar_type_puppet.sro = '__' + let g:tagbar_type_puppet.kind2scope = { + \ 'd': 'definition', + \ 'c': 'class', + \ 'r': 'resource', + \ 'i': 'include', + \ 'v': 'variable', + \} + let g:tagbar_type_puppet.scope2kind = { + \ 'definition' : 'd', + \ 'class' : 'c', + \ 'resource' : 'r', + \ 'include' : 'i', + \ 'variable' : 'v', + \} + let g:tagbar_type_puppet.deffile = expand(':p:h:h') . '/ctags/puppet_u.ctags' +elseif s:ctags_version =~ 'Exuberant Ctags' + let g:tagbar_type_puppet.deffile = expand(':p:h:h') . '/ctags/puppet.ctags' +endif From 598b48b064ba1d6e03667a35ac478abb02d7a396 Mon Sep 17 00:00:00 2001 From: felixoid Date: Fri, 2 Mar 2018 15:39:59 +0100 Subject: [PATCH 2/2] Wrong tag for includes fixed --- ctags/puppet.ctags | 2 +- ctags/puppet_u.ctags | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ctags/puppet.ctags b/ctags/puppet.ctags index 2a0f383..5ea44e6 100644 --- a/ctags/puppet.ctags +++ b/ctags/puppet.ctags @@ -4,7 +4,7 @@ --regex-puppet=/^[[:space:]]*site[[:space:]]*([a-zA-Z0-9_\-]+)/\1/s,site/ --regex-puppet=/^[[:space:]]*node[[:space:]]*[\'|\"]*([a-zA-Z0-9_\.\-]+)[\'|\"]*/\1/n,node/ --regex-puppet=/^[[:space:]]*define[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/d,definition/ ---regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/\2/i,include/ +--regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/\1 \2/i,include/ --regex-puppet=/^[[:space:]]*([\$][a-zA-Z0-9_:]+)[[:space:]]*=/\1/v,variable/ --regex-puppet=/^[[:space:]]*[~|\-]?>?[[:space:]]*([a-z][a-zA-Z0-9_:]+)[[:space:]]*\{ *(.*):/\1[\2]/r,resource/ --regex-puppet=/([A-Z][a-zA-Z0-9_:]+)[[:space:]]*\{/\1/f,default/ diff --git a/ctags/puppet_u.ctags b/ctags/puppet_u.ctags index 2e68445..b8e8ce8 100644 --- a/ctags/puppet_u.ctags +++ b/ctags/puppet_u.ctags @@ -3,7 +3,7 @@ --regex-puppet=/^[[:space:]]*node[[:space:]]*[\'|\"]*([a-zA-Z0-9_\.\-]+)[\'|\"]*/\1/n,node/{scope=set} --regex-puppet=/^[[:space:]]*class[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)[[:space:]]*\{*/\1/c,class,classes/{scope=set} --regex-puppet=/^[[:space:]]*define[[:space:]]*([a-z][a-zA-Z0-9_:\-]+)/\1/d,definition/{scope=set} - --regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/'\2'/i,include,includes/{scope=ref} + --regex-puppet=/^[[:space:]]*(include|require)[[:space:]]*([a-zA-Z0-9_:]+)/\1 \2/i,include,includes/{scope=ref} --regex-puppet=/^[[:space:]]*[~|\-]?>?[[:space:]]*([a-z][a-zA-Z0-9_:]+)[[:space:]]*\{[[:space:]]*(.*):/\1[\2]/r,resource/{scope=ref} --regex-puppet=/^[[:space:]]*([\$][a-zA-Z0-9_:]+)[[:space:]]*=/\1/v,variable/{scope=ref} --regex-puppet=/([A-Z][a-zA-Z0-9_:]+)[[:space:]]*\{/\1/f,default/