cargo-what 0.1.2

Tells you what type things are
Documentation
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
  |
2 |     what!()
  |     ^^^^^^^
```

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
  |
3 |     what!(a, b, c)
  |     ^^^^^^^^^^^^^^
  = note: a is `usize`
  = note: b is `usize`
  = note: c is `std::ops::Range<usize>`
```

Emacs keybindings left as an exercise to the reader~