PrettyPrinting is a Julia library for optimal formatting of composite data structures. It works by generating all possible layouts of the data, and then selecting the best layout that fits the screen width. The algorithm for finding the optimal layout is based upon Phillip Yelland, A New Approach to Optimal Code Formatting, 2016.
Out of the box, PrettyPrinting can format Julia code and standard Julia containers. It can be easily extended to format custom data structures.
To learn more about PrettyPrinting, check the Quick Start below, read the Documentation, or watch the Presentation at JuliaCon 2021 (slides).
If you work with nested data structures in Julia REPL, you may find the way they are displayed unsatisfactory. For example:
julia> data = [(name = "POLICE",
employees = [(name = "JEFFERY A", position = "SERGEANT", salary = 101442, rate = missing),
(name = "NANCY A", position = "POLICE OFFICER", salary = 80016, rate = missing)]),
(name = "OEMC",
employees = [(name = "LAKENYA A", position = "CROSSING GUARD", salary = missing, rate = 17.68),
(name = "DORIS A", position = "CROSSING GUARD", salary = missing, rate = 19.38)])]
2-element Vector{NamedTuple{(:name, :employees), T} where T<:Tuple}:
(name = "POLICE", employees = NamedTuple{(:name, :position, :salary, :rate), Tuple{String, String, Int64, Missing}}[(name = "JEFFERY A", position = "SERGEANT", salary = 101442, rate = missing), (name = "NANCY A", position = "POLICE OFFICER", salary = 80016, rate = missing)])
(name = "OEMC", employees = NamedTuple{(:name, :position, :salary, :rate), Tuple{String, String, Missing, Float64}}[(name = "LAKENYA A", position = "CROSSING GUARD", salary = missing, rate = 17.68), (name = "DORIS A", position = "CROSSING GUARD", salary = missing, rate = 19.38)])
If this is the case, consider using PrettyPrinting. First, install it with the Julia package manager:
julia> using Pkg
julia> Pkg.add("PrettyPrinting")
Import the package:
julia> using PrettyPrinting
Now you can use pprint()
to display your complex data. For example:
julia> pprint(data)
[(name = "POLICE",
employees = [(name = "JEFFERY A",
position = "SERGEANT",
salary = 101442,
rate = missing),
(name = "NANCY A",
position = "POLICE OFFICER",
salary = 80016,
rate = missing)]),
(name = "OEMC",
employees = [(name = "LAKENYA A",
position = "CROSSING GUARD",
salary = missing,
rate = 17.68),
(name = "DORIS A",
position = "CROSSING GUARD",
salary = missing,
rate = 19.38)])]
PrettyPrinting knows how to format tuples, named tuples, vectors, sets, and
dictionaries. It can also format Julia code represented as an Expr
object.
To format custom data types, implement either PrettyPrinting.quoteof()
or
PrettyPrinting.tile()
, as described in the Documentation.