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

ruby-changes:65177

From: aycabta <ko1@a...>
Date: Sun, 7 Feb 2021 21:04:53 +0900 (JST)
Subject: [ruby-changes:65177] 77700bf023 (ruby_3_0): Backport lib/reline, and lib/irb for 3.0.1 2nd (#4157)

https://git.ruby-lang.org/ruby.git/commit/?id=77700bf023

From 77700bf023a963af810bcc49184428a75cd23bb1 Mon Sep 17 00:00:00 2001
From: aycabta <aycabta@g...>
Date: Sun, 7 Feb 2021 21:04:32 +0900
Subject: Backport lib/reline, and lib/irb for 3.0.1 2nd (#4157)

* [ruby/irb] Stub a screen size for tests

https://github.com/ruby/irb/commit/6663057083

* [ruby/irb] Support GitHub Actions

https://github.com/ruby/irb/commit/8e9e6c4037

* [ruby/irb] Stub a screen size for test_context

http://ci.rvm.jp/logfiles/brlog.trunk-random1.20210119-074232

https://github.com/ruby/irb/commit/ea87592d4a

* [ruby/irb] Use a real screen size for pp by default

https://github.com/ruby/irb/commit/9b9300dec2

* [ruby/irb] Rescue Errno::EINVAL on IRB pp

http://rubyci.s3.amazonaws.com/solaris11-gcc/ruby-master/log/20210119T070008Z.log.html.gz
is caused by:

/export/home/chkbuild/chkbuild-gcc/tmp/build/20210119T150010Z/ruby/lib/reline/ansi.rb:157:in `winsize': Invalid argument - <STDIN> (Errno::EINVAL)
        from /export/home/chkbuild/chkbuild-gcc/tmp/build/20210119T150010Z/ruby/lib/reline/ansi.rb:157:in `get_screen_size'
        from /export/home/chkbuild/chkbuild-gcc/tmp/build/20210119T150010Z/ruby/lib/reline.rb:168:in `get_screen_size'
        from /export/home/chkbuild/chkbuild-gcc/tmp/build/20210119T150010Z/ruby/lib/forwardable.rb:238:in `get_screen_size'
        from /export/home/chkbuild/chkbuild-gcc/tmp/build/20210119T150010Z/ruby/lib/irb/color_printer.rb:7:in `pp'
        from -e:1:in `<main>'

https://github.com/ruby/irb/commit/1719514598

* [ruby/irb] Split test files for IRB::Color and IRB::ColorPrinter

https://github.com/ruby/irb/commit/d95e8daab3

* [ruby/irb] Undefine unused constants

https://github.com/ruby/irb/commit/eea9c16804

* [ruby/irb] Remove pp-specific stub from TestColor

because it was for TestColorPrinter

https://github.com/ruby/irb/commit/7569206fd4

* [ruby/irb] Delete a doodle-level memo comment...

https://github.com/ruby/irb/commit/fc3e1d9e0c

* [ruby/irb] Indent correctly with keyword "for" and "in"

https://github.com/ruby/irb/commit/47c83ea724

* [ruby/irb] Indent correctly with method calling with receiver

https://github.com/ruby/irb/commit/e7c68e74a0

* [ruby/irb] add `IRB::FileInputMethod.open` to ensure closing associated File

* tweak some methods not to raise exception after `#close`
* use it in `IRB::IrbLoader#{source_file,load_file}

https://github.com/ruby/irb/commit/ec2947acbd

* [ruby/irb] use `RubyLex::TerminateLineInput` appropriately [Bug #17564]

* using the appropriciate exception instead of `break` so that the session
  can be continue after the `irb_source` and `irb_load` commands
* suppress extra new line due to one more `#prompt` call

https://github.com/ruby/irb/commit/bdefaa7cfd

* [ruby/irb] specify the `VERBOSE` to `false` and fix tests to fit

https://github.com/ruby/irb/commit/502c590925

* In test, need to pass a context to IRB::WorkSpace.new explicitly

* Fix absolute path predicate on Windows

A path starts with '/' is not an absolute path on Windows, because
of drive letter or UNC.

* [ruby/irb] follow up the actual line number

https://github.com/ruby/irb/commit/7aed8fe3b1

* [ruby/irb] Add info.rb to gemspec

https://github.com/ruby/irb/commit/adbba19adf

* [ruby/irb] Allow "measure" command to take block

https://github.com/ruby/irb/commit/20f1ca23e9

* [ruby/irb] Enable to reassign a new block with "measure" command

https://github.com/ruby/irb/commit/b444573aa2

* [ruby/reline] Cache pasting state in processing a key

Because it's too slow.

The rendering time in IRB has been reduced as follows:

  start = Time.now

  def each_top_level_statement
    initialize_input
    catch(:TERM_INPUT) do
      loop do
        begin
          prompt
          unless l = lex
            throw :TERM_INPUT if @line == ''
          else
            @line_no += l.count("\n")
            next if l == "\n"
            @line.concat l
            if @code_block_open or @ltype or @continue or @indent > 0
              next
            end
          end
          if @line != "\n"
            @line.force_encoding(@io.encoding)
            yield @line, @exp_line_no
          end
          break if @io.eof?
          @line = ''
          @exp_line_no = @line_no

          @indent = 0
        rescue TerminateLineInput
          initialize_input
          prompt
        end
      end
    end
  end

  puts "Duration: #{Time.now - start} seconds"

0.22sec -> 0.14sec

https://github.com/ruby/reline/commit/b8b3dd52c0

* [ruby/reline] Initialize uninitialized variables in tests

https://github.com/ruby/reline/commit/25af4bb64b

* [ruby/reline] Remove an unused variable

https://github.com/ruby/reline/commit/123ea51166

* [ruby/reline] Scroll down when ^C is pressed

https://github.com/ruby/reline/commit/6877a7e3f5

* [ruby/reline] Show all lines higher than the screen when finished

On Unix-like OSes, logs prior to the screen are not editable. When the code
is higher than the screen, the code is only shown on the screen until input
is finished, but when it is finished, all lines are outputted.

https://github.com/ruby/reline/commit/8cd9132a39

* [ruby/reline] Handle past logs correctly when the code is higher than the screen

https://github.com/ruby/reline/commit/f197139b4a

* [ruby/reline] Update cursor info by inserting newline even if not in pasting

https://github.com/ruby/reline/commit/92d314f514

* [ruby/reline] Move cursor just after the last line when finished

https://github.com/ruby/reline/commit/ba06e4c480

* [ruby/reline] The vi_histedit supports multiline

This closes ruby/reline#253.

https://github.com/ruby/reline/commit/f131f86d71

* [ruby/reline] Autowrap correctly when inserting chars in the middle of a line

https://github.com/ruby/reline/commit/ebaf37255f

* [ruby/reline] Terminate correctly in the middle of lines higher than the screen

https://github.com/ruby/reline/commit/e1d9240ada

* [ruby/irb] Version 1.3.3

https://github.com/ruby/irb/commit/4c87035b7c

* [ruby/reline] Version 0.2.3

https://github.com/ruby/reline/commit/b26c7d60c8

Co-authored-by: Takashi Kokubun <takashikkbn@g...>
Co-authored-by: Nobuhiro IMAI <nov@y...>
Co-authored-by: Nobuyoshi Nakada <nobu@r...>
Co-authored-by: ima1zumi <mariimaizumi5@g...>
---
 lib/irb.rb                                  |   2 +-
 lib/irb/cmd/measure.rb                      |  14 ++--
 lib/irb/cmd/nop.rb                          |   4 +-
 lib/irb/color_printer.rb                    |  20 ++++--
 lib/irb/ext/loader.rb                       |  65 ++++++++++++------
 lib/irb/init.rb                             |  12 +++-
 lib/irb/input-method.rb                     |  20 +++++-
 lib/irb/irb.gemspec                         |   1 +
 lib/irb/ruby-lex.rb                         |  64 +++++++++++++++--
 lib/irb/version.rb                          |   4 +-
 lib/reline.rb                               |   2 +
 lib/reline/line_editor.rb                   | 102 ++++++++++++++++++++++------
 lib/reline/version.rb                       |   2 +-
 test/irb/test_cmd.rb                        |  93 +++++++++++++++++++++++++
 test/irb/test_color.rb                      |  22 ------
 test/irb/test_color_printer.rb              |  67 ++++++++++++++++++
 test/irb/test_context.rb                    |  38 ++++++++++-
 test/irb/test_ruby_lex.rb                   |  96 ++++++++++++++++++++++++++
 test/reline/yamatanooroti/test_rendering.rb |  28 ++++++++
 19 files changed, 568 insertions(+), 88 deletions(-)
 create mode 100644 test/irb/test_color_printer.rb

diff --git a/lib/irb.rb b/lib/irb.rb
index 3f7f169..7f99974 100644
--- a/lib/irb.rb
+++ b/lib/irb.rb
@@ -525,7 +525,7 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb.rb#L525
                 printf "Use \"exit\" to leave %s\n", @context.ap_name
               end
             else
-              print "\n"
+              print "\n" if @context.prompting?
             end
           end
           l
diff --git a/lib/irb/cmd/measure.rb b/lib/irb/cmd/measure.rb
index 5e0bef6..58eaec2 100644
--- a/lib/irb/cmd/measure.rb
+++ b/lib/irb/cmd/measure.rb
@@ -8,7 +8,7 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb/cmd/measure.rb#L8
         super(*args)
       end
 
-      def execute(type = nil, arg = nil)
+      def execute(type = nil, arg = nil, &block)
         case type
         when :off
           IRB.conf[:MEASURE] = nil
@@ -22,9 +22,15 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb/cmd/measure.rb#L22
           added = IRB.set_measure_callback(type, arg)
           puts "#{added[0]} is added." if added
         else
-          IRB.conf[:MEASURE] = true
-          added = IRB.set_measure_callback(type, arg)
-          puts "#{added[0]} is added." if added
+          if block_given?
+            IRB.conf[:MEASURE] = true
+            added = IRB.set_measure_callback(&block)
+            puts "#{added[0]} is added." if added
+          else
+            IRB.conf[:MEASURE] = true
+            added = IRB.set_measure_callback(type, arg)
+            puts "#{added[0]} is added." if added
+          end
         end
         nil
       end
diff --git a/lib/irb/cmd/nop.rb b/lib/irb/cmd/nop.rb
index 9cf4337..fa3c011 100644
--- a/lib/irb/cmd/nop.rb
+++ b/lib/irb/cmd/nop.rb
@@ -15,9 +15,9 @@ module IRB https://github.com/ruby/ruby/blob/trunk/lib/irb/cmd/nop.rb#L15
     class Nop
 
 
-      def self.execute(conf, *opts)
+      def self.execute(conf, *opts, &block)
         command = new(conf)
-        command.execute(*opts)
+        command.execute(*opts, &block)
       end
 
       def initialize(conf)
diff --git a/lib/irb/color_printer.rb b/lib/irb/color_printer.rb
index 73a150f..92afea5 100644
--- a/lib/irb/color_printer.rb
+++ b/lib/irb/color_printer.rb
@@ -4,11 +4,21 @@ require 'irb/color' https://github.com/ruby/ruby/blob/trunk/lib/irb/color_printer.rb#L4
 
 module IRB
   class ColorPrinter < ::PP
-    def self.pp(obj, out = $>, width = 79)
-      q = ColorPrinter.new(out, width)
-       (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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