did_you_mean 1.0.0.beta3 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/did_you_mean/core_ext/name_error.rb +0 -1
- data/lib/did_you_mean/spell_checkers/method_name_checker.rb +32 -26
- data/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb +4 -3
- data/lib/did_you_mean/version.rb +1 -1
- data/lib/did_you_mean.rb +1 -2
- data/test/correctable/method_name_test.rb +9 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60c129eec72ca04e09a5f0514c53156b27f309e2
|
4
|
+
data.tar.gz: c0f1132a91404efafe5919a9144eda26a779d7be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34f6395d7a241ab9bc18aac2292ea59a4677bfffc44d6ed57db26b0c72cb91f5abfe9945a8bc86c89de29144e6d571218fa249c0de51a5a264069a2fd63b622f
|
7
|
+
data.tar.gz: 8732e1821ba7d7834b90e58f77d094ba3caf36093a21f9aba37bf64e4c0c14fabab01eff7be5c1325a59bf3b29a79a3aa252556789763975bb4e4602b00ae52b
|
@@ -3,50 +3,56 @@ module DidYouMean
|
|
3
3
|
include SpellCheckable
|
4
4
|
attr_reader :method_name, :receiver
|
5
5
|
|
6
|
-
REPLS = {
|
7
|
-
"(irb)" => -> { Readline::HISTORY.to_a.last }
|
8
|
-
}
|
9
|
-
|
10
6
|
def initialize(exception)
|
11
7
|
@method_name = exception.name
|
12
8
|
@receiver = exception.receiver
|
13
|
-
@binding = exception.frame_binding
|
14
|
-
@location = exception.backtrace_locations.first
|
15
|
-
@ivar_names = @binding.receiver.instance_variables
|
16
9
|
end
|
17
10
|
|
18
11
|
def candidates
|
19
|
-
{
|
20
|
-
method_name => method_names,
|
21
|
-
receiver_name.to_s => @ivar_names
|
22
|
-
}
|
12
|
+
{ method_name => method_names }
|
23
13
|
end
|
24
14
|
|
25
15
|
def method_names
|
26
|
-
method_names = receiver.methods + receiver.singleton_methods
|
27
|
-
method_names += receiver.private_methods if receiver.equal?(@binding.receiver)
|
16
|
+
method_names = receiver.methods + receiver.singleton_methods + receiver.private_methods
|
28
17
|
method_names.delete(method_name)
|
29
18
|
method_names.uniq!
|
30
19
|
method_names
|
31
20
|
end
|
32
21
|
|
33
|
-
|
34
|
-
|
22
|
+
module IvarNameCorrectable
|
23
|
+
REPLS = {
|
24
|
+
"(irb)" => -> { Readline::HISTORY.to_a.last }
|
25
|
+
}
|
35
26
|
|
36
|
-
|
37
|
-
|
27
|
+
def initialize(exception)
|
28
|
+
super
|
38
29
|
|
39
|
-
|
40
|
-
|
30
|
+
@location = exception.backtrace_locations.first
|
31
|
+
@ivar_names = exception.instance_variable_get(:@frame_binding).receiver.instance_variables
|
32
|
+
end
|
41
33
|
|
42
|
-
|
34
|
+
def candidates
|
35
|
+
super.merge(receiver_name.to_s => @ivar_names)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def receiver_name
|
41
|
+
return unless receiver.nil?
|
42
|
+
|
43
|
+
abs_path = @location.absolute_path
|
44
|
+
lineno = @location.lineno
|
45
|
+
|
46
|
+
/@(\w+)*\.#{method_name}/ =~ line(abs_path, lineno).to_s && $1
|
47
|
+
end
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
def line(abs_path, lineno)
|
50
|
+
if REPLS[abs_path]
|
51
|
+
REPLS[abs_path].call
|
52
|
+
elsif File.exist?(abs_path)
|
53
|
+
File.open(abs_path) do |file|
|
54
|
+
file.detect { file.lineno == lineno }
|
55
|
+
end
|
50
56
|
end
|
51
57
|
end
|
52
58
|
end
|
@@ -7,12 +7,13 @@ module DidYouMean
|
|
7
7
|
|
8
8
|
def initialize(exception)
|
9
9
|
@name = exception.name.to_s.tr("@", "")
|
10
|
-
@lvar_names = exception.
|
11
|
-
receiver = exception.
|
10
|
+
@lvar_names = exception.local_variables
|
11
|
+
receiver = exception.receiver
|
12
12
|
|
13
13
|
@method_names = receiver.methods + receiver.private_methods
|
14
|
-
@cvar_names = receiver.class.class_variables
|
15
14
|
@ivar_names = receiver.instance_variables
|
15
|
+
@cvar_names = receiver.class.class_variables
|
16
|
+
@cvar_names += receiver.class_variables if receiver.kind_of?(Module)
|
16
17
|
end
|
17
18
|
|
18
19
|
def candidates
|
data/lib/did_you_mean/version.rb
CHANGED
data/lib/did_you_mean.rb
CHANGED
@@ -9,14 +9,13 @@ require 'did_you_mean/spell_checkers/null_checker'
|
|
9
9
|
require "did_you_mean/formatter"
|
10
10
|
|
11
11
|
module DidYouMean
|
12
|
-
|
12
|
+
TRACE = TracePoint.new(:raise) do |tp|
|
13
13
|
e = tp.raised_exception
|
14
14
|
|
15
15
|
if SPELL_CHECKERS.include?(e.class.to_s) && !e.instance_variable_defined?(:@frame_binding)
|
16
16
|
e.instance_variable_set(:@frame_binding, tp.binding)
|
17
17
|
end
|
18
18
|
end
|
19
|
-
@@trace.enable
|
20
19
|
|
21
20
|
IGNORED_CALLERS = []
|
22
21
|
|
@@ -72,7 +72,13 @@ class MethodNameTest < Minitest::Test
|
|
72
72
|
assert_match "Did you mean? raise", error.to_s
|
73
73
|
end
|
74
74
|
|
75
|
+
D = DidYouMean
|
76
|
+
M = D::MethodNameChecker
|
77
|
+
|
75
78
|
def test_corrects_incorrect_ivar_name
|
79
|
+
D::TRACE.enable
|
80
|
+
D::SPELL_CHECKERS['NoMethodError'] = M.dup.prepend(M::IvarNameCorrectable)
|
81
|
+
|
76
82
|
@number = 1
|
77
83
|
@nubmer = nil
|
78
84
|
error = assert_raises(NoMethodError) { @nubmer.zero? }
|
@@ -80,5 +86,8 @@ class MethodNameTest < Minitest::Test
|
|
80
86
|
|
81
87
|
assert_correction :@number, error.corrections
|
82
88
|
assert_match "Did you mean? @number", error.to_s
|
89
|
+
ensure
|
90
|
+
D::TRACE.disable
|
91
|
+
D::SPELL_CHECKERS['NoMethodError'] = M
|
83
92
|
end
|
84
93
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: did_you_mean
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuki Nishijima
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|