#todo #macro #cargo #tells #hole #build

bin+lib cargo-what

告诉你事物的类型

4 个版本

0.1.3 2020 年 10 月 19 日
0.1.2 2020 年 10 月 18 日
0.1.1 2020 年 10 月 17 日
0.1.0 2020 年 10 月 17 日

#786 in 调试

MIT 许可证

19KB
384 代码行

是什么?

告诉你事物的类型。

这个包提供了 what! 宏。这与 todo! 宏功能类似,但同时也提供了类型信息。

fn hello() -> Result<(), Box<dyn Error>> {
    what!()
}

就像 todo! 一样,what! 通过所有类型检查,并使编写/构建/测试未完成的代码变得容易。如果它最终进入了编译程序,尝试执行 what! 将引发恐慌。

有趣的部分发生在你运行 cargo what 的时候。

$ cargo what
hole: expecting `std::result::Result<(), Box<dyn std::error::Error>>`
 --> src/hello.rs
  |
2 |     what!()
  |     ^^^^^^^

不幸的是,自定义诊断实际上并不适用于 Rust 库,需要额外的命令。可以通过 cargo 安装 cargo what

$ cargo install cargo-what

cargo what 包装了 cargo build,以显示代码中任何 what! 的类型信息。

what! 还接受参数并显示它们的类型,这有助于减少“未使用变量”的噪音。

fn hello(a: usize, b: usize) -> usize {
    let c = a..b;
    what!(a, b, c)
}

使用 cargo what

$ cargo what
hole: expecting `usize`
 --> src/hello.rs
  |
3 |     what!(a, b, c)
  |     ^^^^^^^^^^^^^^
  |
  = note: a is `usize`
  = note: b is `usize`
  = note: c is `std::ops::Range<usize>`

Emacs 快捷键留给读者练习。

依赖

~0–11MB
~69K SLoC