mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-09 19:50:06 +08:00
56 lines
1.3 KiB
VimL
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
|