reek 1.2.7 → 1.2.7.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.
data/History.txt
CHANGED
data/lib/reek.rb
CHANGED
@@ -63,6 +63,7 @@ module Reek
|
|
63
63
|
def control_parameters(method_ctx)
|
64
64
|
params = method_ctx.exp.parameter_names
|
65
65
|
result = Hash.new {|hash,key| hash[key] = []}
|
66
|
+
return result if params.empty?
|
66
67
|
method_ctx.local_nodes(:if) do |if_node|
|
67
68
|
cond = if_node[1]
|
68
69
|
if cond[0] == :lvar and params.include?(cond[1])
|
@@ -61,14 +61,14 @@ module Reek
|
|
61
61
|
# the given syntax tree together with the number of times each
|
62
62
|
# occurs. Ignores nested classes and modules.
|
63
63
|
#
|
64
|
-
def conditional_counts(
|
64
|
+
def conditional_counts(sexp)
|
65
65
|
result = Hash.new {|hash,key| hash[key] = []}
|
66
66
|
collector = proc { |node|
|
67
67
|
condition = node.condition
|
68
|
-
next if condition == s(:call, nil, :block_given?, s(:arglist))
|
68
|
+
next if condition.nil? or condition == s(:call, nil, :block_given?, s(:arglist))
|
69
69
|
result[condition].push(condition.line)
|
70
70
|
}
|
71
|
-
[:if, :case].each {|stmt|
|
71
|
+
[:if, :case].each {|stmt| sexp.local_nodes(stmt, &collector) }
|
72
72
|
result
|
73
73
|
end
|
74
74
|
end
|
data/reek.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{reek}
|
5
|
-
s.version = "1.2.7"
|
5
|
+
s.version = "1.2.7.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Kevin Rutherford"]
|
9
|
-
s.date = %q{2010-02-
|
9
|
+
s.date = %q{2010-02-03}
|
10
10
|
s.default_executable = %q{reek}
|
11
11
|
s.description = %q{Reek is a tool that examines Ruby classes, modules and methods
|
12
12
|
and reports any code smells it finds.
|
@@ -10,6 +10,7 @@ include Reek::Smells
|
|
10
10
|
describe ClassVariable do
|
11
11
|
before :each do
|
12
12
|
@detector = ClassVariable.new('raffles')
|
13
|
+
@class_variable = '@@things'
|
13
14
|
end
|
14
15
|
|
15
16
|
context 'with no class variables' do
|
@@ -25,99 +26,62 @@ describe ClassVariable do
|
|
25
26
|
|
26
27
|
context 'with one class variable' do
|
27
28
|
shared_examples_for 'one variable found' do
|
28
|
-
|
29
|
-
@detector.
|
29
|
+
before :each do
|
30
|
+
@detector.examine_context(@ctx)
|
31
|
+
@smells = @detector.smells_found
|
30
32
|
end
|
31
33
|
it 'records only that class variable' do
|
32
|
-
@
|
34
|
+
@smells.length.should == 1
|
33
35
|
end
|
34
|
-
it 'records the variable
|
35
|
-
@
|
36
|
-
|
37
|
-
warning.to_yaml.should match(/variable:[\s]*"@@tools"/)
|
36
|
+
it 'records the variable name' do
|
37
|
+
@smells.each do |warning|
|
38
|
+
warning.smell['variable'].should == @class_variable
|
38
39
|
end
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
it_should_behave_like 'one variable found'
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'used in a class' do
|
51
|
-
before :each do
|
52
|
-
@ctx = ClassContext.from_s('class Fred; def jim() @@tools = {}; end; end')
|
53
|
-
end
|
54
|
-
|
55
|
-
it_should_behave_like 'one variable found'
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'indexed in a class' do
|
59
|
-
before :each do
|
60
|
-
@ctx = ClassContext.from_s('class Fred; def jim() @@tools[mash] = {}; end; end')
|
61
|
-
end
|
62
|
-
|
63
|
-
it_should_behave_like 'one variable found'
|
64
|
-
end
|
65
|
-
|
66
|
-
context 'declared and used in a class' do
|
67
|
-
before :each do
|
68
|
-
@ctx = ClassContext.from_s('class Fred; @@tools = {}; def jim() @@tools = {}; end; end')
|
69
|
-
end
|
70
|
-
|
71
|
-
it_should_behave_like 'one variable found'
|
72
|
-
end
|
43
|
+
['class', 'module'].each do |scope|
|
44
|
+
context "declared in a #{scope}" do
|
45
|
+
before :each do
|
46
|
+
@ctx = ClassContext.from_s("#{scope} Fred; #{@class_variable} = {}; end")
|
47
|
+
end
|
73
48
|
|
74
|
-
|
75
|
-
before :each do
|
76
|
-
@ctx = ClassContext.from_s('class Fred; def jeff() @@tools = {}; end; def jim() @@tools = {}; end; end')
|
49
|
+
it_should_behave_like 'one variable found'
|
77
50
|
end
|
78
51
|
|
79
|
-
|
80
|
-
|
52
|
+
context "used in a #{scope}" do
|
53
|
+
before :each do
|
54
|
+
@ctx = ClassContext.from_s("#{scope} Fred; def jim() #{@class_variable} = {}; end; end")
|
55
|
+
end
|
81
56
|
|
82
|
-
|
83
|
-
before :each do
|
84
|
-
@ctx = ClassContext.from_s('module Fred; @@tools = {}; end')
|
57
|
+
it_should_behave_like 'one variable found'
|
85
58
|
end
|
86
59
|
|
87
|
-
|
88
|
-
|
60
|
+
context "indexed in a #{scope}" do
|
61
|
+
before :each do
|
62
|
+
@ctx = ClassContext.from_s("#{scope} Fred; def jim() #{@class_variable}[mash] = {}; end; end")
|
63
|
+
end
|
89
64
|
|
90
|
-
|
91
|
-
before :each do
|
92
|
-
@ctx = ClassContext.from_s('module Fred; def jim() @@tools = {}; end; end')
|
65
|
+
it_should_behave_like 'one variable found'
|
93
66
|
end
|
94
67
|
|
95
|
-
|
96
|
-
|
68
|
+
context "declared and used in a #{scope}" do
|
69
|
+
before :each do
|
70
|
+
@ctx = ClassContext.from_s("#{scope} Fred; #{@class_variable} = {}; def jim() #{@class_variable} = {}; end; end")
|
71
|
+
end
|
97
72
|
|
98
|
-
|
99
|
-
before :each do
|
100
|
-
@ctx = ClassContext.from_s('module Fred; def jim() @@tools[mash] = {}; end; end')
|
73
|
+
it_should_behave_like 'one variable found'
|
101
74
|
end
|
102
75
|
|
103
|
-
|
104
|
-
|
76
|
+
context "used twice in a #{scope}" do
|
77
|
+
before :each do
|
78
|
+
@ctx = ClassContext.from_s("#{scope} Fred; def jeff() #{@class_variable} = {}; end; def jim() #{@class_variable} = {}; end; end")
|
79
|
+
end
|
105
80
|
|
106
|
-
|
107
|
-
before :each do
|
108
|
-
@ctx = ClassContext.from_s('module Fred; @@tools = {}; def jim() @@tools = {}; end; end')
|
81
|
+
it_should_behave_like 'one variable found'
|
109
82
|
end
|
110
|
-
|
111
|
-
it_should_behave_like 'one variable found'
|
112
83
|
end
|
113
84
|
|
114
|
-
context 'used twice in a module' do
|
115
|
-
before :each do
|
116
|
-
@ctx = ClassContext.from_s('module Fred; def jeff() @@tools = {}; end; def jim() @@tools = {}; end; end')
|
117
|
-
end
|
118
|
-
|
119
|
-
it_should_behave_like 'one variable found'
|
120
|
-
end
|
121
85
|
end
|
122
86
|
|
123
87
|
it_should_behave_like 'SmellDetector'
|
@@ -30,6 +30,14 @@ describe SimulatedPolymorphism do
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
context 'with an empty condition' do
|
34
|
+
it 'does not record the condition' do
|
35
|
+
ast = 'def fred() case; when 3; end; end'.to_reek_source.syntax_tree
|
36
|
+
ctx = CodeContext.new(nil, ast)
|
37
|
+
@detector.conditional_counts(ctx).length.should == 0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
33
41
|
context 'with three identical conditionals' do
|
34
42
|
before :each do
|
35
43
|
@cond = '@field == :sym'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reek
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.7
|
4
|
+
version: 1.2.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Rutherford
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-03 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|