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

Download history 31/week @ 2024-03-04 36/week @ 2024-03-11 18/week @ 2024-03-18 22/week @ 2024-03-25 88/week @ 2024-04-01 13/week @ 2024-04-08 23/week @ 2024-04-15 25/week @ 2024-04-22 14/week @ 2024-04-29 23/week @ 2024-05-06 16/week @ 2024-05-13 22/week @ 2024-05-20 22/week @ 2024-05-27 19/week @ 2024-06-03 22/week @ 2024-06-10 25/week @ 2024-06-17

89 downloads per month

MIT license

12KB
201 lines

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!()

// 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.5–3.5MB
~73K SLoC