8个版本
0.1.7 | 2023年3月23日 |
---|---|
0.1.6 | 2023年2月27日 |
0.1.4 | 2022年10月11日 |
0.1.3 | 2022年8月21日 |
0.1.0 | 2021年12月31日 |
#79 在 过程宏
63 每月下载量
27KB
631 代码行
rustfmt_if_chain
rustfmt_if_chain
不一定能在所有Rust源文件上正常工作,但它应该能在大多数Clippy源文件上工作。
cargo install rustfmt_if_chain
Usage: rustfmt_if_chain [ARGS]
Arguments ending with `.rs` are considered source files and are
formatted. All other arguments are forwarded to `rustfmt`, with
one exception.
The one argument not forwarded to `rustfmt` is
`--preformat-failure-is-warning`. If this option is passed and
`rustfmt` fails on an unmodified source file, a warning results
instead of an error.
示例
-
之前
fn main() -> PhilosophicalResult<()> { if_chain! { if let Some (it) = tree . falls_in (forest) ; if ! listeners . any (| one | one . around_to_hear (it)) ; if ! it . makes_a_sound () ; then { return Err (PhilosophicalError :: new ()) ; } } Ok(()) }
-
之后
fn main() -> PhilosophicalResult<()> { if_chain! { if let Some(it) = tree.falls_in(forest); if !listeners.any(|one| one.around_to_hear(it)); if !it.makes_a_sound(); then { return Err(PhilosophicalError::new()); } } Ok(()) }
工作原理
- 预格式化检查:在原始源文件上运行
rustfmt
以验证它可以被格式化。 - 根据以下规则重写原始源文件中的
if_chain
调用,其中x
是一个在文件中其他地方未出现的标识符if_chain!
->fn x()
或|x|
(取决于调用是项目还是表达式)if ... ;
->if ... { x; }
then
->if x
- 在步骤1生成的文件上运行
rustfmt
。 - 在步骤2生成的文件中,步骤1的重写被撤销。
* 步骤0并非绝对必要,但它有助于识别由步骤1的限制引起的步骤2的失败。
已知问题
rustfmt_if_chain --check FILENAME
无法正常工作。一种解决方案是使用rustfmt_if_chain FILENAME && git diff --exit-code
。if_chain
的嵌套使用处理不正确:只有最外层的使用会被格式化。
依赖关系
~4–14MB
~179K SLoC