neovim-confs/lua/custom/plugins/ltex.lua
2025-06-24 11:08:20 +02:00

100 lines
2.6 KiB
Lua

local utils = require 'custom.utils'
local ltex_fts = {
'bibtex',
'bib',
'tex',
'typst',
'latex',
'gitcommit',
'markdown',
'org',
'restructuredtext',
'rsweave',
'quarto',
'rmd',
'context',
'text',
'html',
'pandoc',
'xhtml',
'plaintex',
'quarto',
'mail',
'mdx',
'rmd',
'rnoweb',
'rst',
}
local map = function(keys, func, desc)
vim.keymap.set('n', keys, func, { buffer = vim.buf, desc = 'LSP[LTEX]: ' .. desc })
end
LTEX_SETTINGS = {
capabilities = CAPABILITIES,
on_attach = function(client, bufnr)
DEFAULT_ON_ATTACH(client, bufnr)
end,
autostart = false,
filetypes = ltex_fts,
settings = {
ltex = {
checkFrequency = 'save', -- shut up while i'm just editing, see <https://github.com/folke/noice.nvim/issues/166>
-- specific language (such as en-GB or de-DE is recommended, but I
-- want multilingual)
language = 'auto',
enabled = ltex_fts,
additionalRules = {
enablePickyRules = true,
-- thats cool, but often adds diagnostics in
-- places where a german might confuse words that are similar
-- between english and german REGARDLESS of context. I seem to use the
-- english words only in the proper contexts, so leaving this on
-- just adds annoying hints like 'Hinweis: "list/NN.*" (English) bedeutet "Liste",
-- "Verzeichnis" (German). Meinten Sie vielleicht 'cunning', 'trick'?'
-- everytime I use the word "list". I liked that this makes the hints be
-- in german regardless of the language I'm working in through...
motherTongue = 'de',
},
},
},
}
-- load token and additional languagetool items later if specified
local do_not_use_api_key = true
local has_api_key, apiKey = utils.try_require 'custom.secret.languagetool'
if not do_not_use_api_key and has_api_key and apiKey ~= '' then
LTEX_SETTINGS = vim.tbl_deep_extend('keep', LTEX_SETTINGS, {
settings = {
languageToolOrg = {
apiKey = apiKey,
username = 'accounts@cscherr.de',
},
languageToolHttpServerUrl = 'https://api.languagetoolplus.com/',
},
})
else
if not do_not_use_api_key then
print 'apiKey for ltex/languagetool is not specified'
end
end
return {
'barreiroleo/ltex_extra.nvim',
ft = ltex_fts,
dependencies = { 'neovim/nvim-lspconfig' },
config = function()
require('ltex_extra').setup {
load_langs = { 'en-US', 'de-DE' },
init_check = true,
server_opts = LTEX_SETTINGS, -- or use lspconfig regularly
}
map('<leader>tS', function()
vim.opt.spell = true -- manually enable spell with `set spell` or `<leader>ts`
vim.opt.spelllang = 'en,de_de'
vim.opt.spellsuggest = 'double,50,timeout:5000'
vim.cmd 'LspStart ltex'
end, 'Enable spell checking with languagetool')
end,
}