mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-02 22:50:06 +08:00
feat(tagbar): use default logger system
This commit is contained in:
parent
75800458a2
commit
02fadf00ff
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
!0/
|
||||
.spacevim.log
|
||||
doc/tags
|
||||
doc/tags-cn
|
||||
.ropeproject/
|
||||
|
@ -7,6 +7,8 @@
|
||||
"=============================================================================
|
||||
|
||||
if has('nvim-0.5.0')
|
||||
""
|
||||
" write message to SpaceVim runtime log with `info` level.
|
||||
function! SpaceVim#logger#info(msg) abort
|
||||
lua require("spacevim.logger").info(
|
||||
\ require("spacevim").eval("a:msg")
|
||||
@ -55,7 +57,26 @@ if has('nvim-0.5.0')
|
||||
function! SpaceVim#logger#setOutput(file) abort
|
||||
lua require("spacevim.logger").setOutput(require("spacevim").eval("a:file"))
|
||||
endfunction
|
||||
|
||||
""
|
||||
" Derive a new logger based on SpaceVim's runtime logger. The new logger
|
||||
" provides following functions:
|
||||
" 1. info(msg): like |SpaceVim#logger#info|, but include the derive name.
|
||||
" 2. warn(msg): like |SpaceVim#logger#warn|
|
||||
" 3. error(msg): like |SpaceVim#logger#error|
|
||||
" 4. debug(msg): write debug message run SpaceVim runtime log
|
||||
" 5. start_debug(): enable debug mode of derived logger.
|
||||
" 6. stop_debug(): stop debug mode of derived logger.
|
||||
"
|
||||
" Example: >
|
||||
" let s:LOGGER = SpaceVim#logger#derive('myplug')
|
||||
"
|
||||
" call s:LOGGER.info('hello world')
|
||||
" <
|
||||
"
|
||||
" The this info message will be write to SpaceVim's runtime log:
|
||||
" >
|
||||
" [ myplug ] [00:02:54:051] [ Info ] hello world
|
||||
" <
|
||||
function! SpaceVim#logger#derive(name) abort
|
||||
return luaeval('require("spacevim.logger").derive(require("spacevim").eval("a:name"))')
|
||||
endfunction
|
||||
@ -176,6 +197,8 @@ else
|
||||
|
||||
let s:derive = {}
|
||||
let s:derive.origin_name = s:LOGGER.get_name()
|
||||
" let s:derive._debug_mode = v:false
|
||||
let s:derive._debug_mode = 0
|
||||
|
||||
function! s:derive.info(msg) abort
|
||||
call s:LOGGER.set_name(self.derive_name)
|
||||
@ -196,9 +219,19 @@ else
|
||||
endfunction
|
||||
|
||||
function! s:derive.debug(msg) abort
|
||||
if self._debug_mode
|
||||
call s:LOGGER.set_name(self.derive_name)
|
||||
call s:LOGGER.debug(a:msg)
|
||||
call s:LOGGER.set_name(self.origin_name)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:derive.start_debug() abort
|
||||
let self._debug_mode = 1
|
||||
endfunction
|
||||
|
||||
function! s:derive.stop_debug() abort
|
||||
let self._debug_mode = 0
|
||||
endfunction
|
||||
|
||||
function! SpaceVim#logger#derive(name) abort
|
||||
|
205
bundle/tagbar/autoload/tagbar.vim
vendored
205
bundle/tagbar/autoload/tagbar.vim
vendored
@ -230,7 +230,7 @@ endfunction
|
||||
|
||||
" s:InitTypes() {{{2
|
||||
function! s:InitTypes() abort
|
||||
call tagbar#debug#log('Initializing types')
|
||||
call tagbar#log#debug('Initializing types')
|
||||
|
||||
let supported_types = s:GetSupportedFiletypes()
|
||||
|
||||
@ -244,7 +244,7 @@ function! s:InitTypes() abort
|
||||
let dart_ctags = s:CheckFTCtags('dart_ctags', 'dart')
|
||||
if dart_ctags !=# ''
|
||||
let supported_types['dart'] = 1
|
||||
call tagbar#debug#log('Detected dart_ctags, overriding typedef')
|
||||
call tagbar#log#debug('Detected dart_ctags, overriding typedef')
|
||||
let type_dart = tagbar#prototypes#typeinfo#new()
|
||||
let type_dart.ctagstype = 'dart'
|
||||
let type_dart.kinds = [
|
||||
@ -299,7 +299,7 @@ function! s:InitTypes() abort
|
||||
" Use jsctags/doctorjs if available
|
||||
let jsctags = s:CheckFTCtags('jsctags', 'javascript')
|
||||
if jsctags !=# ''
|
||||
call tagbar#debug#log('Detected jsctags, overriding typedef')
|
||||
call tagbar#log#debug('Detected jsctags, overriding typedef')
|
||||
let type_javascript = tagbar#prototypes#typeinfo#new()
|
||||
let type_javascript.ctagstype = 'javascript'
|
||||
let type_javascript.kinds = [
|
||||
@ -324,7 +324,7 @@ function! s:InitTypes() abort
|
||||
" Use gotags if available
|
||||
let gotags = s:CheckFTCtags('gotags', 'go')
|
||||
if gotags !=# ''
|
||||
call tagbar#debug#log('Detected gotags, overriding typedef')
|
||||
call tagbar#log#debug('Detected gotags, overriding typedef')
|
||||
let type_go = tagbar#prototypes#typeinfo#new()
|
||||
let type_go.ctagstype = 'go'
|
||||
let type_go.kinds = [
|
||||
@ -395,7 +395,7 @@ function! s:LoadUserTypeDefs(...) abort
|
||||
endfor
|
||||
|
||||
for [key, value] in items(transformed)
|
||||
call tagbar#debug#log("Initializing user type '" . key . "'")
|
||||
call tagbar#log#debug("Initializing user type '" . key . "'")
|
||||
if !has_key(s:known_types, key) || get(value, 'replace', 0)
|
||||
let s:known_types[key] = tagbar#prototypes#typeinfo#new(value)
|
||||
else
|
||||
@ -443,11 +443,11 @@ endfunction
|
||||
" Properly restore Tagbar after a session got loaded
|
||||
function! s:RestoreSession() abort
|
||||
if s:init_done
|
||||
call tagbar#debug#log('Tagbar already initialized; not restoring session')
|
||||
call tagbar#log#debug('Tagbar already initialized; not restoring session')
|
||||
return
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('Restoring session')
|
||||
call tagbar#log#debug('Restoring session')
|
||||
|
||||
let curfile = fnamemodify(bufname('%'), ':p')
|
||||
|
||||
@ -478,7 +478,7 @@ endfunction
|
||||
|
||||
" s:MapKeys() {{{2
|
||||
function! s:MapKeys() abort
|
||||
call tagbar#debug#log('Mapping keys')
|
||||
call tagbar#log#debug('Mapping keys')
|
||||
|
||||
nnoremap <script> <silent> <buffer> <2-LeftMouse>
|
||||
\ :call <SID>JumpToTag(0)<CR>
|
||||
@ -544,7 +544,7 @@ endfunction
|
||||
|
||||
" s:CreateAutocommands() {{{2
|
||||
function! s:CreateAutocommands() abort
|
||||
call tagbar#debug#log('Creating autocommands')
|
||||
call tagbar#log#debug('Creating autocommands')
|
||||
|
||||
augroup TagbarAutoCmds
|
||||
autocmd!
|
||||
@ -623,7 +623,7 @@ endfunction
|
||||
" Test whether the ctags binary is actually Exuberant Ctags and not BSD ctags
|
||||
" (or something else)
|
||||
function! s:CheckForExCtags(silent) abort
|
||||
call tagbar#debug#log('Checking for Exuberant Ctags')
|
||||
call tagbar#log#debug('Checking for Exuberant Ctags')
|
||||
|
||||
if !exists('g:tagbar_ctags_bin')
|
||||
let ctagsbins = []
|
||||
@ -679,8 +679,8 @@ function! s:CheckForExCtags(silent) abort
|
||||
|
||||
let ctags_output = s:ExecuteCtags(ctags_cmd)
|
||||
|
||||
call tagbar#debug#log("Command output:\n" . ctags_output)
|
||||
call tagbar#debug#log('Exit code: ' . v:shell_error)
|
||||
call tagbar#log#debug("Command output:\n" . ctags_output)
|
||||
call tagbar#log#debug('Exit code: ' . v:shell_error)
|
||||
|
||||
if v:shell_error || ctags_output !~# '\(Exuberant\|Universal\) Ctags'
|
||||
let l:errmsg = 'Tagbar: Ctags doesn''t seem to be Exuberant Ctags!'
|
||||
@ -707,7 +707,7 @@ endfunction
|
||||
|
||||
" s:CtagsErrMsg() {{{2
|
||||
function! s:CtagsErrMsg(errmsg, infomsg, silent, ...) abort
|
||||
call tagbar#debug#log(a:errmsg)
|
||||
call tagbar#log#debug(a:errmsg)
|
||||
let ctags_cmd = a:0 > 0 ? a:1 : ''
|
||||
let ctags_output = a:0 > 1 ? a:2 : ''
|
||||
|
||||
@ -742,21 +742,21 @@ endfunction
|
||||
|
||||
" s:CheckExCtagsVersion() {{{2
|
||||
function! s:CheckExCtagsVersion(output) abort
|
||||
call tagbar#debug#log('Checking Exuberant Ctags version')
|
||||
call tagbar#log#debug('Checking Exuberant Ctags version')
|
||||
|
||||
if a:output =~? 'Universal Ctags'
|
||||
call tagbar#debug#log('Found Universal Ctags, assuming compatibility')
|
||||
call tagbar#log#debug('Found Universal Ctags, assuming compatibility')
|
||||
let s:ctags_is_uctags = 1
|
||||
return 1
|
||||
endif
|
||||
|
||||
if a:output =~? 'Exuberant Ctags compatiable PHP enhancement'
|
||||
call tagbar#debug#log('Found phpctags, assuming compatibility')
|
||||
call tagbar#log#debug('Found phpctags, assuming compatibility')
|
||||
return 1
|
||||
endif
|
||||
|
||||
if a:output =~? 'Exuberant Ctags Development'
|
||||
call tagbar#debug#log('Found development version, assuming compatibility')
|
||||
call tagbar#log#debug('Found development version, assuming compatibility')
|
||||
return 1
|
||||
endif
|
||||
|
||||
@ -764,7 +764,7 @@ function! s:CheckExCtagsVersion(output) abort
|
||||
let major = matchlist[1]
|
||||
let minor = matchlist[2]
|
||||
|
||||
call tagbar#debug#log("Ctags version: major='" . major . "', minor='" . minor . "'")
|
||||
call tagbar#log#debug("Ctags version: major='" . major . "', minor='" . minor . "'")
|
||||
|
||||
return major >= 6 || (major == 5 && minor >= 5)
|
||||
endfunction
|
||||
@ -789,7 +789,7 @@ endfunction
|
||||
|
||||
" s:GetSupportedFiletypes() {{{2
|
||||
function! s:GetSupportedFiletypes() abort
|
||||
call tagbar#debug#log('Getting filetypes supported by Exuberant Ctags')
|
||||
call tagbar#log#debug('Getting filetypes supported by Exuberant Ctags')
|
||||
|
||||
let ctags_cmd = s:EscapeCtagsCmd(g:tagbar_ctags_bin, '--list-languages')
|
||||
if ctags_cmd ==# ''
|
||||
@ -845,7 +845,7 @@ endfunction
|
||||
" s:known_files.rm() {{{2
|
||||
function! s:known_files.rm(fname) abort dict
|
||||
if s:known_files.has(a:fname)
|
||||
call tagbar#debug#log('Removing fileinfo for [' . a:fname . ']')
|
||||
call tagbar#log#debug('Removing fileinfo for [' . a:fname . ']')
|
||||
call remove(self._files, a:fname)
|
||||
endif
|
||||
endfunction
|
||||
@ -853,7 +853,7 @@ endfunction
|
||||
" Window management {{{1
|
||||
" s:ToggleWindow() {{{2
|
||||
function! s:ToggleWindow(flags) abort
|
||||
call tagbar#debug#log('ToggleWindow called')
|
||||
call tagbar#log#debug('ToggleWindow called')
|
||||
|
||||
let tagbarwinnr = bufwinnr(s:TagbarBufName())
|
||||
if tagbarwinnr != -1
|
||||
@ -863,12 +863,12 @@ function! s:ToggleWindow(flags) abort
|
||||
|
||||
call s:OpenWindow(a:flags)
|
||||
|
||||
call tagbar#debug#log('ToggleWindow finished')
|
||||
call tagbar#log#debug('ToggleWindow finished')
|
||||
endfunction
|
||||
|
||||
" s:OpenWindow() {{{2
|
||||
function! s:OpenWindow(flags) abort
|
||||
call tagbar#debug#log("OpenWindow called with flags: '" . a:flags . "'")
|
||||
call tagbar#log#debug("OpenWindow called with flags: '" . a:flags . "'")
|
||||
|
||||
let autofocus = a:flags =~# 'f'
|
||||
let jump = a:flags =~# 'j'
|
||||
@ -885,7 +885,7 @@ function! s:OpenWindow(flags) abort
|
||||
call s:goto_win(tagbarwinnr)
|
||||
call s:HighlightTag(g:tagbar_autoshowtag != 2, 1, 1, curline)
|
||||
endif
|
||||
call tagbar#debug#log('OpenWindow finished, Tagbar already open')
|
||||
call tagbar#log#debug('OpenWindow finished, Tagbar already open')
|
||||
return
|
||||
endif
|
||||
|
||||
@ -974,12 +974,12 @@ function! s:OpenWindow(flags) abort
|
||||
endif
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('OpenWindow finished')
|
||||
call tagbar#log#debug('OpenWindow finished')
|
||||
endfunction
|
||||
|
||||
" s:InitWindow() {{{2
|
||||
function! s:InitWindow(autoclose) abort
|
||||
call tagbar#debug#log('InitWindow called with autoclose: ' . a:autoclose)
|
||||
call tagbar#log#debug('InitWindow called with autoclose: ' . a:autoclose)
|
||||
|
||||
" Buffer-local options
|
||||
|
||||
@ -1069,12 +1069,12 @@ function! s:InitWindow(autoclose) abort
|
||||
let s:expand_bufnr = bufnr('%')
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('InitWindow finished')
|
||||
call tagbar#log#debug('InitWindow finished')
|
||||
endfunction
|
||||
|
||||
" s:CloseWindow() {{{2
|
||||
function! s:CloseWindow() abort
|
||||
call tagbar#debug#log('CloseWindow called')
|
||||
call tagbar#log#debug('CloseWindow called')
|
||||
|
||||
let tagbarwinnr = bufwinnr(s:TagbarBufName())
|
||||
if tagbarwinnr == -1
|
||||
@ -1127,7 +1127,7 @@ function! s:CloseWindow() abort
|
||||
call tagbar#StopAutoUpdate()
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('CloseWindow finished')
|
||||
call tagbar#log#debug('CloseWindow finished')
|
||||
endfunction
|
||||
|
||||
" s:ShrinkIfExpanded() {{{2
|
||||
@ -1207,21 +1207,21 @@ endfunction
|
||||
" s:ProcessFile() {{{2
|
||||
" Execute ctags and put the information into a 'FileInfo' object
|
||||
function! s:ProcessFile(fname, ftype) abort
|
||||
call tagbar#debug#log('ProcessFile called [' . a:fname . ']')
|
||||
call tagbar#log#debug('ProcessFile called [' . a:fname . ']')
|
||||
|
||||
if !s:IsValidFile(a:fname, a:ftype)
|
||||
call tagbar#debug#log('Not a valid file, returning')
|
||||
call tagbar#log#debug('Not a valid file, returning')
|
||||
return
|
||||
endif
|
||||
|
||||
let l:bufnum = bufnr(a:fname)
|
||||
|
||||
if !bufloaded(l:bufnum)
|
||||
call tagbar#debug#log('[ProcessFile] Buffer is not loaded exiting...')
|
||||
call tagbar#log#debug('[ProcessFile] Buffer is not loaded exiting...')
|
||||
return
|
||||
endif
|
||||
if !bufexists(l:bufnum)
|
||||
call tagbar#debug#log('[ProcessFile] Buffer does not exist exiting...')
|
||||
call tagbar#log#debug('[ProcessFile] Buffer does not exist exiting...')
|
||||
return
|
||||
endif
|
||||
|
||||
@ -1246,12 +1246,12 @@ function! s:ProcessFile(fname, ftype) abort
|
||||
let fileinfo = tagbar#prototypes#fileinfo#new(a:fname, a:ftype, typeinfo)
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('typeinfo for file to process: ' . string(typeinfo))
|
||||
call tagbar#log#debug('typeinfo for file to process: ' . string(typeinfo))
|
||||
|
||||
if g:tagbar_file_size_limit > 0
|
||||
\ && fileinfo.fsize > g:tagbar_file_size_limit
|
||||
\ && !exists('b:tagbar_force_update')
|
||||
call tagbar#debug#log('File size exceeds defined limit')
|
||||
call tagbar#log#debug('File size exceeds defined limit')
|
||||
let fileinfo.fsize_exceeded = 1
|
||||
call s:known_files.put(fileinfo)
|
||||
return
|
||||
@ -1265,12 +1265,12 @@ function! s:ProcessFile(fname, ftype) abort
|
||||
let tempfile .= '.' . ext
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('Caching file into: ' . tempfile)
|
||||
call tagbar#log#debug('Caching file into: ' . tempfile)
|
||||
let templines = getbufline(fileinfo.bufnr, 1, '$')
|
||||
let res = writefile(templines, tempfile)
|
||||
|
||||
if res != 0
|
||||
call tagbar#debug#log('Could not create copy '.tempfile)
|
||||
call tagbar#log#debug('Could not create copy '.tempfile)
|
||||
return
|
||||
endif
|
||||
let fileinfo.mtime = getftime(tempfile)
|
||||
@ -1278,23 +1278,23 @@ function! s:ProcessFile(fname, ftype) abort
|
||||
|
||||
let ctags_output = s:ExecuteCtagsOnFile(tempfile, a:fname, typeinfo)
|
||||
|
||||
if !tagbar#debug#enabled()
|
||||
if !tagbar#log#enabled()
|
||||
call delete(tempfile)
|
||||
endif
|
||||
else
|
||||
call tagbar#debug#log('File caching disabled')
|
||||
call tagbar#log#debug('File caching disabled')
|
||||
let fileinfo.fsize_exceeded = 0
|
||||
let ctags_output = s:ExecuteCtagsOnFile(a:fname, a:fname, typeinfo)
|
||||
endif
|
||||
|
||||
if ctags_output == -1
|
||||
call tagbar#debug#log('Ctags error when processing file')
|
||||
call tagbar#log#debug('Ctags error when processing file')
|
||||
" Put an empty entry into known_files so the error message is only
|
||||
" shown once
|
||||
call s:known_files.put({}, a:fname)
|
||||
return
|
||||
elseif ctags_output ==# ''
|
||||
call tagbar#debug#log('Ctags output empty')
|
||||
call tagbar#log#debug('Ctags output empty')
|
||||
" No need to go through the tag processing if there are no tags, and
|
||||
" preserving the old fold state isn't necessary either
|
||||
call s:known_files.put(tagbar#prototypes#fileinfo#new(a:fname, a:ftype,
|
||||
@ -1302,10 +1302,10 @@ function! s:ProcessFile(fname, ftype) abort
|
||||
return
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('Filetype tag kinds: ' . string(keys(typeinfo.kinddict)))
|
||||
call tagbar#log#debug('Filetype tag kinds: ' . string(keys(typeinfo.kinddict)))
|
||||
|
||||
" Parse the ctags output lines
|
||||
call tagbar#debug#log('Parsing ctags output')
|
||||
call tagbar#log#debug('Parsing ctags output')
|
||||
let rawtaglist = split(ctags_output, '\n\+')
|
||||
let seen = {}
|
||||
for line in rawtaglist
|
||||
@ -1314,7 +1314,7 @@ function! s:ProcessFile(fname, ftype) abort
|
||||
continue
|
||||
endif
|
||||
if g:tagbar_ignore_anonymous && line =~# '__anon'
|
||||
call tagbar#debug#log('anonymous tag found - ignoring per tagbar configuration')
|
||||
call tagbar#log#debug('anonymous tag found - ignoring per tagbar configuration')
|
||||
continue
|
||||
endif
|
||||
|
||||
@ -1336,7 +1336,7 @@ function! s:ProcessFile(fname, ftype) abort
|
||||
let curtags = filter(copy(fileinfo.getTags()),
|
||||
\ 'v:val.fields.kind ==# kind.short && ' .
|
||||
\ '!has_key(v:val, "scope")')
|
||||
call tagbar#debug#log('Processing kind: ' . kind.short .
|
||||
call tagbar#log#debug('Processing kind: ' . kind.short .
|
||||
\ ', number of tags: ' . len(curtags))
|
||||
|
||||
if empty(curtags)
|
||||
@ -1364,7 +1364,7 @@ endfunction
|
||||
|
||||
" s:ExecuteCtagsOnFile() {{{2
|
||||
function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort
|
||||
call tagbar#debug#log('ExecuteCtagsOnFile called [' . a:fname . ']')
|
||||
call tagbar#log#debug('ExecuteCtagsOnFile called [' . a:fname . ']')
|
||||
|
||||
if has_key(a:typeinfo, 'ctagsargs') && type(a:typeinfo.ctagsargs) == type('')
|
||||
" if ctagsargs is a string, prepend and append space separators
|
||||
@ -1404,7 +1404,7 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort
|
||||
\ ]
|
||||
|
||||
" verbose if debug enabled
|
||||
if tagbar#debug#enabled()
|
||||
if tagbar#log#enabled()
|
||||
let ctags_args += [ '-V' ]
|
||||
endif
|
||||
|
||||
@ -1454,9 +1454,9 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort
|
||||
let ctags_output = s:ExecuteCtags(ctags_cmd)
|
||||
|
||||
if v:shell_error || ctags_output =~? 'Warning: cannot open \(source\|input\) file'
|
||||
call tagbar#debug#log('Command output:')
|
||||
call tagbar#debug#log(ctags_output)
|
||||
call tagbar#debug#log('Exit code: ' . v:shell_error)
|
||||
call tagbar#log#debug('Command output:')
|
||||
call tagbar#log#debug(ctags_output)
|
||||
call tagbar#log#debug('Exit code: ' . v:shell_error)
|
||||
" Only display an error message if the Tagbar window is open and we
|
||||
" haven't seen the error before.
|
||||
if bufwinnr(s:TagbarBufName()) != -1 &&
|
||||
@ -1475,8 +1475,7 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort
|
||||
return -1
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('Ctags executed successfully')
|
||||
call tagbar#debug#log_ctags_output(ctags_output)
|
||||
call tagbar#log#debug('Ctags executed successfully')
|
||||
|
||||
return ctags_output
|
||||
endfunction
|
||||
@ -1605,7 +1604,7 @@ function! s:ProcessTag(name, filename, pattern, fields, is_split, typeinfo, file
|
||||
endif
|
||||
|
||||
if !has_key(taginfo.fields, 'kind')
|
||||
call tagbar#debug#log(
|
||||
call tagbar#log#debug(
|
||||
\ "Warning: No 'kind' field found for tag " . a:name[0] . '!')
|
||||
if index(s:warnings.type, a:typeinfo.ftype) == -1
|
||||
call s:warning("No 'kind' field found for tag " . a:name[0] . '!' .
|
||||
@ -1658,7 +1657,7 @@ function! s:ProcessTag(name, filename, pattern, fields, is_split, typeinfo, file
|
||||
call taginfo.initFoldState(s:known_files)
|
||||
catch /^Vim(\a\+):E716:/ " 'Key not present in Dictionary'
|
||||
" The tag has a 'kind' that doesn't exist in the type definition
|
||||
call tagbar#debug#log('Warning: Unknown tag kind: ' . taginfo.fields.kind)
|
||||
call tagbar#log#debug('Warning: Unknown tag kind: ' . taginfo.fields.kind)
|
||||
if index(s:warnings.type, a:typeinfo.ftype) == -1
|
||||
call s:warning('Unknown tag kind encountered: ' .
|
||||
\ '"' . taginfo.fields.kind . '".' .
|
||||
@ -1908,7 +1907,7 @@ endfunction
|
||||
" Display {{{1
|
||||
" s:RenderContent() {{{2
|
||||
function! s:RenderContent(...) abort
|
||||
call tagbar#debug#log('RenderContent called')
|
||||
call tagbar#log#debug('RenderContent called')
|
||||
let s:new_window = 0
|
||||
|
||||
if a:0 == 1
|
||||
@ -1918,7 +1917,7 @@ function! s:RenderContent(...) abort
|
||||
endif
|
||||
|
||||
if empty(fileinfo)
|
||||
call tagbar#debug#log('Empty fileinfo, returning')
|
||||
call tagbar#log#debug('Empty fileinfo, returning')
|
||||
return
|
||||
endif
|
||||
|
||||
@ -1942,7 +1941,7 @@ function! s:RenderContent(...) abort
|
||||
if !empty(tagbar#state#get_current_file(0)) &&
|
||||
\ fileinfo.fpath ==# tagbar#state#get_current_file(0).fpath
|
||||
" We're redisplaying the same file, so save the view
|
||||
call tagbar#debug#log('Redisplaying file [' . fileinfo.fpath . ']')
|
||||
call tagbar#log#debug('Redisplaying file [' . fileinfo.fpath . ']')
|
||||
let saveline = line('.')
|
||||
let savecol = col('.')
|
||||
let topline = line('w0')
|
||||
@ -1974,7 +1973,7 @@ function! s:RenderContent(...) abort
|
||||
" Print tags
|
||||
call s:PrintKinds(typeinfo, fileinfo)
|
||||
else
|
||||
call tagbar#debug#log('No tags found, skipping printing.')
|
||||
call tagbar#log#debug('No tags found, skipping printing.')
|
||||
if g:tagbar_compact && s:short_help
|
||||
silent 0put ='\" No tags found.'
|
||||
else
|
||||
@ -2024,7 +2023,7 @@ endfunction
|
||||
|
||||
" s:PrintKinds() {{{2
|
||||
function! s:PrintKinds(typeinfo, fileinfo) abort
|
||||
call tagbar#debug#log('PrintKinds called')
|
||||
call tagbar#log#debug('PrintKinds called')
|
||||
|
||||
" If the short or long help is being displayed then the line numbers don't
|
||||
" match up with the length of the output list
|
||||
@ -2034,7 +2033,7 @@ function! s:PrintKinds(typeinfo, fileinfo) abort
|
||||
for kind in a:typeinfo.kinds
|
||||
let curtags = filter(copy(a:fileinfo.getTags()),
|
||||
\ 'v:val.fields.kind ==# kind.short')
|
||||
call tagbar#debug#log('Printing kind: ' . kind.short .
|
||||
call tagbar#log#debug('Printing kind: ' . kind.short .
|
||||
\ ', number of (top-level) tags: ' . len(curtags))
|
||||
|
||||
if empty(curtags)
|
||||
@ -2328,7 +2327,7 @@ function! s:HighlightTag(openfolds, ...) abort
|
||||
else
|
||||
let pattern = '/^\%' . tagline . 'l\s*' . foldpat . '[-+# ]\?' . identifier . '/'
|
||||
endif
|
||||
call tagbar#debug#log("Highlight pattern: '" . pattern . "'")
|
||||
call tagbar#log#debug("Highlight pattern: '" . pattern . "'")
|
||||
if hlexists('TagbarHighlight') " Safeguard in case syntax highlighting is disabled
|
||||
execute 'match TagbarHighlight ' . pattern
|
||||
else
|
||||
@ -2400,13 +2399,13 @@ function! s:JumpToTag(stay_in_tagbar, ...) abort
|
||||
" Jump to the line where the tag is defined. Don't use the search pattern
|
||||
" since it doesn't take the scope into account and thus can fail if tags
|
||||
" with the same name are defined in different scopes (e.g. classes)
|
||||
call tagbar#debug#log('Jumping to line ' . taginfo.fields.line)
|
||||
call tagbar#log#debug('Jumping to line ' . taginfo.fields.line)
|
||||
execute taginfo.fields.line
|
||||
|
||||
" If the file has been changed but not saved, the tag may not be on the
|
||||
" saved line anymore, so search for it in the vicinity of the saved line
|
||||
if taginfo.pattern !=# ''
|
||||
call tagbar#debug#log('Searching for pattern "' . taginfo.pattern . '"')
|
||||
call tagbar#log#debug('Searching for pattern "' . taginfo.pattern . '"')
|
||||
if match(getline('.'), taginfo.pattern) == -1
|
||||
let interval = 1
|
||||
let forward = 1
|
||||
@ -2839,7 +2838,7 @@ endfunction
|
||||
" Helper functions {{{1
|
||||
" s:AutoUpdate() {{{2
|
||||
function! s:AutoUpdate(fname, force, ...) abort
|
||||
call tagbar#debug#log('AutoUpdate called [' . a:fname . ']')
|
||||
call tagbar#log#debug('AutoUpdate called [' . a:fname . ']')
|
||||
|
||||
" Whether we want to skip actually displaying the tags in Tagbar and only
|
||||
" update the fileinfo
|
||||
@ -2856,7 +2855,7 @@ function! s:AutoUpdate(fname, force, ...) abort
|
||||
" break. MiniBufExplorer does this, for example. Completely disabling
|
||||
" autocmds at that point is also not ideal since for example
|
||||
" statusline plugins won't be able to update.
|
||||
call tagbar#debug#log('Still opening window, stopping processing')
|
||||
call tagbar#log#debug('Still opening window, stopping processing')
|
||||
return
|
||||
endif
|
||||
|
||||
@ -2866,18 +2865,18 @@ function! s:AutoUpdate(fname, force, ...) abort
|
||||
|
||||
" Don't do anything if we're in the tagbar window
|
||||
if ftype ==# 'tagbar'
|
||||
call tagbar#debug#log('In Tagbar window, stopping processing')
|
||||
call tagbar#log#debug('In Tagbar window, stopping processing')
|
||||
return
|
||||
endif
|
||||
|
||||
" Only consider the main filetype in cases like 'python.django'
|
||||
let sftype = get(split(ftype, '\.'), 0, '')
|
||||
call tagbar#debug#log("Vim filetype: '" . ftype . "', " .
|
||||
call tagbar#log#debug("Vim filetype: '" . ftype . "', " .
|
||||
\ "sanitized filetype: '" . sftype . "'")
|
||||
|
||||
" Don't do anything if the file isn't supported
|
||||
if !s:IsValidFile(a:fname, sftype)
|
||||
call tagbar#debug#log('Not a valid file, stopping processing')
|
||||
call tagbar#log#debug('Not a valid file, stopping processing')
|
||||
let s:nearby_disabled = 1
|
||||
return
|
||||
endif
|
||||
@ -2893,14 +2892,14 @@ function! s:AutoUpdate(fname, force, ...) abort
|
||||
" if a:force || getbufvar(curfile.bufnr, '&modified') ||
|
||||
if a:force || empty(curfile) || curfile.ftype != sftype ||
|
||||
\ (filereadable(a:fname) && getftime(a:fname) > curfile.mtime)
|
||||
call tagbar#debug#log('File data outdated, updating [' . a:fname . ']')
|
||||
call tagbar#log#debug('File data outdated, updating [' . a:fname . ']')
|
||||
call s:ProcessFile(a:fname, sftype)
|
||||
let updated = 1
|
||||
else
|
||||
call tagbar#debug#log('File data seems up to date [' . a:fname . ']')
|
||||
call tagbar#log#debug('File data seems up to date [' . a:fname . ']')
|
||||
endif
|
||||
elseif !s:known_files.has(a:fname)
|
||||
call tagbar#debug#log('New file, processing [' . a:fname . ']')
|
||||
call tagbar#log#debug('New file, processing [' . a:fname . ']')
|
||||
call s:ProcessFile(a:fname, sftype)
|
||||
let updated = 1
|
||||
endif
|
||||
@ -2914,7 +2913,7 @@ function! s:AutoUpdate(fname, force, ...) abort
|
||||
" If we don't have an entry for the file by now something must have gone
|
||||
" wrong, so don't change the tagbar content
|
||||
if empty(fileinfo)
|
||||
call tagbar#debug#log('fileinfo empty after processing [' . a:fname . ']')
|
||||
call tagbar#log#debug('fileinfo empty after processing [' . a:fname . ']')
|
||||
return
|
||||
endif
|
||||
|
||||
@ -2930,14 +2929,14 @@ function! s:AutoUpdate(fname, force, ...) abort
|
||||
" Call setCurrent after rendering so RenderContent can check whether the
|
||||
" same file is being redisplayed
|
||||
if !empty(fileinfo)
|
||||
call tagbar#debug#log('Setting current file [' . a:fname . ']')
|
||||
call tagbar#log#debug('Setting current file [' . a:fname . ']')
|
||||
call tagbar#state#set_current_file(fileinfo)
|
||||
let s:nearby_disabled = 0
|
||||
endif
|
||||
|
||||
call s:HighlightTag(0, 1)
|
||||
call s:SetStatusLine()
|
||||
call tagbar#debug#log('AutoUpdate finished successfully')
|
||||
call tagbar#log#debug('AutoUpdate finished successfully')
|
||||
endfunction
|
||||
|
||||
" s:CheckMouseClick() {{{2
|
||||
@ -2998,12 +2997,12 @@ endfunction
|
||||
" is acceptable. But in cases where arguments may need to be escaped
|
||||
" differently for each &shell type, then pass a list of arguments.
|
||||
function! s:EscapeCtagsCmd(ctags_bin, args, ...) abort
|
||||
call tagbar#debug#log('EscapeCtagsCmd called')
|
||||
call tagbar#debug#log('ctags_bin: ' . a:ctags_bin)
|
||||
call tagbar#log#debug('EscapeCtagsCmd called')
|
||||
call tagbar#log#debug('ctags_bin: ' . a:ctags_bin)
|
||||
if type(a:args)==type('')
|
||||
call tagbar#debug#log('ctags_args (is a string): ' . a:args)
|
||||
call tagbar#log#debug('ctags_args (is a string): ' . a:args)
|
||||
elseif type(a:args)==type([])
|
||||
call tagbar#debug#log('ctags_args (is a list): ' . string(a:args))
|
||||
call tagbar#log#debug('ctags_args (is a list): ' . string(a:args))
|
||||
endif
|
||||
|
||||
if exists('+shellslash')
|
||||
@ -3078,7 +3077,7 @@ function! s:EscapeCtagsCmd(ctags_bin, args, ...) abort
|
||||
endif
|
||||
endif
|
||||
|
||||
call tagbar#debug#log('Escaped ctags command: ' . ctags_cmd)
|
||||
call tagbar#log#debug('Escaped ctags command: ' . ctags_cmd)
|
||||
|
||||
if ctags_cmd ==# ''
|
||||
if !s:warnings.encoding
|
||||
@ -3130,7 +3129,7 @@ endfunction
|
||||
" Partially based on the discussion at
|
||||
" http://vim.1045645.n5.nabble.com/bad-default-shellxquote-in-Widows-td1208284.html
|
||||
function! s:ExecuteCtags(ctags_cmd) abort
|
||||
call tagbar#debug#log('Executing ctags command: ' . a:ctags_cmd)
|
||||
call tagbar#log#debug('Executing ctags command: ' . a:ctags_cmd)
|
||||
|
||||
if &shell =~# 'fish$'
|
||||
" Reset shell since fish isn't really compatible
|
||||
@ -3156,10 +3155,10 @@ function! s:ExecuteCtags(ctags_cmd) abort
|
||||
set shellcmdflag=/s\ /c
|
||||
endif
|
||||
|
||||
if tagbar#debug#enabled()
|
||||
if tagbar#log#enabled()
|
||||
silent 5verbose let ctags_output = system(a:ctags_cmd)
|
||||
call tagbar#debug#log(v:statusmsg)
|
||||
call tagbar#debug#log('Exit code: ' . v:shell_error)
|
||||
call tagbar#log#debug(v:statusmsg)
|
||||
call tagbar#log#debug('Exit code: ' . v:shell_error)
|
||||
redraw!
|
||||
else
|
||||
let py_version = get(g:, 'tagbar_python', 1)
|
||||
@ -3413,31 +3412,31 @@ endfunction
|
||||
|
||||
" s:IsValidFile() {{{2
|
||||
function! s:IsValidFile(fname, ftype) abort
|
||||
call tagbar#debug#log('Checking if file is valid [' . a:fname . ']')
|
||||
call tagbar#log#debug('Checking if file is valid [' . a:fname . ']')
|
||||
|
||||
if a:fname ==# '' || a:ftype ==# ''
|
||||
call tagbar#debug#log('Empty filename or type')
|
||||
call tagbar#log#debug('Empty filename or type')
|
||||
return 0
|
||||
endif
|
||||
|
||||
if !filereadable(a:fname) && getbufvar(a:fname, 'netrw_tmpfile') ==# ''
|
||||
call tagbar#debug#log('File not readable')
|
||||
call tagbar#log#debug('File not readable')
|
||||
return 0
|
||||
endif
|
||||
|
||||
if getbufvar(a:fname, 'tagbar_ignore') == 1
|
||||
call tagbar#debug#log('File is marked as ignored')
|
||||
call tagbar#log#debug('File is marked as ignored')
|
||||
return 0
|
||||
endif
|
||||
|
||||
let winnr = bufwinnr(a:fname)
|
||||
if winnr != -1 && getwinvar(winnr, '&diff')
|
||||
call tagbar#debug#log('Window is in diff mode')
|
||||
call tagbar#log#debug('Window is in diff mode')
|
||||
return 0
|
||||
endif
|
||||
|
||||
if &previewwindow
|
||||
call tagbar#debug#log('In preview window')
|
||||
call tagbar#log#debug('In preview window')
|
||||
return 0
|
||||
endif
|
||||
|
||||
@ -3447,7 +3446,7 @@ function! s:IsValidFile(fname, ftype) abort
|
||||
" file, so load it now
|
||||
call s:LoadUserTypeDefs(a:ftype)
|
||||
else
|
||||
call tagbar#debug#log('Unsupported filetype: ' . a:ftype)
|
||||
call tagbar#log#debug('Unsupported filetype: ' . a:ftype)
|
||||
return 0
|
||||
endif
|
||||
endif
|
||||
@ -3521,13 +3520,13 @@ function! s:HandleOnlyWindow() abort
|
||||
let file_open = s:HasOpenFileWindows()
|
||||
|
||||
if vim_quitting && file_open == 2 && !g:tagbar_autoclose_netrw
|
||||
call tagbar#debug#log('Closing Tagbar due to QuitPre - netrw only remaining window')
|
||||
call tagbar#log#debug('Closing Tagbar due to QuitPre - netrw only remaining window')
|
||||
call s:CloseWindow()
|
||||
return
|
||||
endif
|
||||
|
||||
if vim_quitting && file_open != 1
|
||||
call tagbar#debug#log('Closing Tagbar window due to QuitPre event')
|
||||
call tagbar#log#debug('Closing Tagbar window due to QuitPre event')
|
||||
if winnr('$') >= 1
|
||||
call s:goto_win(tagbarwinnr, 1)
|
||||
endif
|
||||
@ -3677,7 +3676,7 @@ function! s:HasOpenFileWindows() abort
|
||||
endfor
|
||||
|
||||
if netrw
|
||||
call tagbar#debug#log('netrw only window remaining')
|
||||
call tagbar#log#debug('netrw only window remaining')
|
||||
return 2
|
||||
endif
|
||||
return 0
|
||||
@ -3711,7 +3710,7 @@ function! s:goto_win(winnr, ...) abort
|
||||
\ : 'wincmd ' . a:winnr
|
||||
let noauto = a:0 > 0 ? a:1 : 0
|
||||
|
||||
call tagbar#debug#log('goto_win(): ' . cmd . ', ' . noauto)
|
||||
call tagbar#log#debug('goto_win(): ' . cmd . ', ' . noauto)
|
||||
|
||||
if noauto
|
||||
noautocmd execute cmd
|
||||
@ -3878,7 +3877,7 @@ endfunction
|
||||
" Automatically open Tagbar if one of the open buffers contains a supported
|
||||
" file
|
||||
function! tagbar#autoopen(...) abort
|
||||
call tagbar#debug#log('tagbar#autoopen called [' . bufname('%') . ']')
|
||||
call tagbar#log#debug('tagbar#autoopen called [' . bufname('%') . ']')
|
||||
let always = a:0 > 0 ? a:1 : 1
|
||||
|
||||
call s:Init(0)
|
||||
@ -3888,14 +3887,14 @@ function! tagbar#autoopen(...) abort
|
||||
let ftype = s:DetectFiletype(bufnr)
|
||||
if s:IsValidFile(bufname(bufnr), ftype)
|
||||
call s:OpenWindow('')
|
||||
call tagbar#debug#log('tagbar#autoopen finished after finding valid ' .
|
||||
call tagbar#log#debug('tagbar#autoopen finished after finding valid ' .
|
||||
\ 'file [' . bufname(bufnr) . ']')
|
||||
return
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
|
||||
call tagbar#debug#log('tagbar#autoopen finished without finding valid file')
|
||||
call tagbar#log#debug('tagbar#autoopen finished without finding valid file')
|
||||
endfunction
|
||||
|
||||
" tagbar#GetTagNearLine() {{{2
|
||||
@ -4053,23 +4052,23 @@ endfunction
|
||||
|
||||
" tagbar#printfileinfo() {{{2
|
||||
function! tagbar#printfileinfo() abort
|
||||
if !tagbar#debug#enabled()
|
||||
if !tagbar#log#enabled()
|
||||
echo 'Tagbar debug is disabled - unable to print fileinfo to tagbar log'
|
||||
return
|
||||
endif
|
||||
|
||||
let fileinfo = tagbar#state#get_current_file(0)
|
||||
if empty(fileinfo)
|
||||
call tagbar#debug#log('File contains no tag entries')
|
||||
call tagbar#log#debug('File contains no tag entries')
|
||||
return
|
||||
endif
|
||||
let typeinfo = fileinfo.typeinfo
|
||||
|
||||
call tagbar#debug#log('Printing fileinfo [' . fileinfo.fpath . ' lines:' . fileinfo.lnum)
|
||||
call tagbar#log#debug('Printing fileinfo [' . fileinfo.fpath . ' lines:' . fileinfo.lnum)
|
||||
for line in range(1, fileinfo.lnum)
|
||||
if has_key(fileinfo.fline, line)
|
||||
let tag = fileinfo.fline[line]
|
||||
call tagbar#debug#log(' '
|
||||
call tagbar#log#debug(' '
|
||||
\ . ' line:' . line
|
||||
\ . ' kind:' . tag.fields.kind
|
||||
\ . ' depth:' . tag.depth
|
||||
@ -4077,7 +4076,7 @@ function! tagbar#printfileinfo() abort
|
||||
\ )
|
||||
endif
|
||||
endfor
|
||||
call tagbar#debug#log('All tags printed')
|
||||
call tagbar#log#debug('All tags printed')
|
||||
|
||||
echo 'Tagbar fileinfo printed to debug logfile'
|
||||
endfunction
|
||||
@ -4116,5 +4115,3 @@ function! tagbar#jumpToNearbyTag(direction, ...) abort
|
||||
call s:JumpToNearbyTag(a:direction, search_method, flags)
|
||||
endfunction
|
||||
|
||||
" Modeline {{{1
|
||||
" vim: ts=8 sw=4 sts=4 et foldenable foldmethod=marker foldcolumn=1
|
||||
|
62
bundle/tagbar/autoload/tagbar/debug.vim
vendored
62
bundle/tagbar/autoload/tagbar/debug.vim
vendored
@ -1,62 +0,0 @@
|
||||
function! tagbar#debug#start_debug(...) abort
|
||||
let filename = a:0 > 0 ? a:1 : ''
|
||||
|
||||
if empty(filename)
|
||||
let s:debug_file = 'tagbardebug.log'
|
||||
else
|
||||
let s:debug_file = filename
|
||||
endif
|
||||
|
||||
" Clear log file and start it with version info
|
||||
exe 'redir! > ' . s:debug_file
|
||||
silent version
|
||||
redir END
|
||||
|
||||
" Check whether the log file could be created
|
||||
if !filewritable(s:debug_file)
|
||||
echomsg 'Tagbar: Unable to create log file ' . s:debug_file
|
||||
let s:debug_file = ''
|
||||
return
|
||||
endif
|
||||
|
||||
let s:debug_enabled = 1
|
||||
endfunction
|
||||
|
||||
function! tagbar#debug#stop_debug() abort
|
||||
let s:debug_enabled = 0
|
||||
let s:debug_file = ''
|
||||
endfunction
|
||||
|
||||
function! tagbar#debug#log(msg) abort
|
||||
if s:debug_enabled
|
||||
execute 'redir >> ' . s:debug_file
|
||||
silent echon s:gettime() . ': ' . a:msg . "\n"
|
||||
redir END
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tagbar#debug#log_ctags_output(output) abort
|
||||
if s:debug_enabled
|
||||
exe 'redir! > ' . s:debug_file . '.ctags_out'
|
||||
silent echon a:output
|
||||
redir END
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tagbar#debug#enabled() abort
|
||||
return s:debug_enabled
|
||||
endfunction
|
||||
|
||||
if has('reltime')
|
||||
function! s:gettime() abort
|
||||
let time = split(reltimestr(reltime()), '\.')
|
||||
return strftime('%Y-%m-%d %H:%M:%S.', time[0]) . time[1]
|
||||
endfunction
|
||||
else
|
||||
function! s:gettime() abort
|
||||
return strftime('%Y-%m-%d %H:%M:%S')
|
||||
endfunction
|
||||
endif
|
||||
|
||||
let s:debug_enabled = 0
|
||||
let s:debug_file = ''
|
35
bundle/tagbar/autoload/tagbar/log.vim
vendored
Normal file
35
bundle/tagbar/autoload/tagbar/log.vim
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
"=============================================================================
|
||||
" log.vim --- logger for tagbar
|
||||
" Copyright (c) 2016-2019 Wang Shidong & Contributors
|
||||
" Author: Wang Shidong < wsdjeg@outlook.com >
|
||||
" URL: https://spacevim.org
|
||||
" License: GPLv3
|
||||
"=============================================================================
|
||||
|
||||
if exists('s:debug_enabled')
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:LOGGER =SpaceVim#logger#derive('tagbar')
|
||||
|
||||
function! tagbar#log#start_debug(...) abort
|
||||
call s:LOGGER.info('enable debug mode!')
|
||||
call s:LOGGER.start_debug()
|
||||
endfunction
|
||||
|
||||
function! tagbar#log#stop_debug() abort
|
||||
call s:LOGGER.info('disable debug mode!')
|
||||
call s:LOGGER.stop_debug()
|
||||
endfunction
|
||||
|
||||
function! tagbar#log#debug(msg) abort
|
||||
call s:LOGGER.debug(a:msg)
|
||||
endfunction
|
||||
|
||||
function! tagbar#log#info(msg) abort
|
||||
call s:LOGGER.info(a:msg)
|
||||
endfunction
|
||||
|
||||
function! tagbar#log#enabled() abort
|
||||
return s:LOGGER.enabled()
|
||||
endfunction
|
12
bundle/tagbar/doc/tagbar.txt
vendored
12
bundle/tagbar/doc/tagbar.txt
vendored
@ -307,15 +307,13 @@ COMMANDS *tagbar-commands*
|
||||
makes sense to customize. See |tagbar-extend| for more information about
|
||||
type configurations.
|
||||
|
||||
:TagbarDebug [logfile] *:TagbarDebug*
|
||||
Start debug mode. This will write debug messages to file [logfile] while
|
||||
using Tagbar. If no argument is given "tagbardebug.log" in the current
|
||||
directory is used. Note: an existing file will be overwritten!
|
||||
Note also that it is usually necessary to call this command before loading
|
||||
a file that creates problems in order to get all of the needed data.
|
||||
:TagbarDebug *:TagbarDebug*
|
||||
Start debug mode. This will put debug message to SpaceVim runtime log.
|
||||
which can be found via `SPC h L`
|
||||
|
||||
:TagbarDebugEnd *:TagbarDebugEnd*
|
||||
End debug mode, debug messages will no longer be written to the logfile.
|
||||
End debug mode, debug messages will no longer be written SpaceVim runtime
|
||||
log.
|
||||
|
||||
:TagbarForceUpdate *:TagbarForceUpdate*
|
||||
Forcefully update a file even if it exceeds the |g:tagbar_file_size_limit|
|
||||
|
4
bundle/tagbar/plugin/tagbar.vim
vendored
4
bundle/tagbar/plugin/tagbar.vim
vendored
@ -193,8 +193,8 @@ command! -nargs=1 -bang TagbarSetFoldlevel call tagbar#SetFoldLevel(<args>, <ba
|
||||
command! -nargs=0 TagbarShowTag call tagbar#highlighttag(1, 1)
|
||||
command! -nargs=* TagbarCurrentTag echo tagbar#currenttag('%s', 'No current tag', <f-args>)
|
||||
command! -nargs=1 TagbarGetTypeConfig call tagbar#gettypeconfig(<f-args>)
|
||||
command! -nargs=? TagbarDebug call tagbar#debug#start_debug(<f-args>)
|
||||
command! -nargs=0 TagbarDebugEnd call tagbar#debug#stop_debug()
|
||||
command! -nargs=0 TagbarDebug call tagbar#log#start_debug()
|
||||
command! -nargs=0 TagbarDebugEnd call tagbar#log#stop_debug()
|
||||
command! -nargs=0 TagbarTogglePause call tagbar#toggle_pause()
|
||||
command! -nargs=0 TagbarForceUpdate call tagbar#ForceUpdate()
|
||||
command! -nargs=0 TagbarJump call tagbar#jump()
|
||||
|
@ -1645,6 +1645,31 @@ SpaceVim#layers#load({layer}) *SpaceVim#layers#load()*
|
||||
\ )
|
||||
<
|
||||
|
||||
SpaceVim#logger#info({msg}) *SpaceVim#logger#info()*
|
||||
write message to SpaceVim runtime log with `info` level.
|
||||
|
||||
SpaceVim#logger#derive({name}) *SpaceVim#logger#derive()*
|
||||
Derive a new logger based on SpaceVim's runtime logger. The new logger
|
||||
provides following functions:
|
||||
1. info(msg): like |SpaceVim#logger#info|, but include the derive name.
|
||||
2. warn(msg): like |SpaceVim#logger#warn|
|
||||
3. error(msg): like |SpaceVim#logger#error|
|
||||
4. debug(msg): write debug message run SpaceVim runtime log
|
||||
5. start_debug(): enable debug mode of derived logger.
|
||||
6. stop_debug(): stop debug mode of derived logger.
|
||||
|
||||
Example:
|
||||
>
|
||||
let s:LOGGER = SpaceVim#logger#derive('myplug')
|
||||
|
||||
call s:LOGGER.info('hello world')
|
||||
<
|
||||
|
||||
The this info message will be write to SpaceVim's runtime log:
|
||||
>
|
||||
[ myplug ] [00:02:54:051] [ Info ] hello world
|
||||
<
|
||||
|
||||
SpaceVim#logger#setLevel({level}) *SpaceVim#logger#setLevel()*
|
||||
Set debug level of SpaceVim. Default is 1.
|
||||
|
||||
|
@ -19,7 +19,6 @@ local M = {
|
||||
['temp'] = {},
|
||||
}
|
||||
|
||||
|
||||
-- 0 : log debug, info, warn, error messages
|
||||
-- 1 : log info, warn, error messages
|
||||
-- 2 : log warn, error messages
|
||||
@ -36,8 +35,15 @@ function M.set_verbose(vb)
|
||||
end
|
||||
|
||||
function M.set_level(l)
|
||||
-- the level only can be:
|
||||
-- 0 : log debug, info, warn, error messages
|
||||
-- 1 : log info, warn, error messages
|
||||
-- 2 : log warn, error messages
|
||||
-- 3 : log error messages
|
||||
if l == 0 or l == 1 or l == 2 or l == 3 then
|
||||
M.level = l
|
||||
end
|
||||
end
|
||||
|
||||
function M._build_msg(msg, l)
|
||||
msg = msg or ''
|
||||
@ -52,11 +58,7 @@ function M._build_msg(msg, l)
|
||||
local s = fn.float2nr(clock) % 60
|
||||
local mic = string.format('%00.3f', clock - fn.float2nr(clock))
|
||||
local c = string.format('%02d:%02d:%02d:%s', h, m, s, string.sub(mic, 3, -1))
|
||||
local log = string.format('[ %s ] [%s] [ %s ] %s',
|
||||
M.name,
|
||||
c,
|
||||
M.levels[l],
|
||||
msg)
|
||||
local log = string.format('[ %s ] [%s] [ %s ] %s', M.name, c, M.levels[l], msg)
|
||||
return log
|
||||
end
|
||||
|
||||
@ -92,7 +94,6 @@ function M.write(msg)
|
||||
end
|
||||
fn.writefile({ msg }, M.file, flags)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function M.warn(msg, ...)
|
||||
@ -122,19 +123,22 @@ function M.view(l)
|
||||
local logs = ''
|
||||
if fn.filereadable(M.file) == 1 then
|
||||
logs = fn.readfile(M.file, '')
|
||||
info = info .. fn.join(fn.filter(logs, 'self._comp(v:val, a:l)'), "\n")
|
||||
info = info .. fn.join(fn.filter(logs, 'self._comp(v:val, a:l)'), '\n')
|
||||
else
|
||||
info = info .. '[ ' .. M.name .. ' ] : logger file ' .. M.file
|
||||
info = info
|
||||
.. '[ '
|
||||
.. M.name
|
||||
.. ' ] : logger file '
|
||||
.. M.file
|
||||
.. ' does not exists, only log for current process will be shown!'
|
||||
.. "\n"
|
||||
.. '\n'
|
||||
for key, value in pairs(M.temp) do
|
||||
if M._comp(value, l) == 1 then
|
||||
info = info .. value .. "\n"
|
||||
info = info .. value .. '\n'
|
||||
end
|
||||
end
|
||||
end
|
||||
return info
|
||||
|
||||
end
|
||||
|
||||
function M._comp(msg, l)
|
||||
@ -142,9 +146,17 @@ function M._comp(msg, l)
|
||||
if string.find(msg, M.levels[2]) ~= nil then
|
||||
return 1
|
||||
elseif string.find(msg, M.levels[1]) ~= nil then
|
||||
if l > 2 then return 0 else return 1 end
|
||||
if l > 2 then
|
||||
return 0
|
||||
else
|
||||
if l > 1 then return 0 else return 1 end
|
||||
return 1
|
||||
end
|
||||
else
|
||||
if l > 1 then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -160,6 +172,4 @@ function M.set_file(file)
|
||||
M.file = file
|
||||
end
|
||||
|
||||
|
||||
|
||||
return M
|
||||
|
@ -6,7 +6,6 @@
|
||||
-- License: GPLv3
|
||||
--=============================================================================
|
||||
|
||||
|
||||
local M = {}
|
||||
|
||||
local logger = require('spacevim.api').import('logger')
|
||||
@ -25,8 +24,6 @@ logger.set_level(1)
|
||||
logger.set_silent(1)
|
||||
logger.set_verbose(1)
|
||||
|
||||
|
||||
|
||||
function M.info(msg)
|
||||
logger.info(msg)
|
||||
end
|
||||
@ -52,13 +49,12 @@ function M.setOutput(file)
|
||||
end
|
||||
|
||||
function M.viewRuntimeLog()
|
||||
local info = "### SpaceVim runtime log :\n\n"
|
||||
.. logger.view(logger.level)
|
||||
local info = '### SpaceVim runtime log :\n\n' .. logger.view(logger.level)
|
||||
cmd('tabnew')
|
||||
cmd('setl nobuflisted')
|
||||
cmd('nnoremap <buffer><silent> q :tabclose!<CR>')
|
||||
-- put info into buffer
|
||||
fn.append(0, fn.split(info, "\n"))
|
||||
fn.append(0, fn.split(info, '\n'))
|
||||
cmd('setl nomodifiable')
|
||||
cmd('setl buftype=nofile')
|
||||
cmd('setl filetype=SpaceVimLog')
|
||||
@ -67,22 +63,22 @@ end
|
||||
|
||||
function M.viewLog(...)
|
||||
local argvs = { ... }
|
||||
local info = "<details><summary> SpaceVim debug information </summary>\n\n"
|
||||
.. "### SpaceVim options :\n\n"
|
||||
.. "```toml\n"
|
||||
.. fn.join(call('SpaceVim#options#list'), "\n")
|
||||
.. "\n```\n"
|
||||
.. "\n\n"
|
||||
.. "### SpaceVim layers :\n\n"
|
||||
local info = '<details><summary> SpaceVim debug information </summary>\n\n'
|
||||
.. '### SpaceVim options :\n\n'
|
||||
.. '```toml\n'
|
||||
.. fn.join(call('SpaceVim#options#list'), '\n')
|
||||
.. '\n```\n'
|
||||
.. '\n\n'
|
||||
.. '### SpaceVim layers :\n\n'
|
||||
.. call('SpaceVim#layers#report')
|
||||
.. "\n\n"
|
||||
.. "### SpaceVim Health checking :\n\n"
|
||||
.. '\n\n'
|
||||
.. '### SpaceVim Health checking :\n\n'
|
||||
.. call('SpaceVim#health#report')
|
||||
.. "\n\n"
|
||||
.. "### SpaceVim runtime log :\n\n"
|
||||
.. "```log\n"
|
||||
.. '\n\n'
|
||||
.. '### SpaceVim runtime log :\n\n'
|
||||
.. '```log\n'
|
||||
.. logger.view(logger.level)
|
||||
.. "\n```\n</details>\n\n"
|
||||
.. '\n```\n</details>\n\n'
|
||||
if argvs ~= nil and #argvs >= 1 then
|
||||
local bang = argvs[1]
|
||||
if bang == 1 then
|
||||
@ -90,7 +86,7 @@ function M.viewLog(...)
|
||||
cmd('setl nobuflisted')
|
||||
cmd('nnoremap <buffer><silent> q :tabclose!<CR>')
|
||||
-- put info into buffer
|
||||
fn.append(0, fn.split(info, "\n"))
|
||||
fn.append(0, fn.split(info, '\n'))
|
||||
cmd('setl nomodifiable')
|
||||
cmd('setl buftype=nofile')
|
||||
cmd('setl filetype=markdown')
|
||||
@ -108,8 +104,11 @@ function M.syntax_extra()
|
||||
end
|
||||
|
||||
function M.derive(name)
|
||||
local derive = {}
|
||||
derive['origin_name'] = logger.get_name()
|
||||
local derive = {
|
||||
origin_name = logger.get_name(),
|
||||
_debug_mode = false,
|
||||
derive_name = fn.printf('%' .. fn.strdisplaywidth(logger.get_name()) .. 'S', name),
|
||||
}
|
||||
|
||||
function derive.info(msg)
|
||||
logger.set_name(derive.derive_name)
|
||||
@ -128,11 +127,22 @@ function M.derive(name)
|
||||
end
|
||||
|
||||
function derive.debug(msg)
|
||||
if derive._debug_mode then
|
||||
logger.set_name(derive.derive_name)
|
||||
logger.debug(msg)
|
||||
logger.set_name(derive.origin_name)
|
||||
end
|
||||
derive['derive_name'] = fn.printf('%' .. fn.strdisplaywidth(logger.get_name()) .. 'S', name)
|
||||
end
|
||||
function derive.start_debug()
|
||||
derive._debug_mode = true
|
||||
end
|
||||
function derive.stop_debug()
|
||||
derive._debug_mode = false
|
||||
end
|
||||
function derive.enabled() -- {{{
|
||||
return derive._debug_mode
|
||||
end
|
||||
-- }}}
|
||||
return derive
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user