1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-04 02:20:04 +08:00
SpaceVim/bundle/gina.vim/autoload/gina/custom/command.vim

37 lines
1.2 KiB
VimL
Raw Normal View History

let s:t_number = type(0)
function! gina#custom#command#option(scheme, query, ...) abort
if a:query !~# '^--\?\S\+\%(|--\?\S\+\)*$'
throw gina#core#revelator#error(
\ 'Invalid query. See :h gina#custom#command#option'
\)
endif
let value = get(a:000, 0, 1)
let remover = type(value) == s:t_number ? s:build_remover(a:query) : ''
let preference = gina#custom#preference(a:scheme, 0)
call add(preference.command.options, [a:query, value, remover])
endfunction
function! gina#custom#command#alias(scheme, alias, ...) abort
if a:scheme =~# '^/'
throw gina#core#revelator#error(
\ '/{pattern} cannot be used to define a command alias'
\)
endif
let preference = gina#custom#preference(a:alias, 0)
let preference.command.origin = a:scheme
let preference.command.raw = get(a:000, 0, 0)
endfunction
" Private --------------------------------------------------------------------
function! s:build_remover(query) abort
let terms = split(a:query, '|')
let names = map(copy(terms), 'matchstr(v:val, ''^--\?\zs\S\+'')')
let remover = map(
\ range(len(terms)),
\ '(terms[v:val] =~# ''^--'' ? ''--no-'' : ''-!'') . names[v:val]'
\)
return join(remover, '|')
endfunction