3 unstable releases
Uses old Rust 2015
0.1.0 | Apr 8, 2018 |
---|---|
0.0.2 | Feb 28, 2018 |
0.0.1 | Feb 27, 2018 |
#13 in #ic
130 downloads per month
12KB
201 lines
icecream-rs
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!()
// src/example.rs
#[macro_use]
extern crate icecream;
mod a_module {
fn some_function() {
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.
// main.rs
#[macro_use]
extern crate icecream;
fn main() {
icecream::set_equals_symbol(" -> ");
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
Dependencies
~2.4–7.5MB
~68K SLoC