Mercurial > vim-gutentags
view autoload/gutentags/cscope.vim @ 199:f7a417234dea
Simplify call sites for `add_progress`, fix bugs with the progress tracking.
- `add_progress` makes paths absolute itself instead of the call sites.
- `inprogress` debug function properly prints what's going on.
- status line function shows which modules are indexing.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 27 Jul 2017 23:08:18 -0700 |
parents | cac059bce038 |
children | b50b6d0f82dd |
line wrap: on
line source
" Cscope module for Gutentags if !has('cscope') throw "Can't enable the cscope module for Gutentags, this Vim has ". \"no support for cscope files." endif " Global Options {{{ if !exists('g:gutentags_cscope_executable') let g:gutentags_cscope_executable = 'cscope' endif if !exists('g:gutentags_scopefile') let g:gutentags_scopefile = 'cscope.out' endif if !exists('g:gutentags_auto_add_cscope') let g:gutentags_auto_add_cscope = 1 endif " }}} " Gutentags Module Interface {{{ let s:runner_exe = gutentags#get_plat_file('update_scopedb') let s:unix_redir = (&shellredir =~# '%s') ? &shellredir : &shellredir . ' %s' let s:added_dbs = [] function! gutentags#cscope#init(project_root) abort let l:dbfile_path = gutentags#get_cachefile( \a:project_root, g:gutentags_scopefile) let b:gutentags_files['cscope'] = l:dbfile_path if g:gutentags_auto_add_cscope && filereadable(l:dbfile_path) if index(s:added_dbs, l:dbfile_path) < 0 call add(s:added_dbs, l:dbfile_path) silent! execute 'cs add ' . fnameescape(l:dbfile_path) endif endif endfunction function! gutentags#cscope#command_terminated(job_id, data, event) abort if a:data == 0 if index(s:added_dbs, self.db_file) < 0 call add(s:added_dbs, self.db_file) silent! execute 'cs add ' . fnameescape(s:db_file) else execute 'cs reset' endif endif endfunction function! gutentags#cscope#generate(proj_dir, tags_file, write_mode) abort let l:cmd = gutentags#get_execute_cmd() . s:runner_exe let l:cmd .= ' -e ' . g:gutentags_cscope_executable let l:cmd .= ' -p ' . a:proj_dir let l:cmd .= ' -f ' . a:tags_file let l:file_list_cmd = \ gutentags#get_project_file_list_cmd(a:proj_dir) if !empty(l:file_list_cmd) let l:cmd .= ' -L "' . l:file_list_cmd . '"' endif if g:gutentags_trace if has('win32') let l:cmd .= ' -l "' . a:tags_file . '.log"' else let l:cmd .= ' ' . printf(s:unix_redir, '"' . a:tags_file . '.log"') endif else if !has('win32') let l:cmd .= ' ' . printf(s:unix_redir, '/dev/null') endif endif let l:cmd .= ' ' let l:cmd .= gutentags#get_execute_cmd_suffix() call gutentags#trace("Running: " . l:cmd) call gutentags#trace("In: " . getcwd()) if !g:gutentags_fake if !(has('nvim') && exists('*jobwait')) if !g:gutentags_trace silent execute l:cmd else execute l:cmd endif else let job_dict = { 'db_file': a:tags_file, 'on_exit' : function('gutentags#cscope#command_terminated') } let job_cmd = [ s:runner_exe, \ '-e', g:gutentags_cscope_executable, \ '-p', a:proj_dir, \ '-f', a:tags_file ] let job_id = jobstart(job_cmd, job_dict) endif call gutentags#add_progress('cscope', a:tags_file) else call gutentags#trace("(fake... not actually running)") endif call gutentags#trace("") endfunction " }}}