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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad488ff1d9e183f4789342bedca9e195be934b6a
4
- data.tar.gz: 755225707c5e7ef906bba989dad41d4130c8b410
3
+ metadata.gz: 60c129eec72ca04e09a5f0514c53156b27f309e2
4
+ data.tar.gz: c0f1132a91404efafe5919a9144eda26a779d7be
5
5
  SHA512:
6
- metadata.gz: ecb0285487ed45ff04f470581b621a0d50681b62d6b4c099e04139b1082ca9ed92373bc3d2a6f1b4207172dfa62b90b112bd7df0d782ab43ffb4b0741608250a
7
- data.tar.gz: 43ef649c7a45e82492938bf3ed90dad0c02337eb40f1873986cdd8bca8dc0c4b170495f277eed7b6b018f82f36f1ca954b46ecd8e5fc7cb6f16845665f7251c8
6
+ metadata.gz: 34f6395d7a241ab9bc18aac2292ea59a4677bfffc44d6ed57db26b0c72cb91f5abfe9945a8bc86c89de29144e6d571218fa249c0de51a5a264069a2fd63b622f
7
+ data.tar.gz: 8732e1821ba7d7834b90e58f77d094ba3caf36093a21f9aba37bf64e4c0c14fabab01eff7be5c1325a59bf3b29a79a3aa252556789763975bb4e4602b00ae52b
@@ -1,7 +1,6 @@
1
1
  module DidYouMean
2
2
  module Correctable
3
3
  prepend_features NameError
4
- attr_reader :frame_binding
5
4
 
6
5
  def original_message
7
6
  method(:to_s).super_method.call
@@ -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
- def receiver_name
34
- return unless @receiver.nil?
22
+ module IvarNameCorrectable
23
+ REPLS = {
24
+ "(irb)" => -> { Readline::HISTORY.to_a.last }
25
+ }
35
26
 
36
- abs_path = @location.absolute_path
37
- lineno = @location.lineno
27
+ def initialize(exception)
28
+ super
38
29
 
39
- /@(\w+)*\.#{@method_name}/ =~ line(abs_path, lineno).to_s && $1
40
- end
30
+ @location = exception.backtrace_locations.first
31
+ @ivar_names = exception.instance_variable_get(:@frame_binding).receiver.instance_variables
32
+ end
41
33
 
42
- private
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
- def line(abs_path, lineno)
45
- if REPLS[abs_path]
46
- REPLS[abs_path].call
47
- elsif File.exist?(abs_path)
48
- File.open(abs_path) do |file|
49
- file.detect { file.lineno == lineno }
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.frame_binding.local_variables
11
- receiver = exception.frame_binding.receiver
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
@@ -1,3 +1,3 @@
1
1
  module DidYouMean
2
- VERSION = "1.0.0.beta3"
2
+ VERSION = "1.0.0.rc1"
3
3
  end
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
- @@trace = TracePoint.new(:raise) do |tp|
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.beta3
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-09 00:00:00.000000000 Z
11
+ date: 2015-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler