[前][次][番号順一覧][スレッド一覧]

ruby-changes:61205

From: Yuki <ko1@a...>
Date: Tue, 12 May 2020 12:25:32 +0900 (JST)
Subject: [ruby-changes:61205] 946dadd3f4 (master): Sync did_you_mean

https://git.ruby-lang.org/ruby.git/commit/?id=946dadd3f4

From 946dadd3f479198e87873a863d15c7660a8e2b56 Mon Sep 17 00:00:00 2001
From: Yuki Nishijima <yk.nishijima@g...>
Date: Mon, 11 May 2020 23:24:39 -0400
Subject: Sync did_you_mean


diff --git a/lib/did_you_mean.rb b/lib/did_you_mean.rb
index b8f9257..2dbd2fb 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' https://github.com/ruby/ruby/blob/trunk/lib/did_you_mean.rb#L6
 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 https://github.com/ruby/ruby/blob/trunk/lib/did_you_mean.rb#L96
   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 3a38245..0483127 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 https://github.com/ruby/ruby/blob/trunk/lib/did_you_mean/spell_checkers/method_name_checker.rb#L43
     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 0000000..1023994
--- /dev/null
+++ b/lib/did_you_mean/spell_checkers/require_path_checker.rb
@@ -0,0 +1,33 @@ https://github.com/ruby/ruby/blob/trunk/lib/did_you_mean/spell_checkers/require_path_checker.rb#L1
+# 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
diff --git a/test/did_you_mean/spell_checking/test_method_name_check.rb b/test/did_you_mean/spell_checking/test_method_name_check.rb
index f3a6b1c..6e14e6a 100644
--- a/test/did_you_mean/spell_checking/test_method_name_check.rb
+++ b/test/did_you_mean/spell_checking/test_method_name_check.rb
@@ -137,4 +137,11 @@ class MethodNameCheckTest < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/did_you_mean/spell_checking/test_method_name_check.rb#L137
     assert_correction :yield, error.corrections
     assert_match "Did you mean?  yield", error.to_s
   end
+
+  def test_does_not_suggest_yield
+    error = assert_raise(NoMethodError) { 1.yeild }
+
+    assert_correction [], error.corrections
+    assert_not_match(/Did you mean\? +yield/, error.to_s)
+  end if RUBY_ENGINE != "jruby"
 end
diff --git a/test/did_you_mean/spell_checking/test_require_path_check.rb b/test/did_you_mean/spell_checking/test_require_path_check.rb
new file mode 100644
index 0000000..8c4da6e
--- /dev/null
+++ b/test/did_you_mean/spell_checking/test_require_path_check.rb
@@ -0,0 +1,30 @@ https://github.com/ruby/ruby/blob/trunk/test/did_you_mean/spell_checking/test_require_path_check.rb#L1
+require_relative '../helper'
+
+class RequirePathCheckTest < Test::Unit::TestCase
+  include DidYouMean::TestHelper
+
+  def test_load_error_from_require_has_suggestions
+    error = assert_raise LoadError do
+              require 'open_struct'
+            end
+
+    assert_correction 'ostruct', error.corrections
+    assert_match "Did you mean?  ostruct", error.to_s
+  end
+
+  def test_load_error_from_require_for_nested_files_has_suggestions
+    error = assert_raise LoadError do
+              require 'net/htt'
+            end
+
+    assert_correction 'net/http', error.corrections
+    assert_match "Did you mean?  net/http", error.to_s
+
+    error = assert_raise LoadError do
+              require 'net-http'
+            end
+
+    assert_correction ['net/http', 'net/https'], error.corrections
+    assert_match "Did you mean?  net/http", error.to_s
+  end
+end
diff --git a/test/did_you_mean/test_verbose_formatter.rb b/test/did_you_mean/test_verbose_formatter.rb
index 92ea9a1..d8f2f46 100644
--- a/test/did_you_mean/test_verbose_formatter.rb
+++ b/test/did_you_mean/test_verbose_formatter.rb
@@ -3,6 +3,7 @@ require_relative './helper' https://github.com/ruby/ruby/blob/trunk/test/did_you_mean/test_verbose_formatter.rb#L3
 class VerboseFormatterTest < Test::Unit::TestCase
   def setup
     require_relative File.join(DidYouMean::TestHelper.root, 'verbose')
+
     DidYouMean.formatter = DidYouMean::VerboseFormatter.new
   end
 
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]