What!
=====
This crate is a sort of experiment in type-driven development.
This crate provides the `what!` macro, which very similar to Rust's `todo!`
macro.
``` rust
fn hello() -> Result<(), Box<dyn Error>> {
what!()
}
```
Just like the `todo!` macro, the `what!` macro passes all typechecks to make
it easy to write/build/test unfinished code. If it ever ends up in a compiled
program, attempting to execute a `what!` macro will panic.
The fun part happens when you use the related `cargo-what` binary (this may
require a `cargo install`).
``` bash
$ cargo what
hole: expecting `std::result::Result<(), Box<dyn std::error::Error>>`
--> src/hello.rs
|
```
Now you can see the type-info of any `what!` macros you have in your program.
The `what!` macro can also except arguments, which helps reduce
the "unused variable" noise common to traditional `todo!` macros
``` rust
fn hello(a: usize, b: usize) -> usize {
let c = a..b;
what!(a, b, c)
}
```
And with `cargo what`:
```bash
$ cargo what
hole: expecting `usize`
--> src/hello.rs
|
= note: a is `usize`
= note: b is `usize`
= note: c is `std::ops::Range<usize>`
```
Emacs keybindings left as an exercise to the reader~