diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-06-04 18:42:09 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-06-04 18:43:00 +0800 |
commit | b7d674cac0aa21bac00c7c26f0d51bd65ec19f13 (patch) | |
tree | 0839e5b087fe6c3d711f4a4e0e365d49b6e53193 /store/config/nvim/lua/setup/plugins/lint.lua | |
parent | 166bdbc8bfb89b007b1a9ede885af5582074481c (diff) | |
download | crupest-b7d674cac0aa21bac00c7c26f0d51bd65ec19f13.tar.gz crupest-b7d674cac0aa21bac00c7c26f0d51bd65ec19f13.tar.bz2 crupest-b7d674cac0aa21bac00c7c26f0d51bd65ec19f13.zip |
chore(config): move dir.
Diffstat (limited to 'store/config/nvim/lua/setup/plugins/lint.lua')
-rw-r--r-- | store/config/nvim/lua/setup/plugins/lint.lua | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/store/config/nvim/lua/setup/plugins/lint.lua b/store/config/nvim/lua/setup/plugins/lint.lua new file mode 100644 index 0000000..928841d --- /dev/null +++ b/store/config/nvim/lua/setup/plugins/lint.lua @@ -0,0 +1,98 @@ +local lint = require("lint") + +local cspell = { + name = "cspell", + config_patterns = { + ".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", + }, + fast = true, +} + +local markdownlint = { + name = "markdownlint", + config_patterns = { + ".markdownlint.jsonc", + ".markdownlint.json", + ".markdownlint.yaml", + ".markdownlint.yml", + ".markdownlintrc", + }, + filetypes = { "markdown" }, + fast = true, +} + +local linters = { cspell, markdownlint } + +local linter_names = vim.tbl_map(function(l) return l.name end, linters) + +local function cru_lint(linter, opt) + opt = opt or {} + + local buf = opt.buf or 0 + + if linter.filetypes then + local filetype = vim.api.nvim_get_option_value("filetype", { buf = buf }) + if not vim.list_contains(linter.filetypes, filetype) then + return + end + end + + if 0 ~= #vim.fs.find(linter.config_patterns, { + path = vim.api.nvim_buf_get_name(opt.buf), upward = true }) then + lint.try_lint(linter.name) + end +end + +local function cru_lint_one(name, opt) + for _, linter in ipairs(linters) do + if linter.name == name then + cru_lint(linter, opt) + return + end + end + vim.notify("No linter named " .. name .. " is configured.", vim.log.levels.ERROR, {}) +end + +local function cru_lint_all(opt, fast) + for _, linter in ipairs(linters) do + if not fast or linter.fast then + cru_lint(linter, opt) + end + end +end + +local function cru_lint_all_fast(opt) + local buf = opt.buf + if vim.api.nvim_get_option_value("buftype", { buf = buf }) == "" then + cru_lint_all(opt, true) + end +end + +local function setup() + vim.api.nvim_create_autocmd({ "BufReadPost", "InsertLeave", "TextChanged" }, { callback = cru_lint_all_fast }) + + local function cru_lint_cmd(opt) + if #opt.args == 0 then + cru_lint_all(opt, false) + else + cru_lint_one(opt.args, opt) + end + end + + vim.api.nvim_create_user_command("CruLint", cru_lint_cmd, + { nargs = '?', complete = function() return linter_names end }) +end + +return { + setup = setup, +} |