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.settings = { showImplicitArguments = true, showInferredType = true, serverProperties = { "-Dmetals.worksheet-timeout=120", }, } 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, })