2022-07-02 14:37:50 +02:00
|
|
|
local log = require("ltex_extra.src.log")
|
|
|
|
|
|
|
|
local inspect = require("ltex_extra.src.utils").inspect
|
|
|
|
local writeFile = require("ltex_extra.src.utils").writeFile
|
|
|
|
local loadFile = require("ltex_extra.src.utils").readFile
|
|
|
|
|
|
|
|
local types = {
|
|
|
|
["dict"] = "dictionary",
|
|
|
|
["dRules"] = "disabledRules",
|
2023-04-29 12:01:29 +02:00
|
|
|
["hRules"] = "hiddenFalsePositives",
|
|
|
|
["language"] = "language"
|
2022-07-02 14:37:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
local function catch_ltex()
|
|
|
|
log.trace("catch_ltex")
|
|
|
|
local buf_clients = vim.lsp.buf_get_clients()
|
|
|
|
local client = nil
|
|
|
|
for _, lsp in ipairs(buf_clients) do
|
|
|
|
if lsp.name == "ltex" then client = lsp end
|
|
|
|
end
|
|
|
|
return client
|
|
|
|
end
|
|
|
|
|
2023-04-29 12:01:29 +02:00
|
|
|
local function update_language(client, lang)
|
|
|
|
log.trace("update_language")
|
|
|
|
if not client.config.settings.ltex.language then
|
|
|
|
client.config.settings.ltex.language = {}
|
|
|
|
end
|
|
|
|
client.config.settings.ltex.language = lang
|
|
|
|
log.debug(vim.inspect(client.config.settings.ltex.language))
|
|
|
|
return client.notify("workspace/didChangeConfiguration", client.config.settings)
|
|
|
|
end
|
|
|
|
|
2022-07-02 14:37:50 +02:00
|
|
|
local function update_dictionary(client, lang)
|
|
|
|
log.trace("update_dictionary")
|
|
|
|
if not client.config.settings.ltex.dictionary then
|
|
|
|
client.config.settings.ltex.dictionary = {}
|
|
|
|
end
|
|
|
|
client.config.settings.ltex.dictionary[lang] = loadFile(types.dict, lang)
|
|
|
|
log.debug(inspect(client.config.settings.ltex.dictionary))
|
|
|
|
return client.notify('workspace/didChangeConfiguration', client.config.settings)
|
|
|
|
end
|
|
|
|
|
|
|
|
local function update_disabledRules(client, lang)
|
|
|
|
log.trace("update_disabledRules")
|
|
|
|
if not client.config.settings.ltex.disabledRules then
|
|
|
|
client.config.settings.ltex.disabledRules = {}
|
|
|
|
end
|
|
|
|
client.config.settings.ltex.disabledRules[lang] = loadFile(types.dRules, lang)
|
|
|
|
log.debug(inspect(client.config.settings.ltex.disabledRules))
|
|
|
|
return client.notify('workspace/didChangeConfiguration', client.config.settings)
|
|
|
|
end
|
|
|
|
|
|
|
|
local function update_hiddenFalsePositive(client, lang)
|
|
|
|
log.trace("update_hiddenFalsePositive")
|
|
|
|
if not client.config.settings.ltex.hiddenFalsePositives then
|
|
|
|
client.config.settings.ltex.hiddenFalsePositives = {}
|
|
|
|
end
|
|
|
|
client.config.settings.ltex.hiddenFalsePositives[lang] = loadFile(types.hRules, lang)
|
|
|
|
log.debug(inspect(client.config.settings.ltex.hiddenFalsePositives))
|
|
|
|
return client.notify('workspace/didChangeConfiguration', client.config.settings)
|
|
|
|
end
|
|
|
|
|
|
|
|
local M = {}
|
|
|
|
|
|
|
|
M.updateConfig = function(configtype, lang)
|
|
|
|
log.trace("updateConfig")
|
|
|
|
local client = catch_ltex()
|
|
|
|
if client then
|
|
|
|
if configtype == types.dict then
|
|
|
|
update_dictionary(client, lang)
|
|
|
|
elseif configtype == types.dRules then
|
|
|
|
update_disabledRules(client, lang)
|
|
|
|
elseif configtype == types.hRules then
|
|
|
|
update_hiddenFalsePositive(client, lang)
|
2023-04-29 12:01:29 +02:00
|
|
|
elseif configtype == types.language then
|
|
|
|
update_language(client, lang)
|
2022-07-02 14:37:50 +02:00
|
|
|
else
|
|
|
|
log.fmt_error("Config type unknown")
|
|
|
|
return vim.notify("Config type unknown")
|
|
|
|
end
|
|
|
|
else
|
|
|
|
log.fmt_error("Error catching ltex client")
|
|
|
|
return vim.notify("Error catching ltex client")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
M.updateConfigFull = function(langs)
|
|
|
|
log.trace("updateConfigFull")
|
|
|
|
langs = langs or package.loaded.ltex_extra.opts.load_langs
|
|
|
|
for _, lang in pairs(langs) do
|
|
|
|
log.fmt_trace("Loading %s", lang)
|
|
|
|
M.updateConfig(types.dict, lang)
|
|
|
|
M.updateConfig(types.dRules, lang)
|
|
|
|
M.updateConfig(types.hRules, lang)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
M.addToDictionary = function(command)
|
|
|
|
log.trace("addToDictionary")
|
|
|
|
local args = command.arguments[1].words
|
|
|
|
for lang, words in pairs(args) do
|
|
|
|
log.fmt_debug("Lang: %s Words: %s", inspect(lang), inspect(words))
|
|
|
|
writeFile(types.dict, lang, words)
|
|
|
|
M.updateConfig(types.dict, lang)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
M.disableRules = function(command)
|
|
|
|
log.trace("disableRules")
|
|
|
|
local args = command.arguments[1].ruleIds
|
|
|
|
for lang, rules in pairs(args) do
|
|
|
|
log.fmt_debug("Lang: %s Rules: %s", inspect(lang), inspect(rules))
|
|
|
|
writeFile(types.dRules, lang, rules)
|
|
|
|
M.updateConfig(types.dRules, lang)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
M.hideFalsePositives = function(command)
|
|
|
|
log.trace("hideFalsePositives")
|
|
|
|
local args = command.arguments[1].falsePositives
|
|
|
|
for lang, rules in pairs(args) do
|
|
|
|
log.fmt_debug("Lang: %s Rules: %s", inspect(lang), inspect(rules))
|
|
|
|
writeFile(types.hRules, lang, rules)
|
|
|
|
M.updateConfig(types.hRules, lang)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2023-04-29 12:01:29 +02:00
|
|
|
function M.switchLanguage(lang)
|
|
|
|
log.trace("language")
|
|
|
|
local client = catch_ltex()
|
|
|
|
if client then
|
|
|
|
M.updateConfig(types.language, lang)
|
|
|
|
else
|
|
|
|
return error("Error catching ltex client", 1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-07-02 14:37:50 +02:00
|
|
|
return M
|