Module: DidYouMean
- Defined in:
- lib/did_you_mean.rb,
lib/did_you_mean/version.rb,
lib/did_you_mean/formatter.rb,
lib/did_you_mean/levenshtein.rb,
lib/did_you_mean/jaro_winkler.rb,
lib/did_you_mean/spell_checker.rb,
lib/did_you_mean/tree_spell_checker.rb,
lib/did_you_mean/core_ext/name_error.rb,
lib/did_you_mean/spell_checkers/null_checker.rb,
lib/did_you_mean/formatters/verbose_formatter.rb,
lib/did_you_mean/spell_checkers/key_error_checker.rb,
lib/did_you_mean/spell_checkers/method_name_checker.rb,
lib/did_you_mean/spell_checkers/name_error_checkers.rb,
lib/did_you_mean/spell_checkers/require_path_checker.rb,
lib/did_you_mean/spell_checkers/pattern_key_name_checker.rb,
lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb,
lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
Overview
The DidYouMean
gem adds functionality to suggest possible method/class names upon errors such as NameError
and NoMethodError
. In Ruby 2.3 or later, it is automatically activated during startup.
Disabling did_you_mean
Occasionally, you may want to disable the did_you_mean
gem for e.g. debugging issues in the error object itself. You can disable it entirely by specifying --disable-did_you_mean
option to the ruby
command:
$ ruby --disable-did_you_mean -e "1.zeor?"
-e:1:in `<main>': undefined method `zeor?' for 1:Integer (NameError)
When you do not have direct access to the ruby
command (e.g. rails console, irb
), you could applyoptions using the RUBYOPT
environment variable:
$ RUBYOPT='--disable-did_you_mean' irb
irb:0> 1.zeor?
# => NoMethodError (undefined method `zeor?' for 1:Integer)
Getting the original error message
Sometimes, you do not want to disable the gem entirely, but need to get the original error message without suggestions (e.g. testing). In this case, you could use the #original_message
method on the error object:
no_method_error = begin
1.zeor?
rescue NoMethodError => error
error
end
no_method_error.
# => NoMethodError (undefined method `zeor?' for 1:Integer)
# Did you mean? zero?
no_method_error.
# => NoMethodError (undefined method `zeor?' for 1:Integer)
Defined Under Namespace
Modules: Correctable, Jaro, JaroWinkler, Levenshtein Classes: ClassNameChecker, Formatter, KeyErrorChecker, MethodNameChecker, NullChecker, PatternKeyNameChecker, RequirePathChecker, SpellChecker, TreeSpellChecker, VariableNameChecker
Constant Summary collapse
- SPELL_CHECKERS =
TODO: Remove on 3.3:
DeprecatedMapping.new
- VERSION =
"1.6.3".freeze
- PlainFormatter =
Formatter
- VerboseFormatter =
For compatibility:
Formatter
Class Method Summary collapse
-
.correct_error(error_class, spell_checker) ⇒ Object
Adds
DidYouMean
functionality to an error using a given spell checker. -
.formatter ⇒ Object
Returns the currently set formatter.
-
.formatter=(formatter) ⇒ Object
Updates the primary formatter used to format the suggestions.
-
.spell_checkers ⇒ Object
Returns a sharable hash map of error types and spell checker objects.
Class Method Details
.correct_error(error_class, spell_checker) ⇒ Object
Adds DidYouMean
functionality to an error using a given spell checker
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/did_you_mean.rb', line 97 def self.correct_error(error_class, spell_checker) if defined?(Ractor) new_mapping = { **@spell_checkers, error_class.to_s => spell_checker } new_mapping.default = NullChecker @spell_checkers = Ractor.make_shareable(new_mapping) else spell_checkers[error_class.to_s] = spell_checker end error_class.prepend(Correctable) if error_class.is_a?(Class) && !(error_class < Correctable) end |
.formatter ⇒ Object
Returns the currently set formatter. By default, it is set to DidYouMean::Formatter
.
141 142 143 144 145 146 147 |
# File 'lib/did_you_mean.rb', line 141 def self.formatter if defined?(Ractor) Ractor.current[:__did_you_mean_formatter__] || Formatter else Formatter end end |
.formatter=(formatter) ⇒ Object
Updates the primary formatter used to format the suggestions.
150 151 152 153 154 |
# File 'lib/did_you_mean.rb', line 150 def self.formatter=(formatter) if defined?(Ractor) Ractor.current[:__did_you_mean_formatter__] = formatter end end |
.spell_checkers ⇒ Object
Returns a sharable hash map of error types and spell checker objects.
92 93 94 |
# File 'lib/did_you_mean.rb', line 92 def self.spell_checkers @spell_checkers end |