Bug #16599
closeddid_you_mean is not activated for NameError and KeyError
Description
This document claims that the did_you_mean gem responds to NameError, NoMethodError, and KeyError, but it actually seems to only respond to NoMethodError.
foo() # >> NoMethodError: undefined method `foo' for main:Object # >> Did you mean? for foo # >> NameError: undefined local variable or method `foo' for main:Object Foo # >> NameError: uninitialized constant Foo {foo: 1}.fetch(:bar) # >> KeyError: key not found: :bar
Updated by znz (Kazuhiro NISHIYAMA) almost 6 years ago
- Assignee set to yuki24 (Yuki Nishijima)
Updated by zverok (Victor Shepelev) almost 6 years ago
As far as I can understand, did_you_mean reacts only when it can find contextually appropriate thing with similar name. For me, it is this way:
foo # NameError (undefined local variable or method `foo' for main:Object) -- did_you_mean can't suggest anything fox = 1 foo # NameError (undefined local variable or method `foo' for main:Object) # Did you mean? fox # And similarly: FOO = 1 Foo # NameError (uninitialized constant Foo) # Did you mean? FOO # 2.7 only: {baz: 1}.fetch(:bar) # KeyError (key not found: :bar) # Did you mean? :baz
Updated by jeremyevans0 (Jeremy Evans) almost 6 years ago
- Status changed from Open to Closed
As @zverok (Victor Shepelev) 's analysis shows, did_you_mean does activate for NameError and KeyError if it can find suggestions.
As for not suggesting for for foo in NameError but doing so for NoMethodError, I can't tell if that is a bug in did_you_mean. It doesn't seem to be general behavior for keywords, since did_you_mean recommends while for whil in both cases. If you think it is a bug in did_you_mean, you may want to file it upstream: https://github.com/ruby/did_you_mean/issues