Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(rust): update rustaceanvim to v5 #1133

Merged
merged 1 commit into from
Jul 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lua/astrocommunity/pack/rust/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
This plugin pack does the following:

- Adds `rust` Treesitter parsers
- Adds [rustaceanvim](https://github.com/mrcjkb/rustaceanvim) for language specific tooling
- Adds [rustaceanvim](https://github.com/mrcjkb/rustaceanvim) for language specific tooling (v4 or v5 depending on nvim version)
- Adds [crates.nvim](https://github.com/Saecki/crates.nvim) for crate management
- Adds [TOML language support](../toml)

Expand Down
157 changes: 113 additions & 44 deletions lua/astrocommunity/pack/rust/init.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
return {
local pack = {
{ import = "astrocommunity.pack.toml" },
{
"nvim-treesitter/nvim-treesitter",
Expand Down Expand Up @@ -47,14 +47,61 @@ return {
end,
},
{
"Saecki/crates.nvim",
lazy = true,
dependencies = {
"AstroNvim/astrocore",
opts = {
autocmds = {
CmpSourceCargo = {
{
event = "BufRead",
desc = "Load crates.nvim into Cargo buffers",
pattern = "Cargo.toml",
callback = function()
require("cmp").setup.buffer { sources = { { name = "crates" } } }
require "crates"
end,
},
},
},
},
},
opts = {
completion = {
cmp = { enabled = true },
crates = {
enabled = true,
},
},
null_ls = {
enabled = true,
name = "crates.nvim",
},
},
},
{
"nvim-neotest/neotest",
optional = true,
opts = function(_, opts)
if not opts.adapters then opts.adapters = {} end
local rustaceanvim_avail, rustaceanvim = pcall(require, "rustaceanvim.neotest")
if rustaceanvim_avail then table.insert(opts.adapters, rustaceanvim) end
end,
},
}

if vim.fn.has "nvim-0.10" then
-- Rustaceanvim v5 supports neovim v0.10+
table.insert(pack, {
"mrcjkb/rustaceanvim",
version = "^4",
version = "^5",
ft = "rust",
specs = {
{
"AstroNvim/astrolsp",
optional = true,
---@param opts AstroLSPOpts
---@type AstroLSPOpts
opts = {
handlers = { rust_analyzer = false }, -- disable setup of `rust_analyzer`
},
Expand Down Expand Up @@ -103,48 +150,70 @@ return {
return { server = final_server, dap = { adapter = adapter }, tools = { enable_clippy = false } }
end,
config = function(_, opts) vim.g.rustaceanvim = require("astrocore").extend_tbl(opts, vim.g.rustaceanvim) end,
},
{
"Saecki/crates.nvim",
lazy = true,
dependencies = {
"AstroNvim/astrocore",
opts = {
autocmds = {
CmpSourceCargo = {
{
event = "BufRead",
desc = "Load crates.nvim into Cargo buffers",
pattern = "Cargo.toml",
callback = function()
require("cmp").setup.buffer { sources = { { name = "crates" } } }
require "crates"
end,
},
},
},
},
},
opts = {
completion = {
cmp = { enabled = true },
crates = {
enabled = true,
})
else
-- TODO: Remove this with AstroNvim v5 when dropping Neovim v0.9 support
-- Rustaceanvim v4 is the last version that supports neovim v0.9
-- This is simply a copy/paste of the v4 configuration to be left alone just in case
-- the setup gets breaking changes and diverges.
table.insert(pack, {
"mrcjkb/rustaceanvim",
version = "^4",
ft = "rust",
specs = {
{
"AstroNvim/astrolsp",
optional = true,
---@type AstroLSPOpts
opts = {
handlers = { rust_analyzer = false }, -- disable setup of `rust_analyzer`
},
},
null_ls = {
enabled = true,
name = "crates.nvim",
},
},
},
{
"nvim-neotest/neotest",
optional = true,
opts = function(_, opts)
if not opts.adapters then opts.adapters = {} end
local rustaceanvim_avail, rustaceanvim = pcall(require, "rustaceanvim.neotest")
if rustaceanvim_avail then table.insert(opts.adapters, rustaceanvim) end
opts = function()
local adapter
local success, package = pcall(function() return require("mason-registry").get_package "codelldb" end)
local cfg = require "rustaceanvim.config"
if success then
local package_path = package:get_install_path()
local codelldb_path = package_path .. "/codelldb"
local liblldb_path = package_path .. "/extension/lldb/lib/liblldb"
local this_os = vim.loop.os_uname().sysname

-- The path in windows is different
if this_os:find "Windows" then
codelldb_path = package_path .. "\\extension\\adapter\\codelldb.exe"
liblldb_path = package_path .. "\\extension\\lldb\\bin\\liblldb.dll"
else
-- The liblldb extension is .so for linux and .dylib for macOS
liblldb_path = liblldb_path .. (this_os == "Linux" and ".so" or ".dylib")
end
adapter = cfg.get_codelldb_adapter(codelldb_path, liblldb_path)
else
adapter = cfg.get_codelldb_adapter()
end

local astrolsp_avail, astrolsp = pcall(require, "astrolsp")
local astrolsp_opts = (astrolsp_avail and astrolsp.lsp_opts "rust_analyzer") or {}
local server = {
---@type table | (fun(project_root:string|nil, default_settings: table|nil):table) -- The rust-analyzer settings or a function that creates them.
settings = function(project_root, default_settings)
local astrolsp_settings = astrolsp_opts.settings or {}

local merge_table = require("astrocore").extend_tbl(default_settings or {}, astrolsp_settings)
local ra = require "rustaceanvim.config.server"
-- load_rust_analyzer_settings merges any found settings with the passed in default settings table and then returns that table
return ra.load_rust_analyzer_settings(project_root, {
settings_file_pattern = "rust-analyzer.json",
default_settings = merge_table,
})
end,
}
local final_server = require("astrocore").extend_tbl(astrolsp_opts, server)
return { server = final_server, dap = { adapter = adapter }, tools = { enable_clippy = false } }
end,
},
}
config = function(_, opts) vim.g.rustaceanvim = require("astrocore").extend_tbl(opts, vim.g.rustaceanvim) end,
})
end

return pack
Loading