Mercurial > vim-gutentags
annotate autoload/gutentags/cscope.vim @ 72:99b95da1bed7
Add Neovim support for cscope
author | Jonathan Buschmann <jonthn@pinacea.com> |
---|---|
date | Sat, 02 May 2015 00:21:19 +0200 |
parents | 1a853b37eddf |
children | 286e5b3095d0 |
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 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
58 let l:cmd .= ' ' |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 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
|
60 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 call gutentags#trace("Running: " . l:cmd) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 call gutentags#trace("In: " . getcwd()) |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 if !g:gutentags_fake |
72
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
64 if !(has('nvim') && exists('*jobwait')) |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
65 if !g:gutentags_trace |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
66 silent execute l:cmd |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
67 else |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
68 execute l:cmd |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
69 endif |
44
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 else |
72
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
71 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
|
72 let job_cmd = [ s:runner_exe, |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
73 \ '-e', g:gutentags_cscope_executable, |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
74 \ '-p', a:proj_dir, |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
75 \ '-f', a:tags_file ] |
99b95da1bed7
Add Neovim support for cscope
Jonathan Buschmann <jonthn@pinacea.com>
parents:
44
diff
changeset
|
76 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
|
77 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 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
|
80 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
|
81 else |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
82 call gutentags#trace("(fake... not actually running)") |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
83 endif |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
84 call gutentags#trace("") |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 endfunction |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 " }}} |
1a853b37eddf
Add some mostly-working Cscope module (for Windows).
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
88 |