Skip to content

Commit

Permalink
Simplify internal before/after code
Browse files Browse the repository at this point in the history
Consolidates previous work from #533 and #536.

- Removes `before` and `after` from the `raw` config. These are not valid
  pre-commit configuration options and should not be here.
- Removes code to filter out `before` and `after` from the `raw` config.
  There's nothing to filter out if they're not in the config in the
  first place.
- Set `id` to the attr name of the hook, instead of the `name`. This
  corrects a mistake made in the module transition (#397). Technically,
  a breaking change, but we haven't had feedback from the initial
  mistake.
- Expose `id` in options.
  • Loading branch information
sandydoo committed Dec 15, 2024
1 parent 4c8e75e commit 4d56242
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 23 deletions.
35 changes: 31 additions & 4 deletions modules/hook.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 <id>`.
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.
Expand Down Expand Up @@ -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;
};
};
Expand Down
21 changes: 2 additions & 19 deletions modules/pre-commit.nix
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ let
mapAttrsToList
mkOption
types
removeAttrs
remove
;

Expand All @@ -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;
builtins.map (value: value.raw) sortedHooks.result;

configFile =
performAssertions (
Expand Down

0 comments on commit 4d56242

Please sign in to comment.