Mercurial > vim-gutentags
annotate autoload/gutentags/cscope.vim @ 192:09cc408db201
Fix cscope generation use of proj_dir
author | Simon Mutch <smutch@unimelb.edu.au> |
---|---|
date | Fri, 23 Jun 2017 11:44:53 +1000 |
parents | 411f3fa915f5 |
children | fd863d1bcfb9 |
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') |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 let s:added_dbs = [] |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
28 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 function! gutentags#cscope#init(project_root) abort |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 let l:dbfile_path = gutentags#get_cachefile( |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 \a:project_root, g:gutentags_scopefile) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 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
|
33 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 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
|
35 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
|
36 call add(s:added_dbs, l:dbfile_path) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 execute 'cs add ' . fnameescape(l:dbfile_path) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 endif |
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 endfunction |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 |
72
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
42 function! gutentags#cscope#command_terminated(job_id, data, event) abort |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
43 if a:data == 0 |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
44 if index(s:added_dbs, self.db_file) < 0 |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
45 call add(s:added_dbs, self.db_file) |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
46 execute 'cs add ' . fnameescape(s:db_file) |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
47 else |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
48 execute 'cs reset' |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
49 endif |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
50 endif |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
51 endfunction |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
52 |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 function! gutentags#cscope#generate(proj_dir, tags_file, write_mode) abort |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 let l:cmd = gutentags#get_execute_cmd() . s:runner_exe |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 let l:cmd .= ' -e ' . g:gutentags_cscope_executable |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
56 let l:cmd .= ' -p ' . a:proj_dir |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 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
|
58 let l:file_list_cmd = |
192
09cc408db201
Fix cscope generation use of proj_dir
Simon Mutch <smutch@unimelb.edu.au>
parents:
179
diff
changeset
|
59 \ 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
|
60 if !empty(l:file_list_cmd) |
286e5b3095d0
Allow restricting tag generation to files listed by custom commands
Stephen Kent <smkent@smkent.net>
parents:
72
diff
changeset
|
61 let l:cmd .= ' -L "' . l:file_list_cmd . '"' |
286e5b3095d0
Allow restricting tag generation to files listed by custom commands
Stephen Kent <smkent@smkent.net>
parents:
72
diff
changeset
|
62 endif |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 let l:cmd .= ' ' |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 let l:cmd .= gutentags#get_execute_cmd_suffix() |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 call gutentags#trace("Running: " . l:cmd) |
179 | 67 call gutentags#trace("In: " . getcwd()) |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
68 if !g:gutentags_fake |
72
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
69 if !(has('nvim') && exists('*jobwait')) |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
70 if !g:gutentags_trace |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
71 silent execute l:cmd |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
72 else |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
73 execute l:cmd |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
74 endif |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 else |
72
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
76 let job_dict = { 'db_file': a:tags_file, 'on_exit' : function('gutentags#cscope#command_terminated') } |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
77 let job_cmd = [ s:runner_exe, |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
78 \ '-e', g:gutentags_cscope_executable, |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
79 \ '-p', a:proj_dir, |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
80 \ '-f', a:tags_file ] |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
81 let job_id = jobstart(job_cmd, job_dict) |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 let l:full_scopedb_file = fnamemodify(a:tags_file, ':p') |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 call gutentags#add_progress('cscope', l:full_scopedb_file) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 else |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 call gutentags#trace("(fake... not actually running)") |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 call gutentags#trace("") |
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 |