dotfiles/nvim/lua/ltex_extra/src/commands-lsp.lua

140 lines
4.6 KiB
Lua

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",
["hRules"] = "hiddenFalsePositives",
["language"] = "language"
}
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
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
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)
elseif configtype == types.language then
update_language(client, lang)
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
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
return M