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