local fmt_group = vim.api.nvim_create_augroup("Lspformatting", { clear = true }) local on_attach = function(event) local id = vim.tbl_get(event, 'data', 'client_id') local client = id and vim.lsp.get_client_by_id(id) local bufnr = event.buf if (not bufnr) then return end require 'illuminate'.on_attach(client) -- Enable completion triggered by vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local bufopts = { noremap = true, silent = true, buffer = bufnr } vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) vim.keymap.set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, bufopts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) vim.keymap.set('n', 'f', 'lua vim.lsp.buf.format({ async = true })', bufopts) -- format on save does not work for python for some reason if client.supports_method("textDocument/formatting") then vim.api.nvim_clear_autocmds({ group = fmt_group, buffer = bufnr }) vim.api.nvim_create_autocmd("BufWritePre", { group = fmt_group, buffer = bufnr, callback = function() vim.lsp.buf.format({ async = false, bufnr = bufnr, timeout_ms = 10000, }) end }) end end vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('LspAttachGroup', { clear = true }), callback = on_attach, }) local on_leave_group = vim.api.nvim_create_augroup("OnLeaveGroup", {}) vim.api.nvim_create_autocmd("VimLeave", { group = on_leave_group, command = "silent !killall -q eslint_d", }) vim.diagnostic.config({ signs = { text = { [vim.diagnostic.severity.ERROR] = '✘', [vim.diagnostic.severity.WARN] = '▲', [vim.diagnostic.severity.HINT] = '⚑', [vim.diagnostic.severity.INFO] = '»', }, }, -- virtual_text = true, }) return { { 'neovim/nvim-lspconfig', event = { "BufReadPre", "BufNewFile" }, dependencies = { 'hrsh7th/nvim-cmp', 'RRethy/vim-illuminate', 'j-hui/fidget.nvim', }, config = function() local lspconfig_defaults = require('lspconfig').util.default_config local capabilities = vim.tbl_deep_extend( 'force', lspconfig_defaults.capabilities, require('cmp_nvim_lsp').default_capabilities() ) vim.lsp.config('*', { capabilities = capabilities }) vim.lsp.config("lua_ls", { settings = { Lua = { diagnostics = { globals = { 'vim' } } } } }) vim.lsp.config("rust_analyzer", { settings = { ["rust-analyzer"] = { checkOnSave = true, check = { enable = true, command = "clippy", features = "all" } } } }) vim.lsp.config("julials", { on_new_config = function(new_config, _) local julia = vim.fn.expand("~/.julia/environments/nvim-lspconfig/bin/julia") if require('lspconfig').util.path.is_file(julia) then vim.notify("running julials") new_config.cmd[1] = julia end end }) vim.lsp.config("pyright", { settings = { pyright = { disableOrganizeImports = true, -- Using Ruff }, python = { analysis = { ignore = { '*' }, -- Using Ruff }, }, }, }) vim.lsp.enable({ "lua_ls", "clangd", "ts_ls", "hls", "ruff", "svelte", "marksman", "tailwindcss", "rust_analyzer", "julials", "pyright" }) end, }, { 'nvimtools/none-ls.nvim', event = { "BufReadPre", "BufNewFile" }, config = function() local null_ls = require("null-ls") local capabilities = require('cmp_nvim_lsp').default_capabilities() --capabilities.offsetEncoding = { "utf-16" } local eslint_format = require("none-ls.formatting.eslint_d").with({ extra_filetypes = { "svelte" }, }) local eslint_diag = require("none-ls.diagnostics.eslint_d").with({ extra_filetypes = { "svelte" }, }) local eslint_code_actions = require("none-ls.code_actions.eslint_d").with({ extra_filetypes = { "svelte" }, }) null_ls.setup { capabilities = capabilities, sources = { eslint_format, eslint_diag, eslint_code_actions, null_ls.builtins.code_actions.gitsigns, null_ls.builtins.completion.luasnip, null_ls.builtins.completion.tags, } } end, dependencies = { "nvim-lua/plenary.nvim", "nvimtools/none-ls-extras.nvim", 'hrsh7th/nvim-cmp', "L3MON4D3/LuaSnip", }, } }