/ plugins / rustacean / configuration.lua
configuration.lua
 1  local executors = require("rustaceanvim.executors")
 2  vim.g.rustaceanvim = function()
 3    return {
 4      tools = {
 5        executor = executors.toggleterm,
 6        test_executor = "neotest",
 7        crate_test_executor = "neotest",
 8        enable_clippy = true,
 9        enable_nextest = true,
10      },
11      server = {
12        cmd = { "rust-analyzer" },
13  
14        on_attach = function(_, bufnr)
15          vim.keymap.set("v", "<leader>j", function()
16            vim.cmd.RustLsp("joinLines")
17          end, { buffer = bufnr, desc = "rust: join lines" })
18          vim.keymap.set("n", "<leader>cc", function()
19            vim.cmd.RustLsp("codeAction")
20          end, { buffer = bufnr, desc = "rust: code actions" })
21          vim.keymap.set("n", "<leader>rT", function()
22            vim.cmd.RustLsp({ "testables", bang = true })
23          end, { buffer = bufnr, desc = "rust: run last ran test" })
24          vim.keymap.set("n", "<leader>rd", function()
25            vim.cmd.RustLsp("openDocs")
26          end, { buffer = bufnr, desc = "rust: open rustdoc for symbol under cursor" })
27          vim.keymap.set("n", "<leader>rh", function()
28            vim.cmd.RustLsp({ "view", "hir" })
29          end, { buffer = bufnr, desc = "rust: view HIR" })
30          vim.keymap.set("n", "<leader>rm", function()
31            vim.cmd.RustLsp({ "view", "mir" })
32          end, { buffer = bufnr, desc = "rust: view MIR" })
33          vim.keymap.set("n", "<leader>rr", function()
34            vim.cmd.RustLsp({ "flyCheck", "run" })
35          end, { buffer = bufnr, desc = "rust: run checks" })
36          vim.keymap.set("n", "<leader>rt", function()
37            vim.cmd.RustLsp({ "testables" })
38          end, { buffer = bufnr, desc = "rust: run test" })
39        end,
40  
41        settings = {
42          ["rust-analyzer"] = {
43            cargo = {
44              buildScripts = { enable = true },
45              allTargets = true,
46            },
47            hover = {
48              actions = {
49                implementations = true,
50                references = true,
51                run = true,
52              },
53            },
54            imports = {
55              granularity = {
56                group = "module",
57              },
58              prefix = "self",
59            },
60            inlayHints = {
61              bindingModeHints = { enable = true },
62              closureCaptureHints = { enable = true },
63              closureReturnTypeHints = { enable = "always" },
64              genericParameterHints = {
65                lifetime = {
66                  enable = true,
67                },
68                type = {
69                  enable = true,
70                },
71              },
72              lifetimeElisionHints = {
73                enable = "skip_trivial",
74                useParameterNames = true,
75              },
76              maxLength = nil,
77            },
78            procMacro = { enable = true },
79            rust = { analyzerTargetDir = true },
80          },
81        },
82      },
83    }
84  end