Fix regexp to complete complex literal

IRB completion logic always needed exponential notation for complex literal
such as 3e6i but it's bug. I fixed to support complex literal without
exponential notation such as 3i.
This commit is contained in:
aycabta 2019-11-28 15:15:41 +09:00
Родитель 8b4ee5d6ba
Коммит 7d75e94ea9
2 изменённых файлов: 8 добавлений и 5 удалений

Просмотреть файл

@ -42,9 +42,7 @@ module IRB
retrieve_completion_data(input).compact.map{ |i| i.encode(Encoding.default_external) }
}
def self.retrieve_completion_data(input, doc_namespace = false)
bind = IRB.conf[:MAIN_CONTEXT].workspace.binding
def self.retrieve_completion_data(input, bind: IRB.conf[:MAIN_CONTEXT].workspace.binding, doc_namespace: false)
case input
when /^((["'`]).*\2)\.([^.]*)$/
# String
@ -145,7 +143,7 @@ module IRB
select_message(receiver, message, candidates, sep)
end
when /^(?<num>-?(0[dbo])?[0-9_]+(\.[0-9_]+)?([eE][+-]?[0-9]+i?|r)?)(?<sep>\.|::)(?<mes>[^.]*)$/
when /^(?<num>-?(0[dbo])?[0-9_]+(\.[0-9_]+)?(([eE][+-]?[0-9]+)?i?|r)?)(?<sep>\.|::)(?<mes>[^.]*)$/
# Numeric
receiver = $~[:num]
sep = $~[:sep]
@ -277,7 +275,7 @@ module IRB
end
return
end
namespace = retrieve_completion_data(matched, true)
namespace = retrieve_completion_data(matched, doc_namespace: true)
return unless matched
if namespace.is_a?(Array)
out = RDoc::Markup::Document.new

Просмотреть файл

@ -19,5 +19,10 @@ module TestIRB
skip "cannot load irb/completion"
end
end
def test_complete_numeric
assert_include(IRB::InputCompletor.retrieve_completion_data("1r.positi", bind: binding), "1r.positive?")
assert_empty(IRB::InputCompletor.retrieve_completion_data("1i.positi", bind: binding))
end
end
end