Skip to content
  • aycabta's avatar
    0057fe40
    Ruby 2.7 backport about IRB (#2990) · 0057fe40
    aycabta authored
    * [ruby/reline] Sort completion list
    
    #### Legacy mode:
    
      ```console
      $ irb --legacy
      irb(main):001:0> l[TAB][TAB]
      lambda           load             local_variables  loop
      ```
    
    #### Before this patch:
    
      ```console
      $ irb
      irb(main):001:0> l[TAB][TAB]
      local_variables
      loop
      lambda
      load
      ```
    
    #### After this patch:
    
      ```console
      $ irb
      irb(main):001:0> l[TAB][TAB]
      lambda
      load
      local_variables
      loop
      ```
    
    https://github.com/ruby/reline/commit/6074069c7d
    
    * Drop an invalid char as UTF-8
    
    * Add test_completion_with_indent_and_completer_quote_characters
    
    This is for 8a705245.
    
    * [ruby/irb] Add tests for RubyLex
    
    The set_auto_indent method calculates the correct number of spaces for
    indenting a line. We think there might be a few bugs in this method so
    we are testing the current functionality to make sure nothing breaks
    when we address those bugs.
    
    Example test failure:
    
    ```
      1) Failure:
    TestIRB::TestRubyLex#test_auto_indent [/Users/Ben/Projects/irb/test/irb/test_ruby_lex.rb:75]:
    Calculated the wrong number of spaces for:
     def each_top_level_statement
      initialize_input
      catch(:TERM_INPUT) do
        loop do
          begin
            prompt
            unless l = lex
              throw :TERM_INPUT if @line == ''
            else
    .
    <10> expected but was
    <12>.
    ```
    
    https://github.com/ruby/irb/commit/752d5597ab
    
    * [ruby/reline] Degenerate the terminal size to [$LINES, $COLUMNS] if it is unknown
    
    This is a workaround for https://github.com/ruby/irb/issues/50
    
    https://github.com/ruby/reline/commit/5725677d1a
    
    * [ruby/irb] Fix newline depth with multiple braces
    
    This commit fixes the check_newline_depth_difference method to multiple
    open braces on one line into account. Before this change we were
    subtracting from the depth in check_newline_depth_difference on
    every open brace. This is the right thing to do if the opening and
    closing brace are on the same line. For example in a method definition we
    have an opening and closing parentheses we want to add 1 to our depth,
    and then remove it.
    
    ```
    def foo()
    end
    ```
    
    However this isn't the correct behavior when the brace spans multiple
    lines. If a brace spans multiple lines we don't want to subtract from
    check_newline_depth_difference and we want to treat the braces the same
    way as we do `end` and allow check_corresponding_token_depth to pop the
    correct depth.
    
    Example of bad behavior:
    
    ```
    def foo()
      [
      ]
    puts 'bar'
    end
    ```
    
    Example of desired behavior:
    
    ```
    def foo()
      [
      ]
      puts 'bar'
    end
    ```
    
    https://github.com/ruby/irb/commit/7dc8af01e0
    
    * text/readline/test_readline.rb - fix skip on Reline (#2743)
    
    TestRelineAsReadline#test_input_metachar passes on MinGW
    
    * Add "require 'openstruct'" what is forgotten
    
    * [ruby/irb] Fix lib name of OpenStruct
    
    https://github.com/ruby/irb/commit/1f3a84ab6b
    
    * Add load path and require for ruby/ruby
    
    * Rescue EOFError
    
    If C-d is pressed before IRB is ready, IRB crashes because EOFError occurs.
    
    * Complete indented and quoted string correctly
    
      def foo
        ''.upca[TAB]
    
    This will be completed to be:
    
      def foo
      ''.upcase
    
    The indent was gone. This commit fixes the bug.
    
    * [ruby/irb] Fix crashing when multiple open braces per line
    
    https://github.com/ruby/irb/issues/55
    
    If we had put multiple open braces on a line the with no closing brace
    spaces_of_nest array keeps getting '0' added to it. This means that when
    we pop off of this array we are saying that we should be in position zero
    for the next line. This is an issue because we don't always want to be
    in position 0 after a closing brace.
    
    Example:
    ```
    [[[
    ]
    ]
    ]
    ```
    In the above example the 'spaces_of_nest' array looks like this after
    the first line is entered: [0,0,0]. We really want to be indented 4
    spaces for the 1st closing brace 2 for the 2nd and 0 for the 3rd. i.e.
    we want it to be: [0,2,4].
    
    We also saw this issue with a heredoc inside of an array.
    
    ```
    [<<FOO]
    hello
    FOO
    ```
    
    https://github.com/ruby/irb/commit/80c69c8272
    
    * Support history-size in .inputrc correctly
    
    * Introduce an abstracted structure about the encoding of Reline
    
    The command prompt on Windows always uses Unicode to take input and print
    output but most Reline implementation depends on Encoding.default_external.
    This commit introduces an abstracted structure about the encoding of Reline.
    
    * Remove an unused setting variable
    
    * Use Reline.encoding_system_needs if exists
    
    * Add tests for vi_insert and vi_add
    
    * Implement vi_insert_at_bol and vi_add_at_eol
    
    * [ruby/reline] Implement vi_to_next_char
    
    https://github.com/ruby/reline/commit/066ecb0a21
    
    * [ruby/reline] Implement vi_prev_char and vi_to_prev_char
    
    https://github.com/ruby/reline/commit/0ad3ee63fa
    
    * [ruby/readline-ext] Include ruby/assert.h in ruby/ruby.h so that assertions can be there
    
    https://github.com/ruby/readline-ext/commit/4d44c12832
    
    * Stop using minitest dependent methods
    
    * Skip a test that uses assert_ruby_status if it doesn't exist
    
    * Use omit instead of skip
    
    * Check DONT_RUN_RELINE_TEST envvar
    
    * [ruby/irb] Add newline_before_multiline_output
    
    https://github.com/ruby/irb/commit/9eb1801a66
    
    * [ruby/irb] Fix compatibility with rails before 5.2
    
    Rails before 5.2 added Array#append as an alias to Array#<< ,
    so that it expects only one argument.
    However ruby-2.5 added Array#append as an alias to Array#push
    which takes any number of arguments.
    
    If irb completion is used in `rails c` (for example "IO.<tab>")
    it fails with:
      irb/completion.rb:206:in `<<': wrong number of arguments (given 3, expected 1) (ArgumentError)
    
    Using Array#push instead of Array#append fixes compatibility.
    
    https://github.com/ruby/irb/commit/5b7bbf9c34
    
    * Reline: Use a more robust detection of MinTTY
    
    The previous detection per get_screen_size fails when stdout is passed
    to a pipe. That is the case when running ruby tests in parallel ("-j" switch).
    In this case Reline believes that it's running on MinTTY and the tests
    are running with ANSI IOGate instead of the Windows adapter on MINGW.
    So parallel test results were different to that of a single process.
    This commit fixes these differencies.
    
    The code is taken from git sources and translated to ruby.
    NtQueryObject() is replaced by GetFileInformationByHandleEx(), because
    NtQueryObject() is undocumented and is more difficult to use:
      https://github.com/git-for-windows/git/blob/c5a03b1e29c69f3f06c8fabd92493edb73469176/compat/winansi.c#L558
    
    * Reline: Fix changed test results due to change to UTF-8 on Windows
    
    In commit f8ea2860 the Reline encoding
    for native windows console was changed to hardcoded UTF-8.
    This caused failures in reline and readline tests, but they were hidden,
    because parallel ruby tests incorrectly used Reline::ANSI as IOGate.
    Tests failures were raised in single process mode, but not with -j switch.
    
    This patch corrects encodings on native Windows console.
    
    * [ruby/irb] [ruby/irb] Rewrite an expression to detect multiline
    
    https://github.com/ruby/irb/commit/ed5cf375a6
    
    https://github.com/ruby/irb/commit/5b7bbf9c34
    
    * [ruby/reline] Implement vi_change_meta
    
    https://github.com/ruby/reline/commit/8538e0e10f
    
    * Always refer to Reline::IOGate.encoding
    
    * Always use UTF-8 for Reline::GeneralIO on Windows
    
    * Use test_mode on Reline::History::Test for encoding
    
    * [ruby/reline] Support GNOME style Home/End key sequences [Bug #16510]
    
    https://github.com/ruby/reline/commit/788f0df845
    
    * [ruby/irb] Add a new easter egg: dancing ruby
    
    https://github.com/ruby/irb/commit/e37dc7e58e
    
    * [ruby/irb] Exclude useless files from RDoc
    
    https://github.com/ruby/irb/commit/8f1ab2400c
    
    * [ruby/irb] Exclude useless files from RDoc
    
    * Fix inaccuracy in encoding tests
    
    These tests assume
      Encoding.find('locale') == Encoding.find('external')
    and fail if they are distinct.
    
    * [ruby/reline] Fix Reline::Windows#scroll_down
    
    I mistook Right and Bottom.
    
    https://github.com/ruby/reline/commit/8be401c5f5
    
    * [ruby/reline] Bypass cursor down when a char is rendered at eol on Windows
    
    A newline is automatically inserted if a character is rendered at eol on
    Windows command prompt.
    
    https://github.com/ruby/reline/commit/4bfea07e4a
    
    * [ruby/reline] Organize special keys escape sequences
    
    https://github.com/ruby/reline/commit/41deb1a3d9
    
    * [ruby/readline-ext] Remove unnecessary -I$(top_srcdir) when it's an individual gem
    
    https://github.com/ruby/readline-ext/commit/efaca4a5f4
    
    * [ruby/readline-ext] Check TestRelineAsReadline existance
    
    https://github.com/ruby/readline-ext/commit/c0a6303168
    
    * [ruby/readline-ext] The ruby/assert.h is adopted by Ruby 2.7 or later
    
    https://github.com/ruby/readline-ext/commit/106c31fc1b
    
    * Revert "[ruby/readline-ext] Include ruby/assert.h in ruby/ruby.h so that assertions can be there"
    
    This reverts commit 425b2064.
    
    This cherry-pick was a mistake.
    
    * [ruby/readline-ext] Use require check instead of DONT_RUN_RELINE_TEST env
    
    https://github.com/ruby/readline-ext/commit/1df99d1481
    
    * [ruby/readline-ext] Add spec.extensions
    
    https://github.com/ruby/readline-ext/commit/8c33abb13c
    
    * [ruby/readline-ext] Use rake/extensiokntask to build
    
    https://github.com/ruby/readline-ext/commit/b0b5f709bd
    
    * Fix readline build dependency
    
    * [ruby/irb] Add test_complete_symbol
    
    https://github.com/ruby/irb/commit/dbbf086c1f
    
    * [ruby/irb] Check doc namespace correctly
    
    IRB::InputCompletor::PerfectMatchedProc crashes when doc not found because a
    variable name was incorrect.
    
    https://github.com/ruby/irb/commit/889fd4928f
    
    * [ruby/irb] Fix auto indent with closed brace
    
    A closed brace in auto-indent shouldn't affect the next brace in the same line,
    but it behaves like below:
    
      p() {
        }
    
    It's a bug.
    
    https://github.com/ruby/irb/commit/fbe59e344f
    
    * [ruby/irb] Use 0.step instead of (..0).each for Ruby 2.5
    
    https://github.com/ruby/irb/commit/5d628ca40e
    
    * Revert "[ruby/irb] Add test_complete_symbol"
    
    This reverts commit 3af3431c.
    
    * [ruby/irb] fix reserved words and completion for them
    
    https://github.com/ruby/irb/commit/6184b227ad
    
    * Add test_complete_symbol
    
    The previous version of the test method used a symbol, ":abcdefg" to complete
    but longer symbols that can be completed are defined by other test methods of
    other libs.
    
    * test/irb/test_completion.rb: suppress a warning: unused literal ignored
    
    * [ruby/reline] Use IO#write instead of IO#print
    
    IO#print always adds a string of $\ automatically.
    
    https://github.com/ruby/reline/commit/a93119c847
    
    * [ruby/irb] Version 1.2.2
    
    https://github.com/ruby/irb/commit/a71753f15a
    
    * [ruby/reline] Version 0.1.3
    
    https://github.com/ruby/reline/commit/ea2b182466
    
    * [ruby/irb] Include easter-egg.rb in gemspec
    
    `irb` doesn't run because this file isn't included in the gem.
    https://github.com/ruby/irb/commit/73cda56d25
    
    * [ruby/irb] Version 1.2.3
    
    https://github.com/ruby/irb/commit/dd56e06df5
    
    * support multi-run test for test_readline.rb
    
    * [ruby/irb] `yield` outside method definition is a syntax error
    
    https://github.com/ruby/irb/commit/dbc7b059c7
    
    * test/readline - allow ENV control of test class creation
    
    In ruby/ruby, the tests run on both readline & reline by creating four test classes:
    ```
    TestReadline
    TestReadlineHistory
    
    TestRelineAsReadline
    TestRelineAsReadlineHistory
    ```
    
    Reline inports the test files and uses them in its CI.  Adding the ENV control allows it to only run the `TestRelineAsReadline` classes.
    
    * Omit test_using_quoting_detection_proc_with_multibyte_input temporarily for random order test
    
    * support random order test.
    
    test_readline:
      HISTORY should be empty.
    
    test_using_quoting_detection_proc:
    test_using_quoting_detection_proc_with_multibyte_input:
      Readline.completer_quote_characters= and
      Readline.completer_word_break_characters= doesn't accept nil,
      so skip if previous values are nil.
    
    * Set Readline.completion_append_character = nil always
    
    GNU Readline add a white space when Readline.completion_append_character is
    not initialized.
    
    * Fix a typo [ci skip]
    
    * skip test if Reline.completion_proc is nil.
    
    Some other tests can set Reline.completion_proc, so if it is nil,
    simply skip this test.
    
    * Reset Reline.point
    
    TestRelineAsReadline#test_insert_text expects Readline.point == 0
    at the beginning of the test, but a test violate this assumption.
    
    * Convert incompatible encoding symbol names
    
    * Ignore incompatible convert of symbols
    
    * Add workaround for test-bundler failure
    
    https://github.com/ruby/actions/runs/500526558?check_suite_focus=true#step:16:127
    ```
    Failures:
    
      1) Bundler.setup when Bundler is bundled doesn't blow up
         Failure/Error: expect(err).to be_empty
    
           expected `"fatal: not a git repository (or any of the parent directories): .git\nfatal: not a git repository (o...the parent directories): .git\nfatal: not a git repository (or any of the parent directories): .git".empty?` to return true, got false
    
           Commands:
           $ /home/runner/work/actions/actions/snapshot-master/ruby \
             -I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \
             -rsupport/hax -rsupport/artifice/fail \
             /home/runner/work/actions/actions/snapshot-master/libexec/bundle install --retry 0
           Resolving dependencies...
           Using bundler 2.1.4
           Bundle complete! 1 Gemfile dependency, 1 gem now installed.
           Use `bundle info [gemname]` to see where a bundled gem is installed.
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           # $? => 0
    
           $ /home/runner/work/actions/actions/snapshot-master/ruby \
             -I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \
             -rsupport/hax -rsupport/artifice/fail \
             /home/runner/work/actions/actions/snapshot-master/libexec/bundle exec ruby -e \
             require\ \'bundler\'\;\ Bundler.setup
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           # $? => 0
         # ./spec/bundler/runtime/setup_spec.rb:1056:in `block (3 levels) in <top (required)>'
         # ./spec/bundler/spec_helper.rb:111:in `block (3 levels) in <top (required)>'
         # ./spec/bundler/spec_helper.rb:111:in `block (2 levels) in <top (required)>'
         # ./spec/bundler/spec_helper.rb:78:in `block (2 levels) in <top (required)>'
    make: *** [yes-test-bundler] Error 1
    ```
    
    * [ruby/irb] Unnamed groups are not captured when named groups are used
    
    https://github.com/ruby/irb/commit/0a641a69b0
    
    * [ruby/reline] Work with wrong $/ value correctly
    
    https://github.com/ruby/reline/commit/962ebf5a1b
    
    * [ruby/irb] Detect multiple lines output simplify
    
    The old implementation performance test code:
    
        require 'objspace'
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
        /\A.*\Z/ !~ ('abc' * 20_000_000)
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
    
    and run `time test.rb`:
    
        2.5868 MB
        62.226 MB
    
        real    0m1.307s
        user    0m0.452s
        sys     0m0.797s
    
    The new implementation performance test code:
    
        require 'objspace'
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
        ('abc' * 20_000_000).include?("\n")
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
    
    and run `time test.rb`:
    
        2.5861 MB
        62.226 MB
    
        real    0m0.132s
        user    0m0.088s
        sys     0m0.042s
    
    https://github.com/ruby/irb/commit/40d6610baf
    
    * [ruby/reline] Suppress error in case INPUTRC env is empty
    
    https://github.com/ruby/reline/commit/bce7e7562b
    
    * [ruby/reline] Add yamatanooroti rendering test
    
    https://github.com/ruby/reline/commit/f092519525
    
    * [ruby/reline] Rename test suite name of yamatanooroti test
    
    https://github.com/ruby/reline/commit/b0f32f5de4
    
    * [ruby/reline] Add a comment why rescue yamatanooroti loading error on the test
    
    https://github.com/ruby/reline/commit/2a8061daec
    
    * [ruby/irb] Suppress crashing when EncodingError has occurred without lineno
    
    https://github.com/ruby/irb/commit/13572d8cdc
    
    * [ruby/reline] Suppress error when check ambiguous char width in LANG=C
    
    https://github.com/ruby/reline/commit/623dffdd75
    
    * [ruby/io-console] Enable only interrupt bits on `intr: true`
    
    https://github.com/ruby/io-console/commit/baaf929041
    
    * [ruby/io-console] bump up to 0.5.4
    
    * [ruby/io-console] Update the minimum requirement of Ruby version
    
    https://github.com/ruby/io-console/commit/73e7b6318a
    
    * [ruby/io-console] Filter Ruby engine name rather than just /ruby/
    
    This breaks tests using this path on JRuby because the `jruby`
    executable turns into `jjruby` after the sub.
    
    https://github.com/ruby/io-console/commit/e5951aa34c
    
    * [ruby/io-console] bump up to 0.5.5
    
    * [ruby/io-console] Prefer keyword arguments
    
    https://github.com/ruby/io-console/commit/5facbfc4c8
    
    * [ruby/io-console] [DOC] Improved about `intr:`
    
    https://github.com/ruby/io-console/commit/82b630cd79
    
    * [ruby/io-console] Just ignore the extension on other than CRuby
    
    https://github.com/ruby/io-console/commit/41b6f09574
    
    
    
    * [ruby/io-console] bump up to 0.5.6
    
    Co-authored-by: default avatarKOBAYASHI Shuji <shuujii@gmail.com>
    Co-authored-by: default avatarBen <kanobt61@gmail.com>
    Co-authored-by: default avatarYusuke Endoh <mame@ruby-lang.org>
    Co-authored-by: default avatarMSP-Greg <MSP-Greg@users.noreply.github.com>
    Co-authored-by: default avatarNobuyoshi Nakada <nobu@ruby-lang.org>
    Co-authored-by: default avatarKenta Murata <mrkn@mrkn.jp>
    Co-authored-by: default avatarLars Kanis <lars@greiz-reinsdorf.de>
    Co-authored-by: default avatarLars Kanis <kanis@comcard.de>
    Co-authored-by: default avatarAlan Wu <XrXr@users.noreply.github.com>
    Co-authored-by: default avatarHiroshi SHIBATA <hsbt@ruby-lang.org>
    Co-authored-by: default avatarNobuhiro IMAI <nov@yo.rim.or.jp>
    Co-authored-by: default avatarNick Lewis <nick@puppet.com>
    Co-authored-by: default avatarS-H-GAMELINKS <gamelinks007@gmail.com>
    Co-authored-by: default avatarKoichi Sasada <ko1@atdot.net>
    Co-authored-by: default avatarKazuhiro NISHIYAMA <zn@mbf.nifty.com>
    Co-authored-by: default avatarCharles Oliver Nutter <headius@headius.com>
    0057fe40
    Ruby 2.7 backport about IRB (#2990)
    aycabta authored
    * [ruby/reline] Sort completion list
    
    #### Legacy mode:
    
      ```console
      $ irb --legacy
      irb(main):001:0> l[TAB][TAB]
      lambda           load             local_variables  loop
      ```
    
    #### Before this patch:
    
      ```console
      $ irb
      irb(main):001:0> l[TAB][TAB]
      local_variables
      loop
      lambda
      load
      ```
    
    #### After this patch:
    
      ```console
      $ irb
      irb(main):001:0> l[TAB][TAB]
      lambda
      load
      local_variables
      loop
      ```
    
    https://github.com/ruby/reline/commit/6074069c7d
    
    * Drop an invalid char as UTF-8
    
    * Add test_completion_with_indent_and_completer_quote_characters
    
    This is for 8a705245.
    
    * [ruby/irb] Add tests for RubyLex
    
    The set_auto_indent method calculates the correct number of spaces for
    indenting a line. We think there might be a few bugs in this method so
    we are testing the current functionality to make sure nothing breaks
    when we address those bugs.
    
    Example test failure:
    
    ```
      1) Failure:
    TestIRB::TestRubyLex#test_auto_indent [/Users/Ben/Projects/irb/test/irb/test_ruby_lex.rb:75]:
    Calculated the wrong number of spaces for:
     def each_top_level_statement
      initialize_input
      catch(:TERM_INPUT) do
        loop do
          begin
            prompt
            unless l = lex
              throw :TERM_INPUT if @line == ''
            else
    .
    <10> expected but was
    <12>.
    ```
    
    https://github.com/ruby/irb/commit/752d5597ab
    
    * [ruby/reline] Degenerate the terminal size to [$LINES, $COLUMNS] if it is unknown
    
    This is a workaround for https://github.com/ruby/irb/issues/50
    
    https://github.com/ruby/reline/commit/5725677d1a
    
    * [ruby/irb] Fix newline depth with multiple braces
    
    This commit fixes the check_newline_depth_difference method to multiple
    open braces on one line into account. Before this change we were
    subtracting from the depth in check_newline_depth_difference on
    every open brace. This is the right thing to do if the opening and
    closing brace are on the same line. For example in a method definition we
    have an opening and closing parentheses we want to add 1 to our depth,
    and then remove it.
    
    ```
    def foo()
    end
    ```
    
    However this isn't the correct behavior when the brace spans multiple
    lines. If a brace spans multiple lines we don't want to subtract from
    check_newline_depth_difference and we want to treat the braces the same
    way as we do `end` and allow check_corresponding_token_depth to pop the
    correct depth.
    
    Example of bad behavior:
    
    ```
    def foo()
      [
      ]
    puts 'bar'
    end
    ```
    
    Example of desired behavior:
    
    ```
    def foo()
      [
      ]
      puts 'bar'
    end
    ```
    
    https://github.com/ruby/irb/commit/7dc8af01e0
    
    * text/readline/test_readline.rb - fix skip on Reline (#2743)
    
    TestRelineAsReadline#test_input_metachar passes on MinGW
    
    * Add "require 'openstruct'" what is forgotten
    
    * [ruby/irb] Fix lib name of OpenStruct
    
    https://github.com/ruby/irb/commit/1f3a84ab6b
    
    * Add load path and require for ruby/ruby
    
    * Rescue EOFError
    
    If C-d is pressed before IRB is ready, IRB crashes because EOFError occurs.
    
    * Complete indented and quoted string correctly
    
      def foo
        ''.upca[TAB]
    
    This will be completed to be:
    
      def foo
      ''.upcase
    
    The indent was gone. This commit fixes the bug.
    
    * [ruby/irb] Fix crashing when multiple open braces per line
    
    https://github.com/ruby/irb/issues/55
    
    If we had put multiple open braces on a line the with no closing brace
    spaces_of_nest array keeps getting '0' added to it. This means that when
    we pop off of this array we are saying that we should be in position zero
    for the next line. This is an issue because we don't always want to be
    in position 0 after a closing brace.
    
    Example:
    ```
    [[[
    ]
    ]
    ]
    ```
    In the above example the 'spaces_of_nest' array looks like this after
    the first line is entered: [0,0,0]. We really want to be indented 4
    spaces for the 1st closing brace 2 for the 2nd and 0 for the 3rd. i.e.
    we want it to be: [0,2,4].
    
    We also saw this issue with a heredoc inside of an array.
    
    ```
    [<<FOO]
    hello
    FOO
    ```
    
    https://github.com/ruby/irb/commit/80c69c8272
    
    * Support history-size in .inputrc correctly
    
    * Introduce an abstracted structure about the encoding of Reline
    
    The command prompt on Windows always uses Unicode to take input and print
    output but most Reline implementation depends on Encoding.default_external.
    This commit introduces an abstracted structure about the encoding of Reline.
    
    * Remove an unused setting variable
    
    * Use Reline.encoding_system_needs if exists
    
    * Add tests for vi_insert and vi_add
    
    * Implement vi_insert_at_bol and vi_add_at_eol
    
    * [ruby/reline] Implement vi_to_next_char
    
    https://github.com/ruby/reline/commit/066ecb0a21
    
    * [ruby/reline] Implement vi_prev_char and vi_to_prev_char
    
    https://github.com/ruby/reline/commit/0ad3ee63fa
    
    * [ruby/readline-ext] Include ruby/assert.h in ruby/ruby.h so that assertions can be there
    
    https://github.com/ruby/readline-ext/commit/4d44c12832
    
    * Stop using minitest dependent methods
    
    * Skip a test that uses assert_ruby_status if it doesn't exist
    
    * Use omit instead of skip
    
    * Check DONT_RUN_RELINE_TEST envvar
    
    * [ruby/irb] Add newline_before_multiline_output
    
    https://github.com/ruby/irb/commit/9eb1801a66
    
    * [ruby/irb] Fix compatibility with rails before 5.2
    
    Rails before 5.2 added Array#append as an alias to Array#<< ,
    so that it expects only one argument.
    However ruby-2.5 added Array#append as an alias to Array#push
    which takes any number of arguments.
    
    If irb completion is used in `rails c` (for example "IO.<tab>")
    it fails with:
      irb/completion.rb:206:in `<<': wrong number of arguments (given 3, expected 1) (ArgumentError)
    
    Using Array#push instead of Array#append fixes compatibility.
    
    https://github.com/ruby/irb/commit/5b7bbf9c34
    
    * Reline: Use a more robust detection of MinTTY
    
    The previous detection per get_screen_size fails when stdout is passed
    to a pipe. That is the case when running ruby tests in parallel ("-j" switch).
    In this case Reline believes that it's running on MinTTY and the tests
    are running with ANSI IOGate instead of the Windows adapter on MINGW.
    So parallel test results were different to that of a single process.
    This commit fixes these differencies.
    
    The code is taken from git sources and translated to ruby.
    NtQueryObject() is replaced by GetFileInformationByHandleEx(), because
    NtQueryObject() is undocumented and is more difficult to use:
      https://github.com/git-for-windows/git/blob/c5a03b1e29c69f3f06c8fabd92493edb73469176/compat/winansi.c#L558
    
    * Reline: Fix changed test results due to change to UTF-8 on Windows
    
    In commit f8ea2860 the Reline encoding
    for native windows console was changed to hardcoded UTF-8.
    This caused failures in reline and readline tests, but they were hidden,
    because parallel ruby tests incorrectly used Reline::ANSI as IOGate.
    Tests failures were raised in single process mode, but not with -j switch.
    
    This patch corrects encodings on native Windows console.
    
    * [ruby/irb] [ruby/irb] Rewrite an expression to detect multiline
    
    https://github.com/ruby/irb/commit/ed5cf375a6
    
    https://github.com/ruby/irb/commit/5b7bbf9c34
    
    * [ruby/reline] Implement vi_change_meta
    
    https://github.com/ruby/reline/commit/8538e0e10f
    
    * Always refer to Reline::IOGate.encoding
    
    * Always use UTF-8 for Reline::GeneralIO on Windows
    
    * Use test_mode on Reline::History::Test for encoding
    
    * [ruby/reline] Support GNOME style Home/End key sequences [Bug #16510]
    
    https://github.com/ruby/reline/commit/788f0df845
    
    * [ruby/irb] Add a new easter egg: dancing ruby
    
    https://github.com/ruby/irb/commit/e37dc7e58e
    
    * [ruby/irb] Exclude useless files from RDoc
    
    https://github.com/ruby/irb/commit/8f1ab2400c
    
    * [ruby/irb] Exclude useless files from RDoc
    
    * Fix inaccuracy in encoding tests
    
    These tests assume
      Encoding.find('locale') == Encoding.find('external')
    and fail if they are distinct.
    
    * [ruby/reline] Fix Reline::Windows#scroll_down
    
    I mistook Right and Bottom.
    
    https://github.com/ruby/reline/commit/8be401c5f5
    
    * [ruby/reline] Bypass cursor down when a char is rendered at eol on Windows
    
    A newline is automatically inserted if a character is rendered at eol on
    Windows command prompt.
    
    https://github.com/ruby/reline/commit/4bfea07e4a
    
    * [ruby/reline] Organize special keys escape sequences
    
    https://github.com/ruby/reline/commit/41deb1a3d9
    
    * [ruby/readline-ext] Remove unnecessary -I$(top_srcdir) when it's an individual gem
    
    https://github.com/ruby/readline-ext/commit/efaca4a5f4
    
    * [ruby/readline-ext] Check TestRelineAsReadline existance
    
    https://github.com/ruby/readline-ext/commit/c0a6303168
    
    * [ruby/readline-ext] The ruby/assert.h is adopted by Ruby 2.7 or later
    
    https://github.com/ruby/readline-ext/commit/106c31fc1b
    
    * Revert "[ruby/readline-ext] Include ruby/assert.h in ruby/ruby.h so that assertions can be there"
    
    This reverts commit 425b2064.
    
    This cherry-pick was a mistake.
    
    * [ruby/readline-ext] Use require check instead of DONT_RUN_RELINE_TEST env
    
    https://github.com/ruby/readline-ext/commit/1df99d1481
    
    * [ruby/readline-ext] Add spec.extensions
    
    https://github.com/ruby/readline-ext/commit/8c33abb13c
    
    * [ruby/readline-ext] Use rake/extensiokntask to build
    
    https://github.com/ruby/readline-ext/commit/b0b5f709bd
    
    * Fix readline build dependency
    
    * [ruby/irb] Add test_complete_symbol
    
    https://github.com/ruby/irb/commit/dbbf086c1f
    
    * [ruby/irb] Check doc namespace correctly
    
    IRB::InputCompletor::PerfectMatchedProc crashes when doc not found because a
    variable name was incorrect.
    
    https://github.com/ruby/irb/commit/889fd4928f
    
    * [ruby/irb] Fix auto indent with closed brace
    
    A closed brace in auto-indent shouldn't affect the next brace in the same line,
    but it behaves like below:
    
      p() {
        }
    
    It's a bug.
    
    https://github.com/ruby/irb/commit/fbe59e344f
    
    * [ruby/irb] Use 0.step instead of (..0).each for Ruby 2.5
    
    https://github.com/ruby/irb/commit/5d628ca40e
    
    * Revert "[ruby/irb] Add test_complete_symbol"
    
    This reverts commit 3af3431c.
    
    * [ruby/irb] fix reserved words and completion for them
    
    https://github.com/ruby/irb/commit/6184b227ad
    
    * Add test_complete_symbol
    
    The previous version of the test method used a symbol, ":abcdefg" to complete
    but longer symbols that can be completed are defined by other test methods of
    other libs.
    
    * test/irb/test_completion.rb: suppress a warning: unused literal ignored
    
    * [ruby/reline] Use IO#write instead of IO#print
    
    IO#print always adds a string of $\ automatically.
    
    https://github.com/ruby/reline/commit/a93119c847
    
    * [ruby/irb] Version 1.2.2
    
    https://github.com/ruby/irb/commit/a71753f15a
    
    * [ruby/reline] Version 0.1.3
    
    https://github.com/ruby/reline/commit/ea2b182466
    
    * [ruby/irb] Include easter-egg.rb in gemspec
    
    `irb` doesn't run because this file isn't included in the gem.
    https://github.com/ruby/irb/commit/73cda56d25
    
    * [ruby/irb] Version 1.2.3
    
    https://github.com/ruby/irb/commit/dd56e06df5
    
    * support multi-run test for test_readline.rb
    
    * [ruby/irb] `yield` outside method definition is a syntax error
    
    https://github.com/ruby/irb/commit/dbc7b059c7
    
    * test/readline - allow ENV control of test class creation
    
    In ruby/ruby, the tests run on both readline & reline by creating four test classes:
    ```
    TestReadline
    TestReadlineHistory
    
    TestRelineAsReadline
    TestRelineAsReadlineHistory
    ```
    
    Reline inports the test files and uses them in its CI.  Adding the ENV control allows it to only run the `TestRelineAsReadline` classes.
    
    * Omit test_using_quoting_detection_proc_with_multibyte_input temporarily for random order test
    
    * support random order test.
    
    test_readline:
      HISTORY should be empty.
    
    test_using_quoting_detection_proc:
    test_using_quoting_detection_proc_with_multibyte_input:
      Readline.completer_quote_characters= and
      Readline.completer_word_break_characters= doesn't accept nil,
      so skip if previous values are nil.
    
    * Set Readline.completion_append_character = nil always
    
    GNU Readline add a white space when Readline.completion_append_character is
    not initialized.
    
    * Fix a typo [ci skip]
    
    * skip test if Reline.completion_proc is nil.
    
    Some other tests can set Reline.completion_proc, so if it is nil,
    simply skip this test.
    
    * Reset Reline.point
    
    TestRelineAsReadline#test_insert_text expects Readline.point == 0
    at the beginning of the test, but a test violate this assumption.
    
    * Convert incompatible encoding symbol names
    
    * Ignore incompatible convert of symbols
    
    * Add workaround for test-bundler failure
    
    https://github.com/ruby/actions/runs/500526558?check_suite_focus=true#step:16:127
    ```
    Failures:
    
      1) Bundler.setup when Bundler is bundled doesn't blow up
         Failure/Error: expect(err).to be_empty
    
           expected `"fatal: not a git repository (or any of the parent directories): .git\nfatal: not a git repository (o...the parent directories): .git\nfatal: not a git repository (or any of the parent directories): .git".empty?` to return true, got false
    
           Commands:
           $ /home/runner/work/actions/actions/snapshot-master/ruby \
             -I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \
             -rsupport/hax -rsupport/artifice/fail \
             /home/runner/work/actions/actions/snapshot-master/libexec/bundle install --retry 0
           Resolving dependencies...
           Using bundler 2.1.4
           Bundle complete! 1 Gemfile dependency, 1 gem now installed.
           Use `bundle info [gemname]` to see where a bundled gem is installed.
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           # $? => 0
    
           $ /home/runner/work/actions/actions/snapshot-master/ruby \
             -I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \
             -rsupport/hax -rsupport/artifice/fail \
             /home/runner/work/actions/actions/snapshot-master/libexec/bundle exec ruby -e \
             require\ \'bundler\'\;\ Bundler.setup
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           fatal: not a git repository (or any of the parent directories): .git
           # $? => 0
         # ./spec/bundler/runtime/setup_spec.rb:1056:in `block (3 levels) in <top (required)>'
         # ./spec/bundler/spec_helper.rb:111:in `block (3 levels) in <top (required)>'
         # ./spec/bundler/spec_helper.rb:111:in `block (2 levels) in <top (required)>'
         # ./spec/bundler/spec_helper.rb:78:in `block (2 levels) in <top (required)>'
    make: *** [yes-test-bundler] Error 1
    ```
    
    * [ruby/irb] Unnamed groups are not captured when named groups are used
    
    https://github.com/ruby/irb/commit/0a641a69b0
    
    * [ruby/reline] Work with wrong $/ value correctly
    
    https://github.com/ruby/reline/commit/962ebf5a1b
    
    * [ruby/irb] Detect multiple lines output simplify
    
    The old implementation performance test code:
    
        require 'objspace'
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
        /\A.*\Z/ !~ ('abc' * 20_000_000)
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
    
    and run `time test.rb`:
    
        2.5868 MB
        62.226 MB
    
        real    0m1.307s
        user    0m0.452s
        sys     0m0.797s
    
    The new implementation performance test code:
    
        require 'objspace'
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
        ('abc' * 20_000_000).include?("\n")
        puts "%.5g MB" % (ObjectSpace.memsize_of_all * 0.001 * 0.001)
    
    and run `time test.rb`:
    
        2.5861 MB
        62.226 MB
    
        real    0m0.132s
        user    0m0.088s
        sys     0m0.042s
    
    https://github.com/ruby/irb/commit/40d6610baf
    
    * [ruby/reline] Suppress error in case INPUTRC env is empty
    
    https://github.com/ruby/reline/commit/bce7e7562b
    
    * [ruby/reline] Add yamatanooroti rendering test
    
    https://github.com/ruby/reline/commit/f092519525
    
    * [ruby/reline] Rename test suite name of yamatanooroti test
    
    https://github.com/ruby/reline/commit/b0f32f5de4
    
    * [ruby/reline] Add a comment why rescue yamatanooroti loading error on the test
    
    https://github.com/ruby/reline/commit/2a8061daec
    
    * [ruby/irb] Suppress crashing when EncodingError has occurred without lineno
    
    https://github.com/ruby/irb/commit/13572d8cdc
    
    * [ruby/reline] Suppress error when check ambiguous char width in LANG=C
    
    https://github.com/ruby/reline/commit/623dffdd75
    
    * [ruby/io-console] Enable only interrupt bits on `intr: true`
    
    https://github.com/ruby/io-console/commit/baaf929041
    
    * [ruby/io-console] bump up to 0.5.4
    
    * [ruby/io-console] Update the minimum requirement of Ruby version
    
    https://github.com/ruby/io-console/commit/73e7b6318a
    
    * [ruby/io-console] Filter Ruby engine name rather than just /ruby/
    
    This breaks tests using this path on JRuby because the `jruby`
    executable turns into `jjruby` after the sub.
    
    https://github.com/ruby/io-console/commit/e5951aa34c
    
    * [ruby/io-console] bump up to 0.5.5
    
    * [ruby/io-console] Prefer keyword arguments
    
    https://github.com/ruby/io-console/commit/5facbfc4c8
    
    * [ruby/io-console] [DOC] Improved about `intr:`
    
    https://github.com/ruby/io-console/commit/82b630cd79
    
    * [ruby/io-console] Just ignore the extension on other than CRuby
    
    https://github.com/ruby/io-console/commit/41b6f09574
    
    
    
    * [ruby/io-console] bump up to 0.5.6
    
    Co-authored-by: default avatarKOBAYASHI Shuji <shuujii@gmail.com>
    Co-authored-by: default avatarBen <kanobt61@gmail.com>
    Co-authored-by: default avatarYusuke Endoh <mame@ruby-lang.org>
    Co-authored-by: default avatarMSP-Greg <MSP-Greg@users.noreply.github.com>
    Co-authored-by: default avatarNobuyoshi Nakada <nobu@ruby-lang.org>
    Co-authored-by: default avatarKenta Murata <mrkn@mrkn.jp>
    Co-authored-by: default avatarLars Kanis <lars@greiz-reinsdorf.de>
    Co-authored-by: default avatarLars Kanis <kanis@comcard.de>
    Co-authored-by: default avatarAlan Wu <XrXr@users.noreply.github.com>
    Co-authored-by: default avatarHiroshi SHIBATA <hsbt@ruby-lang.org>
    Co-authored-by: default avatarNobuhiro IMAI <nov@yo.rim.or.jp>
    Co-authored-by: default avatarNick Lewis <nick@puppet.com>
    Co-authored-by: default avatarS-H-GAMELINKS <gamelinks007@gmail.com>
    Co-authored-by: default avatarKoichi Sasada <ko1@atdot.net>
    Co-authored-by: default avatarKazuhiro NISHIYAMA <zn@mbf.nifty.com>
    Co-authored-by: default avatarCharles Oliver Nutter <headius@headius.com>
Loading