motiejus/dotfiles

Unnamed repository; edit this file 'description' to name the repository.
git clone https://git.jakstys.lt/motiejus/dotfiles.git
Log | Tree | Refs | README | LICENSE

commit b8ba07f7d86dfa3efaee9c1d5daebe3927b784b4 (tree)
parent f58ac20359064434ab7b9e7419fac59c3af00c35
Author: Tim Pope <code@tpope.net>
Date:   Sat,  7 Aug 2021 15:31:22 -0400

Improve flexibility of public API argument order

This allows tomfoolery like FugitiveConfig(dir)->FugitiveConfigGet(key).
I'm not sure I want to officially endorse this usage, but if nothing
else it makes interactive debugging a bit more fluid.

Diffstat:
Mautoload/fugitive.vim | 41+++++++++++++++++++++++++++++------------
Mplugin/fugitive.vim | 25+++++++++++++++++++++----
2 files changed, 50 insertions(+), 16 deletions(-)

diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim @@ -420,11 +420,16 @@ function! fugitive#PrepareDirEnvGitArgv(...) abort throw 'fugitive: Git 1.8.5 or higher required' endif let git = s:GitCmd() - if a:0 && type(a:1) ==# type([]) - let cmd = a:000[1:-1] + a:1 - else - let cmd = copy(a:000) - endif + let list_args = [] + let cmd = [] + for arg in a:000 + if type(arg) ==# type([]) + call extend(list_args, arg) + else + call add(cmd, arg) + endif + endfor + call extend(cmd, list_args) let env = {} let i = 0 while i < len(cmd) @@ -675,7 +680,7 @@ function! fugitive#Config(...) abort let name = '' let default = get(a:, 3, '') if a:0 >= 2 && type(a:2) == type({}) && has_key(a:2, 'GetAll') - return fugitive#ConfigGetAll(a:1, a:2) + return get(fugitive#ConfigGetAll(a:1, a:2), 0, default) elseif a:0 >= 2 let dir = s:Dir(a:2) let name = a:1 @@ -718,20 +723,32 @@ function! fugitive#Config(...) abort endfunction function! fugitive#ConfigGetAll(name, ...) abort - let config = fugitive#Config(a:0 ? a:1 : s:Dir()) - let name = substitute(a:name, '^[^.]\+\|[^.]\+$', '\L&', 'g') + if type(a:name) !=# type('') && a:0 + let config = fugitive#Config(a:0) + let name = a:1 + else + let config = fugitive#Config(a:0 ? a:1 : s:Dir()) + let name = a:name + endif + let name = substitute(name, '^[^.]\+\|[^.]\+$', '\L&', 'g') return copy(get(config, name, [])) endfunction function! fugitive#ConfigGetRegexp(pattern, ...) abort - let config = fugitive#Config(a:0 ? a:1 : s:Dir()) - let filtered = map(filter(copy(config), 'v:key =~# "\\." && v:key =~# a:pattern'), 'copy(v:val)') - if a:pattern !~# '\\\@<!\%(\\\\\)*\\z[se]' + if type(a:pattern) !=# type('') && a:0 + let config = fugitive#Config(a:0) + let pattern = a:1 + else + let config = fugitive#Config(a:0 ? a:1 : s:Dir()) + let pattern = a:pattern + endif + let filtered = map(filter(copy(config), 'v:key =~# "\\." && v:key =~# pattern'), 'copy(v:val)') + if pattern !~# '\\\@<!\%(\\\\\)*\\z[se]' return filtered endif let transformed = {} for [k, v] in items(filtered) - let k = matchstr(k, a:pattern) + let k = matchstr(k, pattern) if len(k) let transformed[k] = v endif diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim @@ -72,11 +72,19 @@ endfunction " An optional second argument provides the Git dir, or the buffer number of a " buffer with a Git dir. The default is the current buffer. function! FugitiveFind(...) abort - return fugitive#Find(a:0 ? a:1 : bufnr(''), FugitiveGitDir(a:0 > 1 ? a:2 : -1)) + if a:0 && type(a:1) ==# type({}) + return call('fugitive#Find', a:000[1:-1] + [FugitiveGitDir(a:1)]) + else + return fugitive#Find(a:0 ? a:1 : bufnr(''), FugitiveGitDir(a:0 > 1 ? a:2 : -1)) + endif endfunction function! FugitivePath(...) abort - if a:0 > 1 + if a:0 > 2 && type(a:1) ==# type({}) + return fugitive#Path(a:2, a:3, FugitiveGitDir(a:1)) + elseif a:0 && type(a:1) ==# type({}) + return FugitiveReal(a:0 > 1 ? a:2 : @%) + elseif a:0 > 1 return fugitive#Path(a:1, a:2, FugitiveGitDir(a:0 > 2 ? a:3 : -1)) else return FugitiveReal(a:0 ? a:1 : @%) @@ -182,11 +190,20 @@ endfunction " An optional second argument provides the Git dir, or the buffer number of a " buffer with a Git dir. The default is the current buffer. function! FugitiveHead(...) abort - let dir = FugitiveGitDir(a:0 > 1 ? a:2 : -1) + if a:0 && type(a:1) ==# type({}) + let dir = FugitiveGitDir(a:1) + let arg = get(a:, 2, 0) + elseif a:0 > 1 + let dir = FugitiveGitDir(a:2) + let arg = a:1 + else + let dir = FugitiveGitDir() + let args = get(a:, 1, 0) + endif if empty(dir) return '' endif - return fugitive#Head(a:0 ? a:1 : 0, dir) + return fugitive#Head(arg, dir) endfunction function! FugitiveStatusline(...) abort