diff --git a/7.-Example-Custom-Plugins.md b/7.-Example-Custom-Plugins.md index e732911..6e5375f 100644 --- a/7.-Example-Custom-Plugins.md +++ b/7.-Example-Custom-Plugins.md @@ -3138,4 +3138,101 @@ return { end, { desc = "Format file or range (in visual mode)" }) end, } +``` +# Custem Config Nvim-lint +```lua +return { + "mfussenegger/nvim-lint", + event = { "BufReadPre", "BufNewFile" }, + opts = function() + local mason_reg = require("mason-registry") + + local linters_by_ft = {} + + -- add diff langue vs filetype + local keymap = { + ["c++"] = "cpp", + ["c#"] = "cs", + } + + -- add dif conform vs mason + local name_map = { + ["actionlint"] = "actionlint", + ["ansible_lint"] = "ansible_lint", + ["buf"] = "buf_lint", + ["buildifier"] = "buildifier", + ["cfn-lint"] = "cfn_lint", + ["checkstyle"] = "checkstyle", + ["clj-kondo"] = "clj_kondo", + ["cmakelint"] = "cmakelint", + ["codespell"] = "codespell", + ["cpplint"] = "cpplint", + ["cspell"] = "cspell", + ["curlylint"] = "curlylint", + ["djlint"] = "djlint", + ["erb-lint"] = "erb_lint", + ["eslint_d"] = "eslint_d", + ["flake8"] = "flake8", + ["gdtoolkit"] = "gdlint", + ["golangci-lint"] = "golangcilint", + ["hadolint"] = "hadolint", + ["jsonlint"] = "jsonlint", + ["ktlint"] = "ktlint", + ["luacheck"] = "luacheck", + ["markdownlint"] = "markdownlint", + ["mypy"] = "mypy", + ["phpcs"] = "phpcs", + ["phpmd"] = "phpmd", + ["phpstan"] = "phpstan", + ["proselint"] = "proselint", + ["pydocstyle"] = "pydocstyle", + ["pylint"] = "pylint", + ["revive"] = "revive", + ["rstcheck"] = "rstcheck", + ["rubocop"] = "rubocop", + ["ruff"] = "ruff", + ["selene"] = "selene", + ["shellcheck"] = "shellcheck", + ["sqlfluff"] = "sqlfluff", + ["standardrb"] = "standardrb", + ["stylelint"] = "stylelint", + ["solhint"] = "solhint", + ["tflint"] = "tflint", + ["tfsec"] = "tfsec", + ["trivy"] = "trivy", + ["vale"] = "vale", + ["vint"] = "vint", + ["vulture"] = "vulture", + ["yamllint"] = "yamllint", + } + + for _, pkg in pairs(mason_reg.get_installed_packages()) do + for _, type in pairs(pkg.spec.categories) do + -- only act upon a formatter + if type == "Linter" then + -- finally add the formatter to it's compatible filetype(s) + for _, ft in pairs(pkg.spec.languages) do + local ftl = string.lower(ft) + local ready = mason_reg.get_package(pkg.spec.name):is_installed() + if ready then + if keymap[ftl] ~= nil then + ftl = keymap[ftl] + end + if name_map[pkg.spec.name] ~= nil then + pkg.spec.name = name_map[pkg.spec.name] + end + linters_by_ft[ftl] = linters_by_ft[ftl] or {} + table.insert(linters_by_ft[ftl], pkg.spec.name) + end + end + end + end + end + + return linters_by_ft + end, + config = function(_, opts) + require("lint").linters_by_ft = opts.linters_by_ft + end, +} ``` \ No newline at end of file