A pretty-printer for Ruby objects.
PP
Does Standard output by p
returns this:
#<PP:0x81fedf0 @genspace=#<Proc:0x81feda0>, @group_queue=#<PrettyPrint::GroupQueue:0x81fed3c @queue=[[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], []]>, @buffer=[], @newline="\n", @group_stack=[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#<IO:0x8114ee4>>
Pretty-printed output returns this:
#<PP:0x81fedf0 @buffer=[], @buffer_width=0, @genspace=#<Proc:0x81feda0>, @group_queue= #<PrettyPrint::GroupQueue:0x81fed3c @queue= [[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], []]>, @group_stack= [#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], @indent=0, @maxwidth=79, @newline="\n", @output=#<IO:0x8114ee4>, @output_width=2>
pp(obj) #=> obj pp obj #=> obj pp(obj1, obj2, ...) #=> [obj1, obj2, ...] pp() #=> nil
Output obj(s)
to $>
in pretty printed format.
It returns obj(s)
.
To define a customized pretty printing function for your classes, redefine method #pretty_print(pp)
in the class.
#pretty_print
takes the pp
argument, which is an instance of the PP
class. The method uses text
, breakable
, nest
, group
and pp
to print the object.
JSON
To pretty-print JSON
refer to JSON#pretty_generate
.
Tanaka Akira <akr@fsij.org>
# File tmp/rubies/ruby-3.2.0/lib/pp.rb, line 91
def PP.pp(obj, out=$>, width=width_for(out))
q = PP.new(out, width)
q.guard_inspect_key {q.pp obj}
q.flush
#$pp = q
out << "\n"
end
# File tmp/rubies/ruby-3.2.0/lib/pp.rb, line 120
def sharing_detection
Ractor.current[:pp_sharing_detection]
end
Returns the sharing detection flag as a boolean value. It is false (nil) by default.
# File tmp/rubies/ruby-3.2.0/lib/pp.rb, line 124
def sharing_detection=(b)
Ractor.current[:pp_sharing_detection] = b
end
Sets the sharing detection flag to b.
# File tmp/rubies/ruby-3.2.0/lib/pp.rb, line 103
def PP.singleline_pp(obj, out=$>)
q = SingleLine.new(out)
q.guard_inspect_key {q.pp obj}
q.flush
out
end
Outputs obj
to out
like PP.pp
but with no indent and newline.
PP.singleline_pp
returns out
.
# File tmp/rubies/ruby-3.2.0/lib/pp.rb, line 74
def PP.width_for(out)
begin
require 'io/console'
_, width = out.winsize
rescue LoadError, NoMethodError, SystemCallError
end
(width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1
end
Returns the usable width for out
. As the width of out
:
If out
is assigned to a tty device, its width is used.
Otherwise, or it could not get the value, the COLUMN
environment variable is assumed to be set to the width.
If COLUMN
is not set to a non-zero number, 80 is assumed.
And finally, returns the above width value - 1.
This -1 is for Windows command prompt, which moves the cursor to the next line if it reaches the last column.