did_you_mean Gem Version Build Status

Installation

Ruby 2.3 and later ships with this gem and it will automatically be required when a Ruby process starts up. No special setup is required.

Examples

NameError

Correcting a Misspelled Method Name

methosd
# => NameError: undefined local variable or method `methosd' for main:Object
#    Did you mean?  methods
#                   method

Correcting a Misspelled Class Name

OBject
# => NameError: uninitialized constant OBject
#    Did you mean?  Object

Suggesting an Instance Variable Name

@full_name = "Yuki Nishijima"
first_name, last_name = full_name.split(" ")
# => NameError: undefined local variable or method `full_name' for main:Object
#    Did you mean?  @full_name

Correcting a Class Variable Name

@@full_name = "Yuki Nishijima"
@@full_anme
# => NameError: uninitialized class variable @@full_anme in Object
#    Did you mean?  @@full_name

NoMethodError

full_name = "Yuki Nishijima"
full_name.starts_with?("Y")
# => NoMethodError: undefined method `starts_with?' for "Yuki Nishijima":String
#    Did you mean?  start_with?

Experimental Features

Aside from the basic features above, the did_you_mean gem comes with experimental features. They can be enabled by calling require 'did_you_mean/experimental'.

Keep in mind that these experimental features should never be enabled in production as they would impact Ruby's performance and use some unstable Ruby APIs.

Correcting an Instance Variable When It's Incorrectly Typed

require 'did_you_mean/experimental'

@full_name = "Yuki Nishijima"
@full_anme.split(" ")
# => NoMethodError: undefined method `split' for nil:NilClass
#    Did you mean?  @full_name

Correcting a Hash Key Name

hash = {foo: 1, bar: 2, baz: 3}
hash.fetch(:fooo)
# KeyError: key not found: :fooo
# Did you mean?  :foo

Displaying a Warning When initialize is Incorrectly Typed

require 'did_you_mean/experimental'

class Person
  def intialize
    ...
  end
end
# => warning: intialize might be misspelled, perhaps you meant initialize?

Verbose Formatter

This verbose formatter changes the error message format to take more lines/spaces so it'll be slightly easier to read the suggestions. This formatter can totally be used in any environment including production.

OBject
# => NameError: uninitialized constant OBject
#    Did you mean?  Object

require 'did_you_mean/verbose_formatter'
OBject
# => NameError: uninitialized constant OBject
#
#        Did you mean? Object
#

Contributing

  1. Fork it (http://github.com/yuki24/did_you_mean/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Make sure all tests pass (bundle exec rake)
  5. Push to the branch (git push origin my-new-feature)
  6. Create new Pull Request

License

Copyright (c) 2014-16 Yuki Nishijima. See MIT-LICENSE for further details.