local lm = require('custom.language-manager') local language_specs = { { ts = { 'yaml', 'toml', 'sql', 'diff', 'dockerfile', 'gitcommit', 'gitignore' } }, { ts = { 'c', 'cpp', 'go', 'rust', 'python' } }, { ft = 'markdown', ts = { 'markdown', 'markdown_inline' }, format = 'prettier' }, { ft = 'bash', lsp = 'bash-language-server', lint = 'shellcheck', format = 'shfmt' }, { ft = 'lua', lsp = 'lua-language-server', lint = 'luacheck', format = 'stylua' }, { ft = { 'json', 'jsonc' }, lsp = 'json-lsp' }, { ft = 'html', lsp = 'html-lsp' }, { ft = 'css', lsp = { 'css-lsp', 'tailwindcss-language-server' } }, { ft = { 'javascript', 'typescript', 'javascriptreact', 'typescriptreact' }, ts = { 'javascript', 'typescript', 'tsx' }, lsp = { 'vtsls', 'eslint-lsp' }, format = { 'prettierd', 'prettier' }, }, } local general = lm.generate_specs(language_specs) return { { 'windwp/nvim-ts-autotag', config = true }, { 'windwp/nvim-autopairs', event = 'InsertEnter', config = true }, { 'mason-org/mason.nvim', config = function() require('mason').setup() lm.lsp.enable() end, }, { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', main = 'nvim-treesitter.configs', opts = { highlight = { enable = true }, incremental_selection = { enable = true }, ensure_installed = general.ts_parsers, }, }, { 'mfussenegger/nvim-lint', event = { 'BufReadPre', 'BufNewFile' }, opts = { linters_by_ft = general.linters_by_ft }, config = function(_, opts) local lint = require('lint') lint.linters_by_ft = opts.linters_by_ft vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, { group = vim.api.nvim_create_augroup('lint_autocmd', { clear = true }), callback = function() lint.try_lint() end, }) end, }, { 'stevearc/conform.nvim', event = { 'BufWritePre' }, opts = { format_on_save = { timeout_ms = 500, lsp_format = 'fallback' }, default_format_opts = { stop_after_first = true }, formatters_by_ft = general.formatters_by_ft, }, }, }