2个版本
| 0.1.1 | 2022年4月17日 | 
|---|---|
| 0.1.0 | 2022年4月17日 | 
#48 in #replacement
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首次介绍了这项技术。
- 代码是dtolnay的syn和prettyplease的薄包装,这两者都值得比我更多的赞誉。
许可
根据您的选择,受Apache License, Version 2.0或MIT license许可。除非您明确说明,否则您提交的任何有意包括在此软件包中的贡献,根据Apache-2.0许可证的定义,应按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~2MB
~44K SLoC