irb 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +6 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +55 -0
- data/Rakefile +10 -0
- data/bin/console +6 -0
- data/bin/setup +6 -0
- data/exe/irb +11 -0
- data/irb.gemspec +26 -0
- data/lib/irb.rb +798 -0
- data/lib/irb/cmd/chws.rb +34 -0
- data/lib/irb/cmd/fork.rb +39 -0
- data/lib/irb/cmd/help.rb +42 -0
- data/lib/irb/cmd/load.rb +67 -0
- data/lib/irb/cmd/nop.rb +39 -0
- data/lib/irb/cmd/pushws.rb +41 -0
- data/lib/irb/cmd/subirb.rb +43 -0
- data/lib/irb/completion.rb +244 -0
- data/lib/irb/context.rb +425 -0
- data/lib/irb/ext/change-ws.rb +46 -0
- data/lib/irb/ext/history.rb +119 -0
- data/lib/irb/ext/loader.rb +129 -0
- data/lib/irb/ext/multi-irb.rb +265 -0
- data/lib/irb/ext/save-history.rb +105 -0
- data/lib/irb/ext/tracer.rb +72 -0
- data/lib/irb/ext/use-loader.rb +74 -0
- data/lib/irb/ext/workspaces.rb +67 -0
- data/lib/irb/extend-command.rb +306 -0
- data/lib/irb/frame.rb +81 -0
- data/lib/irb/help.rb +37 -0
- data/lib/irb/init.rb +302 -0
- data/lib/irb/input-method.rb +192 -0
- data/lib/irb/inspector.rb +132 -0
- data/lib/irb/lc/.document +4 -0
- data/lib/irb/lc/error.rb +32 -0
- data/lib/irb/lc/help-message +49 -0
- data/lib/irb/lc/ja/encoding_aliases.rb +11 -0
- data/lib/irb/lc/ja/error.rb +31 -0
- data/lib/irb/lc/ja/help-message +52 -0
- data/lib/irb/locale.rb +182 -0
- data/lib/irb/magic-file.rb +38 -0
- data/lib/irb/notifier.rb +232 -0
- data/lib/irb/output-method.rb +92 -0
- data/lib/irb/ruby-lex.rb +1180 -0
- data/lib/irb/ruby-token.rb +267 -0
- data/lib/irb/slex.rb +282 -0
- data/lib/irb/src_encoding.rb +7 -0
- data/lib/irb/version.rb +17 -0
- data/lib/irb/workspace.rb +143 -0
- data/lib/irb/ws-for-case-2.rb +15 -0
- data/lib/irb/xmp.rb +170 -0
- metadata +125 -0
data/lib/irb/cmd/chws.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
#
|
3
|
+
# change-ws.rb -
|
4
|
+
# $Release Version: 0.9.6$
|
5
|
+
# $Revision$
|
6
|
+
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
7
|
+
#
|
8
|
+
# --
|
9
|
+
#
|
10
|
+
#
|
11
|
+
#
|
12
|
+
|
13
|
+
require_relative "nop"
|
14
|
+
require_relative "../ext/change-ws"
|
15
|
+
|
16
|
+
# :stopdoc:
|
17
|
+
module IRB
|
18
|
+
module ExtendCommand
|
19
|
+
|
20
|
+
class CurrentWorkingWorkspace < Nop
|
21
|
+
def execute(*obj)
|
22
|
+
irb_context.main
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class ChangeWorkspace < Nop
|
27
|
+
def execute(*obj)
|
28
|
+
irb_context.change_workspace(*obj)
|
29
|
+
irb_context.main
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
# :startdoc:
|
data/lib/irb/cmd/fork.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
#
|
3
|
+
# fork.rb -
|
4
|
+
# $Release Version: 0.9.6 $
|
5
|
+
# $Revision$
|
6
|
+
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
7
|
+
#
|
8
|
+
# --
|
9
|
+
#
|
10
|
+
#
|
11
|
+
#
|
12
|
+
|
13
|
+
|
14
|
+
# :stopdoc:
|
15
|
+
module IRB
|
16
|
+
module ExtendCommand
|
17
|
+
class Fork < Nop
|
18
|
+
def execute
|
19
|
+
pid = send ExtendCommand.irb_original_method_name("fork")
|
20
|
+
unless pid
|
21
|
+
class << self
|
22
|
+
alias_method :exit, ExtendCommand.irb_original_method_name('exit')
|
23
|
+
end
|
24
|
+
if iterator?
|
25
|
+
begin
|
26
|
+
yield
|
27
|
+
ensure
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
pid
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
# :startdoc:
|
38
|
+
|
39
|
+
|
data/lib/irb/cmd/help.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
#
|
3
|
+
# help.rb - helper using ri
|
4
|
+
# $Release Version: 0.9.6$
|
5
|
+
# $Revision$
|
6
|
+
#
|
7
|
+
# --
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'rdoc/ri/driver'
|
13
|
+
|
14
|
+
require_relative "nop"
|
15
|
+
|
16
|
+
# :stopdoc:
|
17
|
+
module IRB
|
18
|
+
module ExtendCommand
|
19
|
+
class Help < Nop
|
20
|
+
begin
|
21
|
+
Ri = RDoc::RI::Driver.new
|
22
|
+
rescue SystemExit
|
23
|
+
else
|
24
|
+
def execute(*names)
|
25
|
+
if names.empty?
|
26
|
+
Ri.interactive
|
27
|
+
return
|
28
|
+
end
|
29
|
+
names.each do |name|
|
30
|
+
begin
|
31
|
+
Ri.display_name(name.to_s)
|
32
|
+
rescue RDoc::RI::Error
|
33
|
+
puts $!.message
|
34
|
+
end
|
35
|
+
end
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
# :startdoc:
|
data/lib/irb/cmd/load.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
#
|
3
|
+
# load.rb -
|
4
|
+
# $Release Version: 0.9.6$
|
5
|
+
# $Revision$
|
6
|
+
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
7
|
+
#
|
8
|
+
# --
|
9
|
+
#
|
10
|
+
#
|
11
|
+
#
|
12
|
+
|
13
|
+
require_relative "nop"
|
14
|
+
require_relative "../ext/loader"
|
15
|
+
|
16
|
+
# :stopdoc:
|
17
|
+
module IRB
|
18
|
+
module ExtendCommand
|
19
|
+
class Load < Nop
|
20
|
+
include IrbLoader
|
21
|
+
|
22
|
+
def execute(file_name, priv = nil)
|
23
|
+
return irb_load(file_name, priv)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Require < Nop
|
28
|
+
include IrbLoader
|
29
|
+
|
30
|
+
def execute(file_name)
|
31
|
+
|
32
|
+
rex = Regexp.new("#{Regexp.quote(file_name)}(\.o|\.rb)?")
|
33
|
+
return false if $".find{|f| f =~ rex}
|
34
|
+
|
35
|
+
case file_name
|
36
|
+
when /\.rb$/
|
37
|
+
begin
|
38
|
+
if irb_load(file_name)
|
39
|
+
$".push file_name
|
40
|
+
return true
|
41
|
+
end
|
42
|
+
rescue LoadError
|
43
|
+
end
|
44
|
+
when /\.(so|o|sl)$/
|
45
|
+
return ruby_require(file_name)
|
46
|
+
end
|
47
|
+
|
48
|
+
begin
|
49
|
+
irb_load(f = file_name + ".rb")
|
50
|
+
$".push f
|
51
|
+
return true
|
52
|
+
rescue LoadError
|
53
|
+
return ruby_require(file_name)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class Source < Nop
|
59
|
+
include IrbLoader
|
60
|
+
def execute(file_name)
|
61
|
+
source_file(file_name)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
# :startdoc:
|
data/lib/irb/cmd/nop.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
#
|
3
|
+
# nop.rb -
|
4
|
+
# $Release Version: 0.9.6$
|
5
|
+
# $Revision$
|
6
|
+
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
7
|
+
#
|
8
|
+
# --
|
9
|
+
#
|
10
|
+
#
|
11
|
+
#
|
12
|
+
# :stopdoc:
|
13
|
+
module IRB
|
14
|
+
module ExtendCommand
|
15
|
+
class Nop
|
16
|
+
|
17
|
+
|
18
|
+
def self.execute(conf, *opts)
|
19
|
+
command = new(conf)
|
20
|
+
command.execute(*opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(conf)
|
24
|
+
@irb_context = conf
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader :irb_context
|
28
|
+
|
29
|
+
def irb
|
30
|
+
@irb_context.irb
|
31
|
+
end
|
32
|
+
|
33
|
+
def execute(*opts)
|
34
|
+
#nop
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
# :startdoc:
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
#
|
3
|
+
# change-ws.rb -
|
4
|
+
# $Release Version: 0.9.6$
|
5
|
+
# $Revision$
|
6
|
+
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
7
|
+
#
|
8
|
+
# --
|
9
|
+
#
|
10
|
+
#
|
11
|
+
#
|
12
|
+
|
13
|
+
require_relative "nop"
|
14
|
+
require_relative "../ext/workspaces"
|
15
|
+
|
16
|
+
# :stopdoc:
|
17
|
+
module IRB
|
18
|
+
module ExtendCommand
|
19
|
+
class Workspaces < Nop
|
20
|
+
def execute(*obj)
|
21
|
+
irb_context.workspaces.collect{|ws| ws.main}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class PushWorkspace < Workspaces
|
26
|
+
def execute(*obj)
|
27
|
+
irb_context.push_workspace(*obj)
|
28
|
+
super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class PopWorkspace < Workspaces
|
33
|
+
def execute(*obj)
|
34
|
+
irb_context.pop_workspace(*obj)
|
35
|
+
super
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
# :startdoc:
|
41
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
# multi.rb -
|
3
|
+
# $Release Version: 0.9.6$
|
4
|
+
# $Revision$
|
5
|
+
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
6
|
+
#
|
7
|
+
# --
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
|
12
|
+
require_relative "nop"
|
13
|
+
require_relative "../ext/multi-irb"
|
14
|
+
|
15
|
+
# :stopdoc:
|
16
|
+
module IRB
|
17
|
+
module ExtendCommand
|
18
|
+
class IrbCommand < Nop
|
19
|
+
def execute(*obj)
|
20
|
+
IRB.irb(nil, *obj)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Jobs < Nop
|
25
|
+
def execute
|
26
|
+
IRB.JobManager
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Foreground < Nop
|
31
|
+
def execute(key)
|
32
|
+
IRB.JobManager.switch(key)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Kill < Nop
|
37
|
+
def execute(*keys)
|
38
|
+
IRB.JobManager.kill(*keys)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
# :startdoc:
|
@@ -0,0 +1,244 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
#
|
3
|
+
# irb/completion.rb -
|
4
|
+
# $Release Version: 0.9$
|
5
|
+
# $Revision$
|
6
|
+
# by Keiju ISHITSUKA(keiju@ishitsuka.com)
|
7
|
+
# From Original Idea of shugo@ruby-lang.org
|
8
|
+
#
|
9
|
+
|
10
|
+
require "readline"
|
11
|
+
|
12
|
+
module IRB
|
13
|
+
module InputCompletor # :nodoc:
|
14
|
+
|
15
|
+
|
16
|
+
# Set of reserved words used by Ruby, you should not use these for
|
17
|
+
# constants or variables
|
18
|
+
ReservedWords = %w[
|
19
|
+
BEGIN END
|
20
|
+
alias and
|
21
|
+
begin break
|
22
|
+
case class
|
23
|
+
def defined do
|
24
|
+
else elsif end ensure
|
25
|
+
false for
|
26
|
+
if in
|
27
|
+
module
|
28
|
+
next nil not
|
29
|
+
or
|
30
|
+
redo rescue retry return
|
31
|
+
self super
|
32
|
+
then true
|
33
|
+
undef unless until
|
34
|
+
when while
|
35
|
+
yield
|
36
|
+
]
|
37
|
+
|
38
|
+
CompletionProc = proc { |input|
|
39
|
+
bind = IRB.conf[:MAIN_CONTEXT].workspace.binding
|
40
|
+
|
41
|
+
case input
|
42
|
+
when /^((["'`]).*\2)\.([^.]*)$/
|
43
|
+
# String
|
44
|
+
receiver = $1
|
45
|
+
message = Regexp.quote($3)
|
46
|
+
|
47
|
+
candidates = String.instance_methods.collect{|m| m.to_s}
|
48
|
+
select_message(receiver, message, candidates)
|
49
|
+
|
50
|
+
when /^(\/[^\/]*\/)\.([^.]*)$/
|
51
|
+
# Regexp
|
52
|
+
receiver = $1
|
53
|
+
message = Regexp.quote($2)
|
54
|
+
|
55
|
+
candidates = Regexp.instance_methods.collect{|m| m.to_s}
|
56
|
+
select_message(receiver, message, candidates)
|
57
|
+
|
58
|
+
when /^([^\]]*\])\.([^.]*)$/
|
59
|
+
# Array
|
60
|
+
receiver = $1
|
61
|
+
message = Regexp.quote($2)
|
62
|
+
|
63
|
+
candidates = Array.instance_methods.collect{|m| m.to_s}
|
64
|
+
select_message(receiver, message, candidates)
|
65
|
+
|
66
|
+
when /^([^\}]*\})\.([^.]*)$/
|
67
|
+
# Proc or Hash
|
68
|
+
receiver = $1
|
69
|
+
message = Regexp.quote($2)
|
70
|
+
|
71
|
+
candidates = Proc.instance_methods.collect{|m| m.to_s}
|
72
|
+
candidates |= Hash.instance_methods.collect{|m| m.to_s}
|
73
|
+
select_message(receiver, message, candidates)
|
74
|
+
|
75
|
+
when /^(:[^:.]*)$/
|
76
|
+
# Symbol
|
77
|
+
if Symbol.respond_to?(:all_symbols)
|
78
|
+
sym = $1
|
79
|
+
candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
|
80
|
+
candidates.grep(/^#{Regexp.quote(sym)}/)
|
81
|
+
else
|
82
|
+
[]
|
83
|
+
end
|
84
|
+
|
85
|
+
when /^::([A-Z][^:\.\(]*)$/
|
86
|
+
# Absolute Constant or class methods
|
87
|
+
receiver = $1
|
88
|
+
candidates = Object.constants.collect{|m| m.to_s}
|
89
|
+
candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
|
90
|
+
|
91
|
+
when /^([A-Z].*)::([^:.]*)$/
|
92
|
+
# Constant or class methods
|
93
|
+
receiver = $1
|
94
|
+
message = Regexp.quote($2)
|
95
|
+
begin
|
96
|
+
candidates = eval("#{receiver}.constants.collect{|m| m.to_s}", bind)
|
97
|
+
candidates |= eval("#{receiver}.methods.collect{|m| m.to_s}", bind)
|
98
|
+
rescue Exception
|
99
|
+
candidates = []
|
100
|
+
end
|
101
|
+
select_message(receiver, message, candidates, "::")
|
102
|
+
|
103
|
+
when /^(:[^:.]+)(\.|::)([^.]*)$/
|
104
|
+
# Symbol
|
105
|
+
receiver = $1
|
106
|
+
sep = $2
|
107
|
+
message = Regexp.quote($3)
|
108
|
+
|
109
|
+
candidates = Symbol.instance_methods.collect{|m| m.to_s}
|
110
|
+
select_message(receiver, message, candidates, sep)
|
111
|
+
|
112
|
+
when /^(-?(0[dbo])?[0-9_]+(\.[0-9_]+)?([eE]-?[0-9]+)?)(\.|::)([^.]*)$/
|
113
|
+
# Numeric
|
114
|
+
receiver = $1
|
115
|
+
sep = $5
|
116
|
+
message = Regexp.quote($6)
|
117
|
+
|
118
|
+
begin
|
119
|
+
candidates = eval(receiver, bind).methods.collect{|m| m.to_s}
|
120
|
+
rescue Exception
|
121
|
+
candidates = []
|
122
|
+
end
|
123
|
+
select_message(receiver, message, candidates, sep)
|
124
|
+
|
125
|
+
when /^(-?0x[0-9a-fA-F_]+)(\.|::)([^.]*)$/
|
126
|
+
# Numeric(0xFFFF)
|
127
|
+
receiver = $1
|
128
|
+
sep = $2
|
129
|
+
message = Regexp.quote($3)
|
130
|
+
|
131
|
+
begin
|
132
|
+
candidates = eval(receiver, bind).methods.collect{|m| m.to_s}
|
133
|
+
rescue Exception
|
134
|
+
candidates = []
|
135
|
+
end
|
136
|
+
select_message(receiver, message, candidates, sep)
|
137
|
+
|
138
|
+
when /^(\$[^.]*)$/
|
139
|
+
# global var
|
140
|
+
regmessage = Regexp.new(Regexp.quote($1))
|
141
|
+
candidates = global_variables.collect{|m| m.to_s}.grep(regmessage)
|
142
|
+
|
143
|
+
when /^([^."].*)(\.|::)([^.]*)$/
|
144
|
+
# variable.func or func.func
|
145
|
+
receiver = $1
|
146
|
+
sep = $2
|
147
|
+
message = Regexp.quote($3)
|
148
|
+
|
149
|
+
gv = eval("global_variables", bind).collect{|m| m.to_s}
|
150
|
+
lv = eval("local_variables", bind).collect{|m| m.to_s}
|
151
|
+
iv = eval("instance_variables", bind).collect{|m| m.to_s}
|
152
|
+
cv = eval("self.class.constants", bind).collect{|m| m.to_s}
|
153
|
+
|
154
|
+
if (gv | lv | iv | cv).include?(receiver) or /^[A-Z]/ =~ receiver && /\./ !~ receiver
|
155
|
+
# foo.func and foo is var. OR
|
156
|
+
# foo::func and foo is var. OR
|
157
|
+
# foo::Const and foo is var. OR
|
158
|
+
# Foo::Bar.func
|
159
|
+
begin
|
160
|
+
candidates = []
|
161
|
+
rec = eval(receiver, bind)
|
162
|
+
if sep == "::" and rec.kind_of?(Module)
|
163
|
+
candidates = rec.constants.collect{|m| m.to_s}
|
164
|
+
end
|
165
|
+
candidates |= rec.methods.collect{|m| m.to_s}
|
166
|
+
rescue Exception
|
167
|
+
candidates = []
|
168
|
+
end
|
169
|
+
else
|
170
|
+
# func1.func2
|
171
|
+
candidates = []
|
172
|
+
to_ignore = ignored_modules
|
173
|
+
ObjectSpace.each_object(Module){|m|
|
174
|
+
next if (to_ignore.include?(m) rescue true)
|
175
|
+
candidates.concat m.instance_methods(false).collect{|x| x.to_s}
|
176
|
+
}
|
177
|
+
candidates.sort!
|
178
|
+
candidates.uniq!
|
179
|
+
end
|
180
|
+
select_message(receiver, message, candidates, sep)
|
181
|
+
|
182
|
+
when /^\.([^.]*)$/
|
183
|
+
# unknown(maybe String)
|
184
|
+
|
185
|
+
receiver = ""
|
186
|
+
message = Regexp.quote($1)
|
187
|
+
|
188
|
+
candidates = String.instance_methods(true).collect{|m| m.to_s}
|
189
|
+
select_message(receiver, message, candidates)
|
190
|
+
|
191
|
+
else
|
192
|
+
candidates = eval("methods | private_methods | local_variables | instance_variables | self.class.constants", bind).collect{|m| m.to_s}
|
193
|
+
|
194
|
+
(candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)
|
195
|
+
end
|
196
|
+
}
|
197
|
+
|
198
|
+
# Set of available operators in Ruby
|
199
|
+
Operators = %w[% & * ** + - / < << <= <=> == === =~ > >= >> [] []= ^ ! != !~]
|
200
|
+
|
201
|
+
def self.select_message(receiver, message, candidates, sep = ".")
|
202
|
+
candidates.grep(/^#{message}/).collect do |e|
|
203
|
+
case e
|
204
|
+
when /^[a-zA-Z_]/
|
205
|
+
receiver + sep + e
|
206
|
+
when /^[0-9]/
|
207
|
+
when *Operators
|
208
|
+
#receiver + " " + e
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def self.ignored_modules
|
214
|
+
# We could cache the result, but this is very fast already.
|
215
|
+
# By using this approach, we avoid Module#name calls, which are
|
216
|
+
# relatively slow when there are a lot of anonymous modules defined.
|
217
|
+
s = {}
|
218
|
+
|
219
|
+
scanner = lambda do |m|
|
220
|
+
next if s.include?(m) # IRB::ExtendCommandBundle::EXCB recurses.
|
221
|
+
s[m] = true
|
222
|
+
m.constants(false).each do |c|
|
223
|
+
value = m.const_get(c)
|
224
|
+
scanner.call(value) if value.is_a?(Module)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
%i(IRB SLex RubyLex RubyToken).each do |sym|
|
229
|
+
next unless Object.const_defined?(sym)
|
230
|
+
scanner.call(Object.const_get(sym))
|
231
|
+
end
|
232
|
+
|
233
|
+
s.delete(IRB::Context) if defined?(IRB::Context)
|
234
|
+
|
235
|
+
s
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
if Readline.respond_to?("basic_word_break_characters=")
|
241
|
+
Readline.basic_word_break_characters= " \t\n`><=;|&{("
|
242
|
+
end
|
243
|
+
Readline.completion_append_character = nil
|
244
|
+
Readline.completion_proc = IRB::InputCompletor::CompletionProc
|