13 个版本 (4 个稳定版)
1.2.1 | 2023 年 10 月 31 日 |
---|---|
1.2.0 | 2023 年 4 月 29 日 |
1.0.0 | 2022 年 10 月 12 日 |
0.1.8 |
|
0.1.1 | 2021 年 12 月 11 日 |
#233 in Unix API
每月下载 38 次
57KB
1.5K SLoC
deadnix
扫描 .nix
文件以查找未使用代码(未使用的变量绑定)。
与 Github Actions 一起使用
与 Nix Flakes 一起使用
帮助
$ nix run github:astro/deadnix -- --help
Find dead code in .nix files
Usage: deadnix [OPTIONS] [FILE_PATHS]...
Arguments:
[FILE_PATHS]... .nix files, or directories with .nix files inside [default: .]
Options:
-l, --no-lambda-arg Don't check lambda parameter arguments
-L, --no-lambda-pattern-names Don't check lambda attrset pattern names (don't break nixpkgs callPackage)
-_, --no-underscore Don't check any bindings that start with a _
-q, --quiet Don't print dead code report
-e, --edit Remove unused code and write to source file
-h, --hidden Recurse into hidden subdirectories and process hidden .*.nix files
--help
-f, --fail Exit with 1 if unused code has been found
-o, --output-format <OUTPUT_FORMAT> Output format to use [default: human-readable] [possible values: human-readable, json]
--exclude <EXCLUDES>... Files to exclude from analysis
-V, --version Print version
除非设置了 $NO_COLOR
环境变量,否则报告将包含 ANSI 颜色转义代码。
--exclude
参数接受多个路径。使用 --
分隔它们以传递 [FILE_PATHS]...
。
扫描未使用代码
$ nix run github:astro/deadnix example.nix
Warning: Unused declarations were found.
╭─[example.nix:1:1]
1 │unusedArgs@{ unusedArg, usedArg, ... }:
· │ ╰───── Unused lambda pattern: unusedArg
· ╰───────────────── Unused lambda pattern: unusedArgs
3 │ inherit (builtins) unused_inherit;
· ╰─────── Unused let binding: unused_inherit
5 │ unused = "fnord";
· ╰─── Unused let binding: unused
10 │ shadowed = 42;
· ╰──── Unused let binding: shadowed
11 │ _unused = unused: false;
· │ ╰─── Unused lambda argument: unused
· ╰───────────── Unused let binding: _unused
13 │ x = { unusedArg2, x ? args.y, ... }@args: used1 + x;
· ╰───── Unused lambda pattern: unusedArg2
自动删除未使用代码
在提交更改到版本控制 之前!
$ nix run github:astro/deadnix -- -eq test.nix
与 pre-commit 一起使用
将以下内容添加到项目 .pre-commit-config.yaml
中
repos:
- repo: https://github.com/astro/deadnix
rev: ID # frozen: VERSION
hooks:
- id: deadnix
#args: [--edit] # Uncomment to automatically modify files
stages: [commit]
将上面的 ID
和 VERSION
替换为相关版本标签和提交 ID 以供参考,例如
rev: da39a3ee5e6b4b0d3255bfef95601890afd80709 # frozen: v1.2.3
行为
将所有未使用的重命名为以 _
开头的 lambda 参数
如果您不希望标记它们为未使用,请使用选项 -l
/--no-lambda-arg
。
nixpkgs callPackages
具有多个导入
callPackages
通过包的 lambda attrset 模式名称猜测要注入的包。一些包使用 @args
将它们别名为传递给另一个 import ...nix args
。
由于使用的参数仅在导入的文件中命名,它们在通过 callPackage
导入的包源文件中将被视为无效,导致无法猜测调用包的依赖项。
在这种情况下,请使用选项 -L
/--no-lambda-pattern-names
。
跳过某些声明的报告
从 1.1.0 版本开始,deadenix 支持以下预处理指令来跳过以下行中绑定的检查
# deadnix: skip
如果生成的报告有误怎么办?
请提交一个 issue。不要忘记包括产生错误结果的 .nix
代码。
商业支持
作者可以被雇佣来实现您希望的功能,或者将此工具集成到您的工具链中。
依赖项
~2.4–10MB
~71K SLoC