[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]