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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
411f3fa915f5 Back to getcwd()
Henry Kupty <hkupty@gmail.com>
parents: 168
diff changeset
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