diff options
-rw-r--r-- | script/config/config.lua | 64 | ||||
-rw-r--r-- | script/provider/provider.lua | 3 |
2 files changed, 64 insertions, 3 deletions
diff --git a/script/config/config.lua b/script/config/config.lua index 542bdcf2..614c3029 100644 --- a/script/config/config.lua +++ b/script/config/config.lua @@ -214,6 +214,22 @@ local Template = { ['editor.acceptSuggestionOnEnter'] = Type.String >> 'on', } +---@alias config.scope '"specified"'|'"folder"'|'"global"' + +local configs = { + specified = {}, + ---@type {uri: uri, config: table}[] + folder = {}, + global = {}, +} + +local rawConfigs = { + specified = {}, + ---@type {uri: uri, config: table}[] + folder = {}, + global = {}, +} + local config = {} local rawConfig = {} @@ -221,6 +237,8 @@ local rawConfig = {} local m = {} m.watchList = {} +m.NULL = {} + local function update(uri, key, value, raw) local oldValue = config[key] config[key] = value @@ -298,6 +316,47 @@ function m.getRaw(key) return rawConfig[key] end +local function convertValue(v) + if v == m.NULL then + return nil + end + return v +end + +---@param uri uri +---@param key string +function m.get2(uri, key) + if configs.specified[key] ~= nil then + return convertValue(configs.specified[key]) + end + if uri then + for _, folder in ipairs(configs.folder) do + if uri:sub(1, #folder.uri) == folder.uri + and folder.config[key] ~= nil then + return convertValue(folder.config[key]) + end + end + end + return convertValue(configs.global[key]) +end + +---@param uri uri +---@param key string +function m.getRaw2(uri, key) + if rawConfigs.specified[key] ~= nil then + return convertValue(rawConfigs.specified[key]) + end + if uri then + for _, folder in ipairs(rawConfigs.folder) do + if uri:sub(1, #folder.uri) == folder.uri + and folder.config[key] ~= nil then + return convertValue(folder.config[key]) + end + end + end + return convertValue(rawConfigs.global[key]) +end + function m.dump() local dump = {} @@ -320,7 +379,10 @@ function m.dump() return dump end -function m.update(uri, new) +---@param scope config.scope +---@param uri uri +---@param new table +function m.update(scope, uri, new) local function expand(t, left) for key, value in pairs(t) do local fullKey = key diff --git a/script/provider/provider.lua b/script/provider/provider.lua index 0991b690..44b63d00 100644 --- a/script/provider/provider.lua +++ b/script/provider/provider.lua @@ -35,7 +35,6 @@ local function updateConfig() -- watch directory filewatch.watch(workspace.getAbsolutePath(CONFIGPATH):gsub('[^/\\]+$', '')) mergeConfig(baseConfig, cfg) - end local rc = cfgLoader.loadRCConfig('.luarc.json') @@ -56,7 +55,7 @@ local function updateConfig() end end - config.update(workspace.rootUri,baseConfig) + config.update('global', workspace.rootUri,baseConfig) log.debug('loaded config dump:', util.dump(baseConfig)) end |