From 555be533a47ecf8a744f392eb659df262e8df629 Mon Sep 17 00:00:00 2001 From: Jan Larres Date: Thu, 24 Nov 2011 19:22:31 +1300 Subject: [PATCH] Display 'kind' headers inside of scopes --- autoload/tagbar.vim | 35 +++++++++++++++++++++++++++++++---- doc/tagbar.txt | 3 +++ syntax/tagbar.vim | 26 ++++++++++++++------------ 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/autoload/tagbar.vim b/autoload/tagbar.vim index 134967c..8a5dfcb 100644 --- a/autoload/tagbar.vim +++ b/autoload/tagbar.vim @@ -1078,6 +1078,7 @@ function! s:BaseTag.closeFold() dict elseif self.isFoldable() && !self.isFolded() " Tag is parent of a scope and is not folded let self.fileinfo.tagfolds[self.fields.kind][self.fullpath] = 1 + let newline = self.tline elseif !empty(self.parent) " Tag is normal child, so close parent let parent = self.parent @@ -2139,9 +2140,22 @@ function! s:PrintKinds(typeinfo, fileinfo) let tag.tline = curline let a:fileinfo.tline[curline] = tag + " Print children if tag.isFoldable() && !tag.isFolded() - for childtag in tag.children - call s:PrintTag(childtag, 1, a:fileinfo, a:typeinfo) + for ckind in a:typeinfo.kinds + let childtags = filter(copy(tag.children), + \ 'v:val.fields.kind ==# ckind.short') + if len(childtags) > 0 + " Print 'kind' header of following children + if !has_key(a:typeinfo.kind2scope, ckind.short) + silent put =' [' . ckind.long . ']' + let a:fileinfo.tline[line('.')] = tag + endif + for childtag in childtags + call s:PrintTag(childtag, 1, + \ a:fileinfo, a:typeinfo) + endfor + endif endfor endif @@ -2207,8 +2221,21 @@ function! s:PrintTag(tag, depth, fileinfo, typeinfo) " Recursively print children if a:tag.isFoldable() && !a:tag.isFolded() - for childtag in a:tag.children - call s:PrintTag(childtag, a:depth + 1, a:fileinfo, a:typeinfo) + for ckind in a:typeinfo.kinds + let childtags = filter(copy(a:tag.children), + \ 'v:val.fields.kind ==# ckind.short') + if len(childtags) > 0 + " Print 'kind' header of following children + if !has_key(a:typeinfo.kind2scope, ckind.short) + silent put =' ' . repeat(' ', a:depth * 2) . + \ '[' . ckind.long . ']' + let a:fileinfo.tline[line('.')] = a:tag + endif + for childtag in childtags + call s:PrintTag(childtag, a:depth + 1, + \ a:fileinfo, a:typeinfo) + endfor + endif endfor endif endfunction diff --git a/doc/tagbar.txt b/doc/tagbar.txt index fd581b2..4c94a53 100644 --- a/doc/tagbar.txt +++ b/doc/tagbar.txt @@ -488,6 +488,9 @@ TagbarComment TagbarKind The header of generic "kinds" like "functions" and "variables". +TagbarNestedKind + The "kind" headers in square brackets inside of scopes. + TagbarScope Tags that define a scope like classes, structs etc. diff --git a/syntax/tagbar.vim b/syntax/tagbar.vim index b3bf346..3e4fd4f 100644 --- a/syntax/tagbar.vim +++ b/syntax/tagbar.vim @@ -41,19 +41,21 @@ else syntax match TagbarAccessPrivate '\([-+ ]\)\@<=-\([^-+# ]\)\@=' endif -syntax match TagbarComment '^".*' -syntax match TagbarType ' : \zs.*' -syntax match TagbarSignature '(.*)' -syntax match TagbarPseudoID '\*\ze :' +syntax match TagbarNestedKind '^\s\+\[[^]]\+\]$' +syntax match TagbarComment '^".*' +syntax match TagbarType ' : \zs.*' +syntax match TagbarSignature '(.*)' +syntax match TagbarPseudoID '\*\ze :' -highlight default link TagbarComment Comment -highlight default link TagbarKind Identifier -highlight default link TagbarScope Title -highlight default link TagbarType Type -highlight default link TagbarSignature SpecialKey -highlight default link TagbarPseudoID NonText -highlight default link TagbarFoldIcon Statement -highlight default link TagbarHighlight Search +highlight default link TagbarComment Comment +highlight default link TagbarKind Identifier +highlight default link TagbarNestedKind TagbarKind +highlight default link TagbarScope Title +highlight default link TagbarType Type +highlight default link TagbarSignature SpecialKey +highlight default link TagbarPseudoID NonText +highlight default link TagbarFoldIcon Statement +highlight default link TagbarHighlight Search highlight default TagbarAccessPublic guifg=Green ctermfg=Green highlight default TagbarAccessProtected guifg=Blue ctermfg=Blue