diff options
-rw-r--r-- | lib/did_you_mean/spell_checkers/method_name_checker.rb | 7 | ||||
-rw-r--r-- | test/did_you_mean/spell_checking/test_method_name_check.rb | 18 |
2 files changed, 25 insertions, 0 deletions
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 d8ebaa4616..b5cbbb5da6 100644 --- a/lib/did_you_mean/spell_checkers/method_name_checker.rb +++ b/lib/did_you_mean/spell_checkers/method_name_checker.rb @@ -59,6 +59,13 @@ module DidYouMean method_names = receiver.methods + receiver.singleton_methods method_names += receiver.private_methods if @private_call method_names.uniq! + # Assume that people trying to use a writer are not interested in a reader + # and vice versa + if method_name.match?(/=\Z/) + method_names.select! { |name| name.match?(/=\Z/) } + else + method_names.reject! { |name| name.match?(/=\Z/) } + end method_names else [] 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 d2e46d58f3..4daaf7cec7 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 @@ -4,6 +4,8 @@ class MethodNameCheckTest < Test::Unit::TestCase include DidYouMean::TestHelper class User + attr_writer :writer + attr_reader :reader def friends; end def first_name; end def descendants; end @@ -144,4 +146,20 @@ class MethodNameCheckTest < Test::Unit::TestCase assert_correction [], error.corrections assert_not_match(/Did you mean\? +yield/, get_message(error)) end if RUBY_ENGINE != "jruby" + + # Do not suggest `name=` for `name` + def test_does_not_suggest_writer + error = assert_raise(NoMethodError) { @user.writer } + + assert_correction [], error.corrections + assert_not_match(/Did you mean\? writer=/, get_message(error)) + end + + # Do not suggest `name` for `name=` + def test_does_not_suggest_reader + error = assert_raise(NoMethodError) { @user.reader = 1 } + + assert_correction [], error.corrections + assert_not_match(/Did you mean\? reader/, get_message(error)) + end end |