1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-09 19:50:06 +08:00
SpaceVim/bundle/gina.vim/autoload/gina/core/meta.vim

56 lines
1.3 KiB
VimL

let s:Cache = vital#gina#import('System.Cache.Memory')
function! gina#core#meta#get(...) abort
let meta = s:meta('%')
return call(meta.get, a:000, meta)
endfunction
function! gina#core#meta#set(...) abort
let meta = s:meta('%')
return call(meta.set, a:000, meta)
endfunction
function! gina#core#meta#has(...) abort
let meta = s:meta('%')
return call(meta.has, a:000, meta)
endfunction
function! gina#core#meta#remove(...) abort
let meta = s:meta('%')
return call(meta.remove, a:000, meta)
endfunction
function! gina#core#meta#clear(...) abort
let meta = s:meta('%')
return call(meta.clear, a:000, meta)
endfunction
function! gina#core#meta#get_or_fail(name) abort
let meta = s:meta('%')
if !meta.has(a:name)
throw gina#core#revelator#critical(printf(
\ 'A required meta value "%s" does not exist on "%s"',
\ a:name,
\ bufname('%'),
\))
endif
return meta.get(a:name)
endfunction
" Private --------------------------------------------------------------------
function! s:meta(expr) abort
let bufnr = bufnr(a:expr)
if !bufexists(bufnr)
" Always return a fresh cache instance
return s:Cache.new()
endif
let meta = getbufvar(bufnr, 'gina_meta', {})
if empty(meta)
let meta = s:Cache.new()
call setbufvar(bufnr, 'gina_meta', meta)
endif
return meta
endfunction