My dotfiles. Period.

cscope.vim 2.8KB

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