diff options
author | Yuki Nishijima <yk.nishijima@gmail.com> | 2020-05-11 23:24:39 -0400 |
---|---|---|
committer | Yuki Nishijima <yk.nishijima@gmail.com> | 2020-05-11 23:25:04 -0400 |
commit | 946dadd3f479198e87873a863d15c7660a8e2b56 (patch) | |
tree | 08997192ddd8890ff9109d6e4902cdb7625c1030 /lib | |
parent | 7cc55f4bc4d836e8edcae05f1b500417fc2b71a3 (diff) | |
download | ruby-946dadd3f479198e87873a863d15c7660a8e2b56.tar.gz |
Sync did_you_mean
Diffstat (limited to 'lib')
-rw-r--r-- | lib/did_you_mean.rb | 4 | ||||
-rw-r--r-- | lib/did_you_mean/spell_checkers/method_name_checker.rb | 7 | ||||
-rw-r--r-- | lib/did_you_mean/spell_checkers/require_path_checker.rb | 33 |
3 files changed, 42 insertions, 2 deletions
diff --git a/lib/did_you_mean.rb b/lib/did_you_mean.rb index b8f92579ca..2dbd2fb9f6 100644 --- a/lib/did_you_mean.rb +++ b/lib/did_you_mean.rb @@ -6,6 +6,7 @@ require_relative 'did_you_mean/spell_checkers/name_error_checkers' require_relative 'did_you_mean/spell_checkers/method_name_checker' require_relative 'did_you_mean/spell_checkers/key_error_checker' require_relative 'did_you_mean/spell_checkers/null_checker' +require_relative 'did_you_mean/spell_checkers/require_path_checker' require_relative 'did_you_mean/formatters/plain_formatter' require_relative 'did_you_mean/tree_spell_checker' @@ -95,8 +96,9 @@ module DidYouMean correct_error NameError, NameErrorCheckers correct_error KeyError, KeyErrorChecker correct_error NoMethodError, MethodNameChecker + correct_error LoadError, RequirePathChecker - # Returns the currenctly set formatter. By default, it is set to +DidYouMean::Formatter+. + # Returns the currently set formatter. By default, it is set to +DidYouMean::Formatter+. def self.formatter @@formatter end diff --git a/lib/did_you_mean/spell_checkers/method_name_checker.rb b/lib/did_you_mean/spell_checkers/method_name_checker.rb index 3a38245f0c..0483127d6f 100644 --- a/lib/did_you_mean/spell_checkers/method_name_checker.rb +++ b/lib/did_you_mean/spell_checkers/method_name_checker.rb @@ -43,7 +43,12 @@ module DidYouMean end def corrections - @corrections ||= SpellChecker.new(dictionary: RB_RESERVED_WORDS + method_names).correct(method_name) - names_to_exclude + @corrections ||= begin + dictionary = method_names + dictionary = RB_RESERVED_WORDS + dictionary if @private_call + + SpellChecker.new(dictionary: dictionary).correct(method_name) - names_to_exclude + end end def method_names diff --git a/lib/did_you_mean/spell_checkers/require_path_checker.rb b/lib/did_you_mean/spell_checkers/require_path_checker.rb new file mode 100644 index 0000000000..10239947dd --- /dev/null +++ b/lib/did_you_mean/spell_checkers/require_path_checker.rb @@ -0,0 +1,33 @@ +# frozen-string-literal: true + +require_relative "../spell_checker" +require_relative "../tree_spell_checker" + +module DidYouMean + class RequirePathChecker + attr_reader :path + + INITIAL_LOAD_PATH = $LOAD_PATH.dup.freeze + ENV_SPECIFIC_EXT = ".#{RbConfig::CONFIG["DLEXT"]}" + + private_constant :INITIAL_LOAD_PATH, :ENV_SPECIFIC_EXT + + def self.requireables + @requireables ||= INITIAL_LOAD_PATH + .flat_map {|path| Dir.glob("**/???*{.rb,#{ENV_SPECIFIC_EXT}}", base: path) } + .map {|path| path.chomp!(".rb") || path.chomp!(ENV_SPECIFIC_EXT) } + end + + def initialize(exception) + @path = exception.path + end + + def corrections + threshold = path.size * 2 + dictionary = self.class.requireables.reject {|str| str.size >= threshold } + spell_checker = path.include?("/") ? TreeSpellChecker : SpellChecker + + spell_checker.new(dictionary: dictionary).correct(path) + end + end +end |