icecream-rs

Build Status

Print debugging with inspection for Rust, inspired by icecream for Python.

I tend to use a lot of print debugging when writing Rust. icecream provides the ic!() and ice!() macros to make print debugging more convenient, by formatting print statements with helpful information like: - line number - calling function - module name - file name

Debugging with ic!()

```rust // src/example.rs

[macro_use]

extern crate icecream;

mod amodule { fn somefunction() { let x = Some(99); ic!(); ic!(x); ic!(x.unwrap() + 1); ice!(); } } ```

Plain

ic!() prints the filename and line number. example.rs:8 ❯

Matching on an identifier

ic!(x) prints the name of the variable and the value formatted with std::fmt::Debug. example.rs:9 ❯ x = Some(99)

Matching on an expression

ic!(x.unwrap() + 1) evaluates the inner expression and prints the resulting value.

example.rs:10 ❯ x.unwrap() + 1 = 100

Printing more information

ice!() prints a longer output that includes the calling module and function. example.rs::a_module::some_function:11 ❯

Configuring ic!()

You can also configure the characters used for symbols in the print output.

```rs // main.rs

[macro_use]

extern crate icecream;

fn main() { icecream::setequalssymbol(" -> "); let x = 1; ic!(x); } ```

main.rs:7 ❯ x -> 1

Tests

Tests must be run single-threaded with the --nocapture flag.

RUST_TEST_THREADS=1 cargo test -- --nocapture