Add completion for revision range

This commit is contained in:
Jiacong Fang
2022-04-17 23:43:37 +08:00
parent b7287bd542
commit 07de0b8d9f

View File

@@ -2415,6 +2415,17 @@ function! s:CompleteHeads(dir) abort
\ sort(s:LinesError([a:dir, 'rev-parse', '--symbolic', '--branches', '--tags', '--remotes'])[0]) \ sort(s:LinesError([a:dir, 'rev-parse', '--symbolic', '--branches', '--tags', '--remotes'])[0])
endfunction endfunction
function! s:SplitRevRange(base, pat)
let index = matchend(a:base, a:pat)
if index == -1
return ['', a:base]
endif
let pre = a:base[:index - 1]
let base = a:base[index:]
return [pre, base]
endif
endfunction
function! fugitive#CompleteObject(base, ...) abort function! fugitive#CompleteObject(base, ...) abort
let dir = a:0 == 1 ? a:1 : a:0 >= 3 ? a:3 : s:Dir() let dir = a:0 == 1 ? a:1 : a:0 >= 3 ? a:3 : s:Dir()
let tree = s:Tree(dir) let tree = s:Tree(dir)
@@ -2424,9 +2435,10 @@ function! fugitive#CompleteObject(base, ...) abort
let subdir = strpart(cwd, len(tree) + 1) . '/' let subdir = strpart(cwd, len(tree) + 1) . '/'
endif endif
let base = s:Expand(a:base) let base = s:Expand(a:base)
let [pre, base] = s:SplitRevRange(base, '^[^:]*\/\@<!\.\.\.\=[\/\.]\@!')
if a:base =~# '^!\d*$' && base !~# '^!' if a:base =~# '^!\d*$' && base !~# '^!'
return [base] return [pre . base]
elseif base =~# '^\.\=/\|^:(' || base !~# ':' elseif base =~# '^\.\=/\|^:(' || base !~# ':'
let results = [] let results = []
if base =~# '^refs/' if base =~# '^refs/'
@@ -2442,6 +2454,7 @@ function! fugitive#CompleteObject(base, ...) abort
let results += s:FilterEscape(heads, fnameescape(base)) let results += s:FilterEscape(heads, fnameescape(base))
endif endif
let results += a:0 == 1 || a:0 >= 3 ? fugitive#CompletePath(base, 0, '', dir, a:0 >= 4 ? a:4 : tree) : fugitive#CompletePath(base) let results += a:0 == 1 || a:0 >= 3 ? fugitive#CompletePath(base, 0, '', dir, a:0 >= 4 ? a:4 : tree) : fugitive#CompletePath(base)
let results = map(results, 'pre . v:val')
return results return results
elseif base =~# '^:' elseif base =~# '^:'
@@ -2461,7 +2474,7 @@ function! fugitive#CompleteObject(base, ...) abort
call map(entries,'s:sub(v:val,"^04.*\\zs$","/")') call map(entries,'s:sub(v:val,"^04.*\\zs$","/")')
call map(entries,'parent.s:sub(v:val,".*\t","")') call map(entries,'parent.s:sub(v:val,".*\t","")')
endif endif
return s:FilterEscape(entries, fnameescape(base)) return map(s:FilterEscape(entries, fnameescape(base)), 'pre . v:val')
endfunction endfunction
function! s:CompleteSub(subcommand, A, L, P, ...) abort function! s:CompleteSub(subcommand, A, L, P, ...) abort