* [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
```
6074069c7d
* Drop an invalid char as UTF-8
* Add test_completion_with_indent_and_completer_quote_characters
This is for 8a705245e5.
* [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>.
```
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/505725677d1a
* [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
```
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
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
```
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
066ecb0a21
* [ruby/reline] Implement vi_prev_char and vi_to_prev_char
0ad3ee63fa
* [ruby/readline-ext] Include ruby/assert.h in ruby/ruby.h so that assertions can be there
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
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.
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:
c5a03b1e29/compat/winansi.c (L558)
* Reline: Fix changed test results due to change to UTF-8 on Windows
In commit f8ea2860b0 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
ed5cf375a65b7bbf9c34
* [ruby/reline] Implement vi_change_meta
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]
788f0df845
* [ruby/irb] Add a new easter egg: dancing ruby
e37dc7e58e
* [ruby/irb] Exclude useless files from RDoc
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.
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.
4bfea07e4a
* [ruby/reline] Organize special keys escape sequences
41deb1a3d9
* [ruby/readline-ext] Remove unnecessary -I$(top_srcdir) when it's an individual gem
efaca4a5f4
* [ruby/readline-ext] Check TestRelineAsReadline existance
c0a6303168
* [ruby/readline-ext] The ruby/assert.h is adopted by Ruby 2.7 or later
106c31fc1b
* Revert "[ruby/readline-ext] Include ruby/assert.h in ruby/ruby.h so that assertions can be there"
This reverts commit 425b2064d3.
This cherry-pick was a mistake.
* [ruby/readline-ext] Use require check instead of DONT_RUN_RELINE_TEST env
1df99d1481
* [ruby/readline-ext] Add spec.extensions
8c33abb13c
* [ruby/readline-ext] Use rake/extensiokntask to build
b0b5f709bd
* Fix readline build dependency
* [ruby/irb] Add test_complete_symbol
dbbf086c1f
* [ruby/irb] Check doc namespace correctly
IRB::InputCompletor::PerfectMatchedProc crashes when doc not found because a
variable name was incorrect.
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.
fbe59e344f
* [ruby/irb] Use 0.step instead of (..0).each for Ruby 2.5
5d628ca40e
* Revert "[ruby/irb] Add test_complete_symbol"
This reverts commit 3af3431c2c.
* [ruby/irb] fix reserved words and completion for them
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.
a93119c847
* [ruby/irb] Version 1.2.2
a71753f15a
* [ruby/reline] Version 0.1.3
ea2b182466
* [ruby/irb] Include easter-egg.rb in gemspec
`irb` doesn't run because this file isn't included in the gem.
73cda56d25
* [ruby/irb] Version 1.2.3
dd56e06df5
* support multi-run test for test_readline.rb
* [ruby/irb] `yield` outside method definition is a syntax error
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
500526558 (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
0a641a69b0
* [ruby/reline] Work with wrong $/ value correctly
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
40d6610baf
* [ruby/reline] Suppress error in case INPUTRC env is empty
bce7e7562b
* [ruby/reline] Add yamatanooroti rendering test
f092519525
* [ruby/reline] Rename test suite name of yamatanooroti test
b0f32f5de4
* [ruby/reline] Add a comment why rescue yamatanooroti loading error on the test
2a8061daec
* [ruby/irb] Suppress crashing when EncodingError has occurred without lineno
13572d8cdc
* [ruby/reline] Suppress error when check ambiguous char width in LANG=C
623dffdd75
* [ruby/io-console] Enable only interrupt bits on `intr: true`
baaf929041
* [ruby/io-console] bump up to 0.5.4
* [ruby/io-console] Update the minimum requirement of Ruby version
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.
e5951aa34c
* [ruby/io-console] bump up to 0.5.5
* [ruby/io-console] Prefer keyword arguments
5facbfc4c8
* [ruby/io-console] [DOC] Improved about `intr:`
82b630cd79
* [ruby/io-console] Just ignore the extension on other than CRuby
41b6f09574
* [ruby/io-console] bump up to 0.5.6
Co-authored-by: KOBAYASHI Shuji <shuujii@gmail.com>
Co-authored-by: Ben <kanobt61@gmail.com>
Co-authored-by: Yusuke Endoh <mame@ruby-lang.org>
Co-authored-by: MSP-Greg <MSP-Greg@users.noreply.github.com>
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Co-authored-by: Kenta Murata <mrkn@mrkn.jp>
Co-authored-by: Lars Kanis <lars@greiz-reinsdorf.de>
Co-authored-by: Lars Kanis <kanis@comcard.de>
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
Co-authored-by: Hiroshi SHIBATA <hsbt@ruby-lang.org>
Co-authored-by: Nobuhiro IMAI <nov@yo.rim.or.jp>
Co-authored-by: Nick Lewis <nick@puppet.com>
Co-authored-by: S-H-GAMELINKS <gamelinks007@gmail.com>
Co-authored-by: Koichi Sasada <ko1@atdot.net>
Co-authored-by: Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
Co-authored-by: Charles Oliver Nutter <headius@headius.com>
When input `"` or `/` with simple-prompt,
Before:
`"` or `/`
(prompt disappeared and indent is changed)
After:
`"> "` or `/> /`
(indent is unchanged since `>> `)
Reline is a readline stdlib compatible library. It also supports
multiline input. IRB is improved with Reline and supports multiline.
Besides, supports showing documents when completed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67645 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
If uplevel keyword is given, the warning message is prepended
with caller file and line information and the string "warning: ".
The use of the uplevel keyword makes Kernel#warn format output
similar to how rb_warn formats output.
This patch modifies net/ftp and net/imap to use Kernel#warn
instead of $stderr.puts or $stderr.printf, since they are used
for printing warnings.
This makes lib/cgi/core and tempfile use $stderr.puts instead of
warn for debug logging, since they are used for debug printing
and not for warning.
This does not modify bundler, rubygems, or rdoc, as those are
maintained outside of ruby and probably wish to remain backwards
compatible with older ruby versions.
rb_warn_m code is originally from nobu, but I've changed it
so that it only includes the path and lineno from uplevel
(not the method), and also prepends the string "warning: ",
to make it more similar to rb_warn.
From: Jeremy Evans code@jeremyevans.net
Signed-off-by: Urabe Shyouhei shyouhei@ruby-lang.org
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This is not perfectly good solution (at least we don't want to have ARGV
as default value of `argv` argument), but unfortunately IRB.setup and
IRB.parse_opts are public methods and we can't make breaking change to
those methods.
We may deprecate using them and then make them private in the future,
but the removal should not be in Ruby 2.5. So I kept their interface for
now.
[Bug #14162] [close GH-1770]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61149 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
When you change this to true, you may need to add more tests.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
switch called in irb. a patch from Andrew Grimm in
[ruby-core:31558].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
IRB::irb_at_exit. no use finalizer saving history. [ruby-dev-38563]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24229 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
line options. [ruby-dev:37161]. Fixes#711.
improved long optinos.
* lib/irb/init.rb (IRB.set_encoding): new subroutine for IRB.opt_parse
* lib/irb/input-method.rb (IRB::StdioInputMethod): (M17N) regards
scripts that user types as encoded in the external_encoding.
* lib/irb/input-method.rb (IRB::ReadlineInputMethod): ditto.
* lib/irb/input-method.rb (IRB::FileInputMethod): (M17N) respects
magic comment.
* lib/irb/help.rb (IRB.print_usage): (M17N) respects magic comment
in the resource file.
* lib/irb/lc/help-message: adds -U and -E.
* lib/irb/lc/ja/help-message: ditto. re-encoded from ISO-2022-JP into UTF-8.
* lib/irb/lc/ja/encoding_aliases.rb: new file. provides Japanese specific
character encoding name table for backward compatibility.
* lib/irb/lc/ja/error.rb: re-eoncoded from ISO-2022-JP into UTF-8.
magic comment.
* lib/irb/locale.rb: integrated with Ruby 1.9's M17N support.
* lib/irb/magic-file.rb: new file. utility to handle files with magic
comment and opens in the correct encoding.
* lib/irb/ruby-lex.rb (RubyLex#each_top_level_statement): recovers
character encoding for a statement after it lexed so that irb can
eval the statement in correct encoding.
* lib/irb/src_encoding.rb: new file. utility.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20862 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
a patch from Daniel Berger <Daniel.Berger at qwest.com> in
[ruby-core:19451]. fix [ruby-core:19450]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
message. a patch from Mauricio Fernandez <mfp at acm.org>
[ruby-core:07340]
* eval.c (rb_f_autoload): check if ruby_cbase is nil (during
instance_eval for objects cannot have singleton classes,
e.g. fixnums and symbols). [ruby-dev:28178]
* gc.c (rb_gc_call_finalizer_at_exit): turn on during_gc while
invoking finalizers.
* gc.c (rb_gc_finalize_deferred): ditto.
* io.c (rb_write_error2): use fwrite(3) if rb_stderr is not
updated or is already freed. [ruby-dev:28313]
* eval.c (error_line): include the class name of a surrounding
method in error position description.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9918 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
[ruby-dev:26872]
* lib/irb/locale.rb: support to print help message when OS locale is
ja_JP.utf-8. [ruby-dev:26872]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9040 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
[ruby-dev:26872]
* lib/irb/locale.rb: support to print help message when OS locale is
ja_JP.utf-8. [ruby-dev:26872]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9031 b2dd03c8-39d4-4d8f-98ff-823fe69b080e