From 1ab09ff0ddf0d5ae9ae7ed7719096a922730d30f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= Date: Sun, 29 Dec 2024 23:45:13 +0100 Subject: [PATCH] Add rust-analyzer --- lua/config/lsp/init.lua | 1 + lua/config/lsp/rust_analyzer.lua | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 lua/config/lsp/rust_analyzer.lua diff --git a/lua/config/lsp/init.lua b/lua/config/lsp/init.lua index 18f607c..edbbbf8 100644 --- a/lua/config/lsp/init.lua +++ b/lua/config/lsp/init.lua @@ -7,6 +7,7 @@ require("config.lsp.pyright") require("config.lsp.clangd") require("config.lsp.vls") require("config.lsp.lua_ls") +require("config.lsp.rust_analyzer") local api = vim.api local keymap = vim.keymap.set diff --git a/lua/config/lsp/rust_analyzer.lua b/lua/config/lsp/rust_analyzer.lua new file mode 100644 index 0000000..06fb603 --- /dev/null +++ b/lua/config/lsp/rust_analyzer.lua @@ -0,0 +1,39 @@ +local bin_name = "rust-analyzer" +local cmd = { bin_name } + +local config = vim.fs.find("Cargo.toml", { + upward = true, + stop = vim.loop.os_homedir(), + path = vim.fs.dirname(vim.api.nvim_buf_get_name(0)), +}) + +if next(config) then + vim.api.nvim_create_autocmd("FileType", { + pattern = "rust", + callback = function() + vim.lsp.start({ + name = "rust-analyzer", + cmd = cmd, + root_dir = config[1], + settings = { + ["rust-analyzer"] = { + checkOnSave = { + command = "clippy" + }, + check = { + command = "check" + }, + }, + }, + capabilities = vim.lsp.protocol.make_client_capabilities(), + }) + end, + }) + + vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*.rs", + callback = function() + vim.lsp.buf.format({ timeout_ms = 2000 }) + end, + }) +end