irb 1.4.1 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/README.md +4 -0
- data/Rakefile +25 -0
- data/irb.gemspec +3 -3
- data/lib/irb/cmd/chws.rb +4 -2
- data/lib/irb/cmd/fork.rb +5 -2
- data/lib/irb/cmd/help.rb +4 -2
- data/lib/irb/cmd/info.rb +4 -2
- data/lib/irb/cmd/load.rb +3 -2
- data/lib/irb/cmd/ls.rb +13 -2
- data/lib/irb/cmd/measure.rb +4 -2
- data/lib/irb/cmd/nop.rb +4 -2
- data/lib/irb/cmd/pushws.rb +4 -2
- data/lib/irb/cmd/show_source.rb +22 -2
- data/lib/irb/cmd/subirb.rb +4 -2
- data/lib/irb/cmd/whereami.rb +4 -2
- data/lib/irb/color.rb +49 -29
- data/lib/irb/color_printer.rb +4 -1
- data/lib/irb/completion.rb +89 -47
- data/lib/irb/context.rb +52 -16
- data/lib/irb/ext/multi-irb.rb +0 -1
- data/lib/irb/ext/save-history.rb +4 -4
- data/lib/irb/extend-command.rb +44 -25
- data/lib/irb/init.rb +32 -9
- data/lib/irb/input-method.rb +22 -9
- data/lib/irb/inspector.rb +3 -11
- data/lib/irb/lc/error.rb +4 -7
- data/lib/irb/lc/help-message +43 -53
- data/lib/irb/lc/ja/encoding_aliases.rb +4 -2
- data/lib/irb/lc/ja/error.rb +4 -7
- data/lib/irb/lc/ja/help-message +0 -12
- data/lib/irb/ruby-lex.rb +62 -57
- data/lib/irb/version.rb +2 -2
- data/lib/irb/workspace.rb +6 -13
- data/lib/irb.rb +25 -68
- data/man/irb.1 +23 -2
- metadata +6 -4
data/lib/irb.rb
CHANGED
@@ -51,61 +51,17 @@ require_relative "irb/easter-egg"
|
|
51
51
|
#
|
52
52
|
# == Command line options
|
53
53
|
#
|
54
|
-
#
|
55
|
-
# -f Suppress read of ~/.irbrc
|
56
|
-
# -d Set $DEBUG to true (same as `ruby -d')
|
57
|
-
# -r load-module Same as `ruby -r'
|
58
|
-
# -I path Specify $LOAD_PATH directory
|
59
|
-
# -U Same as `ruby -U`
|
60
|
-
# -E enc Same as `ruby -E`
|
61
|
-
# -w Same as `ruby -w`
|
62
|
-
# -W[level=2] Same as `ruby -W`
|
63
|
-
# --context-mode n Set n[0-4] to method to create Binding Object,
|
64
|
-
# when new workspace was created
|
65
|
-
# --extra-doc-dir Add an extra doc dir for the doc dialog
|
66
|
-
# --echo Show result (default)
|
67
|
-
# --noecho Don't show result
|
68
|
-
# --echo-on-assignment
|
69
|
-
# Show result on assignment
|
70
|
-
# --noecho-on-assignment
|
71
|
-
# Don't show result on assignment
|
72
|
-
# --truncate-echo-on-assignment
|
73
|
-
# Show truncated result on assignment (default)
|
74
|
-
# --inspect Use `inspect' for output
|
75
|
-
# --noinspect Don't use inspect for output
|
76
|
-
# --multiline Use multiline editor module
|
77
|
-
# --nomultiline Don't use multiline editor module
|
78
|
-
# --singleline Use singleline editor module
|
79
|
-
# --nosingleline Don't use singleline editor module
|
80
|
-
# --colorize Use colorization
|
81
|
-
# --nocolorize Don't use colorization
|
82
|
-
# --autocomplete Use autocompletion
|
83
|
-
# --noautocomplete Don't use autocompletion
|
84
|
-
# --prompt prompt-mode/--prompt-mode prompt-mode
|
85
|
-
# Switch prompt mode. Pre-defined prompt modes are
|
86
|
-
# `default', `simple', `xmp' and `inf-ruby'
|
87
|
-
# --inf-ruby-mode Use prompt appropriate for inf-ruby-mode on emacs.
|
88
|
-
# Suppresses --multiline and --singleline.
|
89
|
-
# --sample-book-mode/--simple-prompt
|
90
|
-
# Simple prompt mode
|
91
|
-
# --noprompt No prompt mode
|
92
|
-
# --single-irb Share self with sub-irb.
|
93
|
-
# --tracer Display trace for each execution of commands.
|
94
|
-
# --back-trace-limit n
|
95
|
-
# Display backtrace top n and tail n. The default
|
96
|
-
# value is 16.
|
97
|
-
# --verbose Show details
|
98
|
-
# --noverbose Don't show details
|
99
|
-
# -v, --version Print the version of irb
|
100
|
-
# -h, --help Print help
|
101
|
-
# -- Separate options of irb from the list of command-line args
|
54
|
+
# :include: ./irb/lc/help-message
|
102
55
|
#
|
103
56
|
# == Configuration
|
104
57
|
#
|
105
|
-
# IRB reads
|
106
|
-
#
|
107
|
-
# If <code>~/.irbrc</code> doesn't exist, +irb+ will try to read in the following order:
|
58
|
+
# IRB reads a personal initialization file when it's invoked.
|
59
|
+
# IRB searches a file in the following order and loads the first one found.
|
108
60
|
#
|
61
|
+
# * <tt>$IRBRC</tt> (if <tt>$IRBRC</tt> is set)
|
62
|
+
# * <tt>$XDG_CONFIG_HOME/irb/irbrc</tt> (if <tt>$XDG_CONFIG_HOME</tt> is set)
|
63
|
+
# * <tt>~/.irbrc</tt>
|
64
|
+
# * +.config/irb/irbrc+
|
109
65
|
# * +.irbrc+
|
110
66
|
# * +irb.rc+
|
111
67
|
# * +_irbrc+
|
@@ -433,11 +389,7 @@ module IRB
|
|
433
389
|
#
|
434
390
|
# Will raise an Abort exception, or the given +exception+.
|
435
391
|
def IRB.irb_abort(irb, exception = Abort)
|
436
|
-
|
437
|
-
irb.context.thread.raise exception, "abort then interrupt!"
|
438
|
-
else
|
439
|
-
raise exception, "abort then interrupt!"
|
440
|
-
end
|
392
|
+
irb.context.thread.raise exception, "abort then interrupt!"
|
441
393
|
end
|
442
394
|
|
443
395
|
class Irb
|
@@ -474,6 +426,10 @@ module IRB
|
|
474
426
|
def initialize(workspace = nil, input_method = nil)
|
475
427
|
@context = Context.new(self, workspace, input_method)
|
476
428
|
@context.main.extend ExtendCommandBundle
|
429
|
+
@context.command_aliases.each do |alias_name, cmd_name|
|
430
|
+
next if @context.symbol_alias(alias_name)
|
431
|
+
@context.main.install_alias_method(alias_name, cmd_name)
|
432
|
+
end
|
477
433
|
@signal_status = :IN_IRB
|
478
434
|
@scanner = RubyLex.new
|
479
435
|
end
|
@@ -554,13 +510,15 @@ module IRB
|
|
554
510
|
|
555
511
|
@scanner.set_auto_indent(@context) if @context.auto_indent_mode
|
556
512
|
|
557
|
-
@scanner.each_top_level_statement do |line, line_no|
|
513
|
+
@scanner.each_top_level_statement(@context) do |line, line_no|
|
558
514
|
signal_status(:IN_EVAL) do
|
559
515
|
begin
|
560
516
|
line.untaint if RUBY_VERSION < '2.7'
|
561
517
|
if IRB.conf[:MEASURE] && IRB.conf[:MEASURE_CALLBACKS].empty?
|
562
518
|
IRB.set_measure_callback
|
563
519
|
end
|
520
|
+
# Assignment expression check should be done before @context.evaluate to handle code like `a /2#/ if false; a = 1`
|
521
|
+
is_assignment = assignment_expression?(line)
|
564
522
|
if IRB.conf[:MEASURE] && !IRB.conf[:MEASURE_CALLBACKS].empty?
|
565
523
|
result = nil
|
566
524
|
last_proc = proc{ result = @context.evaluate(line, line_no, exception: exc) }
|
@@ -577,7 +535,7 @@ module IRB
|
|
577
535
|
@context.evaluate(line, line_no, exception: exc)
|
578
536
|
end
|
579
537
|
if @context.echo?
|
580
|
-
if
|
538
|
+
if is_assignment
|
581
539
|
if @context.echo_on_assignment?
|
582
540
|
output_value(@context.echo_on_assignment? == :truncate)
|
583
541
|
end
|
@@ -640,11 +598,7 @@ module IRB
|
|
640
598
|
|
641
599
|
if exc.backtrace
|
642
600
|
order = nil
|
643
|
-
if '
|
644
|
-
# Exception#full_message doesn't have keyword arguments.
|
645
|
-
message = exc.full_message # the same of (highlight: true, order: bottom)
|
646
|
-
order = :bottom
|
647
|
-
elsif '2.5.1' <= RUBY_VERSION && RUBY_VERSION < '3.0.0'
|
601
|
+
if RUBY_VERSION < '3.0.0'
|
648
602
|
if STDOUT.tty?
|
649
603
|
message = exc.full_message(order: :bottom)
|
650
604
|
order = :bottom
|
@@ -825,11 +779,11 @@ module IRB
|
|
825
779
|
if diff_size.positive? and output_width > winwidth
|
826
780
|
lines, _ = Reline::Unicode.split_by_width(first_line, winwidth - diff_size - 3)
|
827
781
|
str = "%s..." % lines.first
|
828
|
-
str += "\e[0m" if
|
782
|
+
str += "\e[0m" if Color.colorable?
|
829
783
|
multiline_p = false
|
830
784
|
else
|
831
785
|
str = str.gsub(/(\A.*?\n).*/m, "\\1...")
|
832
|
-
str += "\e[0m" if
|
786
|
+
str += "\e[0m" if Color.colorable?
|
833
787
|
end
|
834
788
|
else
|
835
789
|
output_width = Reline::Unicode.calculate_width(@context.return_format % str, true)
|
@@ -837,7 +791,7 @@ module IRB
|
|
837
791
|
if diff_size.positive? and output_width > winwidth
|
838
792
|
lines, _ = Reline::Unicode.split_by_width(str, winwidth - diff_size - 3)
|
839
793
|
str = "%s..." % lines.first
|
840
|
-
str += "\e[0m" if
|
794
|
+
str += "\e[0m" if Color.colorable?
|
841
795
|
end
|
842
796
|
end
|
843
797
|
end
|
@@ -875,9 +829,12 @@ module IRB
|
|
875
829
|
# array of parsed expressions. The first element of each expression is the
|
876
830
|
# expression's type.
|
877
831
|
verbose, $VERBOSE = $VERBOSE, nil
|
878
|
-
|
832
|
+
code = "#{RubyLex.generate_local_variables_assign_code(@context.local_variables) || 'nil;'}\n#{line}"
|
833
|
+
# Get the last node_type of the line. drop(1) is to ignore the local_variables_assign_code part.
|
834
|
+
node_type = Ripper.sexp(code)&.dig(1)&.drop(1)&.dig(-1, 0)
|
835
|
+
ASSIGNMENT_NODE_TYPES.include?(node_type)
|
836
|
+
ensure
|
879
837
|
$VERBOSE = verbose
|
880
|
-
result
|
881
838
|
end
|
882
839
|
|
883
840
|
ATTR_TTY = "\e[%sm"
|
data/man/irb.1
CHANGED
@@ -173,8 +173,19 @@ The default value is 16.
|
|
173
173
|
.El
|
174
174
|
.Pp
|
175
175
|
.Sh ENVIRONMENT
|
176
|
-
.Bl -tag -compact
|
176
|
+
.Bl -tag -compact -width "XDG_CONFIG_HOME"
|
177
|
+
.It Ev IRB_LANG
|
178
|
+
The locale used for
|
179
|
+
.Nm .
|
180
|
+
.Pp
|
177
181
|
.It Ev IRBRC
|
182
|
+
The path to the personal initialization file.
|
183
|
+
.Pp
|
184
|
+
.It Ev XDG_CONFIG_HOME
|
185
|
+
.Nm
|
186
|
+
respects XDG_CONFIG_HOME. If this is set, load
|
187
|
+
.Pa $XDG_CONFIG_HOME/irb/irbrc
|
188
|
+
as a personal initialization file.
|
178
189
|
.Pp
|
179
190
|
.El
|
180
191
|
.Pp
|
@@ -186,7 +197,17 @@ depends on same variables as
|
|
186
197
|
.Sh FILES
|
187
198
|
.Bl -tag -compact
|
188
199
|
.It Pa ~/.irbrc
|
189
|
-
Personal irb initialization.
|
200
|
+
Personal irb initialization. If
|
201
|
+
.Ev IRBRC
|
202
|
+
is set, read
|
203
|
+
.Pa $IRBRC
|
204
|
+
instead. If
|
205
|
+
.Ev IRBRC
|
206
|
+
is not set and
|
207
|
+
.Ev XDG_CONFIG_HOME
|
208
|
+
is set,
|
209
|
+
.Pa $XDG_CONFIG_HOME/irb/irbrc
|
210
|
+
is loaded.
|
190
211
|
.Pp
|
191
212
|
.El
|
192
213
|
.Pp
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- aycabta
|
7
8
|
- Keiju ISHITSUKA
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2022-11-17 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: reline
|
@@ -26,6 +27,7 @@ dependencies:
|
|
26
27
|
version: 0.3.0
|
27
28
|
description: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
28
29
|
email:
|
30
|
+
- aycabta@gmail.com
|
29
31
|
- keiju@ruby-lang.org
|
30
32
|
executables:
|
31
33
|
- irb
|
@@ -105,14 +107,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
107
|
requirements:
|
106
108
|
- - ">="
|
107
109
|
- !ruby/object:Gem::Version
|
108
|
-
version: '2.
|
110
|
+
version: '2.6'
|
109
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
112
|
requirements:
|
111
113
|
- - ">="
|
112
114
|
- !ruby/object:Gem::Version
|
113
115
|
version: '0'
|
114
116
|
requirements: []
|
115
|
-
rubygems_version: 3.
|
117
|
+
rubygems_version: 3.4.0.dev
|
116
118
|
signing_key:
|
117
119
|
specification_version: 4
|
118
120
|
summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|