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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy