local lsp = require('lsp-zero') -- name = 'minimal', -- set_lsp_keymaps = false, -- manage_nvim_cmp = true, -- suggest_lsp_servers = false, --}) local keybindings = require('keybindings') local on_attach = keybindings.on_attach local cmp_mapping = keybindings.cmp_mappings lsp.extend_lspconfig({ lsp_attach = on_attach, capabilities = require('cmp_nvim_lsp').default_capabilities(), }) local cmp = require('cmp') local cmp_config = { preselect = 'none', window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, mapping = cmp.mapping.preset.insert(cmp_mappings), sources = { { name = 'nvim_lsp' }, { name = 'luasnip' }, }, experimental = { ghost_text = false -- conflicts with copilot.vim's preview }, } cmp.setup(cmp_config) lsp.configure('rust_analyzer', { settings = { ["rust-analyzer"] = { procMacro = { enable = true, ignored = { leptos_macro = { "server" }, }, }, cargo = { allFeatures = true, }, } } }) lsp.configure('ts_ls', { -- set commands to run the language server using npx cmd = { "npx", "typescript-language-server", "--stdio" }, }) lsp.configure('html', { cmd = { "npx", "vscode-html-language-server", "--stdio" }, }) lsp.configure('texlab', { forwardSearch = { executable = 'zathura', args = { '--synctex-forward', '%l:1:%f', '%p' } }, }) lsp.configure('clangd', {}) lsp.configure('pylsp', {}) -- From https://docs.astral.sh/ruff/editors/setup/#neovim lsp.configure('ruff', { init_options = { settings = { -- Ruff language server settings go here } } }) -- CSS lsp.configure('cssls', { cmd = { "npx", "vscode-css-language-server", "--stdio" }, filetypes = { "css", "scss", "less" } }) -- Tailwind CSS lsp.configure('tailwindcss', { cmd = { "npx", "tailwindcss-language-server", "--stdio" }, filetypes = { "html", "css", "scss", "javascript", "javascriptreact", "typescript", "typescriptreact" }, init_options = { userLanguages = { eelixir = "html-eex", eruby = "erb" } } }) vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup('lsp_attach_disable_ruff_hover', { clear = true }), callback = function(args) local client = vim.lsp.get_client_by_id(args.data.client_id) if client == nil then return end if client.name == 'ruff' then -- Disable hover in favor of Pyright client.server_capabilities.hoverProvider = false end end, desc = 'LSP: Disable hover capability from Ruff', }) -- gopls lsp.configure('gopls', {}) lsp.setup_servers({'rust_analyzer', 'html', 'texlab', 'clangd', 'pylsp', 'gopls', 'ts_ls', 'ruff'}) lsp.setup()