1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 16:50:05 +08:00
SpaceVim/bundle/gina.vim/autoload/gina/complete/common.vim

102 lines
2.7 KiB
VimL
Vendored

let s:Cache = vital#gina#import('System.Cache.Memory')
let s:Path = vital#gina#import('System.Filepath')
function! gina#complete#common#opener(arglead, cmdline, cursorpos) abort
if a:arglead !~# '^--opener='
return []
endif
let candidates = [
\ 'split',
\ 'vsplit',
\ 'tabedit',
\ 'pedit',
\]
let prefix = '--opener='
return gina#util#filter(a:arglead, map(candidates, 'prefix . v:val'))
endfunction
function! gina#complete#common#treeish(arglead, cmdline, cursorpos) abort
if a:arglead =~# '^[^:]*:'
let revision = matchstr(a:arglead, '^[^:]*\ze:')
let candidates = gina#complete#filename#tracked(
\ matchstr(a:arglead, '^[^:]*:\zs.*'),
\ a:cmdline,
\ a:cursorpos,
\ revision,
\)
return map(candidates, 'revision . '':'' . v:val')
else
let candidates = gina#complete#range#any(a:arglead, a:cmdline, a:cursorpos)
return map(candidates, 'v:val . '':''')
endif
endfunction
function! gina#complete#common#command(arglead, cmdline, cursorpos) abort
let cache = s:get_cache()
if !cache.has('command_names')
call cache.set('command_names', s:get_command_names())
endif
let command_names = cache.get('command_names')
return gina#util#filter(a:arglead, command_names, '^_')
endfunction
function! gina#complete#common#raw_command(arglead, cmdline, cursorpos) abort
return gina#util#filter(a:arglead, [
\ 'add',
\ 'bisect',
\ 'branch',
\ 'checkout',
\ 'clone',
\ 'commit',
\ 'diff',
\ 'fetch',
\ 'grep',
\ 'init',
\ 'log',
\ 'merge',
\ 'mv',
\ 'pull',
\ 'push',
\ 'rebase',
\ 'reset',
\ 'restore',
\ 'rm',
\ 'show',
\ 'status',
\ 'switch',
\ 'tag',
\])
endfunction
function! gina#complete#common#remote(arglead, cmdline, cursorpos) abort
let git = gina#core#get_or_fail()
let result = gina#process#call(git, ['remote'])
if result.status
return []
endif
return gina#util#filter(a:arglead, result.stdout)
endfunction
" Private --------------------------------------------------------------------
function! s:get_cache() abort
if exists('s:cache')
return s:cache
endif
let s:cache = s:Cache.new()
return s:cache
endfunction
function! s:get_command_names() abort
let suffix = s:Path.realpath('autoload/gina/command/*.vim')
let command_names = []
for runtimepath in split(&runtimepath, ',')
let names = map(
\ glob(s:Path.join(runtimepath, suffix), 0, 1),
\ 'matchstr(fnamemodify(v:val, '':t''), ''^.\+\ze\.vim$'')',
\)
call extend(command_names, names)
endfor
return sort(command_names)
endfunction