2个版本
0.1.1 | 2023年4月17日 |
---|---|
0.1.0 | 2021年3月30日 |
#459 in 开发工具
31 每月下载量
10KB
140 行
depub: 最小化可见性
概述
在处理中等或大型Rust代码库时,很难确定函数、结构体等的可见性是否仍然是所需的最低级别。例如,有时之前需要设置为 pub
的函数现在只需要是 pub(crate)
,pub(super)
或简单的私有。
depub
使用用户指定的命令(例如 cargo check
)作为先知,以判断其减少项目可见性的操作是否有效。请注意,depub
完全由先知命令指导:如果它编译的代码未使用到有意公开的接口的一部分,则 depub
很可能建议降低其可见性,尽管这可能不是您想要的。您的先知覆盖范围越广,这个问题就越少。
本质上,depub
在文件中进行字符串搜索,将 pub
替换为 pub crate
并查看测试命令是否仍然成功。如果成功,则保持该可见性,否则替换回原始并尝试下一个项目。请注意,depub
本质上是破坏性的:它在操作过程中会覆盖文件,因此不要在您不希望更改的源代码上运行它!
depub
考虑的可视性列表按顺序为:pub
、pub(crate)
、pub(super)
和私有(即完全没有pub
关键字)。depub
搜索pub
/pub(crate)
/pub(super)
实例,降低它们的可视性一级,并尝试执行预言命令。如果成功,它将尝试下一级,直到达到私有可视性。
由于降低一个项目的可视性可以启用其他项目的可视性降低,depub
会持续运行“回合”直到达到一个固定点。最大回合数等于代码库中可见项目的数量,尽管在实践中可能只需要2到3回合。
用法
depub
的用法如下
depub -c <command> file_1 [... file_n]
其中<command>
是一个字符串,将被传递到/bin/sh -c
执行以确定修改后的源代码是否仍然有效。
要降低普通Rust项目的可视性,请使用cd
命令切换到您的Rust代码库并执行
$ find . -name "*.rs" | \
xargs /path/to/depub -c "cargo check && cargo check --test"
depub
会告知您其进度。完成后,使用diff
比较您的代码库,并接受您认为合适的建议。请注意,depub
目前使用字符串搜索和替换,因此它会愉快地将注释中的字符串pub
更改为pub(crate)
-- 您不应该在没有至少进行简要检查的情况下接受其建议。
与库一起使用
在库上运行depub
通常会将其所有有意设置为pub
的功能降低到私有可视性。您可以在depub
运行后手动删除这些功能,但这可能很麻烦,也可能降低了其他一系列项目的可视性。
为了避免这种情况,在预言命令中将一个或多个库的用户作为预言的一部分。暂时修改他们的Cargo.toml
,将其指向您库的本地版本,并使用类似以下命令:
$ find . -name "*.rs" | \
xargs /path/to/depub -c " \
cargo check && cargo check --test && \
cd /path/to/lib && cargo check && cargo check --test"
依赖项
~2.5–3.5MB
~56K SLoC