269
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
1 " Pycscope module for Gutentags
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
2
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
3 if !has('cscope')
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
4 throw "Can't enable the pycscope module for Gutentags, this Vim has ".
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
5 \"no support for cscope files."
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
6 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
7
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
8 " Global Options {{{
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
9
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
10 if !exists('g:gutentags_pycscope_executable')
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
11 let g:gutentags_pycscope_executable = 'pycscope'
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
12 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
13
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
14 if !exists('g:gutentags_pyscopefile')
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
15 let g:gutentags_pyscopefile = 'pycscope.out'
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
16 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
17
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
18 if !exists('g:gutentags_auto_add_pycscope')
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
19 let g:gutentags_auto_add_pycscope = 1
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
20 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
21
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
22 " }}}
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
23
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
24 " Gutentags Module Interface {{{
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
25
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
26 let s:runner_exe = gutentags#get_plat_file('update_pyscopedb')
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
27 let s:unix_redir = (&shellredir =~# '%s') ? &shellredir : &shellredir . ' %s'
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
28 let s:added_dbs = []
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
29
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
30 function! gutentags#pycscope#init(project_root) abort
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
31 let l:dbfile_path = gutentags#get_cachefile(
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
32 \a:project_root, g:gutentags_pyscopefile)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
33 let b:gutentags_files['pycscope'] = l:dbfile_path
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
34
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
35 if g:gutentags_auto_add_pycscope && filereadable(l:dbfile_path)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
36 if index(s:added_dbs, l:dbfile_path) < 0
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
37 call add(s:added_dbs, l:dbfile_path)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
38 silent! execute 'cs add ' . fnameescape(l:dbfile_path)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
39 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
40 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
41 endfunction
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
42
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
43 function! gutentags#pycscope#generate(proj_dir, tags_file, gen_opts) abort
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
44 let l:cmd = [s:runner_exe]
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
45 let l:cmd += ['-e', g:gutentags_pycscope_executable]
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
46 let l:cmd += ['-p', a:proj_dir]
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
47 let l:cmd += ['-f', a:tags_file]
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
48 let l:file_list_cmd =
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
49 \ gutentags#get_project_file_list_cmd(a:proj_dir)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
50 if !empty(l:file_list_cmd)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
51 let l:cmd += ['-L', '"' . l:file_list_cmd . '"']
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
52 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
53 let l:cmd = gutentags#make_args(l:cmd)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
54
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
55 call gutentags#trace("Running: " . string(l:cmd))
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
56 call gutentags#trace("In: " . getcwd())
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
57 if !g:gutentags_fake
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
58 let l:job_opts = gutentags#build_default_job_options('pycscope')
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
59 let l:job = gutentags#start_job(l:cmd, l:job_opts)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
60 call gutentags#add_job('pycscope', a:tags_file, l:job)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
61 else
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
62 call gutentags#trace("(fake... not actually running)")
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
63 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
64 endfunction
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
65
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
66 function! gutentags#pycscope#on_job_exit(job, exit_val) abort
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
67 let l:job_idx = gutentags#find_job_index_by_data('pycscope', a:job)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
68 let l:dbfile_path = gutentags#get_job_tags_file('pycscope', l:job_idx)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
69 call gutentags#remove_job('pycscope', l:job_idx)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
70
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
71 if a:exit_val == 0
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
72 if index(s:added_dbs, l:dbfile_path) < 0
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
73 call add(s:added_dbs, l:dbfile_path)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
74 silent! execute 'cs add ' . fnameescape(l:dbfile_path)
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
75 else
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
76 silent! execute 'cs reset'
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
77 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
78 else
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
79 call gutentags#warning(
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
80 \"gutentags: pycscope job failed, returned: ".
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
81 \string(a:exit_val))
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
82 endif
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
83 endfunction
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
84
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
85 " }}}
|
Oliver Harley <oliver.r.harley@gmail.com>
parents:
diff
changeset
|
86
|