-- [[ Formatters Setup ]] local conform = require("conform") conform.setup({ formatters_by_ft = { python = { "isort", "black" }, lua = { "stylua" }, sh = { "shfmt" }, bash = { "shfmt" }, }, }) -- only format with keybinding, don't like code chaning everytime I save vim.keymap.set({ "n", "v" }, "f", function() conform.format({ lsp_fallback = true, }) end, { desc = "Format file or range (in visual mode)" }) -- [[ Linter's Setup ]] local lint = require("lint") -- fix mypy import's error lint.linters.mypy.args = { function() local virtual = os.getenv("VIRTUAL_ENV") or os.getenv("CONDA_PREFIX") or "/usr" return "--python-executable", virtual .. "/bin/python3" end, } lint.linters_by_ft = { python = { "mypy", "ruff" }, } -- setup auto linting local lint_augroup = vim.api.nvim_create_augroup("lint", { clear = true }) vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "InsertLeave" }, { group = lint_augroup, callback = function() lint.try_lint() end, }) -- [[ Mason Tools Installer ]] local mason_tool_installer = require("mason-tool-installer") mason_tool_installer.setup({ ensure_installed = { "isort", "black", "stylua", "shfmt", "mypy", "ruff", }, })