diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autoload/gutentags/pycscope.vim	Mon Feb 04 10:08:25 2019 +0100
@@ -0,0 +1,86 @@
+" Pycscope module for Gutentags
+
+if !has('cscope')
+    throw "Can't enable the pycscope module for Gutentags, this Vim has ".
+                \"no support for cscope files."
+endif
+
+" Global Options {{{
+
+if !exists('g:gutentags_pycscope_executable')
+    let g:gutentags_pycscope_executable = 'pycscope'
+endif
+
+if !exists('g:gutentags_pyscopefile')
+    let g:gutentags_pyscopefile = 'pycscope.out'
+endif
+
+if !exists('g:gutentags_auto_add_pycscope')
+    let g:gutentags_auto_add_pycscope = 1
+endif
+
+" }}}
+
+" Gutentags Module Interface {{{
+
+let s:runner_exe = gutentags#get_plat_file('update_pyscopedb')
+let s:unix_redir = (&shellredir =~# '%s') ? &shellredir : &shellredir . ' %s'
+let s:added_dbs = []
+
+function! gutentags#pycscope#init(project_root) abort
+    let l:dbfile_path = gutentags#get_cachefile(
+                \a:project_root, g:gutentags_pyscopefile)
+    let b:gutentags_files['pycscope'] = l:dbfile_path
+
+    if g:gutentags_auto_add_pycscope && filereadable(l:dbfile_path)
+        if index(s:added_dbs, l:dbfile_path) < 0
+            call add(s:added_dbs, l:dbfile_path)
+            silent! execute 'cs add ' . fnameescape(l:dbfile_path)
+        endif
+    endif
+endfunction
+
+function! gutentags#pycscope#generate(proj_dir, tags_file, gen_opts) abort
+    let l:cmd = [s:runner_exe]
+    let l:cmd += ['-e', g:gutentags_pycscope_executable]
+    let l:cmd += ['-p', a:proj_dir]
+    let l:cmd += ['-f', a:tags_file]
+    let l:file_list_cmd =
+        \ gutentags#get_project_file_list_cmd(a:proj_dir)
+    if !empty(l:file_list_cmd)
+        let l:cmd += ['-L', '"' . l:file_list_cmd . '"']
+    endif
+    let l:cmd = gutentags#make_args(l:cmd)
+
+    call gutentags#trace("Running: " . string(l:cmd))
+    call gutentags#trace("In:      " . getcwd())
+    if !g:gutentags_fake
+		let l:job_opts = gutentags#build_default_job_options('pycscope')
+        let l:job = gutentags#start_job(l:cmd, l:job_opts)
+        call gutentags#add_job('pycscope', a:tags_file, l:job)
+    else
+        call gutentags#trace("(fake... not actually running)")
+    endif
+endfunction
+
+function! gutentags#pycscope#on_job_exit(job, exit_val) abort
+    let l:job_idx = gutentags#find_job_index_by_data('pycscope', a:job)
+    let l:dbfile_path = gutentags#get_job_tags_file('pycscope', l:job_idx)
+    call gutentags#remove_job('pycscope', l:job_idx)
+
+    if a:exit_val == 0
+        if index(s:added_dbs, l:dbfile_path) < 0
+            call add(s:added_dbs, l:dbfile_path)
+            silent! execute 'cs add ' . fnameescape(l:dbfile_path)
+        else
+            silent! execute 'cs reset'
+        endif
+    else
+        call gutentags#warning(
+                    \"gutentags: pycscope job failed, returned: ".
+                    \string(a:exit_val))
+    endif
+endfunction
+
+" }}}
+