did_you_mean 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +48 -0
  3. data/CHANGELOG.md +75 -75
  4. data/Gemfile +2 -1
  5. data/README.md +2 -32
  6. data/Rakefile +4 -5
  7. data/appveyor.yml +25 -0
  8. data/did_you_mean.gemspec +6 -4
  9. data/documentation/CHANGELOG.md.erb +8 -0
  10. data/documentation/changelog_generator.rb +34 -0
  11. data/documentation/human_typo_api.md +20 -0
  12. data/documentation/tree_spell_algorithm.md +82 -0
  13. data/documentation/tree_spell_checker_api.md +24 -0
  14. data/lib/did_you_mean.rb +17 -16
  15. data/lib/did_you_mean/experimental.rb +2 -2
  16. data/lib/did_you_mean/experimental/initializer_name_correction.rb +1 -1
  17. data/lib/did_you_mean/experimental/ivar_name_correction.rb +3 -1
  18. data/lib/did_you_mean/levenshtein.rb +1 -1
  19. data/lib/did_you_mean/spell_checker.rb +7 -7
  20. data/lib/did_you_mean/spell_checkers/key_error_checker.rb +8 -2
  21. data/lib/did_you_mean/spell_checkers/method_name_checker.rb +14 -6
  22. data/lib/did_you_mean/spell_checkers/name_error_checkers.rb +2 -2
  23. data/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb +5 -5
  24. data/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb +1 -1
  25. data/lib/did_you_mean/tree_spell_checker.rb +137 -0
  26. data/lib/did_you_mean/verbose.rb +2 -2
  27. data/lib/did_you_mean/version.rb +1 -1
  28. data/test/core_ext/test_name_error_extension.rb +48 -0
  29. data/test/edit_distance/{jaro_winkler_test.rb → test_jaro_winkler.rb} +2 -2
  30. data/test/fixtures/mini_dir.yml +15 -0
  31. data/test/fixtures/rspec_dir.yml +112 -0
  32. data/test/helper.rb +29 -0
  33. data/test/spell_checking/{class_name_check_test.rb → test_class_name_check.rb} +12 -10
  34. data/test/spell_checking/{key_name_check_test.rb → test_key_name_check.rb} +18 -8
  35. data/test/spell_checking/{method_name_check_test.rb → test_method_name_check.rb} +17 -15
  36. data/test/spell_checking/{uncorrectable_name_check_test.rb → test_uncorrectable_name_check.rb} +3 -3
  37. data/test/spell_checking/{variable_name_check_test.rb → test_variable_name_check.rb} +18 -16
  38. data/test/{spell_checker_test.rb → test_spell_checker.rb} +2 -2
  39. data/test/test_tree_spell_checker.rb +173 -0
  40. data/test/test_verbose_formatter.rb +21 -0
  41. data/test/tree_spell/change_word.rb +61 -0
  42. data/test/tree_spell/human_typo.rb +89 -0
  43. data/test/tree_spell/test_change_word.rb +38 -0
  44. data/test/tree_spell/test_explore.rb +128 -0
  45. data/test/tree_spell/test_human_typo.rb +24 -0
  46. metadata +47 -58
  47. data/.travis.yml +0 -23
  48. data/test/core_ext/name_error_extension_test.rb +0 -51
  49. data/test/experimental/initializer_name_correction_test.rb +0 -15
  50. data/test/experimental/method_name_checker_test.rb +0 -13
  51. data/test/test_helper.rb +0 -13
  52. data/test/verbose_formatter_test.rb +0 -22
