nix-community.nixvim/plugins/languages/rust/rustaceanvim/default.nix

91 lines
2.4 KiB
Nix
Raw Normal View History

{
lib,
helpers,
config,
pkgs,
...
}:
with lib;
helpers.neovim-plugin.mkNeovimPlugin config {
name = "rustaceanvim";
defaultPackage = pkgs.vimPlugins.rustaceanvim;
maintainers = [ maintainers.GaetanLepage ];
# TODO: introduced 2024-05-17, remove on 2024-02-17
deprecateExtraOptions = true;
optionsRenamedToSettings = import ./renamed-options.nix;
extraOptions = {
rustAnalyzerPackage = helpers.mkPackageOption {
name = "rust-analyzer";
default = pkgs.rust-analyzer;
};
};
settingsOptions = import ./settings-options.nix { inherit lib helpers pkgs; };
settingsExample = {
server = {
standalone = false;
cmd = [
"rustup"
"run"
"nightly"
"rust-analyzer"
];
default_settings = {
rust-analyzer = {
inlayHints = {
lifetimeElisionHints = {
enable = "always";
};
};
check = {
command = "clippy";
};
};
};
};
};
callSetup = false;
extraConfig =
cfg:
let
configStr = ''
vim.g.rustaceanvim = ${helpers.toLuaObject cfg.settings}
'';
in
mkMerge [
{
extraPackages = [ cfg.rustAnalyzerPackage ];
# TODO: remove after 24.11
warnings =
optional
(hasAttrByPath [
"settings"
"server"
"settings"
] cfg)
''
The `plugins.rustaceanvim.settings.server.settings' option has been renamed to `plugins.rustaceanvim.settings.server.default_settings'.
Note that if you supplied an attrset and not a function you need to set this attr set in:
`plugins.rustaceanvim.settings.server.default_settings.rust-analyzer'.
'';
}
# If nvim-lspconfig is enabled:
(mkIf config.plugins.lsp.enable {
# Use the same `on_attach` callback as for the other LSP servers
plugins.rustaceanvim.settings.server.on_attach = mkDefault "__lspOnAttach";
# Ensure the plugin config is placed **after** the rest of the LSP configuration
# (and thus after the declaration of `__lspOnAttach`)
plugins.lsp.postConfig = configStr;
})
# Else, just put the plugin config anywhere
(mkIf (!config.plugins.lsp.enable) { extraConfigLua = configStr; })
];
}