summaryrefslogtreecommitdiff
path: root/script/config/config.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/config/config.lua')
-rw-r--r--script/config/config.lua64
1 files changed, 63 insertions, 1 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