Skip to content

Commit d431a30

Browse files
committed
do not escape a predicate method for doc namespace
* Fixes #88
1 parent 03a5ded commit d431a30

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

lib/irb/completion.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
4747
when /^((["'`]).*\2)\.([^.]*)$/
4848
# String
4949
receiver = $1
50-
message = Regexp.quote($3)
50+
message = $3
5151

5252
candidates = String.instance_methods.collect{|m| m.to_s}
5353
if doc_namespace
@@ -59,7 +59,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
5959
when /^(\/[^\/]*\/)\.([^.]*)$/
6060
# Regexp
6161
receiver = $1
62-
message = Regexp.quote($2)
62+
message = $2
6363

6464
candidates = Regexp.instance_methods.collect{|m| m.to_s}
6565
if doc_namespace
@@ -71,7 +71,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
7171
when /^([^\]]*\])\.([^.]*)$/
7272
# Array
7373
receiver = $1
74-
message = Regexp.quote($2)
74+
message = $2
7575

7676
candidates = Array.instance_methods.collect{|m| m.to_s}
7777
if doc_namespace
@@ -83,7 +83,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
8383
when /^([^\}]*\})\.([^.]*)$/
8484
# Proc or Hash
8585
receiver = $1
86-
message = Regexp.quote($2)
86+
message = $2
8787

8888
proc_candidates = Proc.instance_methods.collect{|m| m.to_s}
8989
hash_candidates = Hash.instance_methods.collect{|m| m.to_s}
@@ -117,7 +117,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
117117
when /^([A-Z].*)::([^:.]*)$/
118118
# Constant or class methods
119119
receiver = $1
120-
message = Regexp.quote($2)
120+
message = $2
121121
begin
122122
candidates = eval("#{receiver}.constants.collect{|m| m.to_s}", bind)
123123
candidates |= eval("#{receiver}.methods.collect{|m| m.to_s}", bind)
@@ -134,7 +134,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
134134
# Symbol
135135
receiver = $1
136136
sep = $2
137-
message = Regexp.quote($3)
137+
message = $3
138138

139139
candidates = Symbol.instance_methods.collect{|m| m.to_s}
140140
if doc_namespace
@@ -147,7 +147,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
147147
# Numeric
148148
receiver = $~[:num]
149149
sep = $~[:sep]
150-
message = Regexp.quote($~[:mes])
150+
message = $~[:mes]
151151

152152
begin
153153
instance = eval(receiver, bind)
@@ -169,7 +169,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
169169
# Numeric(0xFFFF)
170170
receiver = $1
171171
sep = $2
172-
message = Regexp.quote($3)
172+
message = $3
173173

174174
begin
175175
instance = eval(receiver, bind)
@@ -201,7 +201,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
201201
# variable.func or func.func
202202
receiver = $1
203203
sep = $2
204-
message = Regexp.quote($3)
204+
message = $3
205205

206206
gv = eval("global_variables", bind).collect{|m| m.to_s}.push("true", "false", "nil")
207207
lv = eval("local_variables", bind).collect{|m| m.to_s}
@@ -244,7 +244,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
244244
# unknown(maybe String)
245245

246246
receiver = ""
247-
message = Regexp.quote($1)
247+
message = $1
248248

249249
candidates = String.instance_methods(true).collect{|m| m.to_s}
250250
if doc_namespace
@@ -294,7 +294,7 @@ def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace
294294
Operators = %w[% & * ** + - / < << <= <=> == === =~ > >= >> [] []= ^ ! != !~]
295295

296296
def self.select_message(receiver, message, candidates, sep = ".")
297-
candidates.grep(/^#{message}/).collect do |e|
297+
candidates.grep(/^#{Regexp.quote(message)}/).collect do |e|
298298
case e
299299
when /^[a-zA-Z_]/
300300
receiver + sep + e

test/irb/test_completion.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,13 @@ def test_complete_reserved_words
4747
assert_include candidates, word
4848
end
4949
end
50+
51+
def test_complete_predicate?
52+
candidates = IRB::InputCompletor.retrieve_completion_data("1.posi", bind: binding)
53+
assert_equal %w[1.positive?], candidates
54+
55+
namespace = IRB::InputCompletor.retrieve_completion_data("1.positive?", bind: binding, doc_namespace: true)
56+
assert_equal "Integer.positive?", namespace
57+
end
5058
end
5159
end

0 commit comments

Comments
 (0)