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 18/week @ 2024-07-21 122/week @ 2024-07-28 40/week @ 2024-08-04 31/week @ 2024-08-11 46/week @ 2024-08-18 46/week @ 2024-08-25 23/week @ 2024-09-01 50/week @ 2024-09-08 33/week @ 2024-09-15 49/week @ 2024-09-22 36/week @ 2024-09-29 27/week @ 2024-10-06 35/week @ 2024-10-13 22/week @ 2024-10-20 30/week @ 2024-10-27 41/week @ 2024-11-03

130 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.4–7.5MB
~68K SLoC