changeset 226:f2fd7d5835d9

Place all the `wildignore` exclude patterns in a generated options file.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 11 Nov 2018 21:48:00 -0800
parents 174cfa3cf21a
children c64e8847b4e1
files autoload/gutentags/ctags.vim
diffstat 1 files changed, 31 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/autoload/gutentags/ctags.vim	Sun Nov 11 19:43:03 2018 -0800
+++ b/autoload/gutentags/ctags.vim	Sun Nov 11 21:48:00 2018 -0800
@@ -38,6 +38,8 @@
 let s:did_check_exe = 0
 let s:runner_exe = gutentags#get_plat_file('update_tags')
 let s:unix_redir = (&shellredir =~# '%s') ? &shellredir : &shellredir . ' %s'
+let s:wildignores_options_path = ''
+let s:last_wildignores = ''
 
 function! gutentags#ctags#init(project_root) abort
     " Figure out the path to the tags file.
@@ -147,9 +149,8 @@
         let l:cmd += ['-o', '"' . l:proj_options_file . '"']
     endif
     if g:gutentags_ctags_exclude_wildignore
-        for ign in split(&wildignore, ',')
-            let l:cmd += ['-x', shellescape(ign, 1)]
-        endfor
+        call s:generate_wildignore_options()
+        let l:cmd += ['-x', shellescape('@'.s:wildignores_options_path, 1)]
     endif
     for exc in g:gutentags_ctags_exclude
         let l:cmd += ['-x', '"' . exc . '"']
@@ -165,7 +166,7 @@
     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('ctags')
+        let l:job_opts = gutentags#build_default_job_options('ctags')
         let l:job = gutentags#start_job(l:cmd, l:job_opts)
         call gutentags#add_job('ctags', a:tags_file, l:job)
     else
@@ -197,6 +198,32 @@
     return expand(exepath, 1)
 endfunction
 
+function! s:generate_wildignore_options() abort
+    if s:last_wildignores == &wildignore
+        " The 'wildignore' setting didn't change since last time we did this.
+        call gutentags#trace("Wildignore options file is up to date.")
+        return
+    endif
+
+    if s:wildignores_options_path == ''
+        if empty(g:gutentags_cache_dir)
+            let s:wildignores_options_path = tempname()
+        else
+            let s:wildignores_options_path = 
+                        \gutentags#stripslash(g:gutentags_cache_dir).
+                        \'/_wildignore.options'
+        endif
+    endif
+
+    call gutentags#trace("Generating wildignore options: ".s:wildignores_options_path)
+    let l:opt_lines = []
+    for ign in split(&wildignore, ',')
+        call add(l:opt_lines, '--exclude='.ign)
+    endfor
+    call writefile(l:opt_lines, s:wildignores_options_path)
+    let s:last_wildignores = &wildignore
+endfunction
+
 function! s:process_options_file(proj_dir, path) abort
     if empty(g:gutentags_cache_dir)
         " If we're not using a cache directory to store tag files, we can