summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--script/config/config.lua64
-rw-r--r--script/provider/provider.lua3
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