PrettyDump

NAME

PrettyDump - represent a Raku data structure in a human readable way

SYNOPSIS

Use it in the OO fashion:

use PrettyDump;
	my $pretty = PrettyDump.new:
		after-opening-brace => True
		;
my $raku = { a => 1 };
	say $pretty.dump: $raku; # '{:a(1)}'

Or, use its subroutine:

use PrettyDump;
my $ds = { a => 1 };
say pretty-dump( $ds );
# setting are named arguments
	say pretty-dump( $ds
		:indent("\t")
		);

Or, a shorter shortcut that dumps and outputs to standard output:

use PrettyDump;
my $ds = { a => 1 };
	pd $ds;

DESCRIPTION

This module creates nicely formatted representations of your data structure for your viewing pleasure. It does not create valid Raku code and is not a serialization tool.

When .dump encounters an object in your data structure, it first checks for a .PrettyDump method. It that exists, it uses it to stringify that object. Otherwise, .dump looks for internal methods. So far, this module handles these types internally:

  • * List

  • * Array

  • * Pair

  • * Map

  • * Hash

  • * Match

Custom dump methods

If you define a .PrettyDump method in your class, .dump will call that when it encounters an object in that class. The first argument to .PrettyDump is the dumper object, so you have access to some things in that class:

class Butterfly {
		has $.genus;
		has $.species;
method PrettyDump ( PrettyDump $pretty, Int:D :$depth = 0 ) {
			"_{$.genus} {$.species}_";
			}
		}

The second argument is the level of indentation so far. If you want to dump other objects that your object contains, you should call .dump again and pass it the value of $depth+1 as it's second argument:

class Butterfly {
		has $.genus;
		has $.species;
		has $.some-other-object;
method PrettyDump ( PrettyDump $pretty, Int:D :$depth = 0 ) {
			"_{$.genus} {$.species}_" ~
			$pretty.dump: $some-other-object, $depth + 1;
			}
		}

You can add a PrettyDump method to an object with but role:

use PrettyDump;
my $pretty = PrettyDump.new;
my Int $a = 137;
	put $pretty.dump: $a;
my $b = $a but role {
		method PrettyDump ( PrettyDump:D $pretty, Int:D :$depth = 0 ) {
			"({self.^name}) {self}";
			}
		};
	put $pretty.dump: $b;

This outputs:

137
	(Int+{<anon|140644552324304>}) 137

Per-object dump handlers

You can add custom handlers to your PrettyDump object. Once added, the object will try to use a handler first. This means that you can override builtin methods.

$pretty = PrettyDump.new: ... ;
	$pretty.add-handler: "SomeTypeNameStr", $code-thingy;

The code signature for $code-thingy must be:

(PrettyDump $pretty, $ds, Int:D :$depth = 0 --> Str)

Once you are done with the per-object handler, you can remove it:

$pretty.remove-handler: "SomeTypeNameStr";

This allows you to temporarily override a builtin method. You might want to mute a particular object, for instance.

You can completely ignore a type as if it's not even there. It's a wrapper around g that supplies the code for you.

$pretty.ignore-type: SomeType;

This works by returning a Str type object instead of a defined string. If the type you want to exclude is at the top of the data structure, you'll get back a type object. But why are you dumpng something you want to ignore?

Formatting and Configuration

You can set some tidy-like settings to control how .dump will present the data stucture:

  • debug

Output debugging info to watch the module walk the data structure.

  • indent

The default is a tab.

  • intra-group-spacing

The spacing inserted inside (empty) ${} and $[] constructs. The default is the empty string.

  • pre-item-spacing

The spacing inserted just after the opening brace or bracket of non-empty ${} and $[] constructs. The default is a newline.

  • post-item-spacing

The spacing inserted just before the close brace or bracket of non-empty ${} and $[] constructs. The default is a newline.

  • pre-separator-spacing

The spacing inserted just before the comma separator of non-empty ${} and $[] constructs. The default is the empty string.

  • post-separator-spacing

The spacing inserted just after the comma separator of non-empty ${} and $[] constructs. Defaults to a newline.

AUTHOR

brian d foy, < <[email protected]> >.

This module started as Pretty::Printer from Jeff Goff, which you can find at https://github.com/drforr/perl6-pp

Parts of this module were supported by a grant from the Perl Foundation.

SOURCE

The repository for this source is in GitHub at https://github.com/briandfoy/raku-PrettyDump

COPYRIGHT

Copyright Ā© 2017-2021, brian d foy < <[email protected]> >

LICENSE

This module is available under the Artistic License 2.0. A copy of this license should have come with this distribution in the LICENSE file.

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.