Files
keycodex/plugin/code_quality.lua
T
sankalp 1b5153df2d feat(plugin): enable markdownlint integration and activate UI components
Add missing markdownlint condition, streamline completion sources, and turn on previously disabled UI features.

New Features:
- Enable explorer, scroll, select, terminal, toggle, words, and zen UI components
- Add TypeScript tool filetype support for JavaScript/JSX/TSX
- Provide dynamic source selection for completion based on command context

Enhancements:
- Simplify markdownlint formatter configuration
- Drop unused markdown-toc from markdown formatters
- Refine default completion sources per command type

Bug Fixes:
- Remove redundant markdownlint condition check
- Clean up formatter list by dropping markdown-toc- Add proper descriptions to WhichKey mappings
2026-05-08 21:40:40 +05:45

75 lines
2.1 KiB
Lua

add({
"mfussenegger/nvim-lint", -- linter
"rshkarin/mason-nvim-lint", -- linter installer
"stevearc/conform.nvim", -- autoformater
"zapling/mason-conform.nvim", -- formatter installer
})
-- linter
require("lint").linters_by_ft = {
["*"] = { "codespell" },
["javascript"] = { "eslint_d", "cspell" },
["typescript"] = { "eslint_d", "cspell" },
["javascriptreact"] = { "eslint_d", "cspell" },
["typescriptreact"] = { "eslint_d", "cspell" },
["dockerfile"] = { "hadolint" },
["markdown"] = { "write_good", "markdownlint" },
["text"] = { "write_good" },
["sh"] = { "shellcheck" },
["yaml"] = { "actionlint" },
["python"] = { "ruff" },
}
require("mason-nvim-lint").setup({
ensure_installed = require("extensions").linter,
automatic_installation = false,
})
-- formatter
require("conform").setup({
formatters = {
["markdown-toc"] = {
condition = function(_, ctx)
for _, line in ipairs(vim.api.nvim_buf_get_lines(ctx.buf, 0, -1, false)) do
if line:find("<!%-%-% toc %-%->") then
return true
end
end
end,
},
},
formatters_by_ft = {
["lua"] = { "stylua" },
["c"] = { "clang_format" },
["cpp"] = { "clang_format" },
["h"] = { "clang_format" },
["python"] = { "ruff_fix", "ruff_format", "ruff_organize_imports" },
["javascript"] = { "biome" },
["typescript"] = { "biome" },
["typescriptreact"] = { "biome" },
["markdown"] = { "prettier", "markdownlint-cli2"},
["markdown.mdx"] = { "prettier", "markdownlint-cli2" },
["mdx"] = { "prettier" },
["_"] = { "trim_whitespace" },
},
options = {
stop_after_first = true,
},
format_after_save = function(bufnr)
if not vim.b[bufnr].conform_disable then
return {
lsp_format = "fallback",
}
end
end,
})
vim.keymap.set("n", "<leader>tf", function()
vim.b.conform_disable = not vim.b.conform_disable
local status = vim.b.conform_disable and "disabled" or "enabled"
vim.notify("Autoformat " .. status, vim.log.levels.INFO)
end, { desc = "Toggle autoformat" })
require("mason-conform").setup({
ensure_installed = require("extensions").formatter,
automatic_installation = true,
})