reek 1.2.4 → 1.2.5

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.
@@ -1,3 +1,8 @@
1
+ == 1.2.5 (2009-11-19)
2
+
3
+ === Minor Changes
4
+ * Ignores ruby_parser errors and pretneds the offending file was empty
5
+
1
6
  == 1.2.4 (2009-11-17)
2
7
 
3
8
  === Major Changes
@@ -1,5 +1,5 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
3
  module Reek # :doc:
4
- VERSION = '1.2.4'
4
+ VERSION = '1.2.5'
5
5
  end
@@ -11,20 +11,7 @@ module Reek
11
11
  @cwarnings = MaskingCollection.new
12
12
  @desc = sniffer.desc
13
13
  @display_masked_warnings = display_masked_warnings # SMELL: Control Couple
14
- sniffer.report_on(self)
15
- end
16
-
17
- def found_smell(warning)
18
- @cwarnings.add(warning)
19
- true
20
- end
21
-
22
- def found_masked_smell(warning)
23
- @cwarnings.add_masked(warning)
24
- end
25
-
26
- def num_masked_smells # SMELL: getter
27
- @cwarnings.num_masked_items
14
+ sniffer.report_on(@cwarnings)
28
15
  end
29
16
 
30
17
  # Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
@@ -11,15 +11,21 @@ module Reek
11
11
 
12
12
  attr_reader :desc
13
13
 
14
- def initialize(code, desc)
14
+ def initialize(code, desc, parser = RubyParser.new)
15
15
  @source = code
16
16
  @desc = desc
17
+ @parser = parser
17
18
  end
18
19
 
19
20
  def configure(sniffer) end
20
21
 
21
22
  def syntax_tree
22
- ast = RubyParser.new.parse(@source, @desc) || s()
23
+ begin
24
+ ast = @parser.parse(@source, @desc)
25
+ rescue Exception => error
26
+ $stderr.puts "#{desc}: #{error.class.name}: #{error}"
27
+ end
28
+ ast ||= s()
23
29
  TreeDresser.new.dress(ast)
24
30
  end
25
31
  end
@@ -9,11 +9,11 @@ class MaskingCollection
9
9
  @visible_items = SortedSet.new
10
10
  @masked_items = SortedSet.new
11
11
  end
12
- def add(item)
12
+ def found_smell(item)
13
13
  @visible_items.add(item)
14
14
  @masked_items.delete(item) if @masked_items.include?(item)
15
15
  end
16
- def add_masked(item)
16
+ def found_masked_smell(item)
17
17
  @masked_items.add(item) unless @visible_items.include?(item)
18
18
  end
19
19
  def num_visible_items
@@ -48,12 +48,11 @@ module Reek
48
48
  when IfContext
49
49
  return unless ctx.tests_a_parameter?
50
50
  found(ctx, "is controlled by argument #{SexpFormatter.format(ctx.if_expr)}")
51
- when MethodContext
51
+ else
52
52
  ctx.parameters.default_assignments.each do |param, value|
53
53
  next unless [:true, :false].include?(value[0])
54
54
  found(ctx, "is controlled by argument #{param.to_s}")
55
55
  end
56
- else
57
56
  end
58
57
  end
59
58
  end
@@ -31,10 +31,6 @@ module Reek
31
31
  DEFAULT_EXCLUDE_SET = []
32
32
 
33
33
  class << self
34
- def class_name
35
- self.name.split(/::/)[-1]
36
- end
37
-
38
34
  def contexts # :nodoc:
39
35
  [:defn, :defs]
40
36
  end
@@ -45,16 +41,6 @@ module Reek
45
41
  EXCLUDE_KEY => DEFAULT_EXCLUDE_SET
46
42
  }
47
43
  end
48
-
49
- def create(config)
50
- new(config[class_name])
51
- end
52
-
53
- def listen(hooks, config)
54
- detector = create(config)
55
- detector.listen_to(hooks)
56
- detector
57
- end
58
44
  end
59
45
 
60
46
  def initialize(config = self.class.default_config)
@@ -18,10 +18,6 @@ module Reek
18
18
  sym = name.to_s
19
19
  @myself.const_defined?(sym) ? @myself.const_get(sym) : nil
20
20
  end
21
-
22
- def has_parameter(sym)
23
- false
24
- end
25
21
 
26
22
  def inside_a_block?
27
23
  false
