diff --git a/install-language-servers.sh b/install-language-servers.sh index bff05df..8e87bbc 100755 --- a/install-language-servers.sh +++ b/install-language-servers.sh @@ -75,7 +75,7 @@ function install_language_servers() { # Rust if want_lang rust ;then - maybe_run rustup component add rls rustfmt rust-analysis rust-src clippy rustfmt + maybe_run rustup component add rustfmt rust-analysis rust-src clippy rust-analyzer fi # Go diff --git a/neovim/lua/plugins.lua b/neovim/lua/plugins.lua index c04d2ed..55711d2 100644 --- a/neovim/lua/plugins.lua +++ b/neovim/lua/plugins.lua @@ -269,6 +269,12 @@ use({ requires = "neovim/nvim-lspconfig", }) +-- Rust analyzer +use({ + "simrat39/rust-tools.nvim", + disable = vim.fn.has("nvim-0.7.0") ~= 1, +}) + -- Better display of lsp diagnostics -- TODO: Pin < 0.7 version use({ @@ -441,7 +447,6 @@ use({ -- Filetypes use("ViViDboarder/vim-forcedotcom") -use("rust-lang/rust.vim") use("hsanson/vim-android") use({ "sheerun/vim-polyglot", diff --git a/neovim/lua/plugins/lsp.lua b/neovim/lua/plugins/lsp.lua index f593480..79a8f46 100644 --- a/neovim/lua/plugins/lsp.lua +++ b/neovim/lua/plugins/lsp.lua @@ -254,17 +254,39 @@ function M.config_lsp() lsp_config.bashls.setup(default_setup) lsp_config.gopls.setup(default_setup) lsp_config.pyright.setup(default_setup) - lsp_config.rls.setup({ - capabilities = capabilities, - on_attach = default_attach, - settings = { - rust = { - build_on_save = false, - all_features = true, - unstable_features = true, - }, - }, - }) + + -- Set up rust analyzer (preferred) or rls + -- TODO: Remove rls and all configuration for it when all machines are up to date + if vim.fn.executable("rust-analyzer") == 1 then + -- Prefer rust-tools, if present + utils.try_require("rust-tools", function(rust_tools) + rust_tools.setup({ + capabilities = capabilities, + on_attach = function(client, bufnr) + default_attach(client, bufnr) + -- TODO: override some bindings from rust-tools + -- Eg. rust_tools.hover_actions.hover_actions or rt.code_action_group.code_action_group + end, + }) + end, function() + lsp_config.rust_analyzer.setup({ + capabilities = capabilities, + on_attach = default_attach, + settings = { + ["rust-analyzer"] = { + cargo = { + features = "all", + }, + }, + }, + }) + end) + else + lsp_config.rls.setup({ + capabilities = capabilities, + on_attach = default_attach, + }) + end -- Configure neovim dev for when sumneko_lua is installed utils.try_require("neodev", function(neodev)