From 688288376e36965d907f87143d5cc8292e79b17f Mon Sep 17 00:00:00 2001 From: Sander Date: Sun, 15 Dec 2024 18:54:18 +0400 Subject: [PATCH] Simplify internal `before`/`after` code - Remove `before` and `after` from the `raw` config. These are not valid pre-commit configuration options and should not be here. - Remove code to filter out `before` and `after` from the `raw` config. - Expose the `id` inside the hook to make it easier to reference and sort. - Set `id` to the attr name of the hook, instead of the `name`. This corrects a mistake make in the module transition (#397). Technically, a breaking change, but we haven't seen feedback on the initial mistake. --- modules/hook.nix | 35 +++++++++++++++++++++++++++++++---- modules/pre-commit.nix | 21 ++------------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/modules/hook.nix b/modules/hook.nix index b1d7ab6b..297a7cfc 100644 --- a/modules/hook.nix +++ b/modules/hook.nix @@ -25,10 +25,39 @@ in ''; }; + id = mkOption { + type = types.str; + default = name; + defaultText = "the attribute name the hook submodule is bound to"; + description = + '' + The unique identifier for the hook. + + You do not need to set or modify this value. + + The `id` is used to reference a hook when using `pre-commit run `. + It can also be used to reference the hook in other hooks' `before` and `after` fields to define the order in which hooks run. + + The `id` is set to the attribute name the hook submodule is bound to in the parent module. + For example, the `id` of following hook would be `my-hook`. + + ```nix + { + hooks = { + my-hook = { + enable = true; + entry = "my-hook"; + }; + } + } + ``` + ''; + }; + name = mkOption { type = types.str; - defaultText = lib.literalMD "internal name, same as `id`"; default = name; + defaultText = lib.literalMD "the attribute name the hook submodule is bound to, same as `id`"; description = '' The name of the hook. Shown during hook execution. @@ -202,14 +231,12 @@ in ''; default = [ ]; }; - }; config = { raw = { - inherit (config) name entry language files types types_or exclude_types pass_filenames fail_fast require_serial stages verbose always_run args before after; - id = config.name; + inherit (config) id name entry language files types types_or exclude_types pass_filenames fail_fast require_serial stages verbose always_run args; exclude = mergeExcludes config.excludes; }; }; diff --git a/modules/pre-commit.nix b/modules/pre-commit.nix index a9b2b2ba..b24de401 100644 --- a/modules/pre-commit.nix +++ b/modules/pre-commit.nix @@ -9,7 +9,6 @@ let mapAttrsToList mkOption types - removeAttrs remove ; @@ -34,25 +33,9 @@ let let sortedHooks = lib.toposort (a: b: builtins.elem b.id a.before || builtins.elem a.id b.after) - (mapAttrsToList - (id: value: - value.raw // { - inherit id; - before = value.raw.before; - after = value.raw.after; - } - ) - enabledHooks - ); - cleanedHooks = builtins.map ( - hook: - removeAttrs hook [ - "before" - "after" - ] - ) sortedHooks.result; + (builtins.attrValues enabledHooks); in - cleanedHooks; + map (value: value.raw) sortedHooks.result; configFile = performAssertions (