Dotfiles/site-modules/core/files/vim/plugin/lint.lua
Ade Attwood 63edfe28ce fix(vim): reformat the linters and add extra eslint flags
Removes the complete override to the linters and add extra flags to the
existing args. This will now automatically get any updates made to the plugin
linters.

This also add the `unstable_ts_config` to the eslint command so we can use
typescript configs with eslint 9. I don't really know how this will affect BC
with version 8, I will have to cross that bridge when we come to it. ATM this
is good for daily use of version 9.
2024-09-12 16:31:27 +01:00

111 lines
3.1 KiB
Lua

local lint = require "lint"
local cspell_linter = require "lint.linters.cspell"
local eslint_linter = require "lint.linters.eslint"
local severities = {
error = vim.diagnostic.severity.ERROR,
info = vim.diagnostic.severity.WARN,
}
lint.linters.psalm = {
cmd = "psalm",
stdin = false,
args = {
"--output-format=json",
"--show-info=true",
},
-- ignore_exitcode = true,
parser = function(output, _)
if vim.trim(output) == "" then
return {}
end
local errors = vim.json.decode(output)
local diagnostics = {}
for _, err in ipairs(errors or {}) do
table.insert(diagnostics, {
lnum = err.line_from - 1,
end_lnum = err.line_to - 1,
col = err.column_from - 1,
end_col = err.column_to - 1,
message = err.message,
source = "psalm",
severity = assert(severities[err.severity], "missing mapping for severity " .. err.severity),
})
end
return diagnostics
end,
}
local get_language_id = function()
local file_type = vim.api.nvim_buf_get_option(0, "filetype")
return "--language-id=" .. file_type
end
lint.linters.cspell = cspell_linter
table.insert(lint.linters.cspell.args, "--config=" .. os.getenv "HOME" .. "/.cspell.json")
table.insert(lint.linters.cspell.args, get_language_id)
table.insert(lint.linters.cspell.args, "--")
table.insert(lint.linters.cspell.args, "stdin")
lint.linters.eslint = eslint_linter
table.insert(lint.linters.eslint.args, 1, "--flag")
table.insert(lint.linters.eslint.args, 2, "unstable_ts_config")
lint.linters_by_ft = {}
if vim.fn.executable "phpcs" == 1 then
lint.linters_by_ft.php = { "phpcs" }
end
if vim.fn.executable "eslint" == 1 then
lint.linters_by_ft.typescript = { "eslint" }
lint.linters_by_ft.javascript = { "eslint" }
lint.linters_by_ft.typescriptreact = { "eslint" }
lint.linters_by_ft.javascriptreact = { "eslint" }
end
if vim.fn.executable "luacheck" == 1 then
lint.linters_by_ft.lua = { "luacheck" }
end
if vim.fn.executable "stylelint" == 1 then
lint.linters_by_ft.scss = { "stylelint" }
end
if vim.fn.executable "rubocop" == 1 then
lint.linters_by_ft.ruby = { "rubocop" }
end
if vim.fn.executable "erb_lint" == 1 then
lint.linters_by_ft.eruby = { "erb_lint" }
end
local file_types_map = { [""] = false, qf = false, ivy = false }
-- Lint code with nvim-lint on save. This will lint all filetypes with cspell
-- and then any other filetypes will be linted per the config.
local lint_auto_command_group = vim.api.nvim_create_augroup("aa_lint", { clear = true })
vim.api.nvim_create_autocmd({ "BufReadPost", "BufWritePost" }, {
group = lint_auto_command_group,
desc = "Lint the buffer",
pattern = "*",
callback = function()
local linters = lint._resolve_linter_by_ft(vim.bo.filetype)
local should_lint = file_types_map[vim.bo.filetype]
if should_lint == nil then
should_lint = true
end
-- Only try and run spell checking on buffers that have a filetype. This is
-- mainly to disable spell checking in vim lsp popup buffers.
if should_lint then
table.insert(linters, "cspell")
end
lint.try_lint(linters)
end,
})