84 lines
2.5 KiB
VimL
84 lines
2.5 KiB
VimL
vim9script
|
|
|
|
const CACHE_KEY_PATTERN = '\v^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+)*$'
|
|
|
|
export def Has(key: string, advanced_key: bool = v:true): bool
|
|
assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1)
|
|
|
|
const tui_cached = get(g:, 'tui_cached', {})
|
|
if !advanced_key
|
|
return has_key(tui_cached, key)
|
|
endif
|
|
|
|
var temp_keys = split(key, '\.')
|
|
var real_key = temp_keys[-1]
|
|
var real_dict = tui_cached
|
|
var index = 0
|
|
for sub_key in temp_keys
|
|
if index < len(temp_keys) - 1
|
|
if !has_key(real_dict, sub_key) || (type(real_dict[sub_key]) != type({}))
|
|
return 0
|
|
endif
|
|
real_dict = real_dict[sub_key]
|
|
endif
|
|
index = index + 1
|
|
endfor
|
|
return has_key(real_dict, real_key)
|
|
enddef
|
|
|
|
export def Get(key: string, default_value: any = v:none, advanced_key: bool = v:true): any
|
|
assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1)
|
|
|
|
const tui_cached = get(g:, 'tui_cached', {})
|
|
if !advanced_key
|
|
return has_key(tui_cached, key) ? tui_cached[key] : default_value
|
|
endif
|
|
|
|
var temp_keys = split(key, '\.')
|
|
var real_key = temp_keys[-1]
|
|
var real_dict = tui_cached
|
|
var index = 0
|
|
for sub_key in temp_keys
|
|
if index < len(temp_keys) - 1
|
|
if !has_key(real_dict, sub_key) || (type(real_dict[sub_key]) != type({}))
|
|
return default_value
|
|
endif
|
|
real_dict = real_dict[sub_key]
|
|
endif
|
|
index = index + 1
|
|
endfor
|
|
return has_key(real_dict, real_key) ? real_dict[real_key] : default_value
|
|
enddef
|
|
|
|
export def Set(key: string, value: any, advanced_key: bool = v:true): any
|
|
assert_true(!empty(key) && !empty(split(key)) && match(key, CACHE_KEY_PATTERN) != -1)
|
|
|
|
final tui_cached = get(g:, 'tui_cached', {})
|
|
if !advanced_key
|
|
tui_cached[key] = value
|
|
return value
|
|
endif
|
|
|
|
var temp_keys = split(key, '\.')
|
|
var real_key = temp_keys[-1]
|
|
var real_dict = tui_cached
|
|
var index = 0
|
|
for sub_key in temp_keys
|
|
if index < len(temp_keys) - 1
|
|
if !has_key(real_dict, sub_key)
|
|
real_dict[sub_key] = {}
|
|
endif
|
|
real_dict = real_dict[sub_key]
|
|
if type(real_dict) != type({})
|
|
throw "tui-util-cached_Set: invalid key - [" .. key .. "]"
|
|
endif
|
|
endif
|
|
index = index + 1
|
|
endfor
|
|
real_dict[real_key] = value
|
|
final g:tui_cached = tui_cached
|
|
|
|
return value
|
|
enddef
|
|
|