ruby-changes:59757
From: Kenta <ko1@a...>
Date: Tue, 21 Jan 2020 09:53:49 +0900 (JST)
Subject: [ruby-changes:59757] 51a8055d7d (master): [ruby/irb] Add newline_before_multiline_output
https://git.ruby-lang.org/ruby.git/commit/?id=51a8055d7d From 51a8055d7db8a6ae35a9f624700c0910ec20aeb8 Mon Sep 17 00:00:00 2001 From: Kenta Murata <mrkn@m...> Date: Thu, 16 Jan 2020 13:13:35 +0900 Subject: [ruby/irb] Add newline_before_multiline_output https://github.com/ruby/irb/commit/9eb1801a66 diff --git a/lib/irb.rb b/lib/irb.rb index bcd6599af..3e08877 100644 --- a/lib/irb.rb +++ b/lib/irb.rb @@ -736,7 +736,13 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb.rb#L736 end def output_value # :nodoc: - printf @context.return_format, @context.inspect_last_value + str = @context.inspect_last_value + multiline_p = str.each_line.take(2).length > 1 + if multiline_p && @context.newline_before_multiline_output? + printf @context.return_format, "\n#{str}" + else + printf @context.return_format, str + end end # Outputs the local variables to this current session, including diff --git a/lib/irb/context.rb b/lib/irb/context.rb index 686738c..218f7c6 100644 --- a/lib/irb/context.rb +++ b/lib/irb/context.rb @@ -133,6 +133,11 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb/context.rb#L133 if @echo_on_assignment.nil? @echo_on_assignment = false end + + @newline_before_multiline_output = IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT] + if @newline_before_multiline_output.nil? + @newline_before_multiline_output = true + end end # The top-level workspace, see WorkSpace#main @@ -253,6 +258,20 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb/context.rb#L258 # a = "omg" # #=> omg attr_accessor :echo_on_assignment + # Whether a newline is put before multiline output. + # + # Uses IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT] if available, + # or defaults to +true+. + # + # "abc\ndef" + # #=> + # abc + # def + # IRB.CurrentContext.newline_before_multiline_output = false + # "abc\ndef" + # #=> abc + # def + attr_accessor :newline_before_multiline_output # Whether verbose messages are displayed or not. # # A copy of the default <code>IRB.conf[:VERBOSE]</code> @@ -287,6 +306,7 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb/context.rb#L306 alias ignore_eof? ignore_eof alias echo? echo alias echo_on_assignment? echo_on_assignment + alias newline_before_multiline_output? newline_before_multiline_output # Returns whether messages are displayed or not. def verbose? diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb index 693ebbe..8a6521b 100644 --- a/test/irb/test_context.rb +++ b/test/irb/test_context.rb @@ -216,5 +216,36 @@ module TestIRB https://github.com/ruby/ruby/blob/trunk/test/irb/test_context.rb#L216 assert(irb.context.echo?, "echo? should be true by default") assert(irb.context.echo_on_assignment?, "echo_on_assignment? should be true when IRB.conf[:ECHO_ON_ASSIGNMENT] is set to true") end + + def test_multiline_output_on_default_inspector + main = Object.new + def main.inspect + "abc\ndef" + end + input = TestInputMethod.new([ + "self" + ]) + irb = IRB::Irb.new(IRB::WorkSpace.new(main), input) + irb.context.return_format = "=> %s\n" + + # The default + irb.context.newline_before_multiline_output = true + out, err = capture_io do + irb.eval_input + end + assert_empty err + assert_equal("=> \nabc\ndef\n", + out) + + # No newline before multiline output + input.reset + irb.context.newline_before_multiline_output = false + out, err = capture_io do + irb.eval_input + end + assert_empty err + assert_equal("=> abc\ndef\n", + out) + end end end -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/