1
0
Fork 0
mirror of https://github.com/hercules-ci/flake-parts.git synced 2024-12-14 11:47:31 +00:00

Add extraDebug, lint

This commit is contained in:
Robert Hensing 2023-04-11 01:30:19 +02:00
parent dcc36e45d0
commit 56adbf5a8a
4 changed files with 87 additions and 1 deletions

View file

@ -8,6 +8,7 @@
./modules/flake.nix ./modules/flake.nix
./modules/formatter.nix ./modules/formatter.nix
./modules/legacyPackages.nix ./modules/legacyPackages.nix
./modules/lint.nix
./modules/moduleWithSystem.nix ./modules/moduleWithSystem.nix
./modules/nixosConfigurations.nix ./modules/nixosConfigurations.nix
./modules/nixosModules.nix ./modules/nixosModules.nix

View file

@ -99,6 +99,17 @@ rec {
config = { }; config = { };
}; };
lints = mkFlake
{ inputs.self = { }; }
{
lint.messages = [ "a top level message" ];
systems = [ "x86_64-linux" "aarch64-darwin" ];
debug = true;
perSystem = {
lint.messages = [ "a per-system message" ];
};
};
runTests = ok: runTests = ok:
assert empty == { assert empty == {
@ -148,6 +159,12 @@ rec {
assert flakeModulesDisable.test123 == "option123"; assert flakeModulesDisable.test123 == "option123";
assert lints.debug.lint.messages == [
"a top level message"
"in perSystem.aarch64-darwin: a per-system message"
"in perSystem.x86_64-linux: a per-system message"
];
ok; ok;
result = runTests "ok"; result = runTests "ok";

View file

@ -14,7 +14,7 @@ let
removeAttrs removeAttrs
; ;
mkDebugConfig = { config, options, extendModules }: config // { mkDebugConfig = { config, options, extendModules }: config // config.extraDebug // {
inherit config; inherit config;
inherit (config) _module; inherit (config) _module;
inherit options; inherit options;
@ -52,6 +52,13 @@ in
See [Expore and debug option values](../debug.html) for more examples. See [Expore and debug option values](../debug.html) for more examples.
''; '';
}; };
extraDebug = mkOption {
type = types.attrsOf types.raw;
default = { };
description = ''
Extra values to return the flake `debug` attribute (if that has been enabled).
'';
};
perSystem = mkPerSystemOption perSystem = mkPerSystemOption
({ options, config, extendModules, ... }: { ({ options, config, extendModules, ... }: {
_file = ./formatter.nix; _file = ./formatter.nix;

61
modules/lint.nix Normal file
View file

@ -0,0 +1,61 @@
{ config, flake-parts-lib, lib, ... }:
let
inherit (flake-parts-lib)
mkPerSystemOption
;
in
{
options = {
lint = {
messages = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Diagnostic messages that a flake author may or may not care about.
For example, a module might detect that it's used in a weird way, but
not be sure whether that's a mistake or not. Emitting a warning would
be too much, but with this option, the author can still find the
detected problem, by enabling [`debug`](#opt-debug) and querying
the `debug.lint.messages` flake attribute in `nix repl`.
This feature is not gated by an enable option, as performance does not
suffer from an unevaluated option.
There's also no option to upgrade to warnings, because that would make
evaluation dependent on rather many options, even if the caller only
needs one specific unrelated thing from the flake.
A more complex interface could attach the warnings to specific flake
attribute paths, but that's not implemented for now.
'';
};
};
perSystem = mkPerSystemOption
({ ... }: {
options.lint.messages = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Diagnostic messages that a flake author may or may not care about.
These messages are added to the `debug.lint.messages` flake attribute,
when [`debug`](#opt-debug) is enabled.
'';
};
});
};
config = {
extraDebug.lint.toplevel.messages = config.lint.messages;
extraDebug.lint.messages =
config.lint.messages ++
lib.concatLists (
lib.mapAttrsToList
(sysName: sys:
map
(msg: "in perSystem.${sysName}: ${msg}")
sys.lint.messages
)
config.allSystems
);
};
}