@@ -1,23 +0,0 @@
1
- language: ruby
2
- script: bundle exec rake
3
- cache: bundler
4
- sudo: false
5
-
6
- before_install:
7
- - gem install bundler
8
-
9
- after_success:
10
- - bundle exec rake test:accuracy
11
- - bundle exec rake benchmark:memory
12
-
13
- rvm:
14
- - 2.5.3
15
- - 2.6.0
16
- - ruby-head
17
- - jruby-9.2.5.0
18
- - jruby-head
19
-
20
- matrix:
21
- allow_failures:
22
- - rvm: jruby-9.2.5.0
23
- - rvm: jruby-head
@@ -1,51 +0,0 @@
1
- require 'test_helper'
2
-
3
- class NameErrorExtensionTest < Minitest::Test
4
- SPELL_CHECKERS = DidYouMean::SPELL_CHECKERS
5
-
6
- class TestSpellChecker
7
- def initialize(*); end
8
- def corrections; ["does_exist"]; end
9
- end
10
-
11
- def setup
12
- @org, SPELL_CHECKERS['NameError'] = SPELL_CHECKERS['NameError'], TestSpellChecker
13
-
14
- @error = assert_raises(NameError){ doesnt_exist }
15
- end
16
-
17
- def teardown
18
- SPELL_CHECKERS['NameError'] = @org
19
- end
20
-
21
- def test_message
22
- message = <<~MESSAGE.chomp
23
- undefined local variable or method `doesnt_exist' for #{to_s}
24
- Did you mean? does_exist
25
- MESSAGE
26
-
27
- assert_equal message, @error.to_s
28
- assert_equal message, @error.message
29
- end
30
-
31
- def test_to_s_does_not_make_disruptive_changes_to_error_message
32
- error = assert_raises(NameError) do
33
- raise NameError, "uninitialized constant Object"
34
- end
35
-
36
- error.to_s
37
- assert_equal 1, error.to_s.scan("Did you mean?").count
38
- end
39
-
40
- def test_correctable_error_objects_are_dumpable
41
- error = begin
42
- File.open('did_you_mean.gemspec').sizee
43
- rescue NoMethodError => e
44
- e
45
- end
46
-
47
- error.to_s
48
-
49
- assert_equal "undefined method `sizee' for #<File:did_you_mean.gemspec>", Marshal.load(Marshal.dump(error)).original_message
50
- end
51
- end
@@ -1,15 +0,0 @@
1
- require 'test_helper'
2
-
3
- class InitializerNameCorrectionTest < Minitest::Test
4
- def test_corrects_wrong_initializer_name
5
- assert_output nil, "warning: intialize might be misspelled, perhaps you meant initialize?\n" do
6
- Class.new { def intialize; end }
7
- end
8
- end
9
-
10
- def test_does_not_correct_correct_initializer_name
11
- assert_output nil, "" do
12
- Class.new { def initialize; end }
13
- end
14
- end
15
- end
@@ -1,13 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ExperimentalMethodNameCorrectionTest < Minitest::Test
4
- def test_corrects_incorrect_ivar_name
5
- @number = 1
6
- @nubmer = nil
7
- error = assert_raises(NoMethodError) { @nubmer.zero? }
8
- remove_instance_variable :@nubmer
9
-
10
- assert_correction :@number, error.corrections
11
- assert_match "Did you mean? @number", error.to_s
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'minitest/pride'
3
- require 'did_you_mean'
4
-
5
- puts "DidYouMean version: #{DidYouMean::VERSION}"
6
-
7
- module DidYouMean::TestHelper
8
- def assert_correction(expected, array)
9
- assert_equal Array(expected), array, "Expected #{array.inspect} to only include #{expected.inspect}"
10
- end
11
- end
12
-
13
- MiniTest::Test.include(DidYouMean::TestHelper)
@@ -1,22 +0,0 @@
1
- require 'test_helper'
2
-
3
- class VerboseFormatterTest < Minitest::Test
4
- def setup
5
- require 'did_you_mean/verbose'
6
-
7
- @error = assert_raises(NameError){ 1.zeor? }
8
- end
9
-
10
- def teardown
11
- DidYouMean.formatter = DidYouMean::PlainFormatter.new
12
- end
13
-
14
- def test_message
15
- assert_equal <<~MESSAGE.chomp, @error.message
16
- undefined method `zeor?' for 1:Integer
17
-
18
- Did you mean? zero?
19
-
20
- MESSAGE
21
- end
22
- end