From 8e7bbdd5af1abe3a6beef10e622e56a8ccbae1d4 Mon Sep 17 00:00:00 2001 From: Albin Chaboissier Date: Fri, 29 May 2026 14:39:00 +0200 Subject: [PATCH] Metals lsp --- lua/plugins/init.lua | 1 + lua/plugins/lsp.lua | 17 +++++++++++------ lua/plugins/metals.lua | 33 +++++++++++++++++++++++++++++++++ nvim-pack-lock.json | 8 ++++++++ 4 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 lua/plugins/metals.lua diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index 79cc06c..b49e88b 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -11,3 +11,4 @@ require("plugins.flash") require("plugins.git") require("plugins.conform") require("plugins.neogen") +require("plugins.metals") diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index fddc26a..49f0d40 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -1,6 +1,11 @@ vim.pack.add({ 'https://github.com/neovim/nvim-lspconfig' }) +vim.pack.add({ 'https://github.com/j-hui/fidget.nvim' }) + +require("fidget").setup() + vim.lsp.enable({ 'lua_ls' }) vim.lsp.enable({ 'clangd' }) +-- vim.lsp.enable({ 'metals' }) vim.lsp.config("rust_analyzer", { settings = { @@ -9,12 +14,12 @@ vim.lsp.config("rust_analyzer", { { postfix = { enable = true, }, }, - check = { - command = "clippy", - }, - } - }, - } + check = { + command = "clippy", + }, + } + }, +} ) vim.lsp.enable('rust_analyzer') diff --git a/lua/plugins/metals.lua b/lua/plugins/metals.lua new file mode 100644 index 0000000..17a02fa --- /dev/null +++ b/lua/plugins/metals.lua @@ -0,0 +1,33 @@ +vim.pack.add({ "https://github.com/scalameta/nvim-metals" }) +local metals_config = require("metals").bare_config() + +metals_config.capabilities = require("blink.cmp").get_lsp_capabilities() +metals_config.on_attach = function(client, bufnr) + -- Your existing keymaps, scoped to the buffer + local opts = { buffer = bufnr } + + vim.keymap.set("n", "t", vim.diagnostic.open_float, opts) + vim.keymap.set("n", "sr", vim.lsp.buf.rename, opts) + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) + vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) + vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) + vim.keymap.set("v", "ca", vim.lsp.buf.code_action, opts) + vim.keymap.set("n", "f", function() + vim.lsp.buf.format({ async = true }) + end, opts) + vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) + + -- Inlay hints + vim.lsp.inlay_hint.enable(false, { bufnr = bufnr }) +end + +local ft = { "scala", "sbt", "java" } +local nvim_metals_group = vim.api.nvim_create_augroup("nvim-metals", { clear = true }) +vim.api.nvim_create_autocmd("FileType", { + pattern = ft, + callback = function() + require("metals").initialize_or_attach(metals_config) + end, + group = nvim_metals_group, +}) diff --git a/nvim-pack-lock.json b/nvim-pack-lock.json index 1627534..876f899 100644 --- a/nvim-pack-lock.json +++ b/nvim-pack-lock.json @@ -16,6 +16,10 @@ "rev": "dca1a190aa85f9065979ef35802fb77131911106", "src": "https://github.com/stevearc/conform.nvim" }, + "fidget.nvim": { + "rev": "82404b196e73a00b1727a91903beef5ddc319d22", + "src": "https://github.com/j-hui/fidget.nvim" + }, "flash.nvim": { "rev": "fcea7ff883235d9024dc41e638f164a450c14ca2", "src": "https://github.com/folke/flash.nvim" @@ -64,6 +68,10 @@ "rev": "bedca8b426b2fee0ccac596d167d71bbe971253f", "src": "https://github.com/neovim/nvim-lspconfig" }, + "nvim-metals": { + "rev": "4cc98f07ec96bb748a8796831767538e0e4f9be4", + "src": "https://github.com/scalameta/nvim-metals" + }, "nvim-treesitter": { "rev": "4916d6592ede8c07973490d9322f187e07dfefac", "src": "https://github.com/nvim-treesitter/nvim-treesitter",