irb 1.11.2 → 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/README.md +10 -8
- 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 -85
- data/lib/irb/completion.rb +1 -1
- data/lib/irb/context.rb +56 -18
- 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 +1 -1
- 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 +2 -2
- data/lib/irb/init.rb +22 -14
- data/lib/irb/input-method.rb +18 -2
- data/lib/irb/inspector.rb +2 -2
- data/lib/irb/lc/error.rb +1 -6
- data/lib/irb/lc/ja/error.rb +1 -6
- data/lib/irb/locale.rb +1 -1
- data/lib/irb/notifier.rb +1 -1
- data/lib/irb/output-method.rb +2 -8
- data/lib/irb/ruby-lex.rb +1 -1
- 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 +29 -22
- 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.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb.rb - irb main module
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -9,7 +9,7 @@ require "reline"
|
|
9
9
|
|
10
10
|
require_relative "irb/init"
|
11
11
|
require_relative "irb/context"
|
12
|
-
require_relative "irb/
|
12
|
+
require_relative "irb/command"
|
13
13
|
|
14
14
|
require_relative "irb/ruby-lex"
|
15
15
|
require_relative "irb/statement"
|
@@ -811,7 +811,7 @@ require_relative "irb/pager"
|
|
811
811
|
#
|
812
812
|
# === Commands
|
813
813
|
#
|
814
|
-
# Please use the `
|
814
|
+
# Please use the `help` command to see the list of available commands.
|
815
815
|
#
|
816
816
|
# === IRB Sessions
|
817
817
|
#
|
@@ -886,7 +886,7 @@ module IRB
|
|
886
886
|
|
887
887
|
# Quits irb
|
888
888
|
def IRB.irb_exit(*)
|
889
|
-
throw :IRB_EXIT
|
889
|
+
throw :IRB_EXIT, false
|
890
890
|
end
|
891
891
|
|
892
892
|
# Aborts then interrupts irb.
|
@@ -903,8 +903,8 @@ module IRB
|
|
903
903
|
# parsed as a :method_add_arg and the output won't be suppressed
|
904
904
|
|
905
905
|
PROMPT_MAIN_TRUNCATE_LENGTH = 32
|
906
|
-
PROMPT_MAIN_TRUNCATE_OMISSION = '...'
|
907
|
-
CONTROL_CHARACTERS_PATTERN = "\x00-\x1F"
|
906
|
+
PROMPT_MAIN_TRUNCATE_OMISSION = '...'
|
907
|
+
CONTROL_CHARACTERS_PATTERN = "\x00-\x1F"
|
908
908
|
|
909
909
|
# Returns the current context of this irb session
|
910
910
|
attr_reader :context
|
@@ -933,7 +933,7 @@ module IRB
|
|
933
933
|
|
934
934
|
def debug_readline(binding)
|
935
935
|
workspace = IRB::WorkSpace.new(binding)
|
936
|
-
context.workspace
|
936
|
+
context.replace_workspace(workspace)
|
937
937
|
context.workspace.load_commands_to_main
|
938
938
|
@line_no += 1
|
939
939
|
|
@@ -979,13 +979,21 @@ module IRB
|
|
979
979
|
end
|
980
980
|
|
981
981
|
begin
|
982
|
-
|
982
|
+
if defined?(RubyVM.keep_script_lines)
|
983
|
+
keep_script_lines_backup = RubyVM.keep_script_lines
|
984
|
+
RubyVM.keep_script_lines = true
|
985
|
+
end
|
986
|
+
|
987
|
+
forced_exit = catch(:IRB_EXIT) do
|
983
988
|
eval_input
|
984
989
|
end
|
985
990
|
ensure
|
991
|
+
RubyVM.keep_script_lines = keep_script_lines_backup if defined?(RubyVM.keep_script_lines)
|
986
992
|
trap("SIGINT", prev_trap)
|
987
993
|
conf[:AT_EXIT].each{|hook| hook.call}
|
994
|
+
|
988
995
|
context.io.save_history if save_history
|
996
|
+
Kernel.exit if forced_exit
|
989
997
|
end
|
990
998
|
end
|
991
999
|
|
@@ -1048,7 +1056,7 @@ module IRB
|
|
1048
1056
|
return read_input(prompt) if @context.io.respond_to?(:check_termination)
|
1049
1057
|
|
1050
1058
|
# nomultiline
|
1051
|
-
code = ''
|
1059
|
+
code = +''
|
1052
1060
|
line_offset = 0
|
1053
1061
|
loop do
|
1054
1062
|
line = read_input(prompt)
|
@@ -1074,16 +1082,17 @@ module IRB
|
|
1074
1082
|
loop do
|
1075
1083
|
code = readmultiline
|
1076
1084
|
break unless code
|
1077
|
-
|
1078
|
-
if code != "\n"
|
1079
|
-
yield build_statement(code), @line_no
|
1080
|
-
end
|
1085
|
+
yield build_statement(code), @line_no
|
1081
1086
|
@line_no += code.count("\n")
|
1082
1087
|
rescue RubyLex::TerminateLineInput
|
1083
1088
|
end
|
1084
1089
|
end
|
1085
1090
|
|
1086
1091
|
def build_statement(code)
|
1092
|
+
if code.match?(/\A\n*\z/)
|
1093
|
+
return Statement::EmptyInput.new
|
1094
|
+
end
|
1095
|
+
|
1087
1096
|
code.force_encoding(@context.io.encoding)
|
1088
1097
|
command_or_alias, arg = code.split(/\s/, 2)
|
1089
1098
|
# Transform a non-identifier alias (@, $) or keywords (next, break)
|
@@ -1129,7 +1138,6 @@ module IRB
|
|
1129
1138
|
end
|
1130
1139
|
if @context.io.respond_to?(:dynamic_prompt)
|
1131
1140
|
@context.io.dynamic_prompt do |lines|
|
1132
|
-
lines << '' if lines.empty?
|
1133
1141
|
tokens = RubyLex.ripper_lex_without_warning(lines.map{ |l| l + "\n" }.join, local_variables: @context.local_variables)
|
1134
1142
|
line_results = IRB::NestingParser.parse_by_line(tokens)
|
1135
1143
|
tokens_until_line = []
|
@@ -1227,7 +1235,7 @@ module IRB
|
|
1227
1235
|
lines.map{ |l| l + "\n" }.join
|
1228
1236
|
}
|
1229
1237
|
# The "<top (required)>" in "(irb)" may be the top level of IRB so imitate the main object.
|
1230
|
-
message = message.gsub(/\(irb\):(?<num>\d+):in
|
1238
|
+
message = message.gsub(/\(irb\):(?<num>\d+):in (?<open_quote>[`'])<(?<frame>top \(required\))>'/) { "(irb):#{$~[:num]}:in #{$~[:open_quote]}<main>'" }
|
1231
1239
|
puts message
|
1232
1240
|
puts 'Maybe IRB bug!' if irb_bug
|
1233
1241
|
rescue Exception => handler_exc
|
@@ -1261,12 +1269,11 @@ module IRB
|
|
1261
1269
|
# Used by the irb command +irb_load+, see IRB@IRB+Sessions for more
|
1262
1270
|
# information.
|
1263
1271
|
def suspend_workspace(workspace)
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
end
|
1272
|
+
current_workspace = @context.workspace
|
1273
|
+
@context.replace_workspace(workspace)
|
1274
|
+
yield
|
1275
|
+
ensure
|
1276
|
+
@context.replace_workspace current_workspace
|
1270
1277
|
end
|
1271
1278
|
|
1272
1279
|
# Evaluates the given block using the given +input_method+ as the
|
@@ -1526,7 +1533,7 @@ class Binding
|
|
1526
1533
|
|
1527
1534
|
if debugger_irb
|
1528
1535
|
# If we're already in a debugger session, set the workspace and irb_path for the original IRB instance
|
1529
|
-
debugger_irb.context.workspace
|
1536
|
+
debugger_irb.context.replace_workspace(workspace)
|
1530
1537
|
debugger_irb.context.irb_path = irb_path
|
1531
1538
|
# If we've started a debugger session and hit another binding.irb, we don't want to start an IRB session
|
1532
1539
|
# instead, we want to resume the irb:rdbg session.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aycabta
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-03-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: reline
|
@@ -60,34 +60,36 @@ files:
|
|
60
60
|
- exe/irb
|
61
61
|
- irb.gemspec
|
62
62
|
- lib/irb.rb
|
63
|
-
- lib/irb/cmd/backtrace.rb
|
64
|
-
- lib/irb/cmd/break.rb
|
65
|
-
- lib/irb/cmd/catch.rb
|
66
|
-
- lib/irb/cmd/chws.rb
|
67
|
-
- lib/irb/cmd/continue.rb
|
68
|
-
- lib/irb/cmd/debug.rb
|
69
|
-
- lib/irb/cmd/delete.rb
|
70
|
-
- lib/irb/cmd/edit.rb
|
71
|
-
- lib/irb/cmd/exit.rb
|
72
|
-
- lib/irb/cmd/finish.rb
|
73
|
-
- lib/irb/cmd/help.rb
|
74
|
-
- lib/irb/cmd/history.rb
|
75
|
-
- lib/irb/cmd/info.rb
|
76
|
-
- lib/irb/cmd/irb_info.rb
|
77
|
-
- lib/irb/cmd/load.rb
|
78
|
-
- lib/irb/cmd/ls.rb
|
79
|
-
- lib/irb/cmd/measure.rb
|
80
|
-
- lib/irb/cmd/next.rb
|
81
63
|
- lib/irb/cmd/nop.rb
|
82
|
-
- lib/irb/cmd/pushws.rb
|
83
|
-
- lib/irb/cmd/show_cmds.rb
|
84
|
-
- lib/irb/cmd/show_doc.rb
|
85
|
-
- lib/irb/cmd/show_source.rb
|
86
|
-
- lib/irb/cmd/step.rb
|
87
|
-
- lib/irb/cmd/subirb.rb
|
88
|
-
- lib/irb/cmd/whereami.rb
|
89
64
|
- lib/irb/color.rb
|
90
65
|
- lib/irb/color_printer.rb
|
66
|
+
- lib/irb/command.rb
|
67
|
+
- lib/irb/command/backtrace.rb
|
68
|
+
- lib/irb/command/base.rb
|
69
|
+
- lib/irb/command/break.rb
|
70
|
+
- lib/irb/command/catch.rb
|
71
|
+
- lib/irb/command/chws.rb
|
72
|
+
- lib/irb/command/continue.rb
|
73
|
+
- lib/irb/command/debug.rb
|
74
|
+
- lib/irb/command/delete.rb
|
75
|
+
- lib/irb/command/edit.rb
|
76
|
+
- lib/irb/command/exit.rb
|
77
|
+
- lib/irb/command/finish.rb
|
78
|
+
- lib/irb/command/force_exit.rb
|
79
|
+
- lib/irb/command/help.rb
|
80
|
+
- lib/irb/command/history.rb
|
81
|
+
- lib/irb/command/info.rb
|
82
|
+
- lib/irb/command/irb_info.rb
|
83
|
+
- lib/irb/command/load.rb
|
84
|
+
- lib/irb/command/ls.rb
|
85
|
+
- lib/irb/command/measure.rb
|
86
|
+
- lib/irb/command/next.rb
|
87
|
+
- lib/irb/command/pushws.rb
|
88
|
+
- lib/irb/command/show_doc.rb
|
89
|
+
- lib/irb/command/show_source.rb
|
90
|
+
- lib/irb/command/step.rb
|
91
|
+
- lib/irb/command/subirb.rb
|
92
|
+
- lib/irb/command/whereami.rb
|
91
93
|
- lib/irb/completion.rb
|
92
94
|
- lib/irb/context.rb
|
93
95
|
- lib/irb/debug.rb
|
@@ -100,7 +102,6 @@ files:
|
|
100
102
|
- lib/irb/ext/tracer.rb
|
101
103
|
- lib/irb/ext/use-loader.rb
|
102
104
|
- lib/irb/ext/workspaces.rb
|
103
|
-
- lib/irb/extend-command.rb
|
104
105
|
- lib/irb/frame.rb
|
105
106
|
- lib/irb/help.rb
|
106
107
|
- lib/irb/history.rb
|
@@ -149,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
150
|
- !ruby/object:Gem::Version
|
150
151
|
version: '0'
|
151
152
|
requirements: []
|
152
|
-
rubygems_version: 3.5.
|
153
|
+
rubygems_version: 3.5.1
|
153
154
|
signing_key:
|
154
155
|
specification_version: 4
|
155
156
|
summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
data/lib/irb/cmd/edit.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
require_relative "nop"
|
3
|
-
require_relative "../source_finder"
|
4
|
-
|
5
|
-
module IRB
|
6
|
-
# :stopdoc:
|
7
|
-
|
8
|
-
module ExtendCommand
|
9
|
-
class Edit < Nop
|
10
|
-
category "Misc"
|
11
|
-
description 'Open a file with the editor command defined with `ENV["VISUAL"]` or `ENV["EDITOR"]`.'
|
12
|
-
|
13
|
-
class << self
|
14
|
-
def transform_args(args)
|
15
|
-
# Return a string literal as is for backward compatibility
|
16
|
-
if args.nil? || args.empty? || string_literal?(args)
|
17
|
-
args
|
18
|
-
else # Otherwise, consider the input as a String for convenience
|
19
|
-
args.strip.dump
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def execute(*args)
|
25
|
-
path = args.first
|
26
|
-
|
27
|
-
if path.nil? && (irb_path = @irb_context.irb_path)
|
28
|
-
path = irb_path
|
29
|
-
end
|
30
|
-
|
31
|
-
if !File.exist?(path)
|
32
|
-
source =
|
33
|
-
begin
|
34
|
-
SourceFinder.new(@irb_context).find_source(path)
|
35
|
-
rescue NameError
|
36
|
-
# if user enters a path that doesn't exist, it'll cause NameError when passed here because find_source would try to evaluate it as well
|
37
|
-
# in this case, we should just ignore the error
|
38
|
-
end
|
39
|
-
|
40
|
-
if source
|
41
|
-
path = source.file
|
42
|
-
else
|
43
|
-
puts "Can not find file: #{path}"
|
44
|
-
return
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
if editor = (ENV['VISUAL'] || ENV['EDITOR'])
|
49
|
-
puts "command: '#{editor}'"
|
50
|
-
puts " path: #{path}"
|
51
|
-
system(*Shellwords.split(editor), path)
|
52
|
-
else
|
53
|
-
puts "Can not find editor setting: ENV['VISUAL'] or ENV['EDITOR']"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
# :startdoc:
|
60
|
-
end
|
data/lib/irb/cmd/help.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "show_doc"
|
4
|
-
|
5
|
-
module IRB
|
6
|
-
module ExtendCommand
|
7
|
-
class Help < ShowDoc
|
8
|
-
category "Context"
|
9
|
-
description "[DEPRECATED] Enter the mode to look up RI documents."
|
10
|
-
|
11
|
-
DEPRECATION_MESSAGE = <<~MSG
|
12
|
-
[Deprecation] The `help` command will be repurposed to display command help in the future.
|
13
|
-
For RI document lookup, please use the `show_doc` command instead.
|
14
|
-
For command help, please use `show_cmds` for now.
|
15
|
-
MSG
|
16
|
-
|
17
|
-
def execute(*names)
|
18
|
-
warn DEPRECATION_MESSAGE
|
19
|
-
super
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/irb/cmd/show_cmds.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "stringio"
|
4
|
-
require_relative "nop"
|
5
|
-
require_relative "../pager"
|
6
|
-
|
7
|
-
module IRB
|
8
|
-
# :stopdoc:
|
9
|
-
|
10
|
-
module ExtendCommand
|
11
|
-
class ShowCmds < Nop
|
12
|
-
category "IRB"
|
13
|
-
description "List all available commands and their description."
|
14
|
-
|
15
|
-
def execute(*args)
|
16
|
-
commands_info = IRB::ExtendCommandBundle.all_commands_info
|
17
|
-
commands_grouped_by_categories = commands_info.group_by { |cmd| cmd[:category] }
|
18
|
-
|
19
|
-
user_aliases = irb_context.instance_variable_get(:@user_aliases)
|
20
|
-
|
21
|
-
commands_grouped_by_categories["Aliases"] = user_aliases.map do |alias_name, target|
|
22
|
-
{ display_name: alias_name, description: "Alias for `#{target}`" }
|
23
|
-
end
|
24
|
-
|
25
|
-
if irb_context.with_debugger
|
26
|
-
# Remove the original "Debugging" category
|
27
|
-
commands_grouped_by_categories.delete("Debugging")
|
28
|
-
# Remove the `help` command as it's delegated to the debugger
|
29
|
-
commands_grouped_by_categories["Context"].delete_if { |cmd| cmd[:display_name] == :help }
|
30
|
-
# Add an empty "Debugging (from debug.gem)" category at the end
|
31
|
-
commands_grouped_by_categories["Debugging (from debug.gem)"] = []
|
32
|
-
end
|
33
|
-
|
34
|
-
longest_cmd_name_length = commands_info.map { |c| c[:display_name].length }.max
|
35
|
-
|
36
|
-
output = StringIO.new
|
37
|
-
|
38
|
-
commands_grouped_by_categories.each do |category, cmds|
|
39
|
-
output.puts Color.colorize(category, [:BOLD])
|
40
|
-
|
41
|
-
cmds.each do |cmd|
|
42
|
-
output.puts " #{cmd[:display_name].to_s.ljust(longest_cmd_name_length)} #{cmd[:description]}"
|
43
|
-
end
|
44
|
-
|
45
|
-
output.puts
|
46
|
-
end
|
47
|
-
|
48
|
-
# Append the debugger help at the end
|
49
|
-
if irb_context.with_debugger
|
50
|
-
output.puts DEBUGGER__.help
|
51
|
-
end
|
52
|
-
|
53
|
-
Pager.page_content(output.string)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# :startdoc:
|
59
|
-
end
|