From 6a1bf6bdc30e0d92139165d30977db9d6ace4c69 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Tue, 24 Sep 2024 07:02:22 +0100 Subject: [PATCH] modules/output: check warnings+assertions on `build.package` Add a `build.packageUnchecked` option for use instead of the old `check` evalNixvim argument. --- flake-modules/legacy-packages.nix | 1 - lib/modules.nix | 39 ++++++------------- lib/tests.nix | 3 -- modules/top-level/output.nix | 28 ++++++++++++- modules/top-level/test.nix | 4 +- .../modules/performance/combine-plugins.nix | 20 +++++----- wrappers/darwin.nix | 1 - wrappers/hm.nix | 1 - wrappers/nixos.nix | 1 - 9 files changed, 50 insertions(+), 48 deletions(-) diff --git a/flake-modules/legacy-packages.nix b/flake-modules/legacy-packages.nix index 072ae066..6dbab843 100644 --- a/flake-modules/legacy-packages.nix +++ b/flake-modules/legacy-packages.nix @@ -15,7 +15,6 @@ extraSpecialArgs = { defaultPkgs = pkgs; }; - check = false; }; }; }; diff --git a/lib/modules.nix b/lib/modules.nix index c38e48a8..063cbfac 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -20,32 +20,17 @@ rec { { modules ? [ ], extraSpecialArgs ? { }, - # Set to false to disable warnings and assertions - # Intended to aid accessing config.test.derivation - # WARNING: This argument may be removed without notice: - check ? true, - }: - let - result = lib.evalModules { - modules = [ ../modules/top-level ] ++ modules; - specialArgs = specialArgsWith extraSpecialArgs; - }; + check ? null, # TODO: Remove stub + }@args: + # TODO: `check` argument removed 2024-09-24 + # NOTE: this argument was always marked as experimental + assert lib.assertMsg (!args ? "check") + "`evalNixvim`: passing `check` is no longer supported. Checks are now done when evaluating `config.build.package` and can be avoided by using `config.build.packageUnchecked` instead."; + lib.evalModules { + modules = [ ../modules/top-level ] ++ modules; + specialArgs = specialArgsWith extraSpecialArgs; + }; - failedAssertions = getAssertionMessages result.config.assertions; - - checked = - if failedAssertions != [ ] then - throw "\nFailed assertions:\n${lib.concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}" - else - lib.showWarnings result.config.warnings result; - in - if check then checked else result; - - # Return the messages for all assertions that failed - getAssertionMessages = - assertions: - lib.pipe assertions [ - (lib.filter (x: !x.assertion)) - (lib.map (x: x.message)) - ]; + # TODO: Removed 2024-09-24 + getAssertionMessages = throw "`modules.getAssertionMessages` has been removed."; } diff --git a/lib/tests.nix b/lib/tests.nix index b13ba33f..eaaa76c9 100644 --- a/lib/tests.nix +++ b/lib/tests.nix @@ -66,9 +66,6 @@ let extraSpecialArgs = { defaultPkgs = pkgs; } // extraSpecialArgs; - # Don't check assertions/warnings while evaluating nixvim config - # We'll let the test derivation handle that - check = false; }; in result.config.build.test; diff --git a/modules/top-level/output.nix b/modules/top-level/output.nix index 4d46cc49..84625c8a 100644 --- a/modules/top-level/output.nix +++ b/modules/top-level/output.nix @@ -73,7 +73,30 @@ in package = mkOption { type = types.package; - description = "Wrapped Neovim."; + description = '' + Wrapped Neovim. + + > [!NOTE] + > Evaluating this option will also check `assertions` and print any `warnings`. + > If this is not desired, you can use `build.packageUnchecked` instead. + ''; + readOnly = true; + defaultText = lib.literalExpression "config.build.packageUnchecked"; + apply = + let + assertions = builtins.concatMap (x: lib.optional (!x.assertion) x.message) config.assertions; + in + if assertions != [ ] then + throw "\nFailed assertions:\n${lib.concatMapStringsSep "\n" (msg: "- ${msg}") assertions}" + else + lib.showWarnings config.warnings; + }; + + packageUnchecked = mkOption { + type = types.package; + description = '' + Wrapped Neovim (without checking warnings or assertions). + ''; readOnly = true; }; @@ -317,7 +340,8 @@ in in { build = { - package = wrappedNeovim; + package = config.build.packageUnchecked; + packageUnchecked = wrappedNeovim; inherit initFile initSource; printInitPackage = pkgs.writeShellApplication { diff --git a/modules/top-level/test.nix b/modules/top-level/test.nix index 60dd8072..35e68ba0 100644 --- a/modules/top-level/test.nix +++ b/modules/top-level/test.nix @@ -9,7 +9,7 @@ let cfg = config.test; inherit (config) warnings; - assertions = lib.nixvim.modules.getAssertionMessages config.assertions; + assertions = builtins.concatMap (x: lib.optional (!x.assertion) x.message) config.assertions; in { options.test = { @@ -70,7 +70,7 @@ in build.test = pkgs.runCommandNoCCLocal cfg.name { - nativeBuildInputs = [ config.build.package ]; + nativeBuildInputs = [ config.build.packageUnchecked ]; # Allow inspecting the test's module a little from the repl # e.g. diff --git a/tests/test-sources/modules/performance/combine-plugins.nix b/tests/test-sources/modules/performance/combine-plugins.nix index 8e647c65..cadeb355 100644 --- a/tests/test-sources/modules/performance/combine-plugins.nix +++ b/tests/test-sources/modules/performance/combine-plugins.nix @@ -33,7 +33,7 @@ in ''; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" == 1; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 1; message = "More than one plugin is defined in packpathDirs, expected one plugin pack."; } ]; @@ -50,7 +50,7 @@ in ]; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" >= 2; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" >= 2; message = "Only one plugin is defined in packpathDirs, expected at least two."; } ]; @@ -77,7 +77,7 @@ in ''; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" == 1; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 1; message = "More than one plugin is defined in packpathDirs."; } ]; @@ -105,7 +105,7 @@ in ''; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" == 1; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 1; message = "More than one plugin is defined in packpathDirs."; } ]; @@ -132,7 +132,7 @@ in ''; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" == 1; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 1; message = "More than one plugin is defined in packpathDirs."; } ]; @@ -186,11 +186,11 @@ in ''; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" == 1; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 1; message = "More than one start plugin is defined in packpathDirs"; } { - assertion = pluginCount config.build.package config.build.extraFiles "opt" == 2; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "opt" == 2; message = "Less than two opt plugins are defined in packpathDirs"; } ]; @@ -233,7 +233,7 @@ in ''; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" == 1; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 1; message = "More than one start plugin is defined in packpathDirs"; } ]; @@ -303,7 +303,7 @@ in ''; assertions = [ { - assertion = pluginCount config.build.package config.build.extraFiles "start" == 1; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 1; message = "More than one start plugin is defined in packpathDirs"; } ]; @@ -369,7 +369,7 @@ in assertions = [ { # plugin-pack, nvim-treesitter, nvim-lspconfig, telescope-nvim, nvim-cmp - assertion = pluginCount config.build.package config.build.extraFiles "start" == 5; + assertion = pluginCount config.build.packageUnchecked config.build.extraFiles "start" == 5; message = "Wrong number of plugins in packpathDirs"; } ]; diff --git a/wrappers/darwin.nix b/wrappers/darwin.nix index 09658f7d..e985efb8 100644 --- a/wrappers/darwin.nix +++ b/wrappers/darwin.nix @@ -24,7 +24,6 @@ let modules = [ ./modules/darwin.nix ]; - check = false; }; in { diff --git a/wrappers/hm.nix b/wrappers/hm.nix index 08a4f7d5..ce2b9b42 100644 --- a/wrappers/hm.nix +++ b/wrappers/hm.nix @@ -31,7 +31,6 @@ let }; } ]; - check = false; }; in { diff --git a/wrappers/nixos.nix b/wrappers/nixos.nix index 93573082..49a147ca 100644 --- a/wrappers/nixos.nix +++ b/wrappers/nixos.nix @@ -24,7 +24,6 @@ let modules = [ ./modules/nixos.nix ]; - check = false; }; in {