mirror of
https://github.com/preservim/tagbar.git
synced 2025-02-15 05:53:00 +08:00
Allow the full hierarchy to be displayed in currenttag()
This commit is contained in:
parent
eab0e67d1b
commit
bbe5579c89
|
@ -113,6 +113,7 @@ function! s:Init()
|
|||
|
||||
if !s:autocommands_done
|
||||
call s:CreateAutocommands()
|
||||
doautocmd CursorHold
|
||||
endif
|
||||
|
||||
return 1
|
||||
|
@ -1117,6 +1118,7 @@ function! s:BaseTag._init(name) dict
|
|||
let self.parent = {}
|
||||
let self.tline = -1
|
||||
let self.fileinfo = {}
|
||||
let self.typeinfo = {}
|
||||
endfunction
|
||||
|
||||
" s:BaseTag.isNormalTag() {{{3
|
||||
|
@ -1258,10 +1260,10 @@ function! s:NormalTag.isNormalTag() dict
|
|||
return 1
|
||||
endfunction
|
||||
|
||||
" s:NormalTag.str() {{{3
|
||||
function! s:NormalTag.str() dict
|
||||
" s:NormalTag.strfmt() {{{3
|
||||
function! s:NormalTag.strfmt() dict
|
||||
let fileinfo = self.fileinfo
|
||||
let typeinfo = s:known_types[fileinfo.ftype]
|
||||
let typeinfo = self.typeinfo
|
||||
|
||||
let suffix = get(self.fields, 'signature', '')
|
||||
if has_key(self.fields, 'type')
|
||||
|
@ -1274,9 +1276,13 @@ function! s:NormalTag.str() dict
|
|||
return self._getPrefix() . self.name . suffix . "\n"
|
||||
endfunction
|
||||
|
||||
" s:NormalTag.strshort() {{{3
|
||||
function! s:NormalTag.strshort(longsig) dict
|
||||
let str = self.name
|
||||
" s:NormalTag.str() {{{3
|
||||
function! s:NormalTag.str(longsig, full) dict
|
||||
if a:full && self.path != ''
|
||||
let str = self.path . self.typeinfo.sro . self.name
|
||||
else
|
||||
let str = self.name
|
||||
endif
|
||||
|
||||
if has_key(self.fields, 'signature')
|
||||
if a:longsig
|
||||
|
@ -1302,10 +1308,10 @@ function! s:PseudoTag.isPseudoTag() dict
|
|||
return 1
|
||||
endfunction
|
||||
|
||||
" s:PseudoTag.str() {{{3
|
||||
function! s:PseudoTag.str() dict
|
||||
" s:PseudoTag.strfmt() {{{3
|
||||
function! s:PseudoTag.strfmt() dict
|
||||
let fileinfo = self.fileinfo
|
||||
let typeinfo = s:known_types[fileinfo.ftype]
|
||||
let typeinfo = self.typeinfo
|
||||
|
||||
let suffix = get(self.fields, 'signature', '')
|
||||
if has_key(typeinfo.kind2scope, self.fields.kind)
|
||||
|
@ -1408,6 +1414,7 @@ function! s:FileInfo.New(fname, ftype) dict
|
|||
" Dictionary of the folding state of 'kind's, indexed by short name
|
||||
let newobj.kindfolds = {}
|
||||
let typeinfo = s:known_types[a:ftype]
|
||||
let newobj.typeinfo = typeinfo
|
||||
" copy the default fold state from the type info
|
||||
for kind in typeinfo.kinds
|
||||
let newobj.kindfolds[kind.short] =
|
||||
|
@ -1786,7 +1793,7 @@ function! s:ProcessFile(fname, ftype)
|
|||
let fileinfo = s:FileInfo.New(a:fname, a:ftype)
|
||||
endif
|
||||
|
||||
let typeinfo = s:known_types[a:ftype]
|
||||
let typeinfo = fileinfo.typeinfo
|
||||
|
||||
" Parse the ctags output lines
|
||||
call s:LogDebugMessage('Parsing ctags output')
|
||||
|
@ -1990,6 +1997,7 @@ function! s:ParseTagline(part1, part2, typeinfo, fileinfo)
|
|||
endif
|
||||
|
||||
let taginfo.fileinfo = a:fileinfo
|
||||
let taginfo.typeinfo = a:typeinfo
|
||||
|
||||
" Needed for folding
|
||||
try
|
||||
|
@ -2176,6 +2184,7 @@ function! s:CreatePseudoTag(name, parent, scope, typeinfo, fileinfo)
|
|||
let pseudotag.parent = a:parent
|
||||
|
||||
let pseudotag.fileinfo = a:fileinfo
|
||||
let pseudotag.typeinfo = a:typeinfo
|
||||
|
||||
call pseudotag.initFoldState()
|
||||
|
||||
|
@ -2304,7 +2313,7 @@ function! s:RenderContent(...)
|
|||
|
||||
call s:PrintHelp()
|
||||
|
||||
let typeinfo = s:known_types[fileinfo.ftype]
|
||||
let typeinfo = fileinfo.typeinfo
|
||||
|
||||
" Print tags
|
||||
call s:PrintKinds(typeinfo, fileinfo)
|
||||
|
@ -2369,9 +2378,9 @@ function! s:PrintKinds(typeinfo, fileinfo)
|
|||
" Scoped tags
|
||||
for tag in curtags
|
||||
if g:tagbar_compact && first_tag && s:short_help
|
||||
silent 0put =tag.str()
|
||||
silent 0put =tag.strfmt()
|
||||
else
|
||||
silent put =tag.str()
|
||||
silent put =tag.strfmt()
|
||||
endif
|
||||
|
||||
" Save the current tagbar line in the tag for easy
|
||||
|
@ -2434,7 +2443,7 @@ function! s:PrintKinds(typeinfo, fileinfo)
|
|||
|
||||
if !kindtag.isFolded()
|
||||
for tag in curtags
|
||||
let str = tag.str()
|
||||
let str = tag.strfmt()
|
||||
silent put =' ' . str
|
||||
|
||||
" Save the current tagbar line in the tag for easy
|
||||
|
@ -2458,7 +2467,7 @@ endfunction
|
|||
" s:PrintTag() {{{2
|
||||
function! s:PrintTag(tag, depth, fileinfo, typeinfo)
|
||||
" Print tag indented according to depth
|
||||
silent put =repeat(' ', a:depth * 2) . a:tag.str()
|
||||
silent put =repeat(' ', a:depth * 2) . a:tag.strfmt()
|
||||
|
||||
" Save the current tagbar line in the tag for easy
|
||||
" highlighting access
|
||||
|
@ -2838,7 +2847,7 @@ function! s:SetFoldLevel(level, force)
|
|||
|
||||
call s:SetFoldLevelRecursive(fileinfo, fileinfo.tags, a:level)
|
||||
|
||||
let typeinfo = s:known_types[fileinfo.ftype]
|
||||
let typeinfo = fileinfo.typeinfo
|
||||
|
||||
" Apply foldlevel to 'kind's
|
||||
if a:level == 0
|
||||
|
@ -3085,10 +3094,10 @@ endfunction
|
|||
function! s:GetNearbyTag(all)
|
||||
let fileinfo = s:known_files.getCurrent()
|
||||
if empty(fileinfo)
|
||||
return
|
||||
return {}
|
||||
endif
|
||||
|
||||
let typeinfo = s:known_types[fileinfo.ftype]
|
||||
let typeinfo = fileinfo.typeinfo
|
||||
let curline = line('.')
|
||||
let tag = {}
|
||||
|
||||
|
@ -3099,8 +3108,9 @@ function! s:GetNearbyTag(all)
|
|||
" highlighting isn't /that/ important ignore it for now.
|
||||
for line in range(curline, 1, -1)
|
||||
if has_key(fileinfo.fline, line)
|
||||
let tag = fileinfo.fline[line]
|
||||
if a:all || typeinfo.getKind(tag.fields.kind).stl
|
||||
let curtag = fileinfo.fline[line]
|
||||
if a:all || typeinfo.getKind(curtag.fields.kind).stl
|
||||
let tag = curtag
|
||||
break
|
||||
endif
|
||||
endif
|
||||
|
@ -3263,6 +3273,8 @@ function! s:LogDebugMessage(msg)
|
|||
endfunction
|
||||
|
||||
" Autoload functions {{{1
|
||||
|
||||
" Wrappers {{{2
|
||||
function! tagbar#ToggleWindow()
|
||||
call s:ToggleWindow()
|
||||
endfunction
|
||||
|
@ -3296,6 +3308,7 @@ endfunction
|
|||
function! tagbar#RestoreSession()
|
||||
call s:RestoreSession()
|
||||
endfunction
|
||||
" }}}2
|
||||
|
||||
" tagbar#getusertypes() {{{2
|
||||
function! tagbar#getusertypes()
|
||||
|
@ -3316,6 +3329,7 @@ function! tagbar#getusertypes()
|
|||
return defdict
|
||||
endfunction
|
||||
|
||||
" tagbar#autoopen() {{{2
|
||||
" Automatically open Tagbar if one of the open buffers contains a supported
|
||||
" file
|
||||
function! tagbar#autoopen(...)
|
||||
|
@ -3340,8 +3354,16 @@ function! tagbar#autoopen(...)
|
|||
\ 'without finding valid file')
|
||||
endfunction
|
||||
|
||||
" tagbar#currenttag() {{{2
|
||||
function! tagbar#currenttag(fmt, default, ...)
|
||||
let longsig = a:0 > 0 ? a:1 : 0
|
||||
if a:0 > 0
|
||||
" also test for non-zero value for backwards compatibility
|
||||
let longsig = a:1 =~# 's' || (type(a:1) == type(0) && a:1 != 0)
|
||||
let fullpath = a:1 =~# 'f'
|
||||
else
|
||||
let longsig = 0
|
||||
let fullpath = 0
|
||||
endif
|
||||
|
||||
if !s:Init()
|
||||
return ''
|
||||
|
@ -3350,7 +3372,7 @@ function! tagbar#currenttag(fmt, default, ...)
|
|||
let tag = s:GetNearbyTag(0)
|
||||
|
||||
if !empty(tag)
|
||||
return printf(a:fmt, tag.strshort(longsig))
|
||||
return printf(a:fmt, tag.str(longsig, fullpath))
|
||||
else
|
||||
return a:default
|
||||
endif
|
||||
|
|
|
@ -591,13 +591,17 @@ name of the function.
|
|||
|
||||
The function has the following signature:
|
||||
|
||||
tagbar#currenttag({format}, {default} [, {longsig}])
|
||||
tagbar#currenttag({format}, {default} [, {flags}])
|
||||
{format} is a |printf()|-compatible format string where "%s" will be
|
||||
replaced by the name of the tag. {default} will be displayed instead of
|
||||
the format string if no tag can be found. If the optional argument
|
||||
{longsig} is given and is non-zero then functions will have their complete
|
||||
signature shown, otherwise only "()" will be appended so they can be more
|
||||
easily distinguished from other tags.
|
||||
the format string if no tag can be found.
|
||||
|
||||
The optional {flags} argument specifies some additional properties of the
|
||||
displayed tags. It is a string which can contain these character flags:
|
||||
'f' Display the full hierarchy of the tag, not just the tag itself.
|
||||
's' If the tag is a function, the complete signature will be shown,
|
||||
otherwise just "()" will be appended to distinguish functions from
|
||||
other tags.
|
||||
|
||||
For example, if you put the following into your statusline: >
|
||||
%{tagbar#currenttag('[%s] ', '')}
|
||||
|
|
Loading…
Reference in New Issue
Block a user