return { { -- Linting 'mfussenegger/nvim-lint', event = { 'BufReadPre', 'BufNewFile' }, config = function() local lint = require 'lint' lint.linters_by_ft = { markdown = { 'markdownlint' }, javascript = { 'eslint' }, javascriptreact = { 'eslint' }, typescript = { 'eslint' }, typescriptreact = { 'eslint' }, } -- Check if eslint is installed before setting it as a linter local function is_executable(name) return vim.fn.executable(name) == 1 end if not is_executable 'eslint' then lint.linters_by_ft.javascript = nil lint.linters_by_ft.javascriptreact = nil lint.linters_by_ft.typescript = nil lint.linters_by_ft.typescriptreact = nil end -- Create autocommand which carries out the actual linting -- on the specified events. local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true }) vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, { group = lint_augroup, callback = function() -- Only run the linter in buffers that you can modify in order to -- avoid superfluous noise, notably within the handy LSP pop-ups that -- describe the hovered symbol using Markdown. if vim.bo.modifiable then lint.try_lint() end end, }) end, }, }