From e32bc41b85886c7742cb9051c065086d51185a68 Mon Sep 17 00:00:00 2001 From: Soliprem <73885403+Soliprem@users.noreply.github.com> Date: Wed, 26 Nov 2025 01:54:48 +0100 Subject: [PATCH] modules/languages: fix rust crates-nvim completion deprecation (#1247) * modules/languages: fix rust crates-nvim deprecation move the completion into the lsp * plugins/languages: cleanup old FIXME, remove comments, complete completion config for crates-nvim * docs/rl: add entry for crates-nvim fix --- configuration.nix | 2 +- docs/release-notes/rl-0.8.md | 1 + modules/plugins/languages/rust.nix | 63 ++++++++++++++---------------- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/configuration.nix b/configuration.nix index 750862af..cc314288 100644 --- a/configuration.nix +++ b/configuration.nix @@ -69,7 +69,7 @@ isMaximal: { typst.enable = isMaximal; rust = { enable = isMaximal; - crates.enable = isMaximal; + extensions.crates-nvim.enable = isMaximal; }; # Language modules that are not as common. diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 07550898..982102ac 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -507,6 +507,7 @@ - fix broken `neorg` grammars - remove obsolete warning in the `otter` module - add mainProgram attribute to vala language server wrapper +- fix `crates-nvim`'s completions by using the in-program lsp [JManch](https://github.com/JManch): diff --git a/modules/plugins/languages/rust.nix b/modules/plugins/languages/rust.nix index 157c3d17..fea75305 100644 --- a/modules/plugins/languages/rust.nix +++ b/modules/plugins/languages/rust.nix @@ -10,7 +10,7 @@ inherit (lib.strings) optionalString; inherit (lib.lists) isList; inherit (lib.attrsets) attrNames; - inherit (lib.types) bool package str listOf either enum; + inherit (lib.types) bool package str listOf either enum int; inherit (lib.nvim.lua) expToLua toLuaObject; inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption deprecatedSingleOrListOf; @@ -94,19 +94,26 @@ in { enable = mkEnableOption "crates.io dependency management [crates-nvim]"; setupOpts = mkPluginSetupOption "crates-nvim" { - completion.cmp.enable = mkOption { - type = bool; - default = config.vim.autocomplete.nvim-cmp.enable; - defaultText = "{option}`config.vim.autocomplete.nvim-cmp.enable`"; - description = '' - Whether to add crates.nvim as a source for completion plugins. The following - plugins are supported by crates.nvim: - - * nvim-cmp - * coq.nvim - - However nvf only supports auto-setup for nvim-cmp. - ''; + lsp = { + enabled = mkEnableOption "crates.nvim's in-process language server" // {default = cfg.extensions.crates-nvim.enable;}; + actions = mkEnableOption "actions for crates-nvim's in-process language server" // {default = cfg.extensions.crates-nvim.enable;}; + completion = mkEnableOption "completion for crates-nvim's in-process language server" // {default = cfg.extensions.crates-nvim.enable;}; + hover = mkEnableOption "hover actions for crates-nvim's in-process language server" // {default = cfg.extensions.crates-nvim.enable;}; + }; + completion = { + crates = { + enabled = mkEnableOption "completion for crates-nvim's in-process language server" // {default = cfg.extensions.crates-nvim.enable;}; + max_results = mkOption { + description = "The maximum number of search results to display"; + type = int; + default = 8; + }; + min_chars = mkOption { + description = "The minimum number of characters to type before completions begin appearing"; + type = int; + default = 3; + }; + }; }; }; }; @@ -197,26 +204,14 @@ in { }) (mkIf cfg.extensions.crates-nvim.enable { - vim = let - withCompletion = cfg.extensions.crates-nvim.setupOpts.completion.cmp.enable; - in - mkMerge [ - { - startPlugins = ["crates-nvim"]; - pluginRC.rust-crates = entryAnywhere '' - require("crates").setup(${toLuaObject cfg.extensions.crates-nvim.setupOpts}) - ''; - } - - # FIXME: this will not be necessary once crates.nvim creates a new release that - # ships improvements to the in-progress LSP module. If updating > 0.7.1, remember - # to update this section. - # See: - # - (mkIf withCompletion { - autocomplete.nvim-cmp.sources = {crates = "[Crates]";}; - }) - ]; + vim = mkMerge [ + { + startPlugins = ["crates-nvim"]; + pluginRC.rust-crates = entryAnywhere '' + require("crates").setup(${toLuaObject cfg.extensions.crates-nvim.setupOpts}) + ''; + } + ]; }) ]); }