summaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-06-07 20:40:30 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-06-07 20:40:30 +0800
commit75f16e1b10a853a10084aa7bf8582259cc1e092e (patch)
tree0844646cd0104fd0f6ea9922f4745a951ad018c2 /script
parent85d497ac617dcb629b991defc23540e9bfa34cbc (diff)
downloadlua-language-server-75f16e1b10a853a10084aa7bf8582259cc1e092e.zip
cleanup
Diffstat (limited to 'script')
-rw-r--r--script/config/config.lua247
-rw-r--r--script/config/template.lua229
2 files changed, 240 insertions, 236 deletions
diff --git a/script/config/config.lua b/script/config/config.lua
index 46e80994..8dd7dc3e 100644
--- a/script/config/config.lua
+++ b/script/config/config.lua
@@ -1,235 +1,10 @@
-local util = require 'utility'
-local define = require 'proto.define'
-local timer = require 'timer'
-local scope = require 'workspace.scope'
+local util = require 'utility'
+local timer = require 'timer'
+local scope = require 'workspace.scope'
+local template = require 'config.template'
---@alias config.source '"client"'|'"path"'|'"local"'
----@class config.unit
----@field caller function
-local mt = {}
-mt.__index = mt
-
-function mt:__call(...)
- self:caller(...)
- return self
-end
-
-function mt:__shr(default)
- self.default = default
- return self
-end
-
-local units = {}
-
-local function register(name, default, checker, loader, caller)
- units[name] = {
- default = default,
- checker = checker,
- loader = loader,
- caller = caller,
- }
-end
-
-local Type = setmetatable({}, { __index = function (_, name)
- local unit = {}
- for k, v in pairs(units[name]) do
- unit[k] = v
- end
- return setmetatable(unit, mt)
-end })
-
-register('Boolean', false, function (self, v)
- return type(v) == 'boolean'
-end, function (self, v)
- return v
-end)
-
-register('Integer', 0, function (self, v)
- return type(v) == 'number'
-end, function (self, v)
- return math.floor(v)
-end)
-
-register('String', '', function (self, v)
- return type(v) == 'string'
-end, function (self, v)
- return tostring(v)
-end)
-
-register('Nil', nil, function (self, v)
- return type(v) == 'nil'
-end, function (self, v)
- return nil
-end)
-
-register('Array', {}, function (self, value)
- return type(value) == 'table'
-end, function (self, value)
- local t = {}
- for _, v in ipairs(value) do
- if self.sub:checker(v) then
- t[#t+1] = self.sub:loader(v)
- end
- end
- return t
-end, function (self, sub)
- self.sub = sub
-end)
-
-register('Hash', {}, function (self, value)
- if type(value) == 'table' then
- if #value == 0 then
- for k, v in pairs(value) do
- if not self.subkey:checker(k)
- or not self.subvalue:checker(v) then
- return false
- end
- end
- else
- if not self.subvalue:checker(true) then
- return false
- end
- for _, v in ipairs(value) do
- if not self.subkey:checker(v) then
- return false
- end
- end
- end
- return true
- end
- if type(value) == 'string' then
- return self.subkey:checker('')
- and self.subvalue:checker(true)
- end
-end, function (self, value)
- if type(value) == 'table' then
- local t = {}
- if #value == 0 then
- for k, v in pairs(value) do
- t[k] = v
- end
- else
- for _, k in pairs(value) do
- t[k] = true
- end
- end
- return t
- end
- if type(value) == 'string' then
- local t = {}
- for s in value:gmatch('[^' .. self.sep .. ']+') do
- t[s] = true
- end
- return t
- end
-end, function (self, subkey, subvalue, sep)
- self.subkey = subkey
- self.subvalue = subvalue
- self.sep = sep
-end)
-
-register('Or', nil, function (self, value)
- for _, sub in ipairs(self.subs) do
- if sub:checker(value) then
- return true
- end
- end
- return false
-end, function (self, value)
- for _, sub in ipairs(self.subs) do
- if sub:checker(value) then
- return sub:loader(value)
- end
- end
-end, function (self, ...)
- self.subs = { ... }
-end)
-
-local Template = {
- ['Lua.runtime.version'] = Type.String >> 'Lua 5.4',
- ['Lua.runtime.path'] = Type.Array(Type.String) >> {
- "?.lua",
- "?/init.lua",
- },
- ['Lua.runtime.pathStrict'] = Type.Boolean >> false,
- ['Lua.runtime.special'] = Type.Hash(Type.String, Type.String),
- ['Lua.runtime.meta'] = Type.String >> '${version} ${language} ${encoding}',
- ['Lua.runtime.unicodeName'] = Type.Boolean,
- ['Lua.runtime.nonstandardSymbol'] = Type.Hash(Type.String, Type.Boolean, ';'),
- ['Lua.runtime.plugin'] = Type.String,
- ['Lua.runtime.fileEncoding'] = Type.String >> 'utf8',
- ['Lua.runtime.builtin'] = Type.Hash(Type.String, Type.String),
- ['Lua.diagnostics.enable'] = Type.Boolean >> true,
- ['Lua.diagnostics.globals'] = Type.Hash(Type.String, Type.Boolean, ';'),
- ['Lua.diagnostics.disable'] = Type.Hash(Type.String, Type.Boolean, ';'),
- ['Lua.diagnostics.severity'] = Type.Hash(Type.String, Type.String)
- >> util.deepCopy(define.DiagnosticDefaultSeverity),
- ['Lua.diagnostics.neededFileStatus'] = Type.Hash(Type.String, Type.String)
- >> util.deepCopy(define.DiagnosticDefaultNeededFileStatus),
- ['Lua.diagnostics.disableScheme'] = Type.Hash(Type.String, Type.Boolean, ';') >> {
- ['git'] = true,
- },
- ['Lua.diagnostics.workspaceDelay'] = Type.Integer >> 5,
- ['Lua.diagnostics.workspaceRate'] = Type.Integer >> 100,
- ['Lua.diagnostics.libraryFiles'] = Type.String >> 'Opened',
- ['Lua.diagnostics.ignoredFiles'] = Type.String >> 'Opened',
- ['Lua.workspace.ignoreDir'] = Type.Array(Type.String),
- ['Lua.workspace.ignoreSubmodules'] = Type.Boolean >> true,
- ['Lua.workspace.useGitIgnore'] = Type.Boolean >> true,
- ['Lua.workspace.maxPreload'] = Type.Integer >> 3000,
- ['Lua.workspace.preloadFileSize'] = Type.Integer >> 500,
- ['Lua.workspace.library'] = Type.Hash(Type.String, Type.Boolean, ';'),
- ['Lua.workspace.checkThirdParty'] = Type.Boolean >> true,
- ['Lua.workspace.userThirdParty'] = Type.Array(Type.String),
- ['Lua.workspace.supportScheme'] = Type.Hash(Type.String, Type.Boolean, ';') >> {
- ['file'] = true,
- ['untitled'] = true,
- ['git'] = true,
- },
- ['Lua.completion.enable'] = Type.Boolean >> true,
- ['Lua.completion.callSnippet'] = Type.String >> 'Disable',
- ['Lua.completion.keywordSnippet'] = Type.String >> 'Replace',
- ['Lua.completion.displayContext'] = Type.Integer >> 0,
- ['Lua.completion.workspaceWord'] = Type.Boolean >> true,
- ['Lua.completion.showWord'] = Type.String >> 'Fallback',
- ['Lua.completion.autoRequire'] = Type.Boolean >> true,
- ['Lua.completion.showParams'] = Type.Boolean >> true,
- ['Lua.completion.requireSeparator'] = Type.String >> '.',
- ['Lua.completion.postfix'] = Type.String >> '@',
- ['Lua.signatureHelp.enable'] = Type.Boolean >> true,
- ['Lua.hover.enable'] = Type.Boolean >> true,
- ['Lua.hover.viewString'] = Type.Boolean >> true,
- ['Lua.hover.viewStringMax'] = Type.Integer >> 1000,
- ['Lua.hover.viewNumber'] = Type.Boolean >> true,
- ['Lua.hover.previewFields'] = Type.Integer >> 20,
- ['Lua.hover.enumsLimit'] = Type.Integer >> 5,
- ['Lua.hover.expandAlias'] = Type.Boolean >> true,
- ['Lua.semantic.enable'] = Type.Boolean >> true,
- ['Lua.semantic.variable'] = Type.Boolean >> true,
- ['Lua.semantic.annotation'] = Type.Boolean >> true,
- ['Lua.semantic.keyword'] = Type.Boolean >> false,
- ['Lua.hint.enable'] = Type.Boolean >> false,
- ['Lua.hint.paramType'] = Type.Boolean >> true,
- ['Lua.hint.setType'] = Type.Boolean >> false,
- ['Lua.hint.paramName'] = Type.String >> 'All',
- ['Lua.hint.await'] = Type.Boolean >> true,
- ['Lua.hint.arrayIndex'] = Type.Boolean >> 'Auto',
- ['Lua.window.statusBar'] = Type.Boolean >> true,
- ['Lua.window.progressBar'] = Type.Boolean >> true,
- ['Lua.format.enable'] = Type.Boolean >> true,
- ['Lua.format.defaultConfig'] = Type.Hash(Type.String, Type.String)
- >> {},
- ['Lua.spell.dict'] = Type.Array(Type.String),
- ['Lua.telemetry.enable'] = Type.Or(Type.Boolean >> false, Type.Nil) >> nil,
-
- -- VSCode
- ['files.associations'] = Type.Hash(Type.String, Type.String),
- ['files.exclude'] = Type.Hash(Type.String, Type.Boolean),
- ['editor.semanticHighlighting.enabled'] = Type.Or(Type.Boolean, Type.String),
- ['editor.acceptSuggestionOnEnter'] = Type.String >> 'on',
-}
-
---@class config.api
local m = {}
m.watchList = {}
@@ -279,7 +54,7 @@ end
---@param key string
---@param value any
function m.setByScope(scp, key, value)
- local unit = Template[key]
+ local unit = template[key]
if not unit then
return false
end
@@ -311,7 +86,7 @@ function m.set(uri, key, value)
end
function m.add(uri, key, value)
- local unit = Template[key]
+ local unit = template[key]
if not unit then
return false
end
@@ -338,7 +113,7 @@ function m.add(uri, key, value)
end
function m.prop(uri, key, prop, value)
- local unit = Template[key]
+ local unit = template[key]
if not unit then
return false
end
@@ -371,7 +146,7 @@ function m.get(uri, key)
local scp = getScope(uri, key)
local value = m.getNowTable(scp)[key]
if value == nil then
- value = Template[key].default
+ value = template[key].default
end
if value == m.NULL then
value = nil
@@ -386,7 +161,7 @@ function m.getRaw(uri, key)
local scp = getScope(uri, key)
local value = m.getRawTable(scp)[key]
if value == nil then
- value = Template[key].default
+ value = template[key].default
end
if value == m.NULL then
value = nil
@@ -423,9 +198,9 @@ function m.update(scp, ...)
if m.nullSymbols[value] then
value = m.NULL
end
- if Template[fullKey] then
+ if template[fullKey] then
m.setByScope(scp, fullKey, value)
- elseif Template['Lua.' .. fullKey] then
+ elseif template['Lua.' .. fullKey] then
m.setByScope(scp, 'Lua.' .. fullKey, value)
elseif type(value) == 'table' then
expand(value, fullKey)
diff --git a/script/config/template.lua b/script/config/template.lua
new file mode 100644
index 00000000..c84a6719
--- /dev/null
+++ b/script/config/template.lua
@@ -0,0 +1,229 @@
+local util = require 'utility'
+local define = require 'proto.define'
+
+---@class config.unit
+---@field caller function
+local mt = {}
+mt.__index = mt
+
+function mt:__call(...)
+ self:caller(...)
+ return self
+end
+
+function mt:__shr(default)
+ self.default = default
+ return self
+end
+
+local units = {}
+
+local function register(name, default, checker, loader, caller)
+ units[name] = {
+ default = default,
+ checker = checker,
+ loader = loader,
+ caller = caller,
+ }
+end
+
+local Type = setmetatable({}, { __index = function (_, name)
+ local unit = {}
+ for k, v in pairs(units[name]) do
+ unit[k] = v
+ end
+ return setmetatable(unit, mt)
+end })
+
+register('Boolean', false, function (self, v)
+ return type(v) == 'boolean'
+end, function (self, v)
+ return v
+end)
+
+register('Integer', 0, function (self, v)
+ return type(v) == 'number'
+end, function (self, v)
+ return math.floor(v)
+end)
+
+register('String', '', function (self, v)
+ return type(v) == 'string'
+end, function (self, v)
+ return tostring(v)
+end)
+
+register('Nil', nil, function (self, v)
+ return type(v) == 'nil'
+end, function (self, v)
+ return nil
+end)
+
+register('Array', {}, function (self, value)
+ return type(value) == 'table'
+end, function (self, value)
+ local t = {}
+ for _, v in ipairs(value) do
+ if self.sub:checker(v) then
+ t[#t+1] = self.sub:loader(v)
+ end
+ end
+ return t
+end, function (self, sub)
+ self.sub = sub
+end)
+
+register('Hash', {}, function (self, value)
+ if type(value) == 'table' then
+ if #value == 0 then
+ for k, v in pairs(value) do
+ if not self.subkey:checker(k)
+ or not self.subvalue:checker(v) then
+ return false
+ end
+ end
+ else
+ if not self.subvalue:checker(true) then
+ return false
+ end
+ for _, v in ipairs(value) do
+ if not self.subkey:checker(v) then
+ return false
+ end
+ end
+ end
+ return true
+ end
+ if type(value) == 'string' then
+ return self.subkey:checker('')
+ and self.subvalue:checker(true)
+ end
+end, function (self, value)
+ if type(value) == 'table' then
+ local t = {}
+ if #value == 0 then
+ for k, v in pairs(value) do
+ t[k] = v
+ end
+ else
+ for _, k in pairs(value) do
+ t[k] = true
+ end
+ end
+ return t
+ end
+ if type(value) == 'string' then
+ local t = {}
+ for s in value:gmatch('[^' .. self.sep .. ']+') do
+ t[s] = true
+ end
+ return t
+ end
+end, function (self, subkey, subvalue, sep)
+ self.subkey = subkey
+ self.subvalue = subvalue
+ self.sep = sep
+end)
+
+register('Or', nil, function (self, value)
+ for _, sub in ipairs(self.subs) do
+ if sub:checker(value) then
+ return true
+ end
+ end
+ return false
+end, function (self, value)
+ for _, sub in ipairs(self.subs) do
+ if sub:checker(value) then
+ return sub:loader(value)
+ end
+ end
+end, function (self, ...)
+ self.subs = { ... }
+end)
+
+local template = {
+ ['Lua.runtime.version'] = Type.String >> 'Lua 5.4',
+ ['Lua.runtime.path'] = Type.Array(Type.String) >> {
+ "?.lua",
+ "?/init.lua",
+ },
+ ['Lua.runtime.pathStrict'] = Type.Boolean >> false,
+ ['Lua.runtime.special'] = Type.Hash(Type.String, Type.String),
+ ['Lua.runtime.meta'] = Type.String >> '${version} ${language} ${encoding}',
+ ['Lua.runtime.unicodeName'] = Type.Boolean,
+ ['Lua.runtime.nonstandardSymbol'] = Type.Hash(Type.String, Type.Boolean, ';'),
+ ['Lua.runtime.plugin'] = Type.String,
+ ['Lua.runtime.fileEncoding'] = Type.String >> 'utf8',
+ ['Lua.runtime.builtin'] = Type.Hash(Type.String, Type.String),
+ ['Lua.diagnostics.enable'] = Type.Boolean >> true,
+ ['Lua.diagnostics.globals'] = Type.Hash(Type.String, Type.Boolean, ';'),
+ ['Lua.diagnostics.disable'] = Type.Hash(Type.String, Type.Boolean, ';'),
+ ['Lua.diagnostics.severity'] = Type.Hash(Type.String, Type.String)
+ >> util.deepCopy(define.DiagnosticDefaultSeverity),
+ ['Lua.diagnostics.neededFileStatus'] = Type.Hash(Type.String, Type.String)
+ >> util.deepCopy(define.DiagnosticDefaultNeededFileStatus),
+ ['Lua.diagnostics.disableScheme'] = Type.Hash(Type.String, Type.Boolean, ';') >> {
+ ['git'] = true,
+ },
+ ['Lua.diagnostics.workspaceDelay'] = Type.Integer >> 5,
+ ['Lua.diagnostics.workspaceRate'] = Type.Integer >> 100,
+ ['Lua.diagnostics.libraryFiles'] = Type.String >> 'Opened',
+ ['Lua.diagnostics.ignoredFiles'] = Type.String >> 'Opened',
+ ['Lua.workspace.ignoreDir'] = Type.Array(Type.String),
+ ['Lua.workspace.ignoreSubmodules'] = Type.Boolean >> true,
+ ['Lua.workspace.useGitIgnore'] = Type.Boolean >> true,
+ ['Lua.workspace.maxPreload'] = Type.Integer >> 3000,
+ ['Lua.workspace.preloadFileSize'] = Type.Integer >> 500,
+ ['Lua.workspace.library'] = Type.Hash(Type.String, Type.Boolean, ';'),
+ ['Lua.workspace.checkThirdParty'] = Type.Boolean >> true,
+ ['Lua.workspace.userThirdParty'] = Type.Array(Type.String),
+ ['Lua.workspace.supportScheme'] = Type.Hash(Type.String, Type.Boolean, ';') >> {
+ ['file'] = true,
+ ['untitled'] = true,
+ ['git'] = true,
+ },
+ ['Lua.completion.enable'] = Type.Boolean >> true,
+ ['Lua.completion.callSnippet'] = Type.String >> 'Disable',
+ ['Lua.completion.keywordSnippet'] = Type.String >> 'Replace',
+ ['Lua.completion.displayContext'] = Type.Integer >> 0,
+ ['Lua.completion.workspaceWord'] = Type.Boolean >> true,
+ ['Lua.completion.showWord'] = Type.String >> 'Fallback',
+ ['Lua.completion.autoRequire'] = Type.Boolean >> true,
+ ['Lua.completion.showParams'] = Type.Boolean >> true,
+ ['Lua.completion.requireSeparator'] = Type.String >> '.',
+ ['Lua.completion.postfix'] = Type.String >> '@',
+ ['Lua.signatureHelp.enable'] = Type.Boolean >> true,
+ ['Lua.hover.enable'] = Type.Boolean >> true,
+ ['Lua.hover.viewString'] = Type.Boolean >> true,
+ ['Lua.hover.viewStringMax'] = Type.Integer >> 1000,
+ ['Lua.hover.viewNumber'] = Type.Boolean >> true,
+ ['Lua.hover.previewFields'] = Type.Integer >> 20,
+ ['Lua.hover.enumsLimit'] = Type.Integer >> 5,
+ ['Lua.hover.expandAlias'] = Type.Boolean >> true,
+ ['Lua.semantic.enable'] = Type.Boolean >> true,
+ ['Lua.semantic.variable'] = Type.Boolean >> true,
+ ['Lua.semantic.annotation'] = Type.Boolean >> true,
+ ['Lua.semantic.keyword'] = Type.Boolean >> false,
+ ['Lua.hint.enable'] = Type.Boolean >> false,
+ ['Lua.hint.paramType'] = Type.Boolean >> true,
+ ['Lua.hint.setType'] = Type.Boolean >> false,
+ ['Lua.hint.paramName'] = Type.String >> 'All',
+ ['Lua.hint.await'] = Type.Boolean >> true,
+ ['Lua.hint.arrayIndex'] = Type.Boolean >> 'Auto',
+ ['Lua.window.statusBar'] = Type.Boolean >> true,
+ ['Lua.window.progressBar'] = Type.Boolean >> true,
+ ['Lua.format.enable'] = Type.Boolean >> true,
+ ['Lua.format.defaultConfig'] = Type.Hash(Type.String, Type.String)
+ >> {},
+ ['Lua.spell.dict'] = Type.Array(Type.String),
+ ['Lua.telemetry.enable'] = Type.Or(Type.Boolean >> false, Type.Nil) >> nil,
+
+ -- VSCode
+ ['files.associations'] = Type.Hash(Type.String, Type.String),
+ ['files.exclude'] = Type.Hash(Type.String, Type.Boolean),
+ ['editor.semanticHighlighting.enabled'] = Type.Or(Type.Boolean, Type.String),
+ ['editor.acceptSuggestionOnEnter'] = Type.String >> 'on',
+}
+
+return template