mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Sync did_you_mean
This commit is contained in:
parent
7cc55f4bc4
commit
946dadd3f4
6 changed files with 80 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
33
lib/did_you_mean/spell_checkers/require_path_checker.rb
Normal file
33
lib/did_you_mean/spell_checkers/require_path_checker.rb
Normal file
|
@ -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
|
|
@ -137,4 +137,11 @@ class MethodNameCheckTest < Test::Unit::TestCase
|
|||
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
|
||||
|
|
30
test/did_you_mean/spell_checking/test_require_path_check.rb
Normal file
30
test/did_you_mean/spell_checking/test_require_path_check.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
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
|
|
@ -3,6 +3,7 @@ require_relative './helper'
|
|||
class VerboseFormatterTest < Test::Unit::TestCase
|
||||
def setup
|
||||
require_relative File.join(DidYouMean::TestHelper.root, 'verbose')
|
||||
|
||||
DidYouMean.formatter = DidYouMean::VerboseFormatter.new
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue