irb 1.11.1 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +11 -9
- data/Rakefile +1 -1
- data/lib/irb/cmd/nop.rb +3 -52
- data/lib/irb/{cmd → command}/backtrace.rb +1 -1
- data/lib/irb/command/base.rb +64 -0
- data/lib/irb/{cmd → command}/break.rb +1 -1
- data/lib/irb/{cmd → command}/catch.rb +1 -1
- data/lib/irb/{cmd → command}/chws.rb +4 -6
- data/lib/irb/{cmd → command}/continue.rb +1 -1
- data/lib/irb/{cmd → command}/debug.rb +3 -4
- data/lib/irb/{cmd → command}/delete.rb +1 -1
- data/lib/irb/command/edit.rb +70 -0
- data/lib/irb/{cmd → command}/exit.rb +2 -4
- data/lib/irb/{cmd → command}/finish.rb +1 -1
- data/lib/irb/command/force_exit.rb +20 -0
- data/lib/irb/command/help.rb +84 -0
- data/lib/irb/{cmd → command}/history.rb +3 -3
- data/lib/irb/{cmd → command}/info.rb +1 -1
- data/lib/irb/{cmd → command}/irb_info.rb +5 -6
- data/lib/irb/{cmd → command}/load.rb +3 -5
- data/lib/irb/{cmd → command}/ls.rb +10 -4
- data/lib/irb/{cmd → command}/measure.rb +2 -4
- data/lib/irb/{cmd → command}/next.rb +1 -1
- data/lib/irb/{cmd → command}/pushws.rb +20 -5
- data/lib/irb/{cmd → command}/show_doc.rb +17 -5
- data/lib/irb/{cmd → command}/show_source.rb +26 -10
- data/lib/irb/{cmd → command}/step.rb +1 -1
- data/lib/irb/{cmd → command}/subirb.rb +3 -5
- data/lib/irb/{cmd → command}/whereami.rb +2 -4
- data/lib/irb/{extend-command.rb → command.rb} +50 -86
- data/lib/irb/completion.rb +1 -1
- data/lib/irb/context.rb +63 -20
- data/lib/irb/ext/change-ws.rb +4 -4
- data/lib/irb/ext/eval_history.rb +3 -3
- data/lib/irb/ext/loader.rb +4 -4
- data/lib/irb/ext/multi-irb.rb +1 -1
- data/lib/irb/ext/tracer.rb +12 -51
- data/lib/irb/ext/use-loader.rb +6 -8
- data/lib/irb/ext/workspaces.rb +11 -34
- data/lib/irb/frame.rb +1 -1
- data/lib/irb/help.rb +1 -1
- data/lib/irb/history.rb +12 -4
- data/lib/irb/init.rb +28 -17
- data/lib/irb/input-method.rb +18 -2
- data/lib/irb/inspector.rb +3 -3
- data/lib/irb/lc/error.rb +1 -6
- data/lib/irb/lc/ja/error.rb +1 -6
- data/lib/irb/locale.rb +2 -2
- data/lib/irb/nesting_parser.rb +13 -3
- data/lib/irb/notifier.rb +1 -1
- data/lib/irb/output-method.rb +2 -8
- data/lib/irb/ruby-lex.rb +2 -2
- data/lib/irb/source_finder.rb +98 -38
- data/lib/irb/statement.rb +25 -3
- data/lib/irb/version.rb +3 -3
- data/lib/irb/workspace.rb +4 -4
- data/lib/irb/ws-for-case-2.rb +1 -1
- data/lib/irb/xmp.rb +1 -1
- data/lib/irb.rb +38 -32
- metadata +30 -29
- data/lib/irb/cmd/edit.rb +0 -60
- data/lib/irb/cmd/help.rb +0 -23
- data/lib/irb/cmd/show_cmds.rb +0 -59
data/lib/irb/ext/eval_history.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# history.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -18,7 +18,7 @@ module IRB # :nodoc:
|
|
18
18
|
|
19
19
|
if defined?(@eval_history) && @eval_history
|
20
20
|
@eval_history_values.push @line_no, @last_value
|
21
|
-
|
21
|
+
workspace.evaluate "__ = IRB.CurrentContext.instance_eval{@eval_history_values}"
|
22
22
|
end
|
23
23
|
|
24
24
|
@last_value
|
@@ -49,7 +49,7 @@ module IRB # :nodoc:
|
|
49
49
|
else
|
50
50
|
@eval_history_values = EvalHistory.new(no)
|
51
51
|
IRB.conf[:__TMP__EHV__] = @eval_history_values
|
52
|
-
|
52
|
+
workspace.evaluate("__ = IRB.conf[:__TMP__EHV__]")
|
53
53
|
IRB.conf.delete(:__TMP_EHV__)
|
54
54
|
end
|
55
55
|
else
|
data/lib/irb/ext/loader.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# loader.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -98,13 +98,13 @@ module IRB # :nodoc:
|
|
98
98
|
|
99
99
|
def old # :nodoc:
|
100
100
|
back_io = @io
|
101
|
-
back_path =
|
101
|
+
back_path = irb_path
|
102
102
|
back_name = @irb_name
|
103
103
|
back_scanner = @irb.scanner
|
104
104
|
begin
|
105
105
|
@io = FileInputMethod.new(path)
|
106
106
|
@irb_name = File.basename(path)
|
107
|
-
|
107
|
+
self.irb_path = path
|
108
108
|
@irb.signal_status(:IN_LOAD) do
|
109
109
|
if back_io.kind_of?(FileInputMethod)
|
110
110
|
@irb.eval_input
|
@@ -119,7 +119,7 @@ module IRB # :nodoc:
|
|
119
119
|
ensure
|
120
120
|
@io = back_io
|
121
121
|
@irb_name = back_name
|
122
|
-
|
122
|
+
self.irb_path = back_path
|
123
123
|
@irb.scanner = back_scanner
|
124
124
|
end
|
125
125
|
end
|
data/lib/irb/ext/multi-irb.rb
CHANGED
data/lib/irb/ext/tracer.rb
CHANGED
@@ -1,78 +1,39 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/lib/tracer.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
5
5
|
#
|
6
|
-
|
6
|
+
# Loading the gem "tracer" will cause it to extend IRB commands with:
|
7
|
+
# https://github.com/ruby/tracer/blob/v0.2.2/lib/tracer/irb.rb
|
7
8
|
begin
|
8
9
|
require "tracer"
|
9
10
|
rescue LoadError
|
10
11
|
$stderr.puts "Tracer extension of IRB is enabled but tracer gem wasn't found."
|
11
|
-
module IRB
|
12
|
-
class Context
|
13
|
-
def use_tracer=(opt)
|
14
|
-
# do nothing
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
12
|
return # This is about to disable loading below
|
19
13
|
end
|
20
14
|
|
21
15
|
module IRB
|
16
|
+
class CallTracer < ::CallTracer
|
17
|
+
IRB_DIR = File.expand_path('../..', __dir__)
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
Tracer.verbose = false
|
26
|
-
Tracer.add_filter {
|
27
|
-
|event, file, line, id, binding, *rests|
|
28
|
-
/^#{Regexp.quote(@CONF[:IRB_LIB_PATH])}/ !~ file and
|
29
|
-
File::basename(file) != "irb.rb"
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
class Context
|
34
|
-
# Whether Tracer is used when evaluating statements in this context.
|
35
|
-
#
|
36
|
-
# See +lib/tracer.rb+ for more information.
|
37
|
-
attr_reader :use_tracer
|
38
|
-
alias use_tracer? use_tracer
|
39
|
-
|
40
|
-
# Sets whether or not to use the Tracer library when evaluating statements
|
41
|
-
# in this context.
|
42
|
-
#
|
43
|
-
# See +lib/tracer.rb+ for more information.
|
44
|
-
def use_tracer=(opt)
|
45
|
-
if opt
|
46
|
-
Tracer.set_get_line_procs(@irb_path) {
|
47
|
-
|line_no, *rests|
|
48
|
-
@io.line(line_no)
|
49
|
-
}
|
50
|
-
elsif !opt && @use_tracer
|
51
|
-
Tracer.off
|
52
|
-
end
|
53
|
-
@use_tracer=opt
|
19
|
+
def skip?(tp)
|
20
|
+
super || tp.path.match?(IRB_DIR) || tp.path.match?('<internal:prelude>')
|
54
21
|
end
|
55
22
|
end
|
56
|
-
|
57
23
|
class WorkSpace
|
58
24
|
alias __evaluate__ evaluate
|
59
25
|
# Evaluate the context of this workspace and use the Tracer library to
|
60
26
|
# output the exact lines of code are being executed in chronological order.
|
61
27
|
#
|
62
|
-
# See
|
63
|
-
def evaluate(
|
64
|
-
if
|
65
|
-
|
66
|
-
begin
|
28
|
+
# See https://github.com/ruby/tracer for more information.
|
29
|
+
def evaluate(statements, file = __FILE__, line = __LINE__)
|
30
|
+
if IRB.conf[:USE_TRACER] == true
|
31
|
+
CallTracer.new(colorize: Color.colorable?).start do
|
67
32
|
__evaluate__(statements, file, line)
|
68
|
-
ensure
|
69
|
-
Tracer.off
|
70
33
|
end
|
71
34
|
else
|
72
|
-
__evaluate__(statements, file
|
35
|
+
__evaluate__(statements, file, line)
|
73
36
|
end
|
74
37
|
end
|
75
38
|
end
|
76
|
-
|
77
|
-
IRB.initialize_tracer
|
78
39
|
end
|
data/lib/irb/ext/use-loader.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# use-loader.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
5
5
|
#
|
6
6
|
|
7
|
-
require_relative "../
|
7
|
+
require_relative "../command/load"
|
8
8
|
require_relative "loader"
|
9
9
|
|
10
10
|
class Object
|
@@ -17,12 +17,12 @@ module IRB
|
|
17
17
|
remove_method :irb_load if method_defined?(:irb_load)
|
18
18
|
# Loads the given file similarly to Kernel#load, see IrbLoader#irb_load
|
19
19
|
def irb_load(*opts, &b)
|
20
|
-
|
20
|
+
Command::Load.execute(irb_context, *opts, &b)
|
21
21
|
end
|
22
22
|
remove_method :irb_require if method_defined?(:irb_require)
|
23
23
|
# Loads the given file similarly to Kernel#require
|
24
24
|
def irb_require(*opts, &b)
|
25
|
-
|
25
|
+
Command::Require.execute(irb_context, *opts, &b)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -49,14 +49,12 @@ module IRB
|
|
49
49
|
if IRB.conf[:USE_LOADER] != opt
|
50
50
|
IRB.conf[:USE_LOADER] = opt
|
51
51
|
if opt
|
52
|
-
|
53
|
-
end
|
54
|
-
(class<<@workspace.main;self;end).instance_eval {
|
52
|
+
(class<<workspace.main;self;end).instance_eval {
|
55
53
|
alias_method :load, :irb_load
|
56
54
|
alias_method :require, :irb_require
|
57
55
|
}
|
58
56
|
else
|
59
|
-
(class
|
57
|
+
(class<<workspace.main;self;end).instance_eval {
|
60
58
|
alias_method :load, :__original__load__IRB_use_loader__
|
61
59
|
alias_method :require, :__original__require__IRB_use_loader__
|
62
60
|
}
|
data/lib/irb/ext/workspaces.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# push-ws.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -6,21 +6,6 @@
|
|
6
6
|
|
7
7
|
module IRB # :nodoc:
|
8
8
|
class Context
|
9
|
-
|
10
|
-
# Size of the current WorkSpace stack
|
11
|
-
def irb_level
|
12
|
-
workspace_stack.size
|
13
|
-
end
|
14
|
-
|
15
|
-
# WorkSpaces in the current stack
|
16
|
-
def workspaces
|
17
|
-
if defined? @workspaces
|
18
|
-
@workspaces
|
19
|
-
else
|
20
|
-
@workspaces = []
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
9
|
# Creates a new workspace with the given object or binding, and appends it
|
25
10
|
# onto the current #workspaces stack.
|
26
11
|
#
|
@@ -28,20 +13,16 @@ module IRB # :nodoc:
|
|
28
13
|
# information.
|
29
14
|
def push_workspace(*_main)
|
30
15
|
if _main.empty?
|
31
|
-
if
|
32
|
-
|
33
|
-
|
16
|
+
if @workspace_stack.size > 1
|
17
|
+
# swap the top two workspaces
|
18
|
+
previous_workspace, current_workspace = @workspace_stack.pop(2)
|
19
|
+
@workspace_stack.push current_workspace, previous_workspace
|
20
|
+
end
|
21
|
+
else
|
22
|
+
@workspace_stack.push WorkSpace.new(workspace.binding, _main[0])
|
23
|
+
if !(class<<main;ancestors;end).include?(ExtendCommandBundle)
|
24
|
+
main.extend ExtendCommandBundle
|
34
25
|
end
|
35
|
-
ws = workspaces.pop
|
36
|
-
workspaces.push @workspace
|
37
|
-
@workspace = ws
|
38
|
-
return workspaces
|
39
|
-
end
|
40
|
-
|
41
|
-
workspaces.push @workspace
|
42
|
-
@workspace = WorkSpace.new(@workspace.binding, _main[0])
|
43
|
-
if !(class<<main;ancestors;end).include?(ExtendCommandBundle)
|
44
|
-
main.extend ExtendCommandBundle
|
45
26
|
end
|
46
27
|
end
|
47
28
|
|
@@ -50,11 +31,7 @@ module IRB # :nodoc:
|
|
50
31
|
#
|
51
32
|
# Also, see #push_workspace.
|
52
33
|
def pop_workspace
|
53
|
-
if
|
54
|
-
print "workspace stack empty\n"
|
55
|
-
return
|
56
|
-
end
|
57
|
-
@workspace = workspaces.pop
|
34
|
+
@workspace_stack.pop if @workspace_stack.size > 1
|
58
35
|
end
|
59
36
|
end
|
60
37
|
end
|
data/lib/irb/frame.rb
CHANGED
data/lib/irb/help.rb
CHANGED
data/lib/irb/history.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
1
3
|
module IRB
|
2
4
|
module HistorySavingAbility # :nodoc:
|
3
5
|
def support_history_saving?
|
@@ -5,7 +7,7 @@ module IRB
|
|
5
7
|
end
|
6
8
|
|
7
9
|
def reset_history_counter
|
8
|
-
@loaded_history_lines = self.class::HISTORY.size
|
10
|
+
@loaded_history_lines = self.class::HISTORY.size
|
9
11
|
end
|
10
12
|
|
11
13
|
def load_history
|
@@ -14,7 +16,7 @@ module IRB
|
|
14
16
|
if history_file = IRB.conf[:HISTORY_FILE]
|
15
17
|
history_file = File.expand_path(history_file)
|
16
18
|
end
|
17
|
-
history_file = IRB.
|
19
|
+
history_file = IRB.rc_files("_history").first unless history_file
|
18
20
|
if File.exist?(history_file)
|
19
21
|
File.open(history_file, "r:#{IRB.conf[:LC_MESSAGES].encoding}") do |f|
|
20
22
|
f.each { |l|
|
@@ -39,7 +41,7 @@ module IRB
|
|
39
41
|
if history_file = IRB.conf[:HISTORY_FILE]
|
40
42
|
history_file = File.expand_path(history_file)
|
41
43
|
end
|
42
|
-
history_file = IRB.
|
44
|
+
history_file = IRB.rc_files("_history").first unless history_file
|
43
45
|
|
44
46
|
# Change the permission of a file that already exists[BUG #7694]
|
45
47
|
begin
|
@@ -59,13 +61,19 @@ module IRB
|
|
59
61
|
append_history = true
|
60
62
|
end
|
61
63
|
|
64
|
+
pathname = Pathname.new(history_file)
|
65
|
+
unless Dir.exist?(pathname.dirname)
|
66
|
+
warn "Warning: The directory to save IRB's history file does not exist. Please double check `IRB.conf[:HISTORY_FILE]`'s value."
|
67
|
+
return
|
68
|
+
end
|
69
|
+
|
62
70
|
File.open(history_file, (append_history ? 'a' : 'w'), 0o600, encoding: IRB.conf[:LC_MESSAGES]&.encoding) do |f|
|
63
71
|
hist = history.map{ |l| l.scrub.split("\n").join("\\\n") }
|
64
72
|
unless append_history
|
65
73
|
begin
|
66
74
|
hist = hist.last(num) if hist.size > num and num > 0
|
67
75
|
rescue RangeError # bignum too big to convert into `long'
|
68
|
-
# Do nothing because the bignum should be treated as
|
76
|
+
# Do nothing because the bignum should be treated as infinity
|
69
77
|
end
|
70
78
|
end
|
71
79
|
f.puts(hist)
|
data/lib/irb/init.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/init.rb - irb initialize module
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
module IRB # :nodoc:
|
8
8
|
@CONF = {}
|
9
|
+
@INITIALIZED = false
|
9
10
|
# Displays current configuration.
|
10
11
|
#
|
11
12
|
# Modifying the configuration is achieved by sending a message to IRB.conf.
|
@@ -41,6 +42,10 @@ module IRB # :nodoc:
|
|
41
42
|
format("irb %s (%s)", @RELEASE_VERSION, @LAST_UPDATE_DATE)
|
42
43
|
end
|
43
44
|
|
45
|
+
def IRB.initialized?
|
46
|
+
!!@INITIALIZED
|
47
|
+
end
|
48
|
+
|
44
49
|
# initialize config
|
45
50
|
def IRB.setup(ap_path, argv: ::ARGV)
|
46
51
|
IRB.init_config(ap_path)
|
@@ -52,13 +57,11 @@ module IRB # :nodoc:
|
|
52
57
|
unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
|
53
58
|
fail UndefinedPromptMode, @CONF[:PROMPT_MODE]
|
54
59
|
end
|
60
|
+
@INITIALIZED = true
|
55
61
|
end
|
56
62
|
|
57
63
|
# @CONF default setting
|
58
64
|
def IRB.init_config(ap_path)
|
59
|
-
# class instance variables
|
60
|
-
@TRACER_INITIALIZED = false
|
61
|
-
|
62
65
|
# default configurations
|
63
66
|
unless ap_path and @CONF[:AP_NAME]
|
64
67
|
ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
|
@@ -392,33 +395,41 @@ module IRB # :nodoc:
|
|
392
395
|
# Run the config file
|
393
396
|
def IRB.run_config
|
394
397
|
if @CONF[:RC]
|
395
|
-
|
396
|
-
file = rc_file
|
398
|
+
rc_files.each do |rc|
|
397
399
|
# Because rc_file always returns `HOME/.irbrc` even if no rc file is present, we can't warn users about missing rc files.
|
398
400
|
# Otherwise, it'd be very noisy.
|
399
|
-
load
|
401
|
+
load rc if File.exist?(rc)
|
400
402
|
rescue StandardError, ScriptError => e
|
401
|
-
warn "Error loading RC file '#{
|
403
|
+
warn "Error loading RC file '#{rc}':\n#{e.full_message(highlight: false)}"
|
402
404
|
end
|
403
405
|
end
|
404
406
|
end
|
405
407
|
|
406
408
|
IRBRC_EXT = "rc"
|
407
409
|
def IRB.rc_file(ext = IRBRC_EXT)
|
410
|
+
warn "rc_file is deprecated, please use rc_files instead."
|
411
|
+
rc_files(ext).first
|
412
|
+
end
|
413
|
+
|
414
|
+
def IRB.rc_files(ext = IRBRC_EXT)
|
408
415
|
if !@CONF[:RC_NAME_GENERATOR]
|
416
|
+
@CONF[:RC_NAME_GENERATOR] ||= []
|
417
|
+
existing_rc_file_generators = []
|
418
|
+
|
409
419
|
rc_file_generators do |rcgen|
|
410
|
-
@CONF[:RC_NAME_GENERATOR]
|
411
|
-
if File.exist?(rcgen.call(
|
412
|
-
|
413
|
-
|
414
|
-
|
420
|
+
@CONF[:RC_NAME_GENERATOR] << rcgen
|
421
|
+
existing_rc_file_generators << rcgen if File.exist?(rcgen.call(ext))
|
422
|
+
end
|
423
|
+
|
424
|
+
if existing_rc_file_generators.any?
|
425
|
+
@CONF[:RC_NAME_GENERATOR] = existing_rc_file_generators
|
415
426
|
end
|
416
427
|
end
|
417
|
-
|
418
|
-
|
428
|
+
|
429
|
+
@CONF[:RC_NAME_GENERATOR].map do |rc|
|
430
|
+
rc_file = rc.call(ext)
|
431
|
+
fail IllegalRCNameGenerator unless rc_file.is_a?(String)
|
419
432
|
rc_file
|
420
|
-
else
|
421
|
-
fail IllegalRCNameGenerator
|
422
433
|
end
|
423
434
|
end
|
424
435
|
|
data/lib/irb/input-method.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/input-method.rb - input methods used irb
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -20,7 +20,7 @@ module IRB
|
|
20
20
|
#
|
21
21
|
# See IO#gets for more information.
|
22
22
|
def gets
|
23
|
-
fail NotImplementedError
|
23
|
+
fail NotImplementedError
|
24
24
|
end
|
25
25
|
public :gets
|
26
26
|
|
@@ -44,6 +44,10 @@ module IRB
|
|
44
44
|
false
|
45
45
|
end
|
46
46
|
|
47
|
+
def prompting?
|
48
|
+
false
|
49
|
+
end
|
50
|
+
|
47
51
|
# For debug message
|
48
52
|
def inspect
|
49
53
|
'Abstract InputMethod'
|
@@ -91,6 +95,10 @@ module IRB
|
|
91
95
|
true
|
92
96
|
end
|
93
97
|
|
98
|
+
def prompting?
|
99
|
+
STDIN.tty?
|
100
|
+
end
|
101
|
+
|
94
102
|
# Returns the current line number for #io.
|
95
103
|
#
|
96
104
|
# #line counts the number of times #gets is called.
|
@@ -220,6 +228,10 @@ module IRB
|
|
220
228
|
@eof
|
221
229
|
end
|
222
230
|
|
231
|
+
def prompting?
|
232
|
+
true
|
233
|
+
end
|
234
|
+
|
223
235
|
# For debug message
|
224
236
|
def inspect
|
225
237
|
readline_impl = (defined?(Reline) && Readline == Reline) ? 'Reline' : 'ext/readline'
|
@@ -467,6 +479,10 @@ module IRB
|
|
467
479
|
@eof
|
468
480
|
end
|
469
481
|
|
482
|
+
def prompting?
|
483
|
+
true
|
484
|
+
end
|
485
|
+
|
470
486
|
# For debug message
|
471
487
|
def inspect
|
472
488
|
config = Reline::Config.new
|
data/lib/irb/inspector.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/inspector.rb - inspect methods
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -46,7 +46,7 @@ module IRB # :nodoc:
|
|
46
46
|
# Determines the inspector to use where +inspector+ is one of the keys passed
|
47
47
|
# during inspector definition.
|
48
48
|
def self.keys_with_inspector(inspector)
|
49
|
-
INSPECTORS.select{|k,v| v == inspector}.collect{|k, v| k}
|
49
|
+
INSPECTORS.select{|k, v| v == inspector}.collect{|k, v| k}
|
50
50
|
end
|
51
51
|
|
52
52
|
# Example
|
@@ -113,7 +113,7 @@ module IRB # :nodoc:
|
|
113
113
|
Color.colorize_code(v.inspect, colorable: Color.colorable? && Color.inspect_colorable?(v))
|
114
114
|
}
|
115
115
|
Inspector.def_inspector([true, :pp, :pretty_inspect], proc{require_relative "color_printer"}){|v|
|
116
|
-
IRB::ColorPrinter.pp(v, '').chomp
|
116
|
+
IRB::ColorPrinter.pp(v, +'').chomp
|
117
117
|
}
|
118
118
|
Inspector.def_inspector([:yaml, :YAML], proc{require "yaml"}){|v|
|
119
119
|
begin
|
data/lib/irb/lc/error.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/lc/error.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -12,11 +12,6 @@ module IRB
|
|
12
12
|
super("Unrecognized switch: #{val}")
|
13
13
|
end
|
14
14
|
end
|
15
|
-
class NotImplementedError < StandardError
|
16
|
-
def initialize(val)
|
17
|
-
super("Need to define `#{val}'")
|
18
|
-
end
|
19
|
-
end
|
20
15
|
class CantReturnToNormalMode < StandardError
|
21
16
|
def initialize
|
22
17
|
super("Can't return to normal mode.")
|
data/lib/irb/lc/ja/error.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/lc/ja/error.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -12,11 +12,6 @@ module IRB
|
|
12
12
|
super("スイッチ(#{val})が分りません")
|
13
13
|
end
|
14
14
|
end
|
15
|
-
class NotImplementedError < StandardError
|
16
|
-
def initialize(val)
|
17
|
-
super("`#{val}'の定義が必要です")
|
18
|
-
end
|
19
|
-
end
|
20
15
|
class CantReturnToNormalMode < StandardError
|
21
16
|
def initialize
|
22
17
|
super("Normalモードに戻れません.")
|
data/lib/irb/locale.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/locale.rb - internationalization module
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -94,7 +94,7 @@ module IRB # :nodoc:
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
def find(file
|
97
|
+
def find(file, paths = $:)
|
98
98
|
dir = File.dirname(file)
|
99
99
|
dir = "" if dir == "."
|
100
100
|
base = File.basename(file)
|
data/lib/irb/nesting_parser.rb
CHANGED
@@ -12,6 +12,8 @@ module IRB
|
|
12
12
|
skip = false
|
13
13
|
last_tok, state, args = opens.last
|
14
14
|
case state
|
15
|
+
when :in_alias_undef
|
16
|
+
skip = t.event == :on_kw
|
15
17
|
when :in_unquoted_symbol
|
16
18
|
unless IGNORE_TOKENS.include?(t.event)
|
17
19
|
opens.pop
|
@@ -61,17 +63,17 @@ module IRB
|
|
61
63
|
if args.include?(:arg)
|
62
64
|
case t.event
|
63
65
|
when :on_nl, :on_semicolon
|
64
|
-
# def
|
66
|
+
# def receiver.f;
|
65
67
|
body = :normal
|
66
68
|
when :on_lparen
|
67
|
-
# def
|
69
|
+
# def receiver.f()
|
68
70
|
next_args << :eq
|
69
71
|
else
|
70
72
|
if t.event == :on_op && t.tok == '='
|
71
73
|
# def receiver.f =
|
72
74
|
body = :oneliner
|
73
75
|
else
|
74
|
-
# def
|
76
|
+
# def receiver.f arg
|
75
77
|
next_args << :arg_without_paren
|
76
78
|
end
|
77
79
|
end
|
@@ -130,6 +132,10 @@ module IRB
|
|
130
132
|
opens.pop
|
131
133
|
opens << [t, nil]
|
132
134
|
end
|
135
|
+
when 'alias'
|
136
|
+
opens << [t, :in_alias_undef, 2]
|
137
|
+
when 'undef'
|
138
|
+
opens << [t, :in_alias_undef, 1]
|
133
139
|
when 'elsif', 'else', 'when'
|
134
140
|
opens.pop
|
135
141
|
opens << [t, nil]
|
@@ -174,6 +180,10 @@ module IRB
|
|
174
180
|
pending_heredocs.reverse_each { |t| opens << [t, nil] }
|
175
181
|
pending_heredocs = []
|
176
182
|
end
|
183
|
+
if opens.last && opens.last[1] == :in_alias_undef && !IGNORE_TOKENS.include?(t.event) && t.event != :on_heredoc_end
|
184
|
+
tok, state, arg = opens.pop
|
185
|
+
opens << [tok, state, arg - 1] if arg >= 1
|
186
|
+
end
|
177
187
|
yield t, opens if block_given?
|
178
188
|
end
|
179
189
|
opens.map(&:first) + pending_heredocs.reverse
|
data/lib/irb/notifier.rb
CHANGED
data/lib/irb/output-method.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# output-method.rb - output methods used by irb
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -9,16 +9,10 @@ module IRB
|
|
9
9
|
# IRB::Notifier. You can define your own output method to use with Irb.new,
|
10
10
|
# or Context.new
|
11
11
|
class OutputMethod
|
12
|
-
class NotImplementedError < StandardError
|
13
|
-
def initialize(val)
|
14
|
-
super("Need to define `#{val}'")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
12
|
# Open this method to implement your own output method, raises a
|
19
13
|
# NotImplementedError if you don't define #print in your own class.
|
20
14
|
def print(*opts)
|
21
|
-
raise NotImplementedError
|
15
|
+
raise NotImplementedError
|
22
16
|
end
|
23
17
|
|
24
18
|
# Prints the given +opts+, with a newline delimiter.
|
data/lib/irb/ruby-lex.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/ruby-lex.rb - ruby lexcal analyzer
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -290,7 +290,7 @@ module IRB
|
|
290
290
|
when :on_embdoc_beg
|
291
291
|
indent_level = 0
|
292
292
|
else
|
293
|
-
indent_level += 1
|
293
|
+
indent_level += 1 unless t.tok == 'alias' || t.tok == 'undef'
|
294
294
|
end
|
295
295
|
end
|
296
296
|
indent_level
|