2个版本

0.1.1 2023年4月17日
0.1.0 2021年3月30日

#459 in 开发工具

31 每月下载量

Apache-2.0 OR MIT

10KB
140

depub: 最小化可见性

概述

在处理中等或大型Rust代码库时,很难确定函数、结构体等的可见性是否仍然是所需的最低级别。例如,有时之前需要设置为 pub 的函数现在只需要是 pub(crate)pub(super) 或简单的私有。

depub 使用用户指定的命令(例如 cargo check)作为先知,以判断其减少项目可见性的操作是否有效。请注意,depub 完全由先知命令指导:如果它编译的代码未使用到有意公开的接口的一部分,则 depub 很可能建议降低其可见性,尽管这可能不是您想要的。您的先知覆盖范围越广,这个问题就越少。

本质上,depub 在文件中进行字符串搜索,将 pub 替换为 pub crate 并查看测试命令是否仍然成功。如果成功,则保持该可见性,否则替换回原始并尝试下一个项目。请注意,depub 本质上是破坏性的:它在操作过程中会覆盖文件,因此不要在您不希望更改的源代码上运行它!

depub考虑的可视性列表按顺序为:pubpub(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