kevinrutherford-reek 1.1.3.1 → 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.
data/History.txt CHANGED
@@ -3,6 +3,7 @@
3
3
  === Minor Changes
4
4
  * LongMethod now counts statements deeper into each method (#25)
5
5
  * LongMethod no longer counts control structures, only their contained stmts
6
+ * LargeClass is disabled when checking in-memory classes
6
7
 
7
8
  == 1.1.3 2009-05-19
8
9
 
@@ -54,10 +54,12 @@ module Reek
54
54
  end
55
55
 
56
56
  def process_class(exp)
57
- push(ClassContext.create(@element, exp)) do
57
+ scope = ClassContext.create(@element, exp)
58
+ push(scope) do
58
59
  process_default(exp) unless @element.is_struct?
59
60
  check_smells(:class)
60
61
  end
62
+ scope
61
63
  end
62
64
 
63
65
  def process_defn(exp)
@@ -20,6 +20,11 @@ module Reek
20
20
  return unifier.process(sexp[0])
21
21
  end
22
22
 
23
+ def initialize(code, desc) # :nodoc:
24
+ super
25
+ @cf.disable('LargeClass')
26
+ end
27
+
23
28
  def can_parse_objects?
24
29
  return true if Object.const_defined?(:ParseTree)
25
30
  begin
@@ -77,5 +77,9 @@ module Reek
77
77
  return [] if path == parent
78
78
  all_reekfiles(parent) + Dir["#{path}/*.reek"]
79
79
  end
80
+
81
+ def disable(smell)
82
+ @config[smell].adopt!({'enabled' => false})
83
+ end
80
84
  end
81
85
  end
data/lib/reek.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
3
  module Reek # :doc:
4
- VERSION = '1.1.3.1'
4
+ VERSION = '1.1.3.2'
5
5
  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.1.3.1"
5
+ s.version = "1.1.3.2"
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{2009-06-04}
9
+ s.date = %q{2009-06-13}
10
10
  s.default_executable = %q{reek}
11
11
  s.description = %q{Code smell detector for Ruby}
12
12
  s.email = ["kevin@rutherford-software.com"]
@@ -6,9 +6,9 @@ require 'reek/smells/large_class'
6
6
  include Reek
7
7
  include Reek::Smells
8
8
 
9
- describe LargeClass do
9
+ describe LargeClass, 'checking Class objects' do
10
10
 
11
- it 'should report large class' do
11
+ it 'should not report class with 26 methods' do
12
12
  class BigOne
13
13
  26.times do |i|
14
14
  define_method "method#{i}".to_sym do
@@ -16,11 +16,8 @@ describe LargeClass do
16
16
  end
17
17
  end
18
18
  end
19
- BigOne.should reek_only_of(:LargeClass, /BigOne/)
19
+ BigOne.should_not reek
20
20
  end
21
- end
22
-
23
- describe LargeClass do
24
21
 
25
22
  it 'should not report short class' do
26
23
  class ShortClass
@@ -33,6 +30,26 @@ describe LargeClass do
33
30
  end
34
31
  ShortClass.should_not reek
35
32
  end
33
+
34
+ describe LargeClass, 'counting instance variables' do
35
+ it 'should not report class with 10 ivars' do
36
+ class ManyIvars
37
+ def method
38
+ @vara = @varb = @varc = @vard = @vare
39
+ @varf = @varg = @varh = @vari = @varj
40
+ end
41
+ end
42
+ ManyIvars.should_not reek
43
+ end
44
+
45
+ it 'ignores class with only a couple of ivars' do
46
+ LargeClass.should_not reek_of(:LargeClass)
47
+ end
48
+
49
+ it 'ignores fq class with only a couple of ivars' do
50
+ Reek::Smells::LargeClass.should_not reek_of(:LargeClass)
51
+ end
52
+ end
36
53
  end
37
54
 
38
55
  describe LargeClass, 'when exceptions are listed' do
@@ -66,22 +83,81 @@ describe LargeClass, 'when exceptions are listed' do
66
83
  end
67
84
  end
68
85
 
69
- describe LargeClass, 'counting instance variables' do
70
- it 'warns about class with 10 ivars' do
71
- class ManyIvars
72
- def method
73
- @vara = @varb = @varc = @vard = @vare
74
- @varf = @varg = @varh = @vari = @varj
75
- end
76
- end
77
- ManyIvars.should reek_of(:LargeClass, /10/)
86
+ describe LargeClass, 'checking source code' do
87
+
88
+ def process_class(src)
89
+ source = Source.from_s(src)
90
+ CodeParser.new(nil, {}).process_class(source.generate_syntax_tree)
78
91
  end
79
92
 
80
- it 'ignores class with only a couple of ivars' do
81
- LargeClass.should_not reek_of(:LargeClass)
93
+ describe 'counting instance variables' do
94
+ it 'should not report empty class' do
95
+ process_class('class Empty;end').variable_names.length.should == 0
96
+ end
97
+
98
+ it 'should count ivars in one method' do
99
+ process_class('class Empty;def ivars() @aa=@ab=@ac=@ad; end;end').variable_names.length.should == 4
100
+ end
101
+
102
+ it 'should count ivars in 2 methods' do
103
+ process_class('class Empty;def iv1() @aa=@ab; end;def iv2() @aa=@ac; end;end').variable_names.length.should == 3
104
+ end
105
+
106
+ it 'should not report 9 ivars' do
107
+ 'class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai; end;end'.should_not reek
108
+ end
109
+
110
+ it 'should report 10 ivars' do
111
+ 'class Empty;def ivars() @aa=@ab=@ac=@ad=@ae=@af=@ag=@ah=@ai=@aj; end;end'.should reek_of(:LargeClass)
112
+ end
113
+
114
+ it 'should not report 10 ivars in 2 extensions' do
115
+ src = <<EOS
116
+ class Full;def ivars1() @aa=@ab=@ac=@ad=@ae; end;end
117
+ class Full;def ivars2() @af=@ag=@ah=@ai=@aj; end;end
118
+ EOS
119
+ src.should_not reek
120
+ end
82
121
  end
83
122
 
84
- it 'ignores fq class with only a couple of ivars' do
85
- Reek::Smells::LargeClass.should_not reek_of(:LargeClass)
123
+ describe 'counting methods' do
124
+ it 'should not report empty class' do
125
+ process_class('class Empty;end').num_methods.should == 0
126
+ end
127
+
128
+ it 'should count 1 method' do
129
+ process_class('class Empty;def ivars() @aa=@ab; end;end').num_methods.should == 1
130
+ end
131
+
132
+ it 'should count 2 methods' do
133
+ process_class('class Empty;def meth1() @aa=@ab;end;def meth2() @aa=@ab;end;end').num_methods.should == 2
134
+ end
135
+
136
+ it 'should not report 25 methods' do
137
+ src = <<EOS
138
+ class Full
139
+ def me01()3 end;def me02()3 end;def me03()3 end;def me04()3 end;def me05()3 end
140
+ def me11()3 end;def me12()3 end;def me13()3 end;def me14()3 end;def me15()3 end
141
+ def me21()3 end;def me22()3 end;def me23()3 end;def me24()3 end;def me25()3 end
142
+ def me31()3 end;def me32()3 end;def me33()3 end;def me34()3 end;def me35()3 end
143
+ def me41()3 end;def me42()3 end;def me43()3 end;def me44()3 end;def me45()3 end
144
+ end
145
+ EOS
146
+ src.should_not reek
147
+ end
148
+
149
+ it 'should report 26 methods' do
150
+ src = <<EOS
151
+ class Full
152
+ def me01()3 end;def me02()3 end;def me03()3 end;def me04()3 end;def me05()3 end
153
+ def me11()3 end;def me12()3 end;def me13()3 end;def me14()3 end;def me15()3 end
154
+ def me21()3 end;def me22()3 end;def me23()3 end;def me24()3 end;def me25()3 end
155
+ def me31()3 end;def me32()3 end;def me33()3 end;def me34()3 end;def me35()3 end
156
+ def me41()3 end;def me42()3 end;def me43()3 end;def me44()3 end;def me45()3 end
157
+ def me51()3 end
158
+ end
159
+ EOS
160
+ src.should reek_of(:LargeClass)
161
+ end
86
162
  end
87
163
  end
@@ -7,6 +7,11 @@ require 'reek/smells/long_method'
7
7
  include Reek
8
8
  include Reek::Smells
9
9
 
10
+ def process_method(src)
11
+ source = Source.from_s(src)
12
+ CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
13
+ end
14
+
10
15
  describe LongMethod do
11
16
  it 'should not report short methods' do
12
17
  'def short(arga) alf = f(1);@bet = 2;@cut = 3;@dit = 4; @emp = 5;end'.should_not reek
@@ -62,151 +67,109 @@ end
62
67
 
63
68
  describe LongMethod do
64
69
  it 'counts 1 assignment' do
65
- src = 'def one() val = 4; end'
66
- source = Source.from_s(src)
67
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
70
+ method = process_method('def one() val = 4; end')
68
71
  method.num_statements.should == 1
69
72
  end
70
73
 
71
74
  it 'counts 3 assignments' do
72
- src = 'def one() val = 4; val = 4; val = 4; end'
73
- source = Source.from_s(src)
74
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
75
+ method = process_method('def one() val = 4; val = 4; val = 4; end')
75
76
  method.num_statements.should == 3
76
77
  end
77
78
 
78
79
  it 'counts 1 attr assignment' do
79
- src = 'def one() val[0] = 4; end'
80
- source = Source.from_s(src)
81
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
80
+ method = process_method('def one() val[0] = 4; end')
82
81
  method.num_statements.should == 1
83
82
  end
84
83
 
85
84
  it 'counts 1 increment assignment' do
86
- src = 'def one() val += 4; end'
87
- source = Source.from_s(src)
88
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
85
+ method = process_method('def one() val += 4; end')
89
86
  method.num_statements.should == 1
90
87
  end
91
88
 
92
89
  it 'counts 1 increment attr assignment' do
93
- src = 'def one() val[0] += 4; end'
94
- source = Source.from_s(src)
95
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
90
+ method = process_method('def one() val[0] += 4; end')
96
91
  method.num_statements.should == 1
97
92
  end
98
93
 
99
94
  it 'counts 1 nested assignment' do
100
- src = 'def one() val = fred = 4; end'
101
- source = Source.from_s(src)
102
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
95
+ method = process_method('def one() val = fred = 4; end')
103
96
  method.num_statements.should == 1
104
97
  end
105
98
 
106
99
  it 'counts returns' do
107
- src = 'def one() val = 4; true; end'
108
- source = Source.from_s(src)
109
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
100
+ method = process_method('def one() val = 4; true; end')
110
101
  method.num_statements.should == 2
111
102
  end
112
103
  end
113
104
 
114
105
  describe LongMethod, 'does not count control statements' do
115
106
  it 'counts 1 statement in a conditional expression' do
116
- src = 'def one() if val == 4; callee(); end; end'
117
- source = Source.from_s(src)
118
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
107
+ method = process_method('def one() if val == 4; callee(); end; end')
119
108
  method.num_statements.should == 1
120
109
  end
121
110
 
122
111
  it 'counts 3 statements in a conditional expression' do
123
- src = 'def one() if val == 4; callee(); callee(); callee(); end; end'
124
- source = Source.from_s(src)
125
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
112
+ method = process_method('def one() if val == 4; callee(); callee(); callee(); end; end')
126
113
  method.num_statements.should == 3
127
114
  end
128
115
 
129
116
  it 'does not count empty conditional expression' do
130
- src = 'def one() if val == 4; ; end; end'
131
- source = Source.from_s(src)
132
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
117
+ method = process_method('def one() if val == 4; ; end; end')
133
118
  method.num_statements.should == 0
134
119
  end
135
120
 
136
121
  it 'counts 1 statement in a while loop' do
137
- src = 'def one() while val < 4; callee(); end; end'
138
- source = Source.from_s(src)
139
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
122
+ method = process_method('def one() while val < 4; callee(); end; end')
140
123
  method.num_statements.should == 1
141
124
  end
142
125
 
143
126
  it 'counts 3 statements in a while loop' do
144
- src = 'def one() while val < 4; callee(); callee(); callee(); end; end'
145
- source = Source.from_s(src)
146
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
127
+ method = process_method('def one() while val < 4; callee(); callee(); callee(); end; end')
147
128
  method.num_statements.should == 3
148
129
  end
149
130
 
150
131
  it 'counts 1 statement in a until loop' do
151
- src = 'def one() until val < 4; callee(); end; end'
152
- source = Source.from_s(src)
153
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
132
+ method = process_method('def one() until val < 4; callee(); end; end')
154
133
  method.num_statements.should == 1
155
134
  end
156
135
 
157
136
  it 'counts 3 statements in a until loop' do
158
- src = 'def one() until val < 4; callee(); callee(); callee(); end; end'
159
- source = Source.from_s(src)
160
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
137
+ method = process_method('def one() until val < 4; callee(); callee(); callee(); end; end')
161
138
  method.num_statements.should == 3
162
139
  end
163
140
 
164
141
  it 'counts 1 statement in a for loop' do
165
- src = 'def one() for i in 0..4; callee(); end; end'
166
- source = Source.from_s(src)
167
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
142
+ method = process_method('def one() for i in 0..4; callee(); end; end')
168
143
  method.num_statements.should == 1
169
144
  end
170
145
 
171
146
  it 'counts 3 statements in a for loop' do
172
- src = 'def one() for i in 0..4; callee(); callee(); callee(); end; end'
173
- source = Source.from_s(src)
174
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
147
+ method = process_method('def one() for i in 0..4; callee(); callee(); callee(); end; end')
175
148
  method.num_statements.should == 3
176
149
  end
177
150
 
178
151
  it 'counts 1 statement in a rescue' do
179
- src = 'def one() begin; callee(); rescue; callee(); end; end'
180
- source = Source.from_s(src)
181
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
152
+ method = process_method('def one() begin; callee(); rescue; callee(); end; end')
182
153
  method.num_statements.should == 2
183
154
  end
184
155
 
185
156
  it 'counts 3 statements in a rescue' do
186
- src = 'def one() begin; callee(); callee(); callee(); rescue; callee(); callee(); callee(); end; end'
187
- source = Source.from_s(src)
188
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
157
+ method = process_method('def one() begin; callee(); callee(); callee(); rescue; callee(); callee(); callee(); end; end')
189
158
  method.num_statements.should == 6
190
159
  end
191
160
 
192
161
  it 'counts 1 statement in a when' do
193
- src = 'def one() case fred; when "hi"; callee(); end; end'
194
- source = Source.from_s(src)
195
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
162
+ method = process_method('def one() case fred; when "hi"; callee(); end; end')
196
163
  method.num_statements.should == 1
197
164
  end
198
165
 
199
166
  it 'counts 3 statements in a when' do
200
- src = 'def one() case fred; when "hi"; callee(); callee(); when "lo"; callee(); end; end'
201
- source = Source.from_s(src)
202
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
167
+ method = process_method('def one() case fred; when "hi"; callee(); callee(); when "lo"; callee(); end; end')
203
168
  method.num_statements.should == 3
204
169
  end
205
170
 
206
171
  it 'does not count empty case' do
207
- src = 'def one() case fred; when "hi"; ; when "lo"; ; end; end'
208
- source = Source.from_s(src)
209
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
172
+ method = process_method('def one() case fred; when "hi"; ; when "lo"; ; end; end')
210
173
  method.num_statements.should == 0
211
174
  end
212
175
 
@@ -226,8 +189,7 @@ def parse(arg, argv, &error)
226
189
  val
227
190
  end
228
191
  EOS
229
- source = Source.from_s(src)
230
- method = CodeParser.new(nil, {}).process_defn(source.generate_syntax_tree)
192
+ method = process_method(src)
231
193
  method.num_statements.should == 6
232
194
  end
233
195
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kevinrutherford-reek
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3.1
4
+ version: 1.1.3.2
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: 2009-06-04 00:00:00 -07:00
12
+ date: 2009-06-13 00:00:00 -07:00
13
13
  default_executable: reek
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency