reek 2.0.0 → 2.0.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG +5 -0
- data/README.md +13 -2
- data/Rakefile +2 -1
- data/features/command_line_interface/options.feature +2 -3
- data/features/command_line_interface/smell_selection.feature +0 -1
- data/features/command_line_interface/smells_count.feature +0 -2
- data/features/command_line_interface/stdin.feature +3 -10
- data/features/configuration_files/masking_smells.feature +1 -5
- data/features/configuration_files/overrides_defaults.feature +0 -1
- data/features/rake_task/rake_task.feature +1 -4
- data/features/reports/json.feature +73 -0
- data/features/reports/reports.feature +0 -3
- data/features/reports/yaml.feature +0 -1
- data/features/ruby_api/api.feature +0 -1
- data/features/samples.feature +0 -4
- data/features/step_definitions/reek_steps.rb +14 -4
- data/features/support/env.rb +3 -0
- data/lib/reek/cli/option_interpreter.rb +2 -0
- data/lib/reek/cli/options.rb +3 -3
- data/lib/reek/cli/report/formatter.rb +1 -1
- data/lib/reek/cli/report/location_formatter.rb +11 -0
- data/lib/reek/cli/report/report.rb +11 -2
- data/lib/reek/core/code_context.rb +49 -10
- data/lib/reek/core/sniffer.rb +2 -2
- data/lib/reek/core/{code_parser.rb → tree_walker.rb} +16 -7
- data/lib/reek/examiner.rb +0 -39
- data/lib/reek/smells.rb +3 -25
- data/lib/reek/smells/feature_envy.rb +0 -2
- data/lib/reek/smells/smell_detector.rb +0 -6
- data/lib/reek/source/sexp_extensions.rb +17 -6
- data/lib/reek/source/sexp_node.rb +1 -1
- data/lib/reek/spec.rb +66 -0
- data/lib/reek/spec/should_reek.rb +0 -6
- data/lib/reek/spec/should_reek_of.rb +0 -49
- data/lib/reek/spec/should_reek_only_of.rb +0 -11
- data/lib/reek/version.rb +6 -1
- data/reek.gemspec +3 -2
- data/spec/reek/cli/json_report_spec.rb +20 -0
- data/spec/reek/core/code_context_spec.rb +6 -0
- data/spec/reek/core/smell_configuration_spec.rb +3 -3
- data/spec/reek/core/{code_parser_spec.rb → tree_walker_spec.rb} +4 -4
- data/spec/reek/examiner_spec.rb +0 -19
- data/spec/reek/smells/attribute_spec.rb +6 -9
- data/spec/reek/smells/boolean_parameter_spec.rb +13 -15
- data/spec/reek/smells/class_variable_spec.rb +17 -17
- data/spec/reek/smells/control_parameter_spec.rb +44 -46
- data/spec/reek/smells/data_clump_spec.rb +73 -70
- data/spec/reek/smells/duplicate_method_call_spec.rb +39 -37
- data/spec/reek/smells/feature_envy_spec.rb +53 -57
- data/spec/reek/smells/irresponsible_module_spec.rb +12 -11
- data/spec/reek/smells/long_parameter_list_spec.rb +33 -26
- data/spec/reek/smells/long_yield_list_spec.rb +15 -19
- data/spec/reek/smells/module_initialize_spec.rb +4 -6
- data/spec/reek/smells/nested_iterators_spec.rb +28 -28
- data/spec/reek/smells/nil_check_spec.rb +18 -20
- data/spec/reek/smells/prima_donna_method_spec.rb +6 -9
- data/spec/reek/smells/repeated_conditional_spec.rb +41 -43
- data/spec/reek/smells/too_many_instance_variables_spec.rb +6 -11
- data/spec/reek/smells/too_many_methods_spec.rb +44 -61
- data/spec/reek/smells/too_many_statements_spec.rb +14 -41
- data/spec/reek/smells/uncommunicative_method_name_spec.rb +6 -11
- data/spec/reek/smells/uncommunicative_module_name_spec.rb +10 -14
- data/spec/reek/smells/uncommunicative_parameter_name_spec.rb +15 -16
- data/spec/reek/smells/uncommunicative_variable_name_spec.rb +33 -36
- data/spec/reek/smells/unused_parameters_spec.rb +16 -19
- data/spec/reek/smells/utility_function_spec.rb +7 -10
- metadata +22 -6
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'reek/core/code_context'
|
2
3
|
require 'reek/smells/irresponsible_module'
|
3
4
|
require 'reek/smells/smell_detector_shared'
|
4
|
-
include Reek::Smells
|
5
5
|
|
6
|
-
describe IrresponsibleModule do
|
6
|
+
describe Reek::Smells::IrresponsibleModule do
|
7
7
|
before(:each) do
|
8
8
|
@bad_module_name = 'WrongUn'
|
9
|
-
@
|
9
|
+
@source_name = 'dummy_source'
|
10
|
+
@detector = build(:smell_detector, smell_type: :IrresponsibleModule, source: @source_name)
|
10
11
|
end
|
11
12
|
|
12
13
|
it_should_behave_like 'SmellDetector'
|
@@ -26,17 +27,17 @@ describe IrresponsibleModule do
|
|
26
27
|
# test class
|
27
28
|
class Responsible; end
|
28
29
|
EOS
|
29
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
30
|
+
ctx = Reek::Core::CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
30
31
|
expect(@detector.examine_context(ctx)).to be_empty
|
31
32
|
end
|
32
33
|
|
33
34
|
it 'reports a class without a comment' do
|
34
35
|
src = "class #{@bad_module_name}; end"
|
35
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
36
|
+
ctx = Reek::Core::CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
36
37
|
smells = @detector.examine_context(ctx)
|
37
38
|
expect(smells.length).to eq(1)
|
38
|
-
expect(smells[0].smell_category).to eq(IrresponsibleModule.smell_category)
|
39
|
-
expect(smells[0].smell_type).to eq(IrresponsibleModule.smell_type)
|
39
|
+
expect(smells[0].smell_category).to eq(Reek::Smells::IrresponsibleModule.smell_category)
|
40
|
+
expect(smells[0].smell_type).to eq(Reek::Smells::IrresponsibleModule.smell_type)
|
40
41
|
expect(smells[0].lines).to eq([1])
|
41
42
|
expect(smells[0].parameters[:name]).to eq(@bad_module_name)
|
42
43
|
end
|
@@ -48,7 +49,7 @@ describe IrresponsibleModule do
|
|
48
49
|
#
|
49
50
|
class #{@bad_module_name}; end
|
50
51
|
EOS
|
51
|
-
expect(src).to reek_of IrresponsibleModule
|
52
|
+
expect(src).to reek_of :IrresponsibleModule
|
52
53
|
end
|
53
54
|
|
54
55
|
it 'reports a class with a preceding comment with intermittent material' do
|
@@ -64,11 +65,11 @@ describe IrresponsibleModule do
|
|
64
65
|
|
65
66
|
it 'reports a fq module name correctly' do
|
66
67
|
src = 'class Foo::Bar; end'
|
67
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
68
|
+
ctx = Reek::Core::CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
68
69
|
smells = @detector.examine_context(ctx)
|
69
70
|
expect(smells.length).to eq(1)
|
70
|
-
expect(smells[0].smell_category).to eq(
|
71
|
-
expect(smells[0].smell_type).to eq(
|
71
|
+
expect(smells[0].smell_category).to eq(described_class.smell_category)
|
72
|
+
expect(smells[0].smell_type).to eq(described_class.smell_type)
|
72
73
|
expect(smells[0].parameters[:name]).to eq('Foo::Bar')
|
73
74
|
expect(smells[0].context).to match(/#{smells[0].parameters['name']}/)
|
74
75
|
end
|
@@ -1,45 +1,49 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'reek/core/code_context'
|
2
3
|
require 'reek/smells/long_parameter_list'
|
3
4
|
require 'reek/smells/smell_detector_shared'
|
4
5
|
|
5
|
-
|
6
|
-
include Reek::Smells
|
7
|
-
|
8
|
-
describe LongParameterList do
|
6
|
+
describe Reek::Smells::LongParameterList do
|
9
7
|
context 'for methods with few parameters' do
|
10
8
|
it 'should report nothing for no parameters' do
|
11
|
-
expect('def simple; f(3);true; end').not_to reek_of(LongParameterList)
|
9
|
+
expect('def simple; f(3);true; end').not_to reek_of(:LongParameterList)
|
12
10
|
end
|
11
|
+
|
13
12
|
it 'should report nothing for 1 parameter' do
|
14
|
-
expect('def simple(yep) f(3);true end').not_to reek_of(LongParameterList)
|
13
|
+
expect('def simple(yep) f(3);true end').not_to reek_of(:LongParameterList)
|
15
14
|
end
|
15
|
+
|
16
16
|
it 'should report nothing for 2 parameters' do
|
17
|
-
expect('def simple(yep,zero) f(3);true end').not_to reek_of(LongParameterList)
|
17
|
+
expect('def simple(yep,zero) f(3);true end').not_to reek_of(:LongParameterList)
|
18
18
|
end
|
19
|
+
|
19
20
|
it 'should not count an optional block' do
|
20
21
|
src = 'def simple(alpha, yep, zero, &opt) f(3); true end'
|
21
|
-
expect(src).not_to reek_of(LongParameterList)
|
22
|
+
expect(src).not_to reek_of(:LongParameterList)
|
22
23
|
end
|
24
|
+
|
23
25
|
it 'should not report inner block with too many parameters' do
|
24
26
|
src = '
|
25
27
|
def simple(yep,zero)
|
26
28
|
m[3]; rand(34); f.each { |arga, argb, argc, argd| true}
|
27
29
|
end
|
28
30
|
'
|
29
|
-
expect(src).not_to reek_of(LongParameterList)
|
31
|
+
expect(src).not_to reek_of(:LongParameterList)
|
30
32
|
end
|
31
33
|
|
32
34
|
describe 'and default values' do
|
33
35
|
it 'should report nothing for 1 parameter' do
|
34
|
-
expect('def simple(zero=nil) f(3);false end').not_to reek_of(LongParameterList)
|
36
|
+
expect('def simple(zero=nil) f(3);false end').not_to reek_of(:LongParameterList)
|
35
37
|
end
|
38
|
+
|
36
39
|
it 'should report nothing for 2 parameters with 1 default' do
|
37
40
|
source = 'def simple(yep, zero=nil) f(3); false end'
|
38
|
-
expect(source).not_to reek_of(LongParameterList)
|
41
|
+
expect(source).not_to reek_of(:LongParameterList)
|
39
42
|
end
|
43
|
+
|
40
44
|
it 'should report nothing for 2 defaulted parameters' do
|
41
45
|
source = 'def simple(yep=4, zero=nil) f(3); false end'
|
42
|
-
expect(source).not_to reek_of(LongParameterList)
|
46
|
+
expect(source).not_to reek_of(:LongParameterList)
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
@@ -47,43 +51,45 @@ describe LongParameterList do
|
|
47
51
|
describe 'for methods with too many parameters' do
|
48
52
|
it 'should report 4 parameters' do
|
49
53
|
src = 'def simple(arga, argb, argc, argd) f(3);true end'
|
50
|
-
expect(src).to reek_of(LongParameterList, count: 4)
|
54
|
+
expect(src).to reek_of(:LongParameterList, count: 4)
|
51
55
|
end
|
56
|
+
|
52
57
|
it 'should report 8 parameters' do
|
53
58
|
src = 'def simple(arga, argb, argc, argd,arge, argf, argg, argh) f(3);true end'
|
54
|
-
expect(src).to reek_of(LongParameterList, count: 8)
|
59
|
+
expect(src).to reek_of(:LongParameterList, count: 8)
|
55
60
|
end
|
56
61
|
|
57
62
|
describe 'and default values' do
|
58
63
|
it 'should report 3 with 1 defaulted' do
|
59
64
|
src = 'def simple(polly, queue, yep, zero=nil) f(3);false end'
|
60
|
-
expect(src).to reek_of(LongParameterList, count: 4)
|
65
|
+
expect(src).to reek_of(:LongParameterList, count: 4)
|
61
66
|
end
|
67
|
+
|
62
68
|
it 'should report with 3 defaulted' do
|
63
69
|
src = 'def simple(aarg, polly=2, yep=:truth, zero=nil) f(3);false end'
|
64
|
-
expect(src).to reek_of(LongParameterList, count: 4)
|
70
|
+
expect(src).to reek_of(:LongParameterList, count: 4)
|
65
71
|
end
|
66
72
|
end
|
67
73
|
end
|
68
74
|
end
|
69
75
|
|
70
|
-
describe LongParameterList do
|
76
|
+
describe Reek::Smells::LongParameterList do
|
71
77
|
before(:each) do
|
72
|
-
@source_name = '
|
73
|
-
@detector = LongParameterList
|
78
|
+
@source_name = 'dummy_source'
|
79
|
+
@detector = build(:smell_detector, smell_type: :LongParameterList, source: @source_name)
|
74
80
|
end
|
75
81
|
|
76
82
|
it_should_behave_like 'SmellDetector'
|
77
83
|
|
78
84
|
context 'when a smell is reported' do
|
79
85
|
before :each do
|
80
|
-
src =
|
81
|
-
def badguy(arga, argb, argc, argd)
|
82
|
-
|
83
|
-
|
84
|
-
end
|
85
|
-
EOS
|
86
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
86
|
+
src = <<-EOS
|
87
|
+
def badguy(arga, argb, argc, argd)
|
88
|
+
f(3)
|
89
|
+
true
|
90
|
+
end
|
91
|
+
EOS
|
92
|
+
ctx = Reek::Core::CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
87
93
|
@smells = @detector.examine_context(ctx)
|
88
94
|
@warning = @smells[0]
|
89
95
|
end
|
@@ -93,6 +99,7 @@ EOS
|
|
93
99
|
it 'reports the number of parameters' do
|
94
100
|
expect(@warning.parameters[:count]).to eq(4)
|
95
101
|
end
|
102
|
+
|
96
103
|
it 'reports the line number of the method' do
|
97
104
|
expect(@warning.lines).to eq([1])
|
98
105
|
end
|
@@ -1,16 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'reek/core/code_context'
|
2
3
|
require 'reek/smells/long_yield_list'
|
3
4
|
require 'reek/smells/smell_detector_shared'
|
4
5
|
|
5
|
-
|
6
|
-
include Reek::Smells
|
7
|
-
|
8
|
-
describe LongYieldList do
|
6
|
+
describe Reek::Smells::LongYieldList do
|
9
7
|
before(:each) do
|
10
|
-
@source_name = '
|
11
|
-
@detector = LongYieldList
|
12
|
-
# SMELL: can't use the default config, because that contains an override,
|
13
|
-
# which causes the mocked matches?() method to be called twice!!
|
8
|
+
@source_name = 'dummy_source'
|
9
|
+
@detector = build(:smell_detector, smell_type: :LongYieldList, source: @source_name)
|
14
10
|
end
|
15
11
|
|
16
12
|
it_should_behave_like 'SmellDetector'
|
@@ -18,31 +14,31 @@ describe LongYieldList do
|
|
18
14
|
context 'yield' do
|
19
15
|
it 'should not report yield with no parameters' do
|
20
16
|
src = 'def simple(arga, argb, &blk) f(3);yield; end'
|
21
|
-
expect(src).not_to reek_of(LongYieldList)
|
17
|
+
expect(src).not_to reek_of(:LongYieldList)
|
22
18
|
end
|
23
19
|
it 'should not report yield with few parameters' do
|
24
20
|
src = 'def simple(arga, argb, &blk) f(3);yield a,b; end'
|
25
|
-
expect(src).not_to reek_of(LongYieldList)
|
21
|
+
expect(src).not_to reek_of(:LongYieldList)
|
26
22
|
end
|
27
23
|
it 'should report yield with many parameters' do
|
28
24
|
src = 'def simple(arga, argb, &blk) f(3);yield arga,argb,arga,argb; end'
|
29
|
-
expect(src).to reek_of(LongYieldList, count: 4)
|
25
|
+
expect(src).to reek_of(:LongYieldList, count: 4)
|
30
26
|
end
|
31
27
|
it 'should not report yield of a long expression' do
|
32
28
|
src = 'def simple(arga, argb, &blk) f(3);yield(if @dec then argb else 5+3 end); end'
|
33
|
-
expect(src).not_to reek_of(LongYieldList)
|
29
|
+
expect(src).not_to reek_of(:LongYieldList)
|
34
30
|
end
|
35
31
|
end
|
36
32
|
|
37
33
|
context 'when a smells is reported' do
|
38
34
|
before :each do
|
39
|
-
src =
|
40
|
-
def simple(arga, argb, &blk)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
EOS
|
45
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
35
|
+
src = <<-EOS
|
36
|
+
def simple(arga, argb, &blk)
|
37
|
+
f(3)
|
38
|
+
yield(arga,argb,arga,argb)
|
39
|
+
end
|
40
|
+
EOS
|
41
|
+
ctx = Reek::Core::CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
46
42
|
@smells = @detector.examine_context(ctx)
|
47
43
|
@warning = @smells[0]
|
48
44
|
end
|
@@ -2,9 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'reek/smells/module_initialize'
|
3
3
|
require 'reek/smells/smell_detector_shared'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
describe ModuleInitialize do
|
5
|
+
describe Reek::Smells::ModuleInitialize do
|
8
6
|
context 'module' do
|
9
7
|
context 'with method named initialize' do
|
10
8
|
it 'smells' do
|
@@ -13,7 +11,7 @@ describe ModuleInitialize do
|
|
13
11
|
def initialize; end
|
14
12
|
end
|
15
13
|
EOF
|
16
|
-
expect(src).to reek_of(ModuleInitialize)
|
14
|
+
expect(src).to reek_of(:ModuleInitialize)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
@@ -26,7 +24,7 @@ describe ModuleInitialize do
|
|
26
24
|
end
|
27
25
|
end
|
28
26
|
EOF
|
29
|
-
expect(src).not_to reek_of(ModuleInitialize)
|
27
|
+
expect(src).not_to reek_of(:ModuleInitialize)
|
30
28
|
end
|
31
29
|
end
|
32
30
|
|
@@ -39,7 +37,7 @@ describe ModuleInitialize do
|
|
39
37
|
end
|
40
38
|
end
|
41
39
|
EOF
|
42
|
-
expect(src).not_to reek_of(ModuleInitialize)
|
40
|
+
expect(src).not_to reek_of(:ModuleInitialize)
|
43
41
|
end
|
44
42
|
end
|
45
43
|
end
|
@@ -2,26 +2,24 @@ require 'spec_helper'
|
|
2
2
|
require 'reek/smells/nested_iterators'
|
3
3
|
require 'reek/smells/smell_detector_shared'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
describe NestedIterators do
|
5
|
+
describe Reek::Smells::NestedIterators do
|
8
6
|
context 'with no iterators' do
|
9
7
|
it 'reports no smells' do
|
10
8
|
src = 'def fred() nothing = true; end'
|
11
|
-
expect(src).not_to reek_of(NestedIterators)
|
9
|
+
expect(src).not_to reek_of(:NestedIterators)
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
15
13
|
context 'with one iterator' do
|
16
14
|
it 'reports no smells' do
|
17
15
|
src = 'def fred() nothing.each {|item| item}; end'
|
18
|
-
expect(src).not_to reek_of(NestedIterators)
|
16
|
+
expect(src).not_to reek_of(:NestedIterators)
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
20
|
it 'should report nested iterators in a method' do
|
23
21
|
src = 'def bad(fred) @fred.each {|item| item.each {|ting| ting.ting} } end'
|
24
|
-
expect(src).to reek_of(NestedIterators)
|
22
|
+
expect(src).to reek_of(:NestedIterators)
|
25
23
|
end
|
26
24
|
|
27
25
|
it 'should not report method with successive iterators' do
|
@@ -31,7 +29,7 @@ describe NestedIterators do
|
|
31
29
|
@jim.each {|ting| ting.each }
|
32
30
|
end
|
33
31
|
EOS
|
34
|
-
expect(src).not_to reek_of(NestedIterators)
|
32
|
+
expect(src).not_to reek_of(:NestedIterators)
|
35
33
|
end
|
36
34
|
|
37
35
|
it 'should not report method with chained iterators' do
|
@@ -40,7 +38,7 @@ describe NestedIterators do
|
|
40
38
|
@sig.keys.sort_by { |xray| xray.to_s }.each { |min| md5 << min.to_s }
|
41
39
|
end
|
42
40
|
EOS
|
43
|
-
expect(src).not_to reek_of(NestedIterators)
|
41
|
+
expect(src).not_to reek_of(:NestedIterators)
|
44
42
|
end
|
45
43
|
|
46
44
|
it 'detects an iterator with an empty block' do
|
@@ -49,7 +47,7 @@ describe NestedIterators do
|
|
49
47
|
bar { baz { } }
|
50
48
|
end
|
51
49
|
EOS
|
52
|
-
expect(src).to reek_of(NestedIterators)
|
50
|
+
expect(src).to reek_of(:NestedIterators)
|
53
51
|
end
|
54
52
|
|
55
53
|
it 'should report nested iterators only once per method' do
|
@@ -59,7 +57,7 @@ describe NestedIterators do
|
|
59
57
|
@jim.each {|ting| ting.each {|piece| @hal.send} }
|
60
58
|
end
|
61
59
|
EOS
|
62
|
-
expect(src).to reek_of(NestedIterators)
|
60
|
+
expect(src).to reek_of(:NestedIterators)
|
63
61
|
end
|
64
62
|
|
65
63
|
it 'reports nested iterators only once per method even if levels are different' do
|
@@ -69,7 +67,7 @@ describe NestedIterators do
|
|
69
67
|
@jim.each {|ting| ting.each {|piece| piece.each {|atom| atom.foo } } }
|
70
68
|
end
|
71
69
|
EOS
|
72
|
-
expect(src).to reek_of(NestedIterators)
|
70
|
+
expect(src).to reek_of(:NestedIterators)
|
73
71
|
end
|
74
72
|
|
75
73
|
it 'reports nesting inside iterator arguments' do
|
@@ -84,7 +82,7 @@ describe NestedIterators do
|
|
84
82
|
) { |qux| qux.quuz }
|
85
83
|
end
|
86
84
|
EOS
|
87
|
-
expect(src).to reek_of(NestedIterators, count: 2)
|
85
|
+
expect(src).to reek_of(:NestedIterators, count: 2)
|
88
86
|
end
|
89
87
|
|
90
88
|
it 'reports the deepest level of nesting only' do
|
@@ -97,12 +95,13 @@ describe NestedIterators do
|
|
97
95
|
}
|
98
96
|
end
|
99
97
|
EOS
|
100
|
-
expect(src).to reek_of(NestedIterators, count: 3)
|
98
|
+
expect(src).to reek_of(:NestedIterators, count: 3)
|
101
99
|
end
|
102
100
|
|
103
101
|
context 'when the allowed nesting depth is 3' do
|
104
102
|
before :each do
|
105
|
-
@config = { NestedIterators:
|
103
|
+
@config = { NestedIterators:
|
104
|
+
{ Reek::Smells::NestedIterators::MAX_ALLOWED_NESTING_KEY => 3 } }
|
106
105
|
end
|
107
106
|
|
108
107
|
it 'should not report nested iterators 2 levels deep' do
|
@@ -113,7 +112,7 @@ describe NestedIterators do
|
|
113
112
|
EOS
|
114
113
|
|
115
114
|
with_test_config(@config) do
|
116
|
-
expect(src).not_to reek_of(NestedIterators)
|
115
|
+
expect(src).not_to reek_of(:NestedIterators)
|
117
116
|
end
|
118
117
|
end
|
119
118
|
|
@@ -125,7 +124,7 @@ describe NestedIterators do
|
|
125
124
|
EOS
|
126
125
|
|
127
126
|
with_test_config(@config) do
|
128
|
-
expect(src).not_to reek_of(NestedIterators)
|
127
|
+
expect(src).not_to reek_of(:NestedIterators)
|
129
128
|
end
|
130
129
|
end
|
131
130
|
|
@@ -137,27 +136,28 @@ describe NestedIterators do
|
|
137
136
|
EOS
|
138
137
|
|
139
138
|
with_test_config(@config) do
|
140
|
-
expect(src).to reek_of(NestedIterators)
|
139
|
+
expect(src).to reek_of(:NestedIterators)
|
141
140
|
end
|
142
141
|
end
|
143
142
|
end
|
144
143
|
|
145
144
|
context 'when ignoring iterators' do
|
146
145
|
before :each do
|
147
|
-
@config = { NestedIterators:
|
146
|
+
@config = { NestedIterators:
|
147
|
+
{ Reek::Smells::NestedIterators::IGNORE_ITERATORS_KEY => ['ignore_me'] } }
|
148
148
|
end
|
149
149
|
|
150
150
|
it 'should not report nesting the ignored iterator inside another' do
|
151
151
|
src = 'def bad(fred) @fred.each {|item| item.ignore_me {|ting| ting.ting} } end'
|
152
152
|
with_test_config(@config) do
|
153
|
-
expect(src).not_to reek_of(NestedIterators)
|
153
|
+
expect(src).not_to reek_of(:NestedIterators)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
157
|
it 'should not report nesting inside the ignored iterator' do
|
158
158
|
src = 'def bad(fred) @fred.ignore_me {|item| item.each {|ting| ting.ting} } end'
|
159
159
|
with_test_config(@config) do
|
160
|
-
expect(src).not_to reek_of(NestedIterators)
|
160
|
+
expect(src).not_to reek_of(:NestedIterators)
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
@@ -168,7 +168,7 @@ describe NestedIterators do
|
|
168
168
|
end
|
169
169
|
'
|
170
170
|
with_test_config(@config) do
|
171
|
-
expect(src).to reek_of(NestedIterators, count: 2)
|
171
|
+
expect(src).to reek_of(:NestedIterators, count: 2)
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
@@ -179,7 +179,7 @@ describe NestedIterators do
|
|
179
179
|
end
|
180
180
|
'
|
181
181
|
with_test_config(@config) do
|
182
|
-
expect(src).to reek_of(NestedIterators, count: 2)
|
182
|
+
expect(src).to reek_of(:NestedIterators, count: 2)
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
@@ -190,16 +190,16 @@ describe NestedIterators do
|
|
190
190
|
end
|
191
191
|
'
|
192
192
|
with_test_config(@config) do
|
193
|
-
expect(src).to reek_of(NestedIterators, count: 2)
|
193
|
+
expect(src).to reek_of(:NestedIterators, count: 2)
|
194
194
|
end
|
195
195
|
end
|
196
196
|
end
|
197
197
|
end
|
198
198
|
|
199
|
-
describe NestedIterators do
|
199
|
+
describe Reek::Smells::NestedIterators do
|
200
200
|
before(:each) do
|
201
|
-
@source_name = '
|
202
|
-
@detector = NestedIterators
|
201
|
+
@source_name = 'dummy_source'
|
202
|
+
@detector = build(:smell_detector, smell_type: :NestedIterators, source: @source_name)
|
203
203
|
end
|
204
204
|
|
205
205
|
it_should_behave_like 'SmellDetector'
|
@@ -213,7 +213,7 @@ describe NestedIterators do
|
|
213
213
|
end
|
214
214
|
end
|
215
215
|
EOS
|
216
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
216
|
+
ctx = Reek::Core::CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
217
217
|
@warning = @detector.examine_context(ctx)[0]
|
218
218
|
end
|
219
219
|
|
@@ -235,7 +235,7 @@ describe NestedIterators do
|
|
235
235
|
end
|
236
236
|
EOS
|
237
237
|
|
238
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
238
|
+
ctx = Reek::Core::CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
239
239
|
@warning = @detector.examine_context(ctx)[0]
|
240
240
|
end
|
241
241
|
|