Mercurial > vim-gutentags
annotate autoload/gutentags/cscope.vim @ 254:52be4cf89810
Don't complain when the job gets killed when Vim exits.
This happens on Neovim, where the jobs seem to get killed before Vim
exits, and so Gutentags has enough time to print a warning.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 26 Oct 2019 00:40:18 -0700 |
parents | ac312dc3c111 |
children | 6030953258fe |
rev | line source |
---|---|
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 " Cscope module for Gutentags |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 if !has('cscope') |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 throw "Can't enable the cscope module for Gutentags, this Vim has ". |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 \"no support for cscope files." |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 " Global Options {{{ |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 if !exists('g:gutentags_cscope_executable') |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 let g:gutentags_cscope_executable = 'cscope' |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 if !exists('g:gutentags_scopefile') |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 let g:gutentags_scopefile = 'cscope.out' |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 if !exists('g:gutentags_auto_add_cscope') |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 let g:gutentags_auto_add_cscope = 1 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 |
239
ac9adbec887b
Add `g:gutentags_cscope_build_inverted_index` option
Chayoung You <yousbe@gmail.com>
parents:
215
diff
changeset
|
22 if !exists('g:gutentags_cscope_build_inverted_index') |
ac9adbec887b
Add `g:gutentags_cscope_build_inverted_index` option
Chayoung You <yousbe@gmail.com>
parents:
215
diff
changeset
|
23 let g:gutentags_cscope_build_inverted_index = 0 |
ac9adbec887b
Add `g:gutentags_cscope_build_inverted_index` option
Chayoung You <yousbe@gmail.com>
parents:
215
diff
changeset
|
24 endif |
ac9adbec887b
Add `g:gutentags_cscope_build_inverted_index` option
Chayoung You <yousbe@gmail.com>
parents:
215
diff
changeset
|
25 |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 " }}} |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 " Gutentags Module Interface {{{ |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 let s:runner_exe = gutentags#get_plat_file('update_scopedb') |
196
cac059bce038
Log instead of echoing to stdout
Chayoung You <yousbe@gmail.com>
parents:
195
diff
changeset
|
31 let s:unix_redir = (&shellredir =~# '%s') ? &shellredir : &shellredir . ' %s' |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 let s:added_dbs = [] |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 function! gutentags#cscope#init(project_root) abort |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 let l:dbfile_path = gutentags#get_cachefile( |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 \a:project_root, g:gutentags_scopefile) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 let b:gutentags_files['cscope'] = l:dbfile_path |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 if g:gutentags_auto_add_cscope && filereadable(l:dbfile_path) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 if index(s:added_dbs, l:dbfile_path) < 0 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 call add(s:added_dbs, l:dbfile_path) |
195
fd863d1bcfb9
Suppress warning from cscope add
Chayoung You <yousbe@gmail.com>
parents:
192
diff
changeset
|
42 silent! execute 'cs add ' . fnameescape(l:dbfile_path) |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 endfunction |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
47 function! gutentags#cscope#generate(proj_dir, tags_file, gen_opts) abort |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
48 let l:cmd = [s:runner_exe] |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
49 let l:cmd += ['-e', g:gutentags_cscope_executable] |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
50 let l:cmd += ['-p', a:proj_dir] |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
51 let l:cmd += ['-f', a:tags_file] |
136
286e5b3095d0
Allow restricting tag generation to files listed by custom commands
Stephen Kent <smkent@smkent.net>
parents:
72
diff
changeset
|
52 let l:file_list_cmd = |
192
09cc408db201
Fix cscope generation use of proj_dir
Simon Mutch <smutch@unimelb.edu.au>
parents:
179
diff
changeset
|
53 \ gutentags#get_project_file_list_cmd(a:proj_dir) |
136
286e5b3095d0
Allow restricting tag generation to files listed by custom commands
Stephen Kent <smkent@smkent.net>
parents:
72
diff
changeset
|
54 if !empty(l:file_list_cmd) |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
55 let l:cmd += ['-L', '"' . l:file_list_cmd . '"'] |
136
286e5b3095d0
Allow restricting tag generation to files listed by custom commands
Stephen Kent <smkent@smkent.net>
parents:
72
diff
changeset
|
56 endif |
239
ac9adbec887b
Add `g:gutentags_cscope_build_inverted_index` option
Chayoung You <yousbe@gmail.com>
parents:
215
diff
changeset
|
57 if g:gutentags_cscope_build_inverted_index |
ac9adbec887b
Add `g:gutentags_cscope_build_inverted_index` option
Chayoung You <yousbe@gmail.com>
parents:
215
diff
changeset
|
58 let l:cmd += ['-I'] |
ac9adbec887b
Add `g:gutentags_cscope_build_inverted_index` option
Chayoung You <yousbe@gmail.com>
parents:
215
diff
changeset
|
59 endif |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
60 let l:cmd = gutentags#make_args(l:cmd) |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
62 call gutentags#trace("Running: " . string(l:cmd)) |
179 | 63 call gutentags#trace("In: " . getcwd()) |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 if !g:gutentags_fake |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
65 let l:job_opts = gutentags#build_default_job_options('cscope') |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
66 let l:job = gutentags#start_job(l:cmd, l:job_opts) |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
67 call gutentags#add_job('cscope', a:tags_file, l:job) |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 else |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 call gutentags#trace("(fake... not actually running)") |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 endif |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
71 endfunction |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
72 |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
73 function! gutentags#cscope#on_job_exit(job, exit_val) abort |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
74 let l:job_idx = gutentags#find_job_index_by_data('cscope', a:job) |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
75 let l:dbfile_path = gutentags#get_job_tags_file('cscope', l:job_idx) |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
76 call gutentags#remove_job('cscope', l:job_idx) |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
77 |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
78 if a:exit_val == 0 |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
79 if index(s:added_dbs, l:dbfile_path) < 0 |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
80 call add(s:added_dbs, l:dbfile_path) |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
81 silent! execute 'cs add ' . fnameescape(l:dbfile_path) |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
82 else |
215
8e6156c4dff1
Suppress warnings from cscope reset
Chayoung You <yousbe@gmail.com>
parents:
202
diff
changeset
|
83 silent! execute 'cs reset' |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
84 endif |
254
52be4cf89810
Don't complain when the job gets killed when Vim exits.
Ludovic Chabant <ludovic@chabant.com>
parents:
241
diff
changeset
|
85 elseif !g:__gutentags_vim_is_leaving |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
86 call gutentags#warning( |
241
ac312dc3c111
Don't duplicate the `gutentags:` message prefix.
Ludovic Chabant <ludovic@chabant.com>
parents:
239
diff
changeset
|
87 \"cscope job failed, returned: ". |
202
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
88 \string(a:exit_val)) |
b50b6d0f82dd
Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents:
199
diff
changeset
|
89 endif |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 endfunction |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
91 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 " }}} |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
93 |