reek 1.3.1 → 1.3.2
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 +7 -0
- data/CHANGELOG +6 -0
- data/README.md +15 -9
- data/bin/reek +1 -1
- data/config/defaults.reek +71 -86
- data/features/command_line_interface/options.feature +0 -15
- data/features/reports/reports.feature +23 -0
- data/features/samples.feature +3 -12
- data/lib/reek.rb +3 -3
- data/lib/reek/cli/application.rb +1 -1
- data/lib/reek/cli/command_line.rb +10 -8
- data/lib/reek/cli/reek_command.rb +6 -7
- data/lib/reek/cli/report.rb +34 -38
- data/lib/reek/cli/version_command.rb +1 -1
- data/lib/reek/cli/yaml_command.rb +1 -1
- data/lib/reek/core/code_parser.rb +4 -4
- data/lib/reek/core/hash_extensions.rb +2 -2
- data/lib/reek/core/method_context.rb +2 -2
- data/lib/reek/core/module_context.rb +4 -4
- data/lib/reek/core/singleton_method_context.rb +1 -1
- data/lib/reek/core/smell_repository.rb +7 -6
- data/lib/reek/core/sniffer.rb +4 -4
- data/lib/reek/examiner.rb +10 -3
- data/lib/reek/smell_warning.rb +0 -2
- data/lib/reek/smells.rb +22 -21
- data/lib/reek/smells/attribute.rb +4 -8
- data/lib/reek/smells/boolean_parameter.rb +2 -2
- data/lib/reek/smells/class_variable.rb +3 -2
- data/lib/reek/smells/{control_couple.rb → control_parameter.rb} +5 -5
- data/lib/reek/smells/data_clump.rb +13 -29
- data/lib/reek/smells/{duplication.rb → duplicate_method_call.rb} +9 -11
- data/lib/reek/smells/feature_envy.rb +2 -2
- data/lib/reek/smells/irresponsible_module.rb +3 -2
- data/lib/reek/smells/long_parameter_list.rb +6 -10
- data/lib/reek/smells/long_yield_list.rb +4 -8
- data/lib/reek/smells/nested_iterators.rb +31 -25
- data/lib/reek/smells/nil_check.rb +11 -12
- data/lib/reek/smells/{simulated_polymorphism.rb → repeated_conditional.rb} +6 -10
- data/lib/reek/smells/smell_detector.rb +3 -6
- data/lib/reek/smells/too_many_instance_variables.rb +60 -0
- data/lib/reek/smells/too_many_methods.rb +62 -0
- data/lib/reek/smells/{long_method.rb → too_many_statements.rb} +7 -12
- data/lib/reek/smells/uncommunicative_method_name.rb +3 -7
- data/lib/reek/smells/uncommunicative_module_name.rb +3 -7
- data/lib/reek/smells/uncommunicative_parameter_name.rb +4 -8
- data/lib/reek/smells/uncommunicative_variable_name.rb +5 -9
- data/lib/reek/smells/unused_parameters.rb +62 -13
- data/lib/reek/smells/utility_function.rb +3 -7
- data/lib/reek/source.rb +8 -8
- data/lib/reek/source/core_extras.rb +1 -1
- data/lib/reek/source/source_code.rb +2 -2
- data/lib/reek/source/source_file.rb +2 -2
- data/lib/reek/source/source_locator.rb +1 -1
- data/lib/reek/source/source_repository.rb +4 -2
- data/lib/reek/spec.rb +9 -3
- data/lib/reek/spec/should_reek.rb +2 -2
- data/lib/reek/spec/should_reek_of.rb +1 -1
- data/lib/reek/spec/should_reek_only_of.rb +2 -2
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +3 -1
- data/spec/gem/updates_spec.rb +1 -1
- data/spec/gem/yard_spec.rb +1 -1
- data/spec/matchers/smell_of_matcher.rb +53 -19
- data/spec/reek/cli/help_command_spec.rb +2 -2
- data/spec/reek/cli/reek_command_spec.rb +6 -6
- data/spec/reek/cli/report_spec.rb +6 -6
- data/spec/reek/cli/version_command_spec.rb +2 -2
- data/spec/reek/cli/yaml_command_spec.rb +2 -2
- data/spec/reek/core/code_context_spec.rb +4 -4
- data/spec/reek/core/code_parser_spec.rb +2 -2
- data/spec/reek/core/config_spec.rb +4 -4
- data/spec/reek/core/method_context_spec.rb +3 -3
- data/spec/reek/core/module_context_spec.rb +3 -3
- data/spec/reek/core/object_refs_spec.rb +3 -3
- data/spec/reek/core/singleton_method_context_spec.rb +4 -4
- data/spec/reek/core/smell_configuration_spec.rb +2 -2
- data/spec/reek/core/stop_context_spec.rb +2 -2
- data/spec/reek/core/warning_collector_spec.rb +3 -3
- data/spec/reek/examiner_spec.rb +13 -4
- data/spec/reek/smell_warning_spec.rb +2 -2
- data/spec/reek/smells/attribute_spec.rb +4 -4
- data/spec/reek/smells/boolean_parameter_spec.rb +3 -3
- data/spec/reek/smells/class_variable_spec.rb +4 -4
- data/spec/reek/smells/{control_couple_spec.rb → control_parameter_spec.rb} +10 -10
- data/spec/reek/smells/data_clump_spec.rb +3 -3
- data/spec/reek/smells/{duplication_spec.rb → duplicate_method_call_spec.rb} +42 -26
- data/spec/reek/smells/feature_envy_spec.rb +3 -3
- data/spec/reek/smells/irresponsible_module_spec.rb +3 -3
- data/spec/reek/smells/long_parameter_list_spec.rb +3 -3
- data/spec/reek/smells/long_yield_list_spec.rb +3 -3
- data/spec/reek/smells/nested_iterators_spec.rb +42 -4
- data/spec/reek/smells/nil_check_spec.rb +23 -11
- data/spec/reek/smells/{simulated_polymorphism_spec.rb → repeated_conditional_spec.rb} +6 -6
- data/spec/reek/smells/smell_detector_shared.rb +2 -2
- data/spec/reek/smells/too_many_instance_variables_spec.rb +62 -0
- data/spec/reek/smells/{large_class_spec.rb → too_many_methods_spec.rb} +11 -56
- data/spec/reek/smells/{long_method_spec.rb → too_many_statements_spec.rb} +17 -17
- data/spec/reek/smells/uncommunicative_method_name_spec.rb +5 -5
- data/spec/reek/smells/uncommunicative_module_name_spec.rb +5 -5
- data/spec/reek/smells/uncommunicative_parameter_name_spec.rb +4 -4
- data/spec/reek/smells/uncommunicative_variable_name_spec.rb +5 -5
- data/spec/reek/smells/unused_parameters_spec.rb +19 -4
- data/spec/reek/smells/utility_function_spec.rb +3 -3
- data/spec/reek/source/code_comment_spec.rb +2 -2
- data/spec/reek/source/object_source_spec.rb +1 -1
- data/spec/reek/source/reference_collector_spec.rb +2 -2
- data/spec/reek/source/sexp_formatter_spec.rb +2 -2
- data/spec/reek/source/source_code_spec.rb +2 -2
- data/spec/reek/source/tree_dresser_spec.rb +2 -2
- data/spec/reek/spec/should_reek_of_spec.rb +2 -2
- data/spec/reek/spec/should_reek_only_of_spec.rb +2 -2
- data/spec/reek/spec/should_reek_spec.rb +2 -2
- data/spec/samples/all_but_one_masked/masked.reek +1 -1
- data/spec/samples/clean_due_to_masking/masked.reek +1 -1
- data/spec/samples/config/allow_duplication.reek +2 -2
- data/spec/samples/inline_config/dirty.rb +2 -2
- data/spec/samples/mask_some/some.reek +1 -1
- data/spec/samples/masked_by_dotfile/dirty.rb +8 -0
- data/spec/samples/not_quite_masked/smelly.rb +3 -0
- data/spec/samples/overrides/masked/lower.reek +1 -1
- data/spec/samples/overrides/upper.reek +1 -1
- data/spec/spec_helper.rb +4 -9
- data/tasks/test.rake +0 -2
- metadata +253 -263
- data/lib/reek/smells/large_class.rb +0 -87
- data/lib/xp.reek +0 -66
- data/spec/gem/manifest_spec.rb +0 -22
- data/spec/spec.opts +0 -1
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/feature_envy'
|
3
|
+
require 'reek/smells/smell_detector_shared'
|
4
4
|
|
5
5
|
include Reek
|
6
6
|
include Reek::Smells
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/irresponsible_module'
|
3
|
+
require 'reek/smells/smell_detector_shared'
|
4
4
|
include Reek::Smells
|
5
5
|
|
6
6
|
describe IrresponsibleModule do
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/long_parameter_list'
|
3
|
+
require 'reek/smells/smell_detector_shared'
|
4
4
|
|
5
5
|
include Reek
|
6
6
|
include Reek::Smells
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/long_yield_list'
|
3
|
+
require 'reek/smells/smell_detector_shared'
|
4
4
|
|
5
5
|
include Reek
|
6
6
|
include Reek::Smells
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/nested_iterators'
|
3
|
+
require 'reek/smells/smell_detector_shared'
|
4
4
|
|
5
5
|
include Reek::Smells
|
6
6
|
|
@@ -51,7 +51,45 @@ def bad(fred)
|
|
51
51
|
@jim.each {|ting| ting.each {|piece| @hal.send} }
|
52
52
|
end
|
53
53
|
EOS
|
54
|
-
src.should smell_of(NestedIterators, {}
|
54
|
+
src.should smell_of(NestedIterators, {})
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'reports nested iterators only once per method even if levels are different' do
|
58
|
+
src = <<-EOS
|
59
|
+
def bad(fred)
|
60
|
+
@fred.each {|item| item.each {|part| part.foo} }
|
61
|
+
@jim.each {|ting| ting.each {|piece| piece.each {|atom| atom.foo } } }
|
62
|
+
end
|
63
|
+
EOS
|
64
|
+
src.should smell_of(NestedIterators, {})
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'reports nesting inside iterator arguments' do
|
68
|
+
src = <<-EOS
|
69
|
+
def bad(fred, ted)
|
70
|
+
fred.foo(
|
71
|
+
ted.each {|item|
|
72
|
+
item.each {|part|
|
73
|
+
part.baz
|
74
|
+
}
|
75
|
+
}
|
76
|
+
) { |qux| qux.quuz }
|
77
|
+
end
|
78
|
+
EOS
|
79
|
+
src.should smell_of(NestedIterators, NestedIterators::NESTING_DEPTH_KEY => 2)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'reports the deepest level of nesting only' do
|
83
|
+
src = <<-EOS
|
84
|
+
def bad(fred)
|
85
|
+
fred.each {|item|
|
86
|
+
item.each {|part|
|
87
|
+
part.each {|sub| sub.foobar}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
end
|
91
|
+
EOS
|
92
|
+
src.should smell_of(NestedIterators, NestedIterators::NESTING_DEPTH_KEY => 3)
|
55
93
|
end
|
56
94
|
|
57
95
|
context 'when the allowed nesting depth is 3' do
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/nil_check'
|
3
|
+
require 'reek/smells/smell_detector_shared'
|
4
4
|
|
5
5
|
include Reek
|
6
6
|
include Reek::Smells
|
@@ -9,19 +9,31 @@ describe NilCheck do
|
|
9
9
|
|
10
10
|
context 'for methods' do
|
11
11
|
|
12
|
+
it 'reports the correct line number' do
|
13
|
+
src = <<-EOS
|
14
|
+
def nilcheck foo
|
15
|
+
foo.nil?
|
16
|
+
end
|
17
|
+
EOS
|
18
|
+
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
19
|
+
detector = NilCheck.new('source_name')
|
20
|
+
smells = detector.examine_context(ctx)
|
21
|
+
smells[0].lines.should eq [2]
|
22
|
+
end
|
23
|
+
|
12
24
|
it 'should report nothing when scope includes no nil checks' do
|
13
25
|
'def no_nils; end'.should_not smell_of(NilCheck)
|
14
26
|
end
|
15
27
|
|
16
28
|
it 'should report when scope uses multiple nil? methods' do
|
17
29
|
src = <<-eos
|
18
|
-
def chk_multi_nil(para)
|
19
|
-
para.nil?
|
30
|
+
def chk_multi_nil(para)
|
31
|
+
para.nil?
|
20
32
|
puts "Hello"
|
21
|
-
\"\".nil?
|
33
|
+
\"\".nil?
|
22
34
|
end
|
23
35
|
eos
|
24
|
-
src.should smell_of(NilCheck,
|
36
|
+
src.should smell_of(NilCheck,
|
25
37
|
{NilCheck => nil}, {NilCheck => nil})
|
26
38
|
end
|
27
39
|
|
@@ -42,16 +54,16 @@ describe NilCheck do
|
|
42
54
|
|
43
55
|
it 'should report when scope uses multiple case-clauses checking nil' do
|
44
56
|
src = <<-eos
|
45
|
-
def
|
46
|
-
case @inst_var
|
47
|
-
when nil then puts "Nil"
|
57
|
+
def case_nil
|
58
|
+
case @inst_var
|
59
|
+
when nil then puts "Nil"
|
48
60
|
end
|
49
61
|
puts "Hello"
|
50
62
|
case @inst_var2
|
51
63
|
when 1 then puts 1
|
52
64
|
when nil then puts nil.inspect
|
53
65
|
end
|
54
|
-
end
|
66
|
+
end
|
55
67
|
eos
|
56
68
|
src.should smell_of(NilCheck,
|
57
69
|
{NilCheck => nil}, {NilCheck => nil})
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/repeated_conditional'
|
3
|
+
require 'reek/core/code_context'
|
4
|
+
require 'reek/smells/smell_detector_shared'
|
5
5
|
|
6
6
|
include Reek::Core
|
7
7
|
include Reek::Smells
|
8
8
|
|
9
|
-
describe
|
9
|
+
describe RepeatedConditional do
|
10
10
|
before :each do
|
11
11
|
@source_name = 'howdy-doody'
|
12
|
-
@detector =
|
12
|
+
@detector = RepeatedConditional.new(@source_name)
|
13
13
|
end
|
14
14
|
|
15
15
|
it_should_behave_like 'SmellDetector'
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/core/smell_configuration'
|
3
3
|
|
4
4
|
include Reek::Core
|
5
5
|
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/too_many_instance_variables'
|
3
|
+
require 'reek/examiner'
|
4
|
+
require 'reek/core/code_parser'
|
5
|
+
require 'reek/smells/smell_detector_shared'
|
6
|
+
|
7
|
+
include Reek
|
8
|
+
include Reek::Smells
|
9
|
+
|
10
|
+
describe TooManyInstanceVariables do
|
11
|
+
before(:each) do
|
12
|
+
@source_name = 'elephant'
|
13
|
+
@detector = TooManyInstanceVariables.new(@source_name)
|
14
|
+
end
|
15
|
+
|
16
|
+
it_should_behave_like 'SmellDetector'
|
17
|
+
|
18
|
+
context 'counting instance variables' do
|
19
|
+
it 'should not report 9 ivars' do
|
20
|
+
'# clean class for testing purposes
|
21
|
+
class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=4; end;end'.should_not reek
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'counts each ivar only once' do
|
25
|
+
'# clean class for testing purposes
|
26
|
+
class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=4;@aa=3; end;end'.should_not reek
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should report 10 ivars' do
|
30
|
+
'# smelly class for testing purposes
|
31
|
+
class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=@aj=4; end;end'.should reek_only_of(:TooManyInstanceVariables)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should not report 10 ivars in 2 extensions' do
|
35
|
+
src = <<EOS
|
36
|
+
# clean class for testing purposes
|
37
|
+
class Full;def ivars_a() @aa=@ab=@ac=@ad=@ae; end;end
|
38
|
+
# clean class for testing purposes
|
39
|
+
class Full;def ivars_b() @af=@ag=@ah=@ai=@aj; end;end
|
40
|
+
EOS
|
41
|
+
src.should_not reek
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'reports correctly when the class has 10 instance variables' do
|
46
|
+
src = <<EOS
|
47
|
+
# smelly class for testing purposes
|
48
|
+
class Empty
|
49
|
+
def ivars
|
50
|
+
@aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=@aj=4
|
51
|
+
end
|
52
|
+
end
|
53
|
+
EOS
|
54
|
+
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
55
|
+
@warning = @detector.examine_context(ctx)[0]
|
56
|
+
@warning.source.should == @source_name
|
57
|
+
@warning.smell_class.should == 'LargeClass'
|
58
|
+
@warning.subclass.should == TooManyInstanceVariables::SMELL_SUBCLASS
|
59
|
+
@warning.smell[TooManyInstanceVariables::IVAR_COUNT_KEY].should == 10
|
60
|
+
@warning.lines.should == [2]
|
61
|
+
end
|
62
|
+
end
|
@@ -1,47 +1,20 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/too_many_methods'
|
3
|
+
require 'reek/examiner'
|
4
|
+
require 'reek/core/code_parser'
|
5
|
+
require 'reek/smells/smell_detector_shared'
|
6
6
|
|
7
7
|
include Reek
|
8
8
|
include Reek::Smells
|
9
9
|
|
10
|
-
describe
|
10
|
+
describe TooManyMethods do
|
11
11
|
before(:each) do
|
12
12
|
@source_name = 'elephant'
|
13
|
-
@detector =
|
13
|
+
@detector = TooManyMethods.new(@source_name)
|
14
14
|
end
|
15
15
|
|
16
16
|
it_should_behave_like 'SmellDetector'
|
17
17
|
|
18
|
-
context 'counting instance variables' do
|
19
|
-
it 'should not report 9 ivars' do
|
20
|
-
'# clean class for testing purposes
|
21
|
-
class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=4; end;end'.should_not reek
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'counts each ivar only once' do
|
25
|
-
'# clean class for testing purposes
|
26
|
-
class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=4;@aa=3; end;end'.should_not reek
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should report 10 ivars' do
|
30
|
-
'# smelly class for testing purposes
|
31
|
-
class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=@aj=4; end;end'.should reek_only_of(:LargeClass)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'should not report 10 ivars in 2 extensions' do
|
35
|
-
src = <<EOS
|
36
|
-
# clean class for testing purposes
|
37
|
-
class Full;def ivars_a() @aa=@ab=@ac=@ad=@ae; end;end
|
38
|
-
# clean class for testing purposes
|
39
|
-
class Full;def ivars_b() @af=@ag=@ah=@ai=@aj; end;end
|
40
|
-
EOS
|
41
|
-
src.should_not reek
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
18
|
context 'counting methods' do
|
46
19
|
|
47
20
|
it 'should not report 25 methods' do
|
@@ -73,8 +46,8 @@ EOS
|
|
73
46
|
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
74
47
|
smells = @detector.examine_context(ctx)
|
75
48
|
smells.length.should == 1
|
76
|
-
smells[0].subclass.should ==
|
77
|
-
smells[0].smell[
|
49
|
+
smells[0].subclass.should == TooManyMethods::SMELL_SUBCLASS
|
50
|
+
smells[0].smell[TooManyMethods::METHOD_COUNT_KEY].should == 26
|
78
51
|
end
|
79
52
|
end
|
80
53
|
|
@@ -110,26 +83,8 @@ EOS
|
|
110
83
|
@warning = @detector.examine_context(ctx)[0]
|
111
84
|
@warning.source.should == @source_name
|
112
85
|
@warning.smell_class.should == 'LargeClass'
|
113
|
-
@warning.subclass.should ==
|
114
|
-
@warning.smell[
|
86
|
+
@warning.subclass.should == TooManyMethods::SMELL_SUBCLASS
|
87
|
+
@warning.smell[TooManyMethods::METHOD_COUNT_KEY].should == 26
|
115
88
|
@warning.lines.should == [1]
|
116
89
|
end
|
117
|
-
|
118
|
-
it 'reports correctly when the class has 30 instance variables' do
|
119
|
-
src = <<EOS
|
120
|
-
# smelly class for testing purposes
|
121
|
-
class Empty
|
122
|
-
def ivars
|
123
|
-
@aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=@aj=4
|
124
|
-
end
|
125
|
-
end
|
126
|
-
EOS
|
127
|
-
ctx = CodeContext.new(nil, src.to_reek_source.syntax_tree)
|
128
|
-
@warning = @detector.examine_context(ctx)[0]
|
129
|
-
@warning.source.should == @source_name
|
130
|
-
@warning.smell_class.should == 'LargeClass'
|
131
|
-
@warning.subclass.should == LargeClass::SUBCLASS_TOO_MANY_IVARS
|
132
|
-
@warning.smell[LargeClass::IVAR_COUNT_KEY].should == 10
|
133
|
-
@warning.lines.should == [2]
|
134
|
-
end
|
135
90
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'reek/smells/too_many_statements'
|
3
|
+
require 'reek/core/code_parser'
|
4
|
+
require 'reek/core/sniffer'
|
5
|
+
require 'reek/smells/smell_detector_shared'
|
6
6
|
|
7
7
|
include Reek
|
8
8
|
include Reek::Smells
|
@@ -19,20 +19,20 @@ def process_singleton_method(src)
|
|
19
19
|
Core::CodeParser.new(sniffer).process_defs(source.syntax_tree)
|
20
20
|
end
|
21
21
|
|
22
|
-
describe
|
22
|
+
describe TooManyStatements do
|
23
23
|
it 'should not report short methods' do
|
24
24
|
src = 'def short(arga) alf = f(1);@bet = 2;@cut = 3;@dit = 4; @emp = 5;end'
|
25
|
-
src.should_not smell_of(
|
25
|
+
src.should_not smell_of(TooManyStatements)
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should report long methods' do
|
29
29
|
src = 'def long() alf = f(1);@bet = 2;@cut = 3;@dit = 4; @emp = 5;@fry = 6;end'
|
30
|
-
src.should reek_only_of(:
|
30
|
+
src.should reek_only_of(:TooManyStatements, /6 statements/)
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'should not report initialize' do
|
34
34
|
src = 'def initialize(arga) alf = f(1);@bet = 2;@cut = 3;@dit = 4; @emp = 5;@fry = 6;end'
|
35
|
-
src.should_not smell_of(
|
35
|
+
src.should_not smell_of(TooManyStatements)
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'should only report a long method once' do
|
@@ -54,7 +54,7 @@ def standard_entries(rbconfig)
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
EOS
|
57
|
-
src.should reek_only_of(:
|
57
|
+
src.should reek_only_of(:TooManyStatements)
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'should report long inner block' do
|
@@ -71,11 +71,11 @@ def long()
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
EOS
|
74
|
-
src.should reek_only_of(:
|
74
|
+
src.should reek_only_of(:TooManyStatements)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
describe
|
78
|
+
describe TooManyStatements do
|
79
79
|
it 'counts 1 assignment' do
|
80
80
|
method = process_method('def one() val = 4; end')
|
81
81
|
method.num_statements.should == 1
|
@@ -112,7 +112,7 @@ describe LongMethod do
|
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
|
-
describe
|
115
|
+
describe TooManyStatements, 'does not count control statements' do
|
116
116
|
it 'counts 1 statement in a conditional expression' do
|
117
117
|
method = process_method('def one() if val == 4; callee(); end; end')
|
118
118
|
method.num_statements.should == 1
|
@@ -220,9 +220,9 @@ EOS
|
|
220
220
|
end
|
221
221
|
end
|
222
222
|
|
223
|
-
describe
|
223
|
+
describe TooManyStatements do
|
224
224
|
before(:each) do
|
225
|
-
@detector =
|
225
|
+
@detector = TooManyStatements.new('silver')
|
226
226
|
end
|
227
227
|
|
228
228
|
it_should_behave_like 'SmellDetector'
|
@@ -239,10 +239,10 @@ describe LongMethod do
|
|
239
239
|
@smells.length.should == 1
|
240
240
|
end
|
241
241
|
it 'reports the number of statements' do
|
242
|
-
@smells[0].smell[
|
242
|
+
@smells[0].smell[TooManyStatements::STATEMENT_COUNT_KEY].should == @num_statements
|
243
243
|
end
|
244
244
|
it 'reports the correct subclass' do
|
245
|
-
@smells[0].subclass.should ==
|
245
|
+
@smells[0].subclass.should == TooManyStatements::SMELL_SUBCLASS
|
246
246
|
end
|
247
247
|
end
|
248
248
|
end
|