#single-line #compact #pretty-print #output #fmt #boilerplate

compact-debug

Monkey-patches Rust's fmt system to make pretty-printing more compact

2 releases

0.1.1 Jul 11, 2024
0.1.0 Nov 15, 2023

#354 in Value formatting

MIT/Apache

8KB
89 lines

Compact-Debug

{:#?} formatting, and the dbg!() macro, sound nice on paper. But once you try using them...

Goto(
    Address(
        30016,
    ),
),
Label(
    Address(
        29990,
    ),
),
Expr(
    Expr(
        Expr(
            [
                Var(
                    0,
                ),
                Const(
                    0,
                ),
                Op(
                    Ne,
                ),
            ],
        ),
    ),
    Address(
        30016,
    ),
),

Your dreams of nice and readable output are shattered by a chunk of output more porous than cotton candy, with approximately two tokens of content on each line. Screenful upon screenful of vacuous output for even a moderately complex type. Upset, you reluctantly replace your derived Debug implementation with a manual one that eschews DebugTuple in favor of write_str. However, this results in a catastrophic amount of boilerplate code, and doesn't affect types outside of your control, like the ubiquitous Option.

That's where this crate comes in. It monkey-patches the pretty-printing machinery so that DebugTuple is printed on a single line regardless of # flag. The above snippet is printed as:

Goto(Address(30016)),
Label(Address(29990)),
Expr(Expr(Expr([
    Var(0),
    Const(0),
    Op(Ne),
])), Address(30016)),

This crate currently only supports x86_64 architecture.

Dependencies

~0.2–8MB
~43K SLoC