@@ -31,18 +27,6 @@ module Reek
31
27
  false
32
28
  end
33
29
 
34
- def num_statements
35
- 0
36
- end
37
-
38
- def refs
39
- @refs
40
- end
41
-
42
- def record_depends_on_self
43
- false
44
- end
45
-
46
30
  def outer_name
47
31
  ''
48
32
  end
@@ -5,10 +5,6 @@ module Reek
5
5
  # syntax tree more easily.
6
6
  #
7
7
  module SexpNode
8
- def children
9
- find_all { |item| Sexp === item }
10
- end
11
-
12
8
  def is_language_node?
13
9
  first.class == Symbol
14
10
  end
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{reek}
5
- s.version = "1.2.4"
5
+ s.version = "1.2.5"
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-11-17}
9
+ s.date = %q{2009-11-19}
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"]
13
13
  s.executables = ["reek"]
14
14
  s.extra_rdoc_files = ["History.txt", "License.txt", "README.rdoc"]
15
- s.files = ["History.txt", "License.txt", "README.rdoc", "Rakefile", "bin/reek", "config/defaults.reek", "features/masking_smells.feature", "features/options.feature", "features/profile.feature", "features/rake_task.feature", "features/reports.feature", "features/samples.feature", "features/stdin.feature", "features/step_definitions/reek_steps.rb", "features/support/env.rb", "lib/reek.rb", "lib/reek/adapters/application.rb", "lib/reek/adapters/command_line.rb", "lib/reek/adapters/config_file.rb", "lib/reek/adapters/core_extras.rb", "lib/reek/adapters/rake_task.rb", "lib/reek/adapters/report.rb", "lib/reek/adapters/source.rb", "lib/reek/adapters/spec.rb", "lib/reek/block_context.rb", "lib/reek/class_context.rb", "lib/reek/code_context.rb", "lib/reek/code_parser.rb", "lib/reek/configuration.rb", "lib/reek/detector_stack.rb", "lib/reek/help_command.rb", "lib/reek/if_context.rb", "lib/reek/masking_collection.rb", "lib/reek/method_context.rb", "lib/reek/module_context.rb", "lib/reek/name.rb", "lib/reek/object_refs.rb", "lib/reek/reek_command.rb", "lib/reek/sexp_formatter.rb", "lib/reek/singleton_method_context.rb", "lib/reek/smell_warning.rb", "lib/reek/smells/attribute.rb", "lib/reek/smells/class_variable.rb", "lib/reek/smells/control_couple.rb", "lib/reek/smells/data_clump.rb", "lib/reek/smells/duplication.rb", "lib/reek/smells/feature_envy.rb", "lib/reek/smells/large_class.rb", "lib/reek/smells/long_method.rb", "lib/reek/smells/long_parameter_list.rb", "lib/reek/smells/long_yield_list.rb", "lib/reek/smells/nested_iterators.rb", "lib/reek/smells/simulated_polymorphism.rb", "lib/reek/smells/smell_detector.rb", "lib/reek/smells/uncommunicative_name.rb", "lib/reek/smells/utility_function.rb", "lib/reek/sniffer.rb", "lib/reek/stop_context.rb", "lib/reek/tree_dresser.rb", "lib/reek/version_command.rb", "lib/reek/yield_call_context.rb", "reek.gemspec", "spec/reek/adapters/report_spec.rb", "spec/reek/adapters/should_reek_of_spec.rb", "spec/reek/adapters/should_reek_only_of_spec.rb", "spec/reek/adapters/should_reek_spec.rb", "spec/reek/block_context_spec.rb", "spec/reek/class_context_spec.rb", "spec/reek/code_context_spec.rb", "spec/reek/code_parser_spec.rb", "spec/reek/config_spec.rb", "spec/reek/configuration_spec.rb", "spec/reek/help_command_spec.rb", "spec/reek/if_context_spec.rb", "spec/reek/masking_collection_spec.rb", "spec/reek/method_context_spec.rb", "spec/reek/module_context_spec.rb", "spec/reek/name_spec.rb", "spec/reek/object_refs_spec.rb", "spec/reek/object_source_spec.rb", "spec/reek/reek_command_spec.rb", "spec/reek/singleton_method_context_spec.rb", "spec/reek/smell_warning_spec.rb", "spec/reek/smells/attribute_spec.rb", "spec/reek/smells/behaves_like_variable_detector.rb", "spec/reek/smells/class_variable_spec.rb", "spec/reek/smells/control_couple_spec.rb", "spec/reek/smells/data_clump_spec.rb", "spec/reek/smells/duplication_spec.rb", "spec/reek/smells/feature_envy_spec.rb", "spec/reek/smells/large_class_spec.rb", "spec/reek/smells/long_method_spec.rb", "spec/reek/smells/long_parameter_list_spec.rb", "spec/reek/smells/nested_iterators_spec.rb", "spec/reek/smells/simulated_polymorphism_spec.rb", "spec/reek/smells/smell_detector_spec.rb", "spec/reek/smells/uncommunicative_name_spec.rb", "spec/reek/smells/utility_function_spec.rb", "spec/reek/sniffer_spec.rb", "spec/reek/stop_context_spec.rb", "spec/reek/tree_dresser_spec.rb", "spec/reek/version_command_spec.rb", "spec/samples/all_but_one_masked/clean_one.rb", "spec/samples/all_but_one_masked/dirty.rb", "spec/samples/all_but_one_masked/masked.reek", "spec/samples/clean_due_to_masking/clean_one.rb", "spec/samples/clean_due_to_masking/clean_three.rb", "spec/samples/clean_due_to_masking/clean_two.rb", "spec/samples/clean_due_to_masking/dirty_one.rb", "spec/samples/clean_due_to_masking/dirty_two.rb", "spec/samples/clean_due_to_masking/masked.reek", "spec/samples/corrupt_config_file/corrupt.reek", "spec/samples/corrupt_config_file/dirty.rb", "spec/samples/empty_config_file/dirty.rb", "spec/samples/empty_config_file/empty.reek", "spec/samples/exceptions.reek", "spec/samples/inline.rb", "spec/samples/masked/dirty.rb", "spec/samples/masked/masked.reek", "spec/samples/mixed_results/clean_one.rb", "spec/samples/mixed_results/clean_three.rb", "spec/samples/mixed_results/clean_two.rb", "spec/samples/mixed_results/dirty_one.rb", "spec/samples/mixed_results/dirty_two.rb", "spec/samples/not_quite_masked/dirty.rb", "spec/samples/not_quite_masked/masked.reek", "spec/samples/optparse.rb", "spec/samples/overrides/masked/dirty.rb", "spec/samples/overrides/masked/lower.reek", "spec/samples/overrides/upper.reek", "spec/samples/redcloth.rb", "spec/samples/three_clean_files/clean_one.rb", "spec/samples/three_clean_files/clean_three.rb", "spec/samples/three_clean_files/clean_two.rb", "spec/samples/two_smelly_files/dirty_one.rb", "spec/samples/two_smelly_files/dirty_two.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/reek.rake", "tasks/test.rake"]
15
+ s.files = ["History.txt", "License.txt", "README.rdoc", "Rakefile", "bin/reek", "config/defaults.reek", "features/masking_smells.feature", "features/options.feature", "features/profile.feature", "features/rake_task.feature", "features/reports.feature", "features/samples.feature", "features/stdin.feature", "features/step_definitions/reek_steps.rb", "features/support/env.rb", "lib/reek.rb", "lib/reek/adapters/application.rb", "lib/reek/adapters/command_line.rb", "lib/reek/adapters/config_file.rb", "lib/reek/adapters/core_extras.rb", "lib/reek/adapters/rake_task.rb", "lib/reek/adapters/report.rb", "lib/reek/adapters/source.rb", "lib/reek/adapters/spec.rb", "lib/reek/block_context.rb", "lib/reek/class_context.rb", "lib/reek/code_context.rb", "lib/reek/code_parser.rb", "lib/reek/configuration.rb", "lib/reek/detector_stack.rb", "lib/reek/help_command.rb", "lib/reek/if_context.rb", "lib/reek/masking_collection.rb", "lib/reek/method_context.rb", "lib/reek/module_context.rb", "lib/reek/name.rb", "lib/reek/object_refs.rb", "lib/reek/reek_command.rb", "lib/reek/sexp_formatter.rb", "lib/reek/singleton_method_context.rb", "lib/reek/smell_warning.rb", "lib/reek/smells/attribute.rb", "lib/reek/smells/class_variable.rb", "lib/reek/smells/control_couple.rb", "lib/reek/smells/data_clump.rb", "lib/reek/smells/duplication.rb", "lib/reek/smells/feature_envy.rb", "lib/reek/smells/large_class.rb", "lib/reek/smells/long_method.rb", "lib/reek/smells/long_parameter_list.rb", "lib/reek/smells/long_yield_list.rb", "lib/reek/smells/nested_iterators.rb", "lib/reek/smells/simulated_polymorphism.rb", "lib/reek/smells/smell_detector.rb", "lib/reek/smells/uncommunicative_name.rb", "lib/reek/smells/utility_function.rb", "lib/reek/sniffer.rb", "lib/reek/stop_context.rb", "lib/reek/tree_dresser.rb", "lib/reek/version_command.rb", "lib/reek/yield_call_context.rb", "reek.gemspec", "spec/reek/adapters/report_spec.rb", "spec/reek/adapters/should_reek_of_spec.rb", "spec/reek/adapters/should_reek_only_of_spec.rb", "spec/reek/adapters/should_reek_spec.rb", "spec/reek/adapters/source_spec.rb", "spec/reek/block_context_spec.rb", "spec/reek/class_context_spec.rb", "spec/reek/code_context_spec.rb", "spec/reek/code_parser_spec.rb", "spec/reek/config_spec.rb", "spec/reek/configuration_spec.rb", "spec/reek/help_command_spec.rb", "spec/reek/if_context_spec.rb", "spec/reek/masking_collection_spec.rb", "spec/reek/method_context_spec.rb", "spec/reek/module_context_spec.rb", "spec/reek/name_spec.rb", "spec/reek/object_refs_spec.rb", "spec/reek/object_source_spec.rb", "spec/reek/reek_command_spec.rb", "spec/reek/singleton_method_context_spec.rb", "spec/reek/smell_warning_spec.rb", "spec/reek/smells/attribute_spec.rb", "spec/reek/smells/behaves_like_variable_detector.rb", "spec/reek/smells/class_variable_spec.rb", "spec/reek/smells/control_couple_spec.rb", "spec/reek/smells/data_clump_spec.rb", "spec/reek/smells/duplication_spec.rb", "spec/reek/smells/feature_envy_spec.rb", "spec/reek/smells/large_class_spec.rb", "spec/reek/smells/long_method_spec.rb", "spec/reek/smells/long_parameter_list_spec.rb", "spec/reek/smells/nested_iterators_spec.rb", "spec/reek/smells/simulated_polymorphism_spec.rb", "spec/reek/smells/smell_detector_spec.rb", "spec/reek/smells/uncommunicative_name_spec.rb", "spec/reek/smells/utility_function_spec.rb", "spec/reek/sniffer_spec.rb", "spec/reek/stop_context_spec.rb", "spec/reek/tree_dresser_spec.rb", "spec/reek/version_command_spec.rb", "spec/samples/all_but_one_masked/clean_one.rb", "spec/samples/all_but_one_masked/dirty.rb", "spec/samples/all_but_one_masked/masked.reek", "spec/samples/clean_due_to_masking/clean_one.rb", "spec/samples/clean_due_to_masking/clean_three.rb", "spec/samples/clean_due_to_masking/clean_two.rb", "spec/samples/clean_due_to_masking/dirty_one.rb", "spec/samples/clean_due_to_masking/dirty_two.rb", "spec/samples/clean_due_to_masking/masked.reek", "spec/samples/corrupt_config_file/corrupt.reek", "spec/samples/corrupt_config_file/dirty.rb", "spec/samples/empty_config_file/dirty.rb", "spec/samples/empty_config_file/empty.reek", "spec/samples/exceptions.reek", "spec/samples/inline.rb", "spec/samples/masked/dirty.rb", "spec/samples/masked/masked.reek", "spec/samples/mixed_results/clean_one.rb", "spec/samples/mixed_results/clean_three.rb", "spec/samples/mixed_results/clean_two.rb", "spec/samples/mixed_results/dirty_one.rb", "spec/samples/mixed_results/dirty_two.rb", "spec/samples/not_quite_masked/dirty.rb", "spec/samples/not_quite_masked/masked.reek", "spec/samples/optparse.rb", "spec/samples/overrides/masked/dirty.rb", "spec/samples/overrides/masked/lower.reek", "spec/samples/overrides/upper.reek", "spec/samples/redcloth.rb", "spec/samples/three_clean_files/clean_one.rb", "spec/samples/three_clean_files/clean_three.rb", "spec/samples/three_clean_files/clean_two.rb", "spec/samples/two_smelly_files/dirty_one.rb", "spec/samples/two_smelly_files/dirty_two.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/reek.rake", "tasks/test.rake"]
16
16
  s.homepage = %q{http://wiki.github.com/kevinrutherford/reek}
17
17
  s.post_install_message = %q{
18
18
  For more information on reek, see http://wiki.github.com/kevinrutherford/reek
@@ -29,21 +29,3 @@ describe ReportSection, "smell_list" do
29
29
  @lines[1].should match(/[Feature Envy]/)
30
30
  end
31
31
  end
32
-
33
- describe ReportSection, " as a SortedSet" do
34
- it 'should only add a smell once' do
35
- rpt = ReportSection.new(''.sniff, false)
36
- rpt.found_smell SmellWarning.new(Smells::FeatureEnvy.new, "self", 'too many!', false)
37
- rpt.found_smell SmellWarning.new(Smells::FeatureEnvy.new, "self", 'too many!', false)
38
- lines = rpt.smell_list.split("\n")
39
- lines.should have(1).lines
40
- end
41
-
42
- it 'should not count an identical masked smell' do
43
- rpt = ReportSection.new(''.sniff, false)
44
- # SMELL: Duplication -- the SmellWarning knows whether to call << or record_masked_smell
45
- rpt.found_smell SmellWarning.new(Smells::FeatureEnvy.new, "self", 'too many!', false)
46
- rpt.found_masked_smell(SmellWarning.new(Smells::FeatureEnvy.new, "self", 'too many!', true))
47
- rpt.header.should == 'string -- 1 warning'
48
- end
49
- end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ require 'reek/adapters/source'
4
+
5
+ include Reek
6
+
7
+ describe Source do
8
+ context 'when the parser fails' do
9
+ it 'returns an empty syntax tree' do
10
+ parser = mock('parser')
11
+ parser.should_receive(:parse).and_raise(SyntaxError)
12
+ src = Source.new('', '', parser)
13
+ src.syntax_tree.should == s()
14
+ end
15
+ end
16
+ end
@@ -21,14 +21,16 @@ end
21
21
 
22
22
  describe CodeParser, 'when a yield is the receiver' do
23
23
  it 'reports no problems' do
24
- source = 'def values(*args)
24
+ src = <<EOS
25
+ def values(*args)
25
26
  @to_sql += case
26
- when block_given? then " #{yield.to_sql}"
27
- else " values (#{args.to_sql})"
27
+ when block_given? then yield.to_sql
28
+ else args.to_sql
28
29
  end
29
30
  self
30
- end'
31
- source.should_not reek
31
+ end
32
+ EOS
33
+ src.should_not reek
32
34
  end
33
35
  end
34
36
 
@@ -78,7 +78,7 @@ describe MaskingCollection do
78
78
  context 'with one visible item' do
79
79
  before :each do
80
80
  @item = "hello"
81
- @collection.add(@item)
81
+ @collection.found_smell(@item)
82
82
  end
83
83
  it_should_behave_like 'one visible item'
84
84
  end
@@ -86,7 +86,7 @@ describe MaskingCollection do
86
86
  context 'with one masked item' do
87
87
  before :each do
88
88
  @item = "hiding!"
89
- @collection.add_masked(@item)
89
+ @collection.found_masked_smell(@item)
90
90
  end
91
91
  it_should_behave_like 'one masked item'
92
92
  end
@@ -95,8 +95,8 @@ describe MaskingCollection do
95
95
  before :each do
96
96
  @visible = "visible"
97
97
  @masked = "masked"
98
- @collection.add_masked(@masked)
99
- @collection.add(@visible)
98
+ @collection.found_masked_smell(@masked)
99
+ @collection.found_smell(@visible)
100
100
  end
101
101
  it 'has one visible item' do
102
102
  @collection.num_visible_items.should == 1
@@ -131,8 +131,8 @@ describe MaskingCollection do
131
131
  context 'with one visible item added twice' do
132
132
  before :each do
133
133
  @item = "hello"
134
- @collection.add(@item)
135
- @collection.add(@item)
134
+ @collection.found_smell(@item)
135
+ @collection.found_smell(@item)
136
136
  end
137
137
  it_should_behave_like 'one visible item'
138
138
  end
@@ -140,8 +140,8 @@ describe MaskingCollection do
140
140
  context 'with one masked item added twice' do
141
141
  before :each do
142
142
  @item = "hello"
143
- @collection.add_masked(@item)
144
- @collection.add_masked(@item)
143
+ @collection.found_masked_smell(@item)
144
+ @collection.found_masked_smell(@item)
145
145
  end
146
146
  it_should_behave_like 'one masked item'
147
147
  end
@@ -150,8 +150,8 @@ describe MaskingCollection do
150
150
  before :each do
151
151
  @first_item = "hello"
152
152
  @second_item = "goodbye"
153
- @collection.add(@first_item)
154
- @collection.add(@second_item)
153
+ @collection.found_smell(@first_item)
154
+ @collection.found_smell(@second_item)
155
155
  end
156
156
  it 'has 2 visible items' do
157
157
  @collection.num_visible_items.should == 2
@@ -186,8 +186,8 @@ describe MaskingCollection do
186
186
  before :each do
187
187
  @first_item = "hello"
188
188
  @second_item = "goodbye"
189
- @collection.add_masked(@first_item)
190
- @collection.add_masked(@second_item)
189
+ @collection.found_masked_smell(@first_item)
190
+ @collection.found_masked_smell(@second_item)
191
191
  end
192
192
  it 'has 0 visible items' do
193
193
  @collection.num_visible_items.should == 0
@@ -219,8 +219,8 @@ describe MaskingCollection do
219
219
  context 'with one masked item later made visible' do
220
220
  before :each do
221
221
  @item = "hello"
222
- @collection.add_masked(@item)
223
- @collection.add(@item)
222
+ @collection.found_masked_smell(@item)
223
+ @collection.found_smell(@item)
224
224
  end
225
225
  it_should_behave_like 'one visible item'
226
226
  end
@@ -228,8 +228,8 @@ describe MaskingCollection do
228
228
  context 'with one visible item later masked' do
229
229
  before :each do
230
230
  @item = "hello"
231
- @collection.add(@item)
232
- @collection.add_masked(@item)
231
+ @collection.found_smell(@item)
232
+ @collection.found_masked_smell(@item)
233
233
  end
234
234
  it_should_behave_like 'one visible item'
235
235
  end
@@ -20,44 +20,41 @@ describe FeatureEnvy do
20
20
  end
21
21
 
22
22
  it 'should not report single use' do
23
- 'def no_envy(arga)
24
- arga.barg(@item)
25
- end'.should_not reek
23
+ 'def no_envy(arga) arga.barg(@item) end'.should_not reek
26
24
  end
27
25
 
28
26
  it 'should not report return value' do
29
- 'def no_envy(arga)
30
- arga.barg(@item)
31
- arga
32
- end'.should_not reek
27
+ 'def no_envy(arga) arga.barg(@item); arga end'.should_not reek
33
28
  end
34
29
 
35
30
  it 'should report many calls to parameter' do
36
- 'def envy(arga)
37
- arga.b(arga) + arga.c(@fred)
38
- end'.should reek_only_of(:FeatureEnvy, /arga/)
31
+ 'def envy(arga) arga.b(arga) + arga.c(@fred) end'.should reek_only_of(:FeatureEnvy, /arga/)
39
32
  end
40
33
 
41
34
  it 'should report highest affinity' do
42
- ruby = 'def total_envy
43
- fred = @item
44
- total = 0
45
- total += fred.price
46
- total += fred.tax
47
- total *= 1.15
48
- end'
49
- ruby.should reek_only_of(:FeatureEnvy, /total/)
35
+ src = <<EOS
36
+ def total_envy
37
+ fred = @item
38
+ total = 0
39
+ total += fred.price
40
+ total += fred.tax
41
+ total *= 1.15
42
+ end
43
+ EOS
44
+ src.should reek_only_of(:FeatureEnvy, /total/)
50
45
  end
51
46
 
52
47
  it 'should report multiple affinities' do
53
- ruby = 'def total_envy
54
- fred = @item
55
- total = 0
56
- total += fred.price
57
- total += fred.tax
58
- end'
59
- ruby.should reek_of(:FeatureEnvy, /total/)
60
- ruby.should reek_of(:FeatureEnvy, /fred/)
48
+ src = <<EOS
49
+ def total_envy
50
+ fred = @item
51
+ total = 0
52
+ total += fred.price
53
+ total += fred.tax
54
+ end
55
+ EOS
56
+ src.should reek_of(:FeatureEnvy, /total/)
57
+ src.should reek_of(:FeatureEnvy, /fred/)
61
58
  end
62
59
 
63
60
  it 'should ignore global variables' do
@@ -77,45 +74,27 @@ describe FeatureEnvy do
77
74
  end
78
75
 
79
76
  it 'should not report ivar usage in a parameter' do
80
- 'def no_envy
81
- @item.price + tax(@item) - savings(@item)
82
- end'.should_not reek
77
+ 'def no_envy() @item.price + tax(@item) - savings(@item) end'.should_not reek
83
78
  end
84
79
 
85
80
  it 'should not be fooled by duplication' do
86
- 'def feed(thing)
87
- @cow.feed_to(thing.pig)
88
- @duck.feed_to(thing.pig)
89
- end'.should reek_only_of(:Duplication, /thing.pig/)
81
+ 'def feed(thing) @cow.feed_to(thing.pig); @duck.feed_to(thing.pig) end'.should reek_only_of(:Duplication, /thing.pig/)
90
82
  end
91
83
 
92
84
  it 'should count local calls' do
93
- 'def feed(thing)
94
- cow.feed_to(thing.pig)
95
- duck.feed_to(thing.pig)
96
- end'.should reek_only_of(:Duplication, /thing.pig/)
85
+ 'def feed(thing) cow.feed_to(thing.pig); duck.feed_to(thing.pig) end'.should reek_only_of(:Duplication, /thing.pig/)
97
86
  end
98
87
 
99
88
  it 'should not report single use of an lvar' do
100
- 'def no_envy()
101
- lv = @item
102
- lv.to_a
103
- end'.should_not reek
89
+ 'def no_envy() lv = @item; lv.to_a end'.should_not reek
104
90
  end
105
91
 
106
92
  it 'should not report returning an lvar' do
107
- 'def no_envy()
108
- lv = @item
109
- lv.to_a
110
- lv
111
- end'.should_not reek
93
+ 'def no_envy() lv = @item; lv.to_a; lv end'.should_not reek
112
94
  end
113
95
 
114
96
  it 'should report many calls to lvar' do
115
- 'def envy
116
- lv = @item
117
- lv.price + lv.tax
118
- end'.should reek_only_of(:FeatureEnvy, /lv/)
97
+ 'def envy() lv = @item; lv.price + lv.tax; end'.should reek_only_of(:FeatureEnvy, /lv/)
119
98
  #
120
99
  # def moved_version
121
100
  # price + tax
@@ -127,19 +106,19 @@ describe FeatureEnvy do
127
106
  end
128
107
 
129
108
  it 'ignores lvar usage in a parameter' do
130
- 'def no_envy
131
- lv = @item
132
- lv.price + tax(lv) - savings(lv)
133
- end'.should_not reek
109
+ 'def no_envy() lv = @item; lv.price + tax(lv) - savings(lv); end'.should_not reek
134
110
  end
135
111
 
136
112
  it 'ignores multiple ivars' do
137
- 'def func
138
- @other.a
139
- @other.b
140
- @nother.c
141
- @nother.d
142
- end'.should_not reek
113
+ src = <<EOS
114
+ def func
115
+ @other.a
116
+ @other.b
117
+ @nother.c
118
+ @nother.d
119
+ end
120
+ EOS
121
+ src.should_not reek
143
122
  #
144
123
  # def other.func(me)
145
124
  # a
@@ -151,21 +130,20 @@ describe FeatureEnvy do
151
130
  end
152
131
 
153
132
  it 'ignores frequent use of a call' do
154
- 'def func
155
- other.a
156
- other.b
157
- nother.c
158
- end'.should_not reek_of(:FeatureEnvy)
133
+ 'def func() other.a; other.b; nother.c end'.should_not reek_of(:FeatureEnvy)
159
134
  end
160
135
 
161
136
  it 'counts self references correctly' do
162
- 'def adopt!(other)
163
- other.keys.each do |key|
164
- self[key] += 3
165
- self[key] = o4
166
- end
167
- self
168
- end'.should_not reek
137
+ src = <<EOS
138
+ def adopt!(other)
139
+ other.keys.each do |key|
140
+ self[key] += 3
141
+ self[key] = o4
142
+ end
143
+ self
144
+ end
145
+ EOS
146
+ src.should_not reek
169
147
  end
170
148
  end
171
149
 
@@ -182,7 +160,6 @@ def report
182
160
  @report
183
161
  end
184
162
  EOS
185
-
186
163
  ruby.should_not reek
187
164
  end
188
165
 
@@ -11,23 +11,32 @@ describe NestedIterators do
11
11
  end
12
12
 
13
13
  it 'should not report method with successive iterators' do
14
- 'def bad(fred)
15
- @fred.each {|item| item.each }
16
- @jim.each {|ting| ting.each }
17
- end'.should_not reek
14
+ src = <<EOS
15
+ def bad(fred)
16
+ @fred.each {|item| item.each }
17
+ @jim.each {|ting| ting.each }
18
+ end
19
+ EOS
20
+ src.should_not reek
18
21
  end
19
22
 
20
23
  it 'should not report method with chained iterators' do
21
- 'def chained
22
- @sig.keys.sort_by { |xray| xray.to_s }.each { |min| md5 << min.to_s }
23
- end'.should_not reek
24
+ src = <<EOS
25
+ def chained
26
+ @sig.keys.sort_by { |xray| xray.to_s }.each { |min| md5 << min.to_s }
27
+ end
28
+ EOS
29
+ src.should_not reek
24
30
  end
25
31
 
26
32
  it 'should report nested iterators only once per method' do
27
- 'def bad(fred)
28
- @fred.each {|item| item.each {|part| @joe.send} }
29
- @jim.each {|ting| ting.each {|piece| @hal.send} }
30
- end'.should reek_only_of(:NestedIterators)
33
+ src = <<EOS
34
+ def bad(fred)
35
+ @fred.each {|item| item.each {|part| @joe.send} }
36
+ @jim.each {|ting| ting.each {|piece| @hal.send} }
37
+ end
38
+ EOS
39
+ src.should reek_only_of(:NestedIterators)
31
40
  end
32
41
  end
33
42
 
@@ -29,22 +29,16 @@ describe UtilityFunction do
29
29
 
30
30
  context 'with only one call' do
31
31
  it 'does not report a call to a parameter' do
32
- 'def simple(arga)
33
- arga.to_s
34
- end'.should_not reek_of(:UtilityFunction, /simple/)
32
+ 'def simple(arga) arga.to_s end'.should_not reek_of(:UtilityFunction, /simple/)
35
33
  end
36
34
  it 'does not report a call to a constant' do
37
- 'def simple(arga)
38
- FIELDS[arga]
39
- end'.should_not reek
35
+ 'def simple(arga) FIELDS[arga] end'.should_not reek
40
36
  end
41
37
  end
42
38
 
43
39
  context 'with two or more calls' do
44
40
  it 'reports two calls' do
45
- 'def simple(arga)
46
- arga.to_s + arga.to_i
47
- end'.should reek_of(:UtilityFunction, /simple/)
41
+ 'def simple(arga) arga.to_s + arga.to_i end'.should reek_of(:UtilityFunction, /simple/)
48
42
  end
49
43
  it 'should count usages of self'do
50
44
  'def <=>(other) Options[:sort_order].compare(self, other) end'.should_not reek
@@ -12,7 +12,7 @@ describe StopContext do
12
12
 
13
13
  context 'with a module that is not loaded' do
14
14
  it 'does not find the module' do
15
- @stop.find_module('CGI').should == nil
15
+ @stop.find_module('Nobbles').should == nil
16
16
  end
17
17
  it 'does not find an unqualified class in the module' do
18
18
  @stop.find_module('HtmlExtension').should == nil
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.4
4
+ version: 1.2.5
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-11-17 00:00:00 +00:00
12
+ date: 2009-11-19 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -120,6 +120,7 @@ files:
120
120
  - spec/reek/adapters/should_reek_of_spec.rb
121
121
  - spec/reek/adapters/should_reek_only_of_spec.rb
122
122
  - spec/reek/adapters/should_reek_spec.rb
123
+ - spec/reek/adapters/source_spec.rb
123
124
  - spec/reek/block_context_spec.rb
124
125
  - spec/reek/class_context_spec.rb
125
126
  - spec/reek/code_context_spec.rb