dotfiles-ansible/roles/config/files/nvim/lua/user/modules/lsp/config/null-ls.lua

120 lines
4.0 KiB
Lua

local linters_path = vim.fn.stdpath('data') .. '/lint'
local null_ls = require('null-ls')
local potential_cspell_files = {
'.cspell.json',
'cspell.json',
'.cSpell.json',
'cSpell.json',
'cspell.config.js',
'cspell.config.cjs',
'cspell.config.json',
'cspell.config.yaml',
'cspell.config.yml',
'cspell.yaml',
'cspell.yml',
}
local function extra_cspell_args()
local root_dir = require('null-ls.utils').get_root()
for _, name in ipairs(potential_cspell_files) do
local target_file = root_dir .. '/' .. name
if vim.fn.filereadable(target_file) == 1 then
return { '--config', target_file }
end
end
return { '--locale', 'en' }
end
local sources = {
formatting = {
clang_format = { filetypes = { 'c', 'cpp' } },
cmake_format = { command = linters_path .. '/cmake_format/venv/bin/cmake-format' },
'fish_indent',
'jq',
-- prettier = { command = linters_path .. '/prettier/node_modules/.bin/prettier' },
-- 'qmlformat',
shfmt = { command = linters_path .. '/shfmt/shfmt' },
stylua = {
condition = function(utils)
return utils.root_has_file { 'stylua.toml', '.stylua.toml' }
end,
},
-- stylelint = { command = linters_path .. '/stylelint/node_modules/.bin/stylelint' },
-- codespell = { command = linters_path .. '/codespell/venv/bin/codespell' },
},
diagnostics = {
'fish',
-- 'yamllint',
-- 'shellcheck',
-- 'typos',
-- codespell = { command = linters_path .. '/codespell/venv/bin/codespell' },
cspell = {
command = linters_path .. '/cspell/node_modules/.bin/cspell',
extra_args = extra_cspell_args(),
condition = function(utils)
return utils.root_has_file(potential_cspell_files)
end,
},
'hadolint',
-- 'luacheck',
'cppcheck',
-- gitlint = { command = linters_path .. '/gitlint/venv/bin/gitlint' },
-- write_good = {
-- filetypes = { 'markdown', 'org', 'asciidoc', 'org', 'asciidoc' },
-- command = linters_path .. '/write_good/node_modules/.bin/write-good',
-- },
-- markdownlint = { command = linters_path .. '/markdownlint/node_modules/.bin/markdownlint' },
-- proselint = {
-- filetypes = { 'org', 'tex', 'markdown', 'asciidoc' },
-- command = linters_path .. '/proselint/venv/bin/proselint',
-- },
-- 'qmllint',
selene = {
condition = function(utils)
return utils.root_has_file('selene.toml')
end,
},
-- vale = { command = linters_path .. '/vale/vale' },
vint = { command = linters_path .. '/vint/venv/bin/vint' },
-- stylelint = { command = linters_path .. '/stylelint/node_modules/.bin/stylelint' },
},
-- hover = {
-- 'dictionary' -- get word definition from dictionaryapi.dev
-- },
code_actions = {
-- proselint = {
-- filetypes = { 'org', 'tex', 'markdown', 'asciidoc' },
-- command = linters_path .. '/proselint/venv/bin/proselint',
-- },
-- 'shellcheck',
-- 'typos',
},
}
local function gen_sources(tbl_sources)
local sources_config = {}
for kind, kind_sources in pairs(tbl_sources) do
for index, config in pairs(kind_sources) do
local source_config = nil
if type(config) == 'string' then
source_config = null_ls.builtins[kind][config]
elseif type(config) == 'table' then
source_config = null_ls.builtins[kind][index].with(config)
end
table.insert(sources_config, source_config)
end
end
return sources_config
end
null_ls.setup {
sources = gen_sources(sources),
on_attach = require('user.modules.lsp.utils.lsp_helpers').common_on_attach,
update_on_insert = false,
}