The did_you_mean feature in Ruby 2.3.0 reports an impossible suggestion when you define whatever is being called in the current scope after it is being called:
irb(main):001:0> def foo
irb(main):002:1> bar
irb(main):003:1> bar = "baz"
irb(main):004:1> end
=> :foo
irb(main):005:0> foo
NameError: undefined local variable or method `bar' for main:Object
Did you mean? bar
from (irb):2:in `foo'
from (irb):5
from /Users/carcand/.rbenv/versions/2.3.0/bin/irb:11:in `<main>'
I imagine this could be very confusing for newcomers to Ruby; I've not looked in to how the gem works but if a way to suppress the suggestion in this particular context might be appropriate.
Issue #12037 has been updated by Nobuyoshi Nakada.
Status changed from Open to Third Party's Issue
Assignee set to Yuki Nishijima
Probably the same name as the erred should be removed from candidates first.
Even better, why not create a more explicit message for such a case, e.g.
NameError: undefined local variable or method `bar' for main:Object
Attempt to use before created:
from (irb):2:in `foo'
from (irb):5
from /Users/carcand/.rbenv/versions/2.3.0/bin/irb:11:in `<main>'