reek 1.2.7 → 1.2.7.1
Sign up to get free protection for your applications and to get access to all the features.
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
|