1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-03-13 02:05:40 +08:00

fix gtags completion and list project files (#4209)

* fix gtags completion and list project files

* gtags: use cgetexpr instead of cexpr! if there's multiple results

* gtags: set $GTAGSDBPATH for completion
This commit is contained in:
thawk 2021-04-15 22:00:02 +08:00 committed by GitHub
parent 9f6faa4011
commit bbac004900
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 28 deletions

View File

@ -26,7 +26,7 @@ function! SpaceVim#layers#gtags#config() abort
let g:_spacevim_mappings_space.m.g = {'name' : '+gtags'}
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'c'], 'GtagsGenerate!', 'create-a-gtags-database', 1)
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'u'], 'GtagsGenerate', 'update-tag-database', 1)
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'p'], 'Gtags -p', 'list-all-file-in-GTAGS', 1)
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'p'], 'Gtags -P', 'list-all-file-in-GTAGS', 1)
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'd'], 'exe "Gtags -d " . expand("<cword>")', 'find-definitions', 1)
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'r'], 'exe "Gtags -r " . expand("<cword>")', 'find-references', 1)
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 's'], 'exe "Gtags -s " . expand("<cword>")', 'find-cursor-symbol', 1)

View File

@ -212,6 +212,34 @@ function! s:TrimOption(option) abort
return l:option
endfunction
function! s:ExecGlobal(cmd) abort
let l:restore_gtagsroot = 0
if empty($GTAGSROOT)
let $GTAGSROOT = SpaceVim#plugins#projectmanager#current_root()
let l:restore_gtagsroot = 1
endif
let l:restore_gtagsdbpath = 0
if empty($GTAGSDBPATH)
let $GTAGSDBPATH = s:FILE.unify_path(g:tags_cache_dir) . s:FILE.path_to_fname($GTAGSROOT)
let l:restore_gtagsdbpath = 1
endif
let l:result = system(a:cmd)
" restore $GTAGSROOT and $GTAGSDBPATH to make it possible to switch
" between multiple projects or parent/child projects
if l:restore_gtagsroot
let $GTAGSROOT = ''
endif
if l:restore_gtagsdbpath
let $GTAGSDBPATH = ''
endif
return l:result
endfunction
"
" Execute global and load the result into quickfix window.
"
@ -242,31 +270,8 @@ function! s:ExecLoad(option, long_option, pattern) abort
let l:cmd = g:gtags_global_command . ' ' . l:option . 'e ' . g:Gtags_Shell_Quote_Char . a:pattern . g:Gtags_Shell_Quote_Char
endif
let l:restore_gtagsroot = 0
if empty($GTAGSROOT)
let $GTAGSROOT = SpaceVim#plugins#projectmanager#current_root()
let l:restore_gtagsroot = 1
endif
let l:result = s:ExecGlobal(l:cmd)
let l:restore_gtagsdbpath = 0
if empty($GTAGSDBPATH)
let $GTAGSDBPATH = s:FILE.unify_path(g:tags_cache_dir) . s:FILE.path_to_fname($GTAGSROOT)
let l:restore_gtagsdbpath = 1
endif
let l:result = system(l:cmd)
" restore $GTAGSROOT and $GTAGSDBPATH to make it possible to switch
" between multiple projects or parent/child projects
if l:restore_gtagsroot
let $GTAGSROOT = ''
endif
if l:restore_gtagsdbpath
let $GTAGSDBPATH = ''
endif
e
if v:shell_error != 0
if v:shell_error == 2
call s:Error('invalid arguments. (gtags.vim requires GLOBAL 5.7 or later)')
@ -303,7 +308,11 @@ function! s:ExecLoad(option, long_option, pattern) abort
" Parse the output of 'global -x or -t' and show in the quickfix window.
let l:efm_org = &efm
let &efm = g:Gtags_Efm
if l:result =~# '\n.'
cgetexpr l:result
else
cexpr! l:result
endif
let &efm = l:efm_org
endfunction
@ -357,7 +366,7 @@ function! gtags#global(line) abort
if l:option =~# 'f'
let l:line = input('Gtags for file: ', expand('%'), 'file')
else
let l:line = input('Gtags for pattern: ', expand('<cword>'), 'custom,GtagsCandidateCore')
let l:line = input('Gtags for pattern: ', expand('<cword>'), 'custom,gtags#complete')
endif
let l:pattern = s:Extract(l:line, 'pattern')
if l:pattern ==# ''
@ -429,7 +438,7 @@ function! s:GtagsCandidateCore(lead, ...) abort
endif
return glob(l:pattern)
else
let l:cands = system(g:gtags_global_command . ' ' . '-c' . s:option . ' ' . a:lead)
let l:cands = s:ExecGlobal(g:gtags_global_command . ' ' . '-c' . s:option . ' ' . a:lead)
if v:shell_error == 0
return l:cands
endif