diff autoload/gutentags/cscope.vim @ 202:b50b6d0f82dd

Refactor for Vim8/Neovim job support. - Refactor all modules' `generate` methods to use a vaguely generic job API wrapper that works for both Vim8 and Neovim jobs. - Make the `statusline` method use new `User` autocommands driven by the job-started/ended callbacks. - Remove all the lock-file-related stuff. - Better error/warning messages. - Move a few things around.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 31 Mar 2018 18:42:54 -0700
parents f7a417234dea
children 8e6156c4dff1
line wrap: on
line diff
--- a/autoload/gutentags/cscope.vim	Sat Mar 31 18:35:46 2018 -0700
+++ b/autoload/gutentags/cscope.vim	Sat Mar 31 18:42:54 2018 -0700
@@ -40,64 +40,46 @@
     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
+function! gutentags#cscope#generate(proj_dir, tags_file, gen_opts) abort
+    let l: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 . '"'
+        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()
+    let l:cmd = gutentags#make_args(l:cmd)
 
-    call gutentags#trace("Running: " . l:cmd)
+    call gutentags#trace("Running: " . string(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)
+		let l:job_opts = gutentags#build_default_job_options('cscope')
+        let l:job = gutentags#start_job(l:cmd, l:job_opts)
+        call gutentags#add_job('cscope', a:tags_file, l:job)
     else
         call gutentags#trace("(fake... not actually running)")
     endif
-    call gutentags#trace("")
+endfunction
+
+function! gutentags#cscope#on_job_exit(job, exit_val) abort
+    let l:job_idx = gutentags#find_job_index_by_data('cscope', a:job)
+    let l:dbfile_path = gutentags#get_job_tags_file('cscope', l:job_idx)
+    call gutentags#remove_job('cscope', l:job_idx)
+
+    if a:exit_val == 0
+        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)
+        else
+            execute 'cs reset'
+        endif
+    else
+        call gutentags#warning(
+                    \"gutentags: cscope job failed, returned: ".
+                    \string(a:exit_val))
+    endif
 endfunction
 
 " }}}