Mercurial > vim-gutentags
comparison 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 |
comparison
equal
deleted
inserted
replaced
201:b41385032f86 | 202:b50b6d0f82dd |
---|---|
38 silent! execute 'cs add ' . fnameescape(l:dbfile_path) | 38 silent! execute 'cs add ' . fnameescape(l:dbfile_path) |
39 endif | 39 endif |
40 endif | 40 endif |
41 endfunction | 41 endfunction |
42 | 42 |
43 function! gutentags#cscope#command_terminated(job_id, data, event) abort | 43 function! gutentags#cscope#generate(proj_dir, tags_file, gen_opts) abort |
44 if a:data == 0 | 44 let l:cmd = [s:runner_exe] |
45 if index(s:added_dbs, self.db_file) < 0 | 45 let l:cmd += ['-e', g:gutentags_cscope_executable] |
46 call add(s:added_dbs, self.db_file) | 46 let l:cmd += ['-p', a:proj_dir] |
47 silent! execute 'cs add ' . fnameescape(s:db_file) | 47 let l:cmd += ['-f', a:tags_file] |
48 let l:file_list_cmd = | |
49 \ gutentags#get_project_file_list_cmd(a:proj_dir) | |
50 if !empty(l:file_list_cmd) | |
51 let l:cmd += ['-L', '"' . l:file_list_cmd . '"'] | |
52 endif | |
53 let l:cmd = gutentags#make_args(l:cmd) | |
54 | |
55 call gutentags#trace("Running: " . string(l:cmd)) | |
56 call gutentags#trace("In: " . getcwd()) | |
57 if !g:gutentags_fake | |
58 let l:job_opts = gutentags#build_default_job_options('cscope') | |
59 let l:job = gutentags#start_job(l:cmd, l:job_opts) | |
60 call gutentags#add_job('cscope', a:tags_file, l:job) | |
61 else | |
62 call gutentags#trace("(fake... not actually running)") | |
63 endif | |
64 endfunction | |
65 | |
66 function! gutentags#cscope#on_job_exit(job, exit_val) abort | |
67 let l:job_idx = gutentags#find_job_index_by_data('cscope', a:job) | |
68 let l:dbfile_path = gutentags#get_job_tags_file('cscope', l:job_idx) | |
69 call gutentags#remove_job('cscope', l:job_idx) | |
70 | |
71 if a:exit_val == 0 | |
72 if index(s:added_dbs, l:dbfile_path) < 0 | |
73 call add(s:added_dbs, l:dbfile_path) | |
74 silent! execute 'cs add ' . fnameescape(l:dbfile_path) | |
48 else | 75 else |
49 execute 'cs reset' | 76 execute 'cs reset' |
50 endif | 77 endif |
78 else | |
79 call gutentags#warning( | |
80 \"gutentags: cscope job failed, returned: ". | |
81 \string(a:exit_val)) | |
51 endif | 82 endif |
52 endfunction | |
53 | |
54 function! gutentags#cscope#generate(proj_dir, tags_file, write_mode) abort | |
55 let l:cmd = gutentags#get_execute_cmd() . s:runner_exe | |
56 let l:cmd .= ' -e ' . g:gutentags_cscope_executable | |
57 let l:cmd .= ' -p ' . a:proj_dir | |
58 let l:cmd .= ' -f ' . a:tags_file | |
59 let l:file_list_cmd = | |
60 \ gutentags#get_project_file_list_cmd(a:proj_dir) | |
61 if !empty(l:file_list_cmd) | |
62 let l:cmd .= ' -L "' . l:file_list_cmd . '"' | |
63 endif | |
64 if g:gutentags_trace | |
65 if has('win32') | |
66 let l:cmd .= ' -l "' . a:tags_file . '.log"' | |
67 else | |
68 let l:cmd .= ' ' . printf(s:unix_redir, '"' . a:tags_file . '.log"') | |
69 endif | |
70 else | |
71 if !has('win32') | |
72 let l:cmd .= ' ' . printf(s:unix_redir, '/dev/null') | |
73 endif | |
74 endif | |
75 let l:cmd .= ' ' | |
76 let l:cmd .= gutentags#get_execute_cmd_suffix() | |
77 | |
78 call gutentags#trace("Running: " . l:cmd) | |
79 call gutentags#trace("In: " . getcwd()) | |
80 if !g:gutentags_fake | |
81 if !(has('nvim') && exists('*jobwait')) | |
82 if !g:gutentags_trace | |
83 silent execute l:cmd | |
84 else | |
85 execute l:cmd | |
86 endif | |
87 else | |
88 let job_dict = { 'db_file': a:tags_file, 'on_exit' : function('gutentags#cscope#command_terminated') } | |
89 let job_cmd = [ s:runner_exe, | |
90 \ '-e', g:gutentags_cscope_executable, | |
91 \ '-p', a:proj_dir, | |
92 \ '-f', a:tags_file ] | |
93 let job_id = jobstart(job_cmd, job_dict) | |
94 endif | |
95 | |
96 call gutentags#add_progress('cscope', a:tags_file) | |
97 else | |
98 call gutentags#trace("(fake... not actually running)") | |
99 endif | |
100 call gutentags#trace("") | |
101 endfunction | 83 endfunction |
102 | 84 |
103 " }}} | 85 " }}} |
104 | 86 |