From 1c3da72569cca0d372c2a344a83f6272a493f2cb Mon Sep 17 00:00:00 2001 From: Dubakula Sai Venkata Chaitanya Date: Wed, 29 Oct 2025 18:39:50 +0530 Subject: feat(rust-analyzer): out-of-the-box support for codelens #4165 Codelens requires a bit of special configuration to work on rust-analyzer as described here: neovim/neovim#34353 (comment) --- lsp/rust_analyzer.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'lsp/rust_analyzer.lua') diff --git a/lsp/rust_analyzer.lua b/lsp/rust_analyzer.lua index a699c7f4..efac25a6 100644 --- a/lsp/rust_analyzer.lua +++ b/lsp/rust_analyzer.lua @@ -105,6 +105,13 @@ return { capabilities = { experimental = { serverStatusNotification = true, + commands = { + commands = { + 'rust-analyzer.showReferences', + 'rust-analyzer.runSingle', + 'rust-analyzer.debugSingle', + }, + }, }, }, before_init = function(init_params, config) @@ -112,6 +119,24 @@ return { if config.settings and config.settings['rust-analyzer'] then init_params.initializationOptions = config.settings['rust-analyzer'] end + ---@param command table{ title: string, command: string, arguments: any[] } + vim.lsp.commands['rust-analyzer.runSingle'] = function(command) + local r = command.arguments[1] + local cmd = { 'cargo', unpack(r.args.cargoArgs) } + if r.args.executableArgs and #r.args.executableArgs > 0 then + vim.list_extend(cmd, { '--', unpack(r.args.executableArgs) }) + end + + local proc = vim.system(cmd, { cwd = r.args.cwd }) + + local result = proc:wait() + + if result.code == 0 then + vim.notify(result.stdout, vim.log.levels.INFO) + else + vim.notify(result.stderr, vim.log.levels.ERROR) + end + end end, on_attach = function(_, bufnr) vim.api.nvim_buf_create_user_command(bufnr, 'LspCargoReload', function() -- cgit v1.2.3-70-g09d2