-- Learn the keybindings, see :help lsp-zero-keybindings -- Learn to configure LSP servers, see :help lsp-zero-api-showcase local lsp = require('lsp-zero') lsp.preset('recommended') local cmp = require('cmp') local cmp_select = { behavior = cmp.SelectBehavior.Select } local cmp_mappings = lsp.defaults.cmp_mappings({ [''] = cmp.mapping.select_prev_item(cmp_select), [''] = cmp.mapping.select_next_item(cmp_select), [''] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.complete(), }) cmp_mappings[''] = nil cmp_mappings[''] = nil lsp.setup_nvim_cmp({ mapping = cmp_mappings, experimental = { ghost_text = true, }, }) -- (Optional) Configure lua language server for neovim lsp.nvim_workspace() local servers = { 'tailwindcss', 'tsserver', 'texlab', 'pyright', 'ltex', 'jsonls' } lsp.ensure_installed(servers) lsp.configure("tsserver", { on_init = function(client) client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentFormattingRangeProvider = false end }) lsp.on_attach(function(client, bufnr) local opts = { buffer = bufnr, remap = false } vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) vim.keymap.set("n", "rn", function() vim.lsp.buf.rename() end, opts) end) lsp.setup() vim.diagnostic.config({ virtual_text = true, underline = true, float = true, }) local null_ls = require('null-ls') local null_opts = lsp.build_options('null-ls', {}) null_ls.setup({ on_attach = function(client, bufnr) null_opts.on_attach(client, bufnr) local format_cmd = function(input) vim.lsp.buf.format({ id = client.id, timeout_ms = 5000, async = input.bang, }) end local bufcmd = vim.api.nvim_buf_create_user_command bufcmd(bufnr, 'NullFormat', format_cmd, { bang = true, range = true, desc = 'Format using null-ls' }) end, sources = { } }) vim.keymap.set("n", "ft", function() vim.lsp.buf.format { timeout_ms = 5000 } end) require('mason').setup() require('mason-nvim-dap').setup({ automatic_setup = true, }) require('mason-null-ls').setup({ ensure_installed = { "autopep8", "eslint", "gofmt", "rustfmt", "shellcheck" }, automatic_installation = true, automatic_setup = true, }) require("mason-null-ls").setup({ handlers = {}, })