From 1095baed34dca15b9d8c6c54ea2f89bbaf67fb52 Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Mon, 13 Mar 2023 22:31:30 +0800 Subject: [PATCH] [ruby/irb] Support inspecting BasicObject (https://github.com/ruby/irb/pull/541) https://github.com/ruby/irb/commit/1dc2a406a3 --- lib/irb/color_printer.rb | 8 +++++++- test/irb/test_context.rb | 14 +++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/irb/color_printer.rb b/lib/irb/color_printer.rb index 1127bcecb4..a4eeb140cd 100644 --- a/lib/irb/color_printer.rb +++ b/lib/irb/color_printer.rb @@ -4,6 +4,10 @@ require_relative 'color' module IRB class ColorPrinter < ::PP + METHOD_IS_A = Object.instance_method(:is_a?) + METHOD_RESPOND_TO = Object.instance_method(:respond_to?) + METHOD_INSPECT = Object.instance_method(:inspect) + class << self def pp(obj, out = $>, width = screen_width) q = ColorPrinter.new(out, width) @@ -22,9 +26,11 @@ module IRB end def pp(obj) - if obj.is_a?(String) + if METHOD_IS_A.bind(obj).call(String) # Avoid calling Ruby 2.4+ String#pretty_print that splits a string by "\n" text(obj.inspect) + elsif !METHOD_RESPOND_TO.bind(obj).call(:inspect) + text(METHOD_INSPECT.bind(obj).call) else super end diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb index 67d272601b..783b19b970 100644 --- a/test/irb/test_context.rb +++ b/test/irb/test_context.rb @@ -129,7 +129,6 @@ module TestIRB failed: [ [false, "BasicObject.new", /#/, out) + ensure + $VERBOSE = verbose + end + def test_object_inspection_falls_back_to_kernel_inspect_when_errored verbose, $VERBOSE = $VERBOSE, nil main = Object.new