irb 1.7.1 → 1.13.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.document +1 -1
- data/Gemfile +10 -1
- data/README.md +265 -20
- data/Rakefile +13 -10
- data/doc/irb/irb.rd.ja +1 -3
- data/irb.gemspec +2 -1
- data/lib/irb/cmd/nop.rb +3 -52
- data/lib/irb/color.rb +4 -2
- data/lib/irb/command/backtrace.rb +17 -0
- data/lib/irb/command/base.rb +62 -0
- data/lib/irb/command/break.rb +17 -0
- data/lib/irb/command/catch.rb +17 -0
- data/lib/irb/command/chws.rb +40 -0
- data/lib/irb/command/context.rb +16 -0
- data/lib/irb/{cmd → command}/continue.rb +3 -3
- data/lib/irb/command/debug.rb +71 -0
- data/lib/irb/{cmd → command}/delete.rb +3 -3
- data/lib/irb/command/disable_irb.rb +19 -0
- data/lib/irb/command/edit.rb +63 -0
- data/lib/irb/command/exit.rb +18 -0
- data/lib/irb/{cmd → command}/finish.rb +3 -3
- data/lib/irb/command/force_exit.rb +18 -0
- data/lib/irb/command/help.rb +83 -0
- data/lib/irb/command/history.rb +45 -0
- data/lib/irb/command/info.rb +17 -0
- data/lib/irb/command/internal_helpers.rb +27 -0
- data/lib/irb/{cmd → command}/irb_info.rb +7 -7
- data/lib/irb/{cmd → command}/load.rb +23 -8
- data/lib/irb/{cmd → command}/ls.rb +42 -19
- data/lib/irb/{cmd → command}/measure.rb +18 -17
- data/lib/irb/{cmd → command}/next.rb +3 -3
- data/lib/irb/command/pushws.rb +65 -0
- data/lib/irb/command/show_doc.rb +51 -0
- data/lib/irb/command/show_source.rb +74 -0
- data/lib/irb/{cmd → command}/step.rb +3 -3
- data/lib/irb/command/subirb.rb +123 -0
- data/lib/irb/{cmd → command}/whereami.rb +3 -5
- data/lib/irb/command.rb +23 -0
- data/lib/irb/completion.rb +133 -102
- data/lib/irb/context.rb +182 -66
- data/lib/irb/debug/ui.rb +103 -0
- data/lib/irb/{cmd/debug.rb → debug.rb} +53 -59
- data/lib/irb/default_commands.rb +265 -0
- data/lib/irb/easter-egg.rb +16 -6
- data/lib/irb/ext/change-ws.rb +6 -8
- data/lib/irb/ext/{history.rb → eval_history.rb} +7 -7
- data/lib/irb/ext/loader.rb +4 -4
- data/lib/irb/ext/multi-irb.rb +5 -5
- data/lib/irb/ext/tracer.rb +12 -51
- data/lib/irb/ext/use-loader.rb +6 -8
- data/lib/irb/ext/workspaces.rb +10 -34
- data/lib/irb/frame.rb +1 -1
- data/lib/irb/help.rb +3 -3
- data/lib/irb/helper_method/base.rb +16 -0
- data/lib/irb/helper_method/conf.rb +11 -0
- data/lib/irb/helper_method.rb +29 -0
- data/lib/irb/{ext/save-history.rb → history.rb} +20 -58
- data/lib/irb/init.rb +154 -58
- data/lib/irb/input-method.rb +238 -203
- data/lib/irb/inspector.rb +3 -3
- data/lib/irb/lc/error.rb +1 -11
- data/lib/irb/lc/help-message +4 -0
- data/lib/irb/lc/ja/error.rb +1 -11
- data/lib/irb/lc/ja/help-message +13 -0
- 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/pager.rb +91 -0
- data/lib/irb/ruby-lex.rb +391 -471
- data/lib/irb/ruby_logo.aa +43 -0
- data/lib/irb/source_finder.rb +139 -0
- data/lib/irb/statement.rb +80 -0
- data/lib/irb/version.rb +3 -3
- data/lib/irb/workspace.rb +24 -4
- data/lib/irb/ws-for-case-2.rb +1 -1
- data/lib/irb/xmp.rb +3 -3
- data/lib/irb.rb +1232 -604
- data/man/irb.1 +7 -0
- metadata +60 -32
- data/lib/irb/cmd/backtrace.rb +0 -21
- data/lib/irb/cmd/break.rb +0 -21
- data/lib/irb/cmd/catch.rb +0 -21
- data/lib/irb/cmd/chws.rb +0 -36
- data/lib/irb/cmd/edit.rb +0 -61
- data/lib/irb/cmd/help.rb +0 -23
- data/lib/irb/cmd/info.rb +0 -21
- data/lib/irb/cmd/pushws.rb +0 -45
- data/lib/irb/cmd/show_cmds.rb +0 -39
- data/lib/irb/cmd/show_doc.rb +0 -48
- data/lib/irb/cmd/show_source.rb +0 -113
- data/lib/irb/cmd/subirb.rb +0 -66
- data/lib/irb/extend-command.rb +0 -356
- data/lib/irb/src_encoding.rb +0 -7
data/man/irb.1
CHANGED
@@ -140,6 +140,13 @@ Use autocompletion.
|
|
140
140
|
Don't use autocompletion.
|
141
141
|
.Pp
|
142
142
|
.Pp
|
143
|
+
.It Fl -regexp-completor
|
144
|
+
Use regexp based completion.
|
145
|
+
.Pp
|
146
|
+
.It Fl -type-completor
|
147
|
+
Use type based completion.
|
148
|
+
.Pp
|
149
|
+
.Pp
|
143
150
|
.It Fl -verbose
|
144
151
|
Show details.
|
145
152
|
.Pp
|
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.13.2
|
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:
|
12
|
+
date: 2024-06-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: reline
|
@@ -17,14 +17,28 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.
|
20
|
+
version: 0.4.2
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.
|
27
|
+
version: 0.4.2
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rdoc
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 4.0.0
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 4.0.0
|
28
42
|
description: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
29
43
|
email:
|
30
44
|
- aycabta@gmail.com
|
@@ -46,46 +60,58 @@ files:
|
|
46
60
|
- exe/irb
|
47
61
|
- irb.gemspec
|
48
62
|
- lib/irb.rb
|
49
|
-
- lib/irb/cmd/backtrace.rb
|
50
|
-
- lib/irb/cmd/break.rb
|
51
|
-
- lib/irb/cmd/catch.rb
|
52
|
-
- lib/irb/cmd/chws.rb
|
53
|
-
- lib/irb/cmd/continue.rb
|
54
|
-
- lib/irb/cmd/debug.rb
|
55
|
-
- lib/irb/cmd/delete.rb
|
56
|
-
- lib/irb/cmd/edit.rb
|
57
|
-
- lib/irb/cmd/finish.rb
|
58
|
-
- lib/irb/cmd/help.rb
|
59
|
-
- lib/irb/cmd/info.rb
|
60
|
-
- lib/irb/cmd/irb_info.rb
|
61
|
-
- lib/irb/cmd/load.rb
|
62
|
-
- lib/irb/cmd/ls.rb
|
63
|
-
- lib/irb/cmd/measure.rb
|
64
|
-
- lib/irb/cmd/next.rb
|
65
63
|
- lib/irb/cmd/nop.rb
|
66
|
-
- lib/irb/cmd/pushws.rb
|
67
|
-
- lib/irb/cmd/show_cmds.rb
|
68
|
-
- lib/irb/cmd/show_doc.rb
|
69
|
-
- lib/irb/cmd/show_source.rb
|
70
|
-
- lib/irb/cmd/step.rb
|
71
|
-
- lib/irb/cmd/subirb.rb
|
72
|
-
- lib/irb/cmd/whereami.rb
|
73
64
|
- lib/irb/color.rb
|
74
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/context.rb
|
73
|
+
- lib/irb/command/continue.rb
|
74
|
+
- lib/irb/command/debug.rb
|
75
|
+
- lib/irb/command/delete.rb
|
76
|
+
- lib/irb/command/disable_irb.rb
|
77
|
+
- lib/irb/command/edit.rb
|
78
|
+
- lib/irb/command/exit.rb
|
79
|
+
- lib/irb/command/finish.rb
|
80
|
+
- lib/irb/command/force_exit.rb
|
81
|
+
- lib/irb/command/help.rb
|
82
|
+
- lib/irb/command/history.rb
|
83
|
+
- lib/irb/command/info.rb
|
84
|
+
- lib/irb/command/internal_helpers.rb
|
85
|
+
- lib/irb/command/irb_info.rb
|
86
|
+
- lib/irb/command/load.rb
|
87
|
+
- lib/irb/command/ls.rb
|
88
|
+
- lib/irb/command/measure.rb
|
89
|
+
- lib/irb/command/next.rb
|
90
|
+
- lib/irb/command/pushws.rb
|
91
|
+
- lib/irb/command/show_doc.rb
|
92
|
+
- lib/irb/command/show_source.rb
|
93
|
+
- lib/irb/command/step.rb
|
94
|
+
- lib/irb/command/subirb.rb
|
95
|
+
- lib/irb/command/whereami.rb
|
75
96
|
- lib/irb/completion.rb
|
76
97
|
- lib/irb/context.rb
|
98
|
+
- lib/irb/debug.rb
|
99
|
+
- lib/irb/debug/ui.rb
|
100
|
+
- lib/irb/default_commands.rb
|
77
101
|
- lib/irb/easter-egg.rb
|
78
102
|
- lib/irb/ext/change-ws.rb
|
79
|
-
- lib/irb/ext/
|
103
|
+
- lib/irb/ext/eval_history.rb
|
80
104
|
- lib/irb/ext/loader.rb
|
81
105
|
- lib/irb/ext/multi-irb.rb
|
82
|
-
- lib/irb/ext/save-history.rb
|
83
106
|
- lib/irb/ext/tracer.rb
|
84
107
|
- lib/irb/ext/use-loader.rb
|
85
108
|
- lib/irb/ext/workspaces.rb
|
86
|
-
- lib/irb/extend-command.rb
|
87
109
|
- lib/irb/frame.rb
|
88
110
|
- lib/irb/help.rb
|
111
|
+
- lib/irb/helper_method.rb
|
112
|
+
- lib/irb/helper_method/base.rb
|
113
|
+
- lib/irb/helper_method/conf.rb
|
114
|
+
- lib/irb/history.rb
|
89
115
|
- lib/irb/init.rb
|
90
116
|
- lib/irb/input-method.rb
|
91
117
|
- lib/irb/inspector.rb
|
@@ -97,9 +123,11 @@ files:
|
|
97
123
|
- lib/irb/nesting_parser.rb
|
98
124
|
- lib/irb/notifier.rb
|
99
125
|
- lib/irb/output-method.rb
|
126
|
+
- lib/irb/pager.rb
|
100
127
|
- lib/irb/ruby-lex.rb
|
101
128
|
- lib/irb/ruby_logo.aa
|
102
|
-
- lib/irb/
|
129
|
+
- lib/irb/source_finder.rb
|
130
|
+
- lib/irb/statement.rb
|
103
131
|
- lib/irb/version.rb
|
104
132
|
- lib/irb/workspace.rb
|
105
133
|
- lib/irb/ws-for-case-2.rb
|
@@ -129,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
157
|
- !ruby/object:Gem::Version
|
130
158
|
version: '0'
|
131
159
|
requirements: []
|
132
|
-
rubygems_version: 3.5.
|
160
|
+
rubygems_version: 3.5.11
|
133
161
|
signing_key:
|
134
162
|
specification_version: 4
|
135
163
|
summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
data/lib/irb/cmd/backtrace.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "debug"
|
4
|
-
|
5
|
-
module IRB
|
6
|
-
# :stopdoc:
|
7
|
-
|
8
|
-
module ExtendCommand
|
9
|
-
class Backtrace < DebugCommand
|
10
|
-
def self.transform_args(args)
|
11
|
-
args&.dump
|
12
|
-
end
|
13
|
-
|
14
|
-
def execute(*args)
|
15
|
-
super(pre_cmds: ["backtrace", *args].join(" "))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# :startdoc:
|
21
|
-
end
|
data/lib/irb/cmd/break.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "debug"
|
4
|
-
|
5
|
-
module IRB
|
6
|
-
# :stopdoc:
|
7
|
-
|
8
|
-
module ExtendCommand
|
9
|
-
class Break < DebugCommand
|
10
|
-
def self.transform_args(args)
|
11
|
-
args&.dump
|
12
|
-
end
|
13
|
-
|
14
|
-
def execute(args = nil)
|
15
|
-
super(pre_cmds: "break #{args}")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# :startdoc:
|
21
|
-
end
|
data/lib/irb/cmd/catch.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "debug"
|
4
|
-
|
5
|
-
module IRB
|
6
|
-
# :stopdoc:
|
7
|
-
|
8
|
-
module ExtendCommand
|
9
|
-
class Catch < DebugCommand
|
10
|
-
def self.transform_args(args)
|
11
|
-
args&.dump
|
12
|
-
end
|
13
|
-
|
14
|
-
def execute(*args)
|
15
|
-
super(pre_cmds: ["catch", *args].join(" "))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# :startdoc:
|
21
|
-
end
|
data/lib/irb/cmd/chws.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
#
|
3
|
-
# change-ws.rb -
|
4
|
-
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
5
|
-
#
|
6
|
-
|
7
|
-
require_relative "nop"
|
8
|
-
require_relative "../ext/change-ws"
|
9
|
-
|
10
|
-
module IRB
|
11
|
-
# :stopdoc:
|
12
|
-
|
13
|
-
module ExtendCommand
|
14
|
-
|
15
|
-
class CurrentWorkingWorkspace < Nop
|
16
|
-
category "IRB"
|
17
|
-
description "Show the current workspace."
|
18
|
-
|
19
|
-
def execute(*obj)
|
20
|
-
irb_context.main
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class ChangeWorkspace < Nop
|
25
|
-
category "IRB"
|
26
|
-
description "Change the current workspace to an object."
|
27
|
-
|
28
|
-
def execute(*obj)
|
29
|
-
irb_context.change_workspace(*obj)
|
30
|
-
irb_context.main
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# :startdoc:
|
36
|
-
end
|
data/lib/irb/cmd/edit.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
require_relative "nop"
|
3
|
-
|
4
|
-
module IRB
|
5
|
-
# :stopdoc:
|
6
|
-
|
7
|
-
module ExtendCommand
|
8
|
-
class Edit < Nop
|
9
|
-
category "Misc"
|
10
|
-
description 'Open a file with the editor command defined with `ENV["EDITOR"]`.'
|
11
|
-
|
12
|
-
class << self
|
13
|
-
def transform_args(args)
|
14
|
-
# Return a string literal as is for backward compatibility
|
15
|
-
if args.nil? || args.empty? || string_literal?(args)
|
16
|
-
args
|
17
|
-
else # Otherwise, consider the input as a String for convenience
|
18
|
-
args.strip.dump
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def execute(*args)
|
24
|
-
path = args.first
|
25
|
-
|
26
|
-
if path.nil? && (irb_path = @irb_context.irb_path)
|
27
|
-
path = irb_path
|
28
|
-
end
|
29
|
-
|
30
|
-
if !File.exist?(path)
|
31
|
-
require_relative "show_source"
|
32
|
-
|
33
|
-
source =
|
34
|
-
begin
|
35
|
-
ShowSource.find_source(path, @irb_context)
|
36
|
-
rescue NameError
|
37
|
-
# 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
|
38
|
-
# in this case, we should just ignore the error
|
39
|
-
end
|
40
|
-
|
41
|
-
if source && File.exist?(source.file)
|
42
|
-
path = source.file
|
43
|
-
else
|
44
|
-
puts "Can not find file: #{path}"
|
45
|
-
return
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
if editor = ENV['EDITOR']
|
50
|
-
puts "command: '#{editor}'"
|
51
|
-
puts " path: #{path}"
|
52
|
-
system(*Shellwords.split(editor), path)
|
53
|
-
else
|
54
|
-
puts "Can not find editor setting: ENV['EDITOR']"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# :startdoc:
|
61
|
-
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/info.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "debug"
|
4
|
-
|
5
|
-
module IRB
|
6
|
-
# :stopdoc:
|
7
|
-
|
8
|
-
module ExtendCommand
|
9
|
-
class Info < DebugCommand
|
10
|
-
def self.transform_args(args)
|
11
|
-
args&.dump
|
12
|
-
end
|
13
|
-
|
14
|
-
def execute(*args)
|
15
|
-
super(pre_cmds: ["info", *args].join(" "))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# :startdoc:
|
21
|
-
end
|
data/lib/irb/cmd/pushws.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
#
|
3
|
-
# change-ws.rb -
|
4
|
-
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
5
|
-
#
|
6
|
-
|
7
|
-
require_relative "nop"
|
8
|
-
require_relative "../ext/workspaces"
|
9
|
-
|
10
|
-
module IRB
|
11
|
-
# :stopdoc:
|
12
|
-
|
13
|
-
module ExtendCommand
|
14
|
-
class Workspaces < Nop
|
15
|
-
category "IRB"
|
16
|
-
description "Show workspaces."
|
17
|
-
|
18
|
-
def execute(*obj)
|
19
|
-
irb_context.workspaces.collect{|ws| ws.main}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class PushWorkspace < Workspaces
|
24
|
-
category "IRB"
|
25
|
-
description "Push an object to the workspace stack."
|
26
|
-
|
27
|
-
def execute(*obj)
|
28
|
-
irb_context.push_workspace(*obj)
|
29
|
-
super
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class PopWorkspace < Workspaces
|
34
|
-
category "IRB"
|
35
|
-
description "Pop a workspace from the workspace stack."
|
36
|
-
|
37
|
-
def execute(*obj)
|
38
|
-
irb_context.pop_workspace(*obj)
|
39
|
-
super
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# :startdoc:
|
45
|
-
end
|
data/lib/irb/cmd/show_cmds.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "stringio"
|
4
|
-
require_relative "nop"
|
5
|
-
|
6
|
-
module IRB
|
7
|
-
# :stopdoc:
|
8
|
-
|
9
|
-
module ExtendCommand
|
10
|
-
class ShowCmds < Nop
|
11
|
-
category "IRB"
|
12
|
-
description "List all available commands and their description."
|
13
|
-
|
14
|
-
def execute(*args)
|
15
|
-
commands_info = IRB::ExtendCommandBundle.all_commands_info
|
16
|
-
commands_grouped_by_categories = commands_info.group_by { |cmd| cmd[:category] }
|
17
|
-
longest_cmd_name_length = commands_info.map { |c| c[:display_name] }.max { |a, b| a.length <=> b.length }.length
|
18
|
-
|
19
|
-
output = StringIO.new
|
20
|
-
|
21
|
-
commands_grouped_by_categories.each do |category, cmds|
|
22
|
-
output.puts Color.colorize(category, [:BOLD])
|
23
|
-
|
24
|
-
cmds.each do |cmd|
|
25
|
-
output.puts " #{cmd[:display_name].to_s.ljust(longest_cmd_name_length)} #{cmd[:description]}"
|
26
|
-
end
|
27
|
-
|
28
|
-
output.puts
|
29
|
-
end
|
30
|
-
|
31
|
-
puts output.string
|
32
|
-
|
33
|
-
nil
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# :startdoc:
|
39
|
-
end
|
data/lib/irb/cmd/show_doc.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "nop"
|
4
|
-
|
5
|
-
module IRB
|
6
|
-
module ExtendCommand
|
7
|
-
class ShowDoc < Nop
|
8
|
-
class << self
|
9
|
-
def transform_args(args)
|
10
|
-
# Return a string literal as is for backward compatibility
|
11
|
-
if args.empty? || string_literal?(args)
|
12
|
-
args
|
13
|
-
else # Otherwise, consider the input as a String for convenience
|
14
|
-
args.strip.dump
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
category "Context"
|
20
|
-
description "Enter the mode to look up RI documents."
|
21
|
-
|
22
|
-
def execute(*names)
|
23
|
-
require 'rdoc/ri/driver'
|
24
|
-
|
25
|
-
unless ShowDoc.const_defined?(:Ri)
|
26
|
-
opts = RDoc::RI::Driver.process_args([])
|
27
|
-
ShowDoc.const_set(:Ri, RDoc::RI::Driver.new(opts))
|
28
|
-
end
|
29
|
-
|
30
|
-
if names.empty?
|
31
|
-
Ri.interactive
|
32
|
-
else
|
33
|
-
names.each do |name|
|
34
|
-
begin
|
35
|
-
Ri.display_name(name.to_s)
|
36
|
-
rescue RDoc::RI::Error
|
37
|
-
puts $!.message
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
nil
|
43
|
-
rescue LoadError, SystemExit
|
44
|
-
warn "Can't display document because `rdoc` is not installed."
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/lib/irb/cmd/show_source.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "nop"
|
4
|
-
require_relative "../color"
|
5
|
-
require_relative "../ruby-lex"
|
6
|
-
|
7
|
-
module IRB
|
8
|
-
# :stopdoc:
|
9
|
-
|
10
|
-
module ExtendCommand
|
11
|
-
class ShowSource < Nop
|
12
|
-
category "Context"
|
13
|
-
description "Show the source code of a given method or constant."
|
14
|
-
|
15
|
-
class << self
|
16
|
-
def transform_args(args)
|
17
|
-
# Return a string literal as is for backward compatibility
|
18
|
-
if args.empty? || string_literal?(args)
|
19
|
-
args
|
20
|
-
else # Otherwise, consider the input as a String for convenience
|
21
|
-
args.strip.dump
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def find_source(str, irb_context)
|
26
|
-
case str
|
27
|
-
when /\A[A-Z]\w*(::[A-Z]\w*)*\z/ # Const::Name
|
28
|
-
eval(str, irb_context.workspace.binding) # trigger autoload
|
29
|
-
base = irb_context.workspace.binding.receiver.yield_self { |r| r.is_a?(Module) ? r : Object }
|
30
|
-
file, line = base.const_source_location(str)
|
31
|
-
when /\A(?<owner>[A-Z]\w*(::[A-Z]\w*)*)#(?<method>[^ :.]+)\z/ # Class#method
|
32
|
-
owner = eval(Regexp.last_match[:owner], irb_context.workspace.binding)
|
33
|
-
method = Regexp.last_match[:method]
|
34
|
-
if owner.respond_to?(:instance_method)
|
35
|
-
methods = owner.instance_methods + owner.private_instance_methods
|
36
|
-
file, line = owner.instance_method(method).source_location if methods.include?(method.to_sym)
|
37
|
-
end
|
38
|
-
when /\A((?<receiver>.+)(\.|::))?(?<method>[^ :.]+)\z/ # method, receiver.method, receiver::method
|
39
|
-
receiver = eval(Regexp.last_match[:receiver] || 'self', irb_context.workspace.binding)
|
40
|
-
method = Regexp.last_match[:method]
|
41
|
-
file, line = receiver.method(method).source_location if receiver.respond_to?(method, true)
|
42
|
-
end
|
43
|
-
if file && line
|
44
|
-
Source.new(file: file, first_line: line, last_line: find_end(file, line, irb_context))
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def find_end(file, first_line, irb_context)
|
51
|
-
return first_line unless File.exist?(file)
|
52
|
-
lex = RubyLex.new(irb_context)
|
53
|
-
lines = File.read(file).lines[(first_line - 1)..-1]
|
54
|
-
tokens = RubyLex.ripper_lex_without_warning(lines.join)
|
55
|
-
prev_tokens = []
|
56
|
-
|
57
|
-
# chunk with line number
|
58
|
-
tokens.chunk { |tok| tok.pos[0] }.each do |lnum, chunk|
|
59
|
-
code = lines[0..lnum].join
|
60
|
-
prev_tokens.concat chunk
|
61
|
-
continue = lex.should_continue?(prev_tokens)
|
62
|
-
syntax = lex.check_code_syntax(code)
|
63
|
-
if !continue && syntax == :valid
|
64
|
-
return first_line + lnum
|
65
|
-
end
|
66
|
-
end
|
67
|
-
first_line
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def execute(str = nil)
|
72
|
-
unless str.is_a?(String)
|
73
|
-
puts "Error: Expected a string but got #{str.inspect}"
|
74
|
-
return
|
75
|
-
end
|
76
|
-
|
77
|
-
source = self.class.find_source(str, @irb_context)
|
78
|
-
if source && File.exist?(source.file)
|
79
|
-
show_source(source)
|
80
|
-
else
|
81
|
-
puts "Error: Couldn't locate a definition for #{str}"
|
82
|
-
end
|
83
|
-
nil
|
84
|
-
end
|
85
|
-
|
86
|
-
private
|
87
|
-
|
88
|
-
# @param [IRB::ExtendCommand::ShowSource::Source] source
|
89
|
-
def show_source(source)
|
90
|
-
puts
|
91
|
-
puts "#{bold("From")}: #{source.file}:#{source.first_line}"
|
92
|
-
puts
|
93
|
-
code = IRB::Color.colorize_code(File.read(source.file))
|
94
|
-
puts code.lines[(source.first_line - 1)...source.last_line].join
|
95
|
-
puts
|
96
|
-
end
|
97
|
-
|
98
|
-
def bold(str)
|
99
|
-
Color.colorize(str, [:BOLD])
|
100
|
-
end
|
101
|
-
|
102
|
-
Source = Struct.new(
|
103
|
-
:file, # @param [String] - file name
|
104
|
-
:first_line, # @param [String] - first line
|
105
|
-
:last_line, # @param [String] - last line
|
106
|
-
keyword_init: true,
|
107
|
-
)
|
108
|
-
private_constant :Source
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
# :startdoc:
|
113
|
-
end
|
data/lib/irb/cmd/subirb.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
#
|
3
|
-
# multi.rb -
|
4
|
-
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
5
|
-
#
|
6
|
-
|
7
|
-
require_relative "nop"
|
8
|
-
|
9
|
-
module IRB
|
10
|
-
# :stopdoc:
|
11
|
-
|
12
|
-
module ExtendCommand
|
13
|
-
class MultiIRBCommand < Nop
|
14
|
-
def initialize(conf)
|
15
|
-
super
|
16
|
-
extend_irb_context
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def extend_irb_context
|
22
|
-
# this extension patches IRB context like IRB.CurrentContext
|
23
|
-
require_relative "../ext/multi-irb"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class IrbCommand < MultiIRBCommand
|
28
|
-
category "IRB"
|
29
|
-
description "Start a child IRB."
|
30
|
-
|
31
|
-
def execute(*obj)
|
32
|
-
IRB.irb(nil, *obj)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class Jobs < MultiIRBCommand
|
37
|
-
category "IRB"
|
38
|
-
description "List of current sessions."
|
39
|
-
|
40
|
-
def execute
|
41
|
-
IRB.JobManager
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
class Foreground < MultiIRBCommand
|
46
|
-
category "IRB"
|
47
|
-
description "Switches to the session of the given number."
|
48
|
-
|
49
|
-
def execute(key = nil)
|
50
|
-
raise CommandArgumentError.new("Please specify the id of target IRB job (listed in the `jobs` command).") unless key
|
51
|
-
IRB.JobManager.switch(key)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class Kill < MultiIRBCommand
|
56
|
-
category "IRB"
|
57
|
-
description "Kills the session with the given number."
|
58
|
-
|
59
|
-
def execute(*keys)
|
60
|
-
IRB.JobManager.kill(*keys)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# :startdoc:
|
66
|
-
end
|