aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--autoload/xolox/easytags.vim74
1 files changed, 40 insertions, 34 deletions
diff --git a/autoload/xolox/easytags.vim b/autoload/xolox/easytags.vim
index 038cea6..351bf13 100644
--- a/autoload/xolox/easytags.vim
+++ b/autoload/xolox/easytags.vim
@@ -1,9 +1,9 @@
" Vim script
" Author: Peter Odding <peter@peterodding.com>
-" Last Change: April 18, 2013
+" Last Change: April 19, 2013
" URL: http://peterodding.com/code/vim/easytags/
-let g:xolox#easytags#version = '2.8.2'
+let g:xolox#easytags#version = '2.9'
" Public interface through (automatic) commands. {{{1
@@ -204,38 +204,6 @@ function! s:prep_cmdline(cfile, tagsfile, firstrun, arguments, context) " {{{3
return have_args ? join(cmdline) : ''
endfunction
-if exists('*sha256')
-function! s:get_fingerprint(cfile, output)
- return sha256(a:output)
-endfunction
-else
-function! s:get_fingerprint(cfile, output)
- " Don't want to re-implement a costly hashing function in Vimscript. Just
- " handle files that never had any tags.
- if empty(a:output)
- return get(s:fingerprints, a:cfile, 1)
- else
- return ''
- endif
-endfunction
-endif
-
-let s:fingerprints = {}
-function! s:has_updates(cfile, output)
- if empty(a:cfile)
- " The cache doesn't work when tags aren't created for the current file.
- return 1
- endif
-
- let fingerprint = s:get_fingerprint(a:cfile, a:output)
- if ! empty(fingerprint) && get(s:fingerprints, a:cfile, '') ==# fingerprint
- return 0
- endif
-
- let s:fingerprints[a:cfile] = fingerprint
- return 1
-endfunction
-
function! s:run_ctags(starttime, cfile, tagsfile, firstrun, cmdline) " {{{3
let lines = []
let has_updates = 1
@@ -266,6 +234,44 @@ function! s:run_ctags(starttime, cfile, tagsfile, firstrun, cmdline) " {{{3
return [xolox#easytags#parse_entries(lines), has_updates]
endfunction
+" Vim 7.3 now has the sha256() function. We use it below to recognize when the
+" tags haven't changed from the last time we ran Exuberant Ctags on a file; in
+" this case the tags file doesn't have to be written to disk which makes the
+" plug-in much faster for a very common case.
+
+let s:fingerprints = {}
+
+function! s:has_updates(cfile, output)
+ if empty(a:cfile)
+ " The cache doesn't work when tags aren't created for the current file.
+ return 1
+ endif
+ let fingerprint = s:get_fingerprint(a:cfile, a:output)
+ call xolox#misc#msg#debug("easytags.vim %s: Fingerprint of tags in %s is %s.", g:xolox#easytags#version, a:cfile, string(fingerprint))
+ if !empty(fingerprint) && get(s:fingerprints, a:cfile, '') ==# fingerprint
+ call xolox#misc#msg#debug("easytags.vim %s: The fingerprint didn't change! We can take a shortcut :-)", g:xolox#easytags#version)
+ return 0
+ endif
+ let s:fingerprints[a:cfile] = fingerprint
+ return 1
+endfunction
+
+if exists('*sha256')
+ function! s:get_fingerprint(cfile, output)
+ return sha256(a:output)
+ endfunction
+else
+ function! s:get_fingerprint(cfile, output)
+ " Don't want to re-implement a costly hashing function in Vimscript. Just
+ " handle files that never had any tags.
+ if empty(a:output)
+ return get(s:fingerprints, a:cfile, 1)
+ else
+ return ''
+ endif
+ endfunction
+endif
+
function! s:filter_merge_tags(filter_tags, tagsfile, output, context) " {{{3
let [headers, entries] = xolox#easytags#read_tagsfile(a:tagsfile)
let filters = []