From 89294e8b2f1d859979c5fdfa21d4e188e0b3c1b4 Mon Sep 17 00:00:00 2001 From: Michael Yockey Date: Tue, 30 Sep 2025 09:29:08 -0400 Subject: [PATCH] Migrate to Neovim internal LSP configuration --- nvim/.config/nvim/lazy-lock.json | 33 ++++----- nvim/.config/nvim/lsp/angularls.lua | 5 ++ nvim/.config/nvim/lsp/emmet.lua | 13 ++++ nvim/.config/nvim/lsp/lua_ls.lua | 20 +++++ nvim/.config/nvim/lsp/ruby_lsp.lua | 13 ++++ nvim/.config/nvim/lsp/ts_ls.lua | 6 ++ nvim/.config/nvim/lua/yock/init.lua | 1 + nvim/.config/nvim/lua/yock/lsp.lua | 56 ++++++++++++++ nvim/.config/nvim/lua/yock/plugins/lsp.lua | 86 ---------------------- 9 files changed, 130 insertions(+), 103 deletions(-) create mode 100644 nvim/.config/nvim/lsp/angularls.lua create mode 100644 nvim/.config/nvim/lsp/emmet.lua create mode 100644 nvim/.config/nvim/lsp/lua_ls.lua create mode 100644 nvim/.config/nvim/lsp/ruby_lsp.lua create mode 100644 nvim/.config/nvim/lsp/ts_ls.lua create mode 100644 nvim/.config/nvim/lua/yock/lsp.lua delete mode 100644 nvim/.config/nvim/lua/yock/plugins/lsp.lua diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json index 4d48032..a001c59 100644 --- a/nvim/.config/nvim/lazy-lock.json +++ b/nvim/.config/nvim/lazy-lock.json @@ -1,37 +1,36 @@ { "FixCursorHold.nvim": { "branch": "master", "commit": "1900f89dc17c603eec29960f57c00bd9ae696495" }, - "auto-dark-mode.nvim": { "branch": "master", "commit": "97a86c9402c784a254e5465ca2c51481eea310e3" }, - "blink.cmp": { "branch": "main", "commit": "3536ce464e82843b00c76718d9bfe1994647d686" }, + "auto-dark-mode.nvim": { "branch": "master", "commit": "e300259ec777a40b4b9e3c8e6ade203e78d15881" }, + "blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" }, "cloak.nvim": { "branch": "main", "commit": "648aca6d33ec011dc3166e7af3b38820d01a71e4" }, "direnv.vim": { "branch": "master", "commit": "ab2a7e08dd630060cd81d7946739ac7442a4f269" }, "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "git-blame.nvim": { "branch": "master", "commit": "8503b199edf9a666fe7b1a989cf14e3c26b2eb03" }, + "git-blame.nvim": { "branch": "master", "commit": "9874ec1ec8bc53beb33b7cd82c092b85271a578b" }, "gitmoji.nvim": { "branch": "main", "commit": "2659de229c2b26d50732f1220700eebbcdb2d6ef" }, "harpoon": { "branch": "harpoon2", "commit": "ed1f853847ffd04b2b61c314865665e1dadf22c7" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, - "lazygit.nvim": { "branch": "main", "commit": "4839ab642962cc76bb1bf278427dc4c59be15072" }, - "lualine.nvim": { "branch": "master", "commit": "a94fc68960665e54408fe37dcf573193c4ce82c9" }, + "lazygit.nvim": { "branch": "main", "commit": "2305deed25bc61b866d5d39189e9105a45cf1cfb" }, + "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" }, "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, - "neotest": { "branch": "master", "commit": "61d1951131e6770c815243d84a27ccd0436ec61c" }, - "neotest-rspec": { "branch": "main", "commit": "825bc085b7a691860d5cafc5fa7ab140c713e6c8" }, + "neotest": { "branch": "master", "commit": "2cf3544fb55cdd428a9a1b7154aea9c9823426e8" }, + "neotest-rspec": { "branch": "main", "commit": "e7dc67c1167a9e593c804a6be6808ba9a5920d43" }, "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, - "nvim-dap": { "branch": "master", "commit": "cc77338e6e34c79f1c638f51ae4160dc9bfb05de" }, + "nvim-dap": { "branch": "master", "commit": "7367cec8e8f7a0b1e4566af9a7ef5959d11206a7" }, "nvim-dap-ruby": { "branch": "main", "commit": "ba36f9905ca9c6d89e5af5467a52fceeb2bbbf6d" }, "nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" }, - "nvim-lspconfig": { "branch": "master", "commit": "8c5efd1269160fc2fdf61e3d7176be5015860a8f" }, "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, - "nvim-surround": { "branch": "main", "commit": "8dd9150ca7eae5683660ea20cec86edcd5ca4046" }, + "nvim-surround": { "branch": "main", "commit": "75de1782c781961e392efcca57601bf436f4d550" }, "nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, - "nvim-treesitter-endwise": { "branch": "master", "commit": "d6cbb83307d516ec076d17c9a33d704ef626ee8c" }, - "nvim-web-devicons": { "branch": "master", "commit": "0422a19d9aa3aad2c7e5cca167e5407b13407a9d" }, - "oil.nvim": { "branch": "master", "commit": "bbad9a76b2617ce1221d49619e4e4b659b3c61fc" }, - "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "nvim-treesitter-endwise": { "branch": "master", "commit": "a61a9de7965324d4019fb1637b66bfacdcb01f51" }, + "nvim-web-devicons": { "branch": "master", "commit": "f6b0920f452bfd7595ee9a9efe5e1ae78e0e2997" }, + "oil.nvim": { "branch": "master", "commit": "919e155fdf38e9148cdb5304faaaf53c20d703ea" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, - "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, - "undotree": { "branch": "master", "commit": "28f2f54a34baff90ea6f4a735ef1813ad875c743" }, + "trouble.nvim": { "branch": "main", "commit": "f176232e7759c4f8abd923c21e3e5a5c76cd6837" }, + "undotree": { "branch": "master", "commit": "fe9a9d0645f0f5532360b5e5f5c550d7bb4f1869" }, "vim-doge": { "branch": "master", "commit": "03a84072ef21b205237c77986c78914395d646c3" }, - "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } + "which-key.nvim": { "branch": "main", "commit": "904308e6885bbb7b60714c80ab3daf0c071c1492" } } diff --git a/nvim/.config/nvim/lsp/angularls.lua b/nvim/.config/nvim/lsp/angularls.lua new file mode 100644 index 0000000..b9fa2b1 --- /dev/null +++ b/nvim/.config/nvim/lsp/angularls.lua @@ -0,0 +1,5 @@ +return { + cmd = { 'ngserver', '--stdio', '--tsProbeLocations', vim.fn.getcwd(), '--ngProbeLocations', vim.fn.getcwd() }, + filetypes = { 'typescript', 'html' }, +} + diff --git a/nvim/.config/nvim/lsp/emmet.lua b/nvim/.config/nvim/lsp/emmet.lua new file mode 100644 index 0000000..a309322 --- /dev/null +++ b/nvim/.config/nvim/lsp/emmet.lua @@ -0,0 +1,13 @@ +return { + cmd = { 'emmet-language-server', '--stdio' }, + filetypes = { + 'html', + 'eruby', + 'css', + 'scss', + 'sass', + 'javascript', + 'typescript', + }, + root_markers = { 'package.json', 'Gemfile', '.git' } +} diff --git a/nvim/.config/nvim/lsp/lua_ls.lua b/nvim/.config/nvim/lsp/lua_ls.lua new file mode 100644 index 0000000..14b95da --- /dev/null +++ b/nvim/.config/nvim/lsp/lua_ls.lua @@ -0,0 +1,20 @@ +return { + cmd = { 'lua-language-server' }, + filetypes = { 'lua' }, + root_markers = { '.luarc.json', '.luarc.jsonc' }, + settings = { + Lua = { + runtime = { version = 'LuaJIT' }, + diagnostics = { + globals = { + 'vim', + 'require', + 'out', + 's', + 'c', + 't', + } + } + }, + } +} diff --git a/nvim/.config/nvim/lsp/ruby_lsp.lua b/nvim/.config/nvim/lsp/ruby_lsp.lua new file mode 100644 index 0000000..e886918 --- /dev/null +++ b/nvim/.config/nvim/lsp/ruby_lsp.lua @@ -0,0 +1,13 @@ +return { + cmd = { 'ruby-lsp' }, + filetypes = { 'ruby', 'eruby' }, + init_options = { + linters = { 'rubocop' }, + formatters = {}, + addonSettings = { + ['Ruby LSP Rails'] = { + enablePendingMigrationsPrompt = false, + } + } + } +} diff --git a/nvim/.config/nvim/lsp/ts_ls.lua b/nvim/.config/nvim/lsp/ts_ls.lua new file mode 100644 index 0000000..8418096 --- /dev/null +++ b/nvim/.config/nvim/lsp/ts_ls.lua @@ -0,0 +1,6 @@ +return { + cmd = { 'typescript-language-server', '--stdio' }, + filetypes = { 'typescript' }, +} + + diff --git a/nvim/.config/nvim/lua/yock/init.lua b/nvim/.config/nvim/lua/yock/init.lua index 4162e10..9a9fea7 100644 --- a/nvim/.config/nvim/lua/yock/init.lua +++ b/nvim/.config/nvim/lua/yock/init.lua @@ -1,3 +1,4 @@ require('yock.lazy') require('yock.set') require('yock.remap') +require('yock.lsp') diff --git a/nvim/.config/nvim/lua/yock/lsp.lua b/nvim/.config/nvim/lua/yock/lsp.lua new file mode 100644 index 0000000..8a98b80 --- /dev/null +++ b/nvim/.config/nvim/lua/yock/lsp.lua @@ -0,0 +1,56 @@ +vim.lsp.enable('lua_ls') +vim.lsp.enable('ruby_lsp') +vim.lsp.enable('emmet') +vim.lsp.enable('ts_ls') +vim.lsp.enable('angularls') +--vim.lsp.enable('pylsp') +--vim.lsp.enable('ols') +--vim.lsp.enable('gopls') +--vim.lsp.enable('sqlls') + +vim.api.nvim_create_autocmd('LspAttach', { + callback = function(ev) + local client = vim.lsp.get_client_by_id(ev.data.client_id) + if client:supports_method('textDocument/completion') then + vim.opt.completeopt = { 'menu', 'menuone', 'noinsert', 'fuzzy', 'popup' } + vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true }) + vim.keymap.set('i', '', function() + vim.lsp.completion.get() + end) + end + end +}) + +local function filteredQuickfix() + vim.lsp.buf.code_action({ + context = { only = { 'quickfix' } }, + apply = true, + filter = function(codeAction) + return codeAction.isPreferred + end + }) +end + +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('UserLspConfig', {}), + callback = function(ev) + -- Enable completion triggered by + vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' + + local opts = { remap = false } + vim.keymap.set('n', 'K', function() vim.lsp.buf.hover() end, opts) + vim.keymap.set('n', 'vws', function() vim.lsp.buf.workspace_symbol() end, opts) + vim.keymap.set('n', 'vd', function() vim.diagnostic.open_float() end, opts) + vim.keymap.set('n', '[d', function() vim.diagnostic.goto_next() end, opts) + vim.keymap.set('n', ']d', function() vim.diagnostic.goto_prev() end, opts) + vim.keymap.set('n', 'vca', function() vim.lsp.buf.code_action() end, opts) + vim.keymap.set('n', '', filteredQuickfix, opts) + vim.keymap.set('n', 'vrr', function() vim.lsp.buf.references() end, opts) + vim.keymap.set('n', 'vrn', function() vim.lsp.buf.rename() end, opts) + vim.keymap.set('n', 'vrh', function() vim.lsp.buf.signature_help() end, opts) + end, +}) + +vim.diagnostic.config({ + virtual_lines = true +}) diff --git a/nvim/.config/nvim/lua/yock/plugins/lsp.lua b/nvim/.config/nvim/lua/yock/plugins/lsp.lua deleted file mode 100644 index 26b8315..0000000 --- a/nvim/.config/nvim/lua/yock/plugins/lsp.lua +++ /dev/null @@ -1,86 +0,0 @@ -return { - 'neovim/nvim-lspconfig', - dependencies = { - 'saghen/blink.cmp', - }, - config = function() - local lspconfig = require('lspconfig') - local lsp_capabilities = vim.lsp.protocol.make_client_capabilities() - local capabilities = require('blink.cmp').get_lsp_capabilities(lsp_capabilities) - - lspconfig.pylsp.setup({ capabilities = capabilities }) - lspconfig.ts_ls.setup({ capabilities = capabilities }) - lspconfig.ruby_lsp.setup({ capabilities = capabilities }) - lspconfig.angularls.setup({ capabilities = capabilities }) - lspconfig.ols.setup({ - capabilities = capabilities, - init_options = { - checker_args = "-strict-style" - }, - }) - lspconfig.emmet_ls.setup({ - capabilities = capabilities, - filetypes = { - 'html', - 'eruby', - 'css', - 'scss', - 'sass', - 'javascript', - 'typescript', - }, - }) - lspconfig.lua_ls.setup({ - capabilities = capabilities, - settings = { - Lua = { - diagnostics = { - globals = { - 'vim', - 'require', - 'out', - 's', - 'c', - 't', - } - } - } - } - }) - lspconfig.gopls.setup({ capabilities = capabilities }) - lspconfig.rust_analyzer.setup({ capabilities = capabilities }) - lspconfig.sourcekit.setup({ capabilities = capabilities }) - lspconfig.sqlls.setup({ capabilities = capabilities }) - - local function filteredQuickfix() - vim.lsp.buf.code_action({ - context = { only = { 'quickfix' } }, - apply = true, - filter = function(codeAction) - return codeAction.isPreferred - end - }) - end - - vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('UserLspConfig', {}), - callback = function(ev) - local client = vim.lsp.get_client_by_id(ev.data.client_id) - -- Enable completion triggered by - vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' - - local opts = { remap = false } - vim.keymap.set('n', 'K', function() vim.lsp.buf.hover() end, opts) - vim.keymap.set('n', 'vws', function() vim.lsp.buf.workspace_symbol() end, opts) - vim.keymap.set('n', 'vd', function() vim.diagnostic.open_float() end, opts) - vim.keymap.set('n', '[d', function() vim.diagnostic.goto_next() end, opts) - vim.keymap.set('n', ']d', function() vim.diagnostic.goto_prev() end, opts) - vim.keymap.set('n', 'vca', function() vim.lsp.buf.code_action() end, opts) - vim.keymap.set('n', '', filteredQuickfix, opts) - vim.keymap.set('n', 'vrr', function() vim.lsp.buf.references() end, opts) - vim.keymap.set('n', 'vrn', function() vim.lsp.buf.rename() end, opts) - vim.keymap.set('n', 'vrh', function() vim.lsp.buf.signature_help() end, opts) - end, - }) - end -}