annotate autoload/gutentags/cscope.vim @ 235:def58b9d22c6

Exclude cscope from default file list command With default setup gutentags generate file list for cscope using simple `find -type f` command in update_scopedb.sh. Subsequent invocations of this script causes unbounded growth of cscope database because cscope indexes itself every time. This change excludes cscope database file from default file list command for cscope database generation so it will work properly by default. Another option is to use custom file list command like `ag -l` that will generate files known to source control, that is without cscope database file.
author Alex Dzyoba <alex@dzyoba.com>
date Tue, 18 Dec 2018 23:32:20 +0300
parents 8e6156c4dff1
children ac9adbec887b
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
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 " }}}
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 " Gutentags Module Interface {{{
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 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
27 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
28 let s:added_dbs = []
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 function! gutentags#cscope#init(project_root) abort
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 let l:dbfile_path = gutentags#get_cachefile(
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 \a:project_root, g:gutentags_scopefile)
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 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
34
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 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
36 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
37 call add(s:added_dbs, l:dbfile_path)
195
fd863d1bcfb9 Suppress warning from cscope add
Chayoung You <yousbe@gmail.com>
parents: 192
diff changeset
38 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
39 endif
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 endif
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 endfunction
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42
202
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
43 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
44 let l:cmd = [s:runner_exe]
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
45 let l:cmd += ['-e', g:gutentags_cscope_executable]
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
46 let l:cmd += ['-p', a:proj_dir]
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
47 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
48 let l:file_list_cmd =
192
09cc408db201 Fix cscope generation use of proj_dir
Simon Mutch <smutch@unimelb.edu.au>
parents: 179
diff changeset
49 \ 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
50 if !empty(l:file_list_cmd)
202
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
51 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
52 endif
202
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
53 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
54
202
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
55 call gutentags#trace("Running: " . string(l:cmd))
179
411f3fa915f5 Back to getcwd()
Henry Kupty <hkupty@gmail.com>
parents: 168
diff changeset
56 call gutentags#trace("In: " . getcwd())
44
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 if !g:gutentags_fake
202
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
58 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
59 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
60 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
61 else
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 call gutentags#trace("(fake... not actually running)")
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 endif
202
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
64 endfunction
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
65
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
66 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
67 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
68 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
69 call gutentags#remove_job('cscope', l:job_idx)
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
70
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
71 if a:exit_val == 0
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
72 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
73 call add(s:added_dbs, l:dbfile_path)
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
74 silent! execute 'cs add ' . fnameescape(l:dbfile_path)
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
75 else
215
8e6156c4dff1 Suppress warnings from cscope reset
Chayoung You <yousbe@gmail.com>
parents: 202
diff changeset
76 silent! execute 'cs reset'
202
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
77 endif
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
78 else
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
79 call gutentags#warning(
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
80 \"gutentags: cscope job failed, returned: ".
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
81 \string(a:exit_val))
b50b6d0f82dd Refactor for Vim8/Neovim job support.
Ludovic Chabant <ludovic@chabant.com>
parents: 199
diff changeset
82 endif
44
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 endfunction
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 " }}}
1a853b37eddf Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86