#replace #rustc #pass #debugging #unpretty-everybody-loops

app everybody_loops

为rustc的-=everybody_loops转换提供替代方案

2个版本

0.1.1 2022年4月17日
0.1.0 2022年4月17日

#48 in #replacement

MIT/Apache

8KB

everybody_loops

为rustc的-=everybody_loops转换提供替代方案。

用法

选取一个包含大量函数的文件,您想要去除这些函数。

fn main() {
    let x = 1;
    let y = 2;
    let z = x + y;
}
struct Foo;

impl std::fmt::Debug for Foo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(f, "Foo")
    }
}

impl Foo {
    fn boo(&self) {
        println!("boo");
    }
}

const f: () = {
    fn noop() {
        let x = 8;
    }
}

只需运行

everybody_loops file.rs

现在您有了更简单的代码。

fn main() {
    loop {}
}
struct Foo;
impl std::fmt::Debug for Foo {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        loop {}
    }
}
impl Foo {
    fn boo(&self) {
        loop {}
    }
}
const f: () = {
    fn noop() {
        loop {}
    }
};

安装

cargo install --locked everybody_loops

限制

此方法不适用于返回类型中有impl Trait的函数,因为编译器需要指定一个具体类型。

现有技术

  • 这曾经是编译器的功能之一,但在#93913中被移除。
  • 这篇博客Felix S Klock II首次介绍了这项技术。
  • 代码是dtolnaysynprettyplease的薄包装,这两者都值得比我更多的赞誉。

许可

根据您的选择,受Apache License, Version 2.0MIT license许可。
除非您明确说明,否则您提交的任何有意包括在此软件包中的贡献,根据Apache-2.0许可证的定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~2MB
~44K SLoC