100 lines
2.6 KiB
Lua
100 lines
2.6 KiB
Lua
|
-- adapted from https://www.lazyvim.org/extras/lang/rust
|
||
|
return {
|
||
|
{
|
||
|
"hrsh7th/nvim-cmp",
|
||
|
opts = function(_, opts)
|
||
|
opts.sources = opts.sources or {}
|
||
|
table.insert(opts.sources, { name = "crates" })
|
||
|
end,
|
||
|
},
|
||
|
{
|
||
|
"Saecki/crates.nvim",
|
||
|
event = { "BufRead Cargo.toml" },
|
||
|
opts = {
|
||
|
completions = {
|
||
|
cmp = { enabled = true },
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
|
||
|
"nvim-treesitter/nvim-treesitter",
|
||
|
opts = function(_, opts)
|
||
|
opts.ensure_installed = opts.ensure_installed or {}
|
||
|
vim.list_extend(opts.ensure_installed, { "ron", "rust", "toml" })
|
||
|
end,
|
||
|
},
|
||
|
{
|
||
|
"mrcjkb/rustaceanvim",
|
||
|
version = "^4", -- Recommended
|
||
|
ft = { "rust" },
|
||
|
opts = {
|
||
|
server = {
|
||
|
on_attach = function(_, bufnr)
|
||
|
vim.keymap.set("n", "<leader>cR", function()
|
||
|
vim.cmd.RustLsp("codeAction")
|
||
|
end, { desc = "Code Action", buffer = bufnr })
|
||
|
vim.keymap.set("n", "<leader>dr", function()
|
||
|
vim.cmd.RustLsp("debuggables")
|
||
|
end, { desc = "Rust debuggables", buffer = bufnr })
|
||
|
end,
|
||
|
default_settings = {
|
||
|
-- rust-analyzer language server configuration
|
||
|
["rust-analyzer"] = {
|
||
|
cargo = {
|
||
|
allFeatures = true,
|
||
|
loadOutDirsFromCheck = true,
|
||
|
runBuildScripts = true,
|
||
|
},
|
||
|
-- Add clippy lints for Rust.
|
||
|
checkOnSave = {
|
||
|
allFeatures = true,
|
||
|
command = "clippy",
|
||
|
extraArgs = { "--no-deps" },
|
||
|
},
|
||
|
procMacro = {
|
||
|
enable = true,
|
||
|
ignored = {
|
||
|
["async-trait"] = { "async_trait" },
|
||
|
["napi-derive"] = { "napi" },
|
||
|
["async-recursion"] = { "async_recursion" },
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
config = function(_, opts)
|
||
|
vim.g.rustaceanvim = vim.tbl_deep_extend("keep", vim.g.rustaceanvim or {}, opts or {})
|
||
|
end,
|
||
|
},
|
||
|
{
|
||
|
"neovim/nvim-lspconfig",
|
||
|
opts = {
|
||
|
servers = {
|
||
|
rust_analyzer = {},
|
||
|
taplo = {
|
||
|
keys = {
|
||
|
{
|
||
|
"K",
|
||
|
function()
|
||
|
if vim.fn.expand("%:t") == "Cargo.toml" and require("crates").popup_available() then
|
||
|
require("crates").show_popup()
|
||
|
else
|
||
|
vim.lsp.buf.hover()
|
||
|
end
|
||
|
end,
|
||
|
desc = "Show Crate Documentation",
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
setup = {
|
||
|
rust_analyzer = function()
|
||
|
return true
|
||
|
end,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|