dotfiles/symlinks/config/nvim/lua/esensar/lsp/diagnostic.lua

103 lines
2.5 KiB
Lua

-------------------------------------------------------------------------------
-- - LSP diagnostics config -
-------------------------------------------------------------------------------
require("formatter").setup({
filetype = {
python = {
require("formatter.filetypes.python").isort,
require("formatter.filetypes.python").autopep8,
},
kotlin = {
require("formatter.filetypes.kotlin").ktlint,
},
cpp = {
require("formatter.filetypes.cpp").clangformat,
},
c = {
require("formatter.filetypes.c").clangformat,
},
cmake = {
require("formatter.filetypes.cmake").cmakeformat,
},
lua = {
require("formatter.filetypes.lua").stylua,
},
dart = {
require("formatter.filetypes.dart").dartformat,
},
go = {
require("formatter.filetypes.go").gofmt,
},
rust = {
require("formatter.filetypes.rust").rustfmt,
},
zig = {
require("formatter.filetypes.zig").zigfmt,
},
java = {
require("esensar.lsp.formatters.clang-format-java"),
},
godot = {
require("esensar.lsp.formatters.gdformat"),
},
["*"] = {
require("formatter.filetypes.any").remove_trailing_whitespace,
},
},
})
require("lint").linters_by_ft = {
python = { "flake8" },
kotlin = { "ktlint" },
clojure = { "clj_kondo" },
c = { "clang_check" },
cpp = { "clang_check" },
lua = { "luacheck" },
gdscript = { "gdlint" },
}
require("lint").linters.misspell = {
name = "Misspell",
stdin = true,
cmd = "misspell",
parser = require("lint.parser").from_pattern("(%w+):(%d+):(%d+):(.+)", { "file", "lnum", "col", "message" }),
}
require("lint").linters.gdlint = {
name = "GDLint",
cmd = "gdlint",
stdin = true,
args = {
function()
vim.fn.expand("%")
end,
},
stream = "stderr",
parser = require("lint.parser").from_pattern("(.+):(%d+): Error: (.*)", { "file", "lnum", "message" }),
}
vim.keymap.set("n", "]w", vim.diagnostic.goto_next)
vim.keymap.set("n", "[w", vim.diagnostic.goto_prev)
vim.api.nvim_create_user_command(
"Warnings",
vim.diagnostic.setqflist,
{ desc = "Show all LSP project warning in a quickfix list" }
)
vim.api.nvim_create_user_command(
"WarningsLoc",
vim.diagnostic.setloclist,
{ desc = "Show LSP buffer warnings in a location list" }
)
vim.api.nvim_create_user_command("Format", vim.lsp.buf.format, { desc = "Format current buffer using LSP" })
-- Auto linting
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
callback = function()
vim.cmd("FormatWrite")
require("lint").try_lint()
require("lint").try_lint({ "codespell" })
require("lint").try_lint({ "misspell" })
end,
})