reek 1.2.1 → 1.2.3

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.
Files changed (68) hide show
  1. data/History.txt +10 -0
  2. data/Rakefile +0 -1
  3. data/config/defaults.reek +8 -6
  4. data/features/masking_smells.feature +9 -9
  5. data/features/options.feature +2 -2
  6. data/features/profile.feature +34 -0
  7. data/features/rake_task.feature +74 -0
  8. data/features/reports.feature +1 -1
  9. data/features/samples.feature +4 -4
  10. data/features/stdin.feature +1 -1
  11. data/features/step_definitions/reek_steps.rb +11 -7
  12. data/features/support/env.rb +26 -18
  13. data/lib/reek/adapters/application.rb +9 -2
  14. data/lib/reek/adapters/command_line.rb +2 -2
  15. data/lib/reek/adapters/core_extras.rb +0 -8
  16. data/lib/reek/adapters/source.rb +4 -1
  17. data/lib/reek/adapters/spec.rb +1 -4
  18. data/lib/reek/block_context.rb +14 -8
  19. data/lib/reek/class_context.rb +6 -55
  20. data/lib/reek/code_context.rb +10 -0
  21. data/lib/reek/code_parser.rb +26 -53
  22. data/lib/reek/configuration.rb +12 -6
  23. data/lib/reek/if_context.rb +2 -3
  24. data/lib/reek/method_context.rb +8 -12
  25. data/lib/reek/module_context.rb +35 -16
  26. data/lib/reek/name.rb +2 -0
  27. data/lib/reek/object_refs.rb +0 -3
  28. data/lib/reek/sexp_formatter.rb +0 -2
  29. data/lib/reek/smells/attribute.rb +48 -0
  30. data/lib/reek/smells/class_variable.rb +17 -4
  31. data/lib/reek/smells/control_couple.rb +3 -10
  32. data/lib/reek/smells/data_clump.rb +10 -10
  33. data/lib/reek/smells/feature_envy.rb +1 -8
  34. data/lib/reek/smells/large_class.rb +3 -3
  35. data/lib/reek/smells/simulated_polymorphism.rb +17 -3
  36. data/lib/reek/smells/smell_detector.rb +11 -2
  37. data/lib/reek/smells/utility_function.rb +1 -1
  38. data/lib/reek/sniffer.rb +2 -8
  39. data/lib/reek/stop_context.rb +1 -1
  40. data/lib/reek/tree_dresser.rb +74 -0
  41. data/lib/reek.rb +1 -1
  42. data/reek.gemspec +3 -3
  43. data/spec/reek/adapters/should_reek_of_spec.rb +7 -1
  44. data/spec/reek/block_context_spec.rb +6 -6
  45. data/spec/reek/class_context_spec.rb +2 -23
  46. data/spec/reek/code_context_spec.rb +149 -67
  47. data/spec/reek/code_parser_spec.rb +35 -51
  48. data/spec/reek/method_context_spec.rb +4 -4
  49. data/spec/reek/singleton_method_context_spec.rb +1 -1
  50. data/spec/reek/smells/attribute_spec.rb +26 -0
  51. data/spec/reek/smells/behaves_like_variable_detector.rb +39 -0
  52. data/spec/reek/smells/class_variable_spec.rb +77 -43
  53. data/spec/reek/smells/control_couple_spec.rb +1 -1
  54. data/spec/reek/smells/data_clump_spec.rb +31 -13
  55. data/spec/reek/smells/feature_envy_spec.rb +1 -1
  56. data/spec/reek/smells/large_class_spec.rb +32 -69
  57. data/spec/reek/smells/long_parameter_list_spec.rb +0 -12
  58. data/spec/reek/smells/simulated_polymorphism_spec.rb +66 -18
  59. data/spec/reek/smells/utility_function_spec.rb +0 -21
  60. data/spec/reek/sniffer_spec.rb +1 -0
  61. data/spec/samples/not_quite_masked/dirty.rb +2 -0
  62. data/spec/spec_helper.rb +1 -1
  63. data/tasks/reek.rake +1 -1
  64. data/tasks/test.rake +3 -4
  65. metadata +8 -5
  66. data/lib/reek/adapters/object_source.rb +0 -52
  67. data/lib/reek/exceptions.reek +0 -20
  68. data/spec/quality/reek_source_spec.rb +0 -15
data/tasks/test.rake CHANGED
@@ -6,7 +6,6 @@ require 'spec/rake/spectask'
6
6
 
7
7
  namespace 'test' do
8
8
  UNIT_TESTS = FileList['spec/reek/**/*_spec.rb']
9
- QUALITY_TESTS = FileList['spec/quality/**/*_spec.rb']
10
9
 
11
10
  Spec::Rake::SpecTask.new('spec') do |t|
12
11
  t.spec_files = UNIT_TESTS
@@ -16,7 +15,7 @@ namespace 'test' do
16
15
  end
17
16
 
18
17
  Spec::Rake::SpecTask.new('quality') do |t|
19
- t.spec_files = QUALITY_TESTS
18
+ t.spec_files = FileList['quality/**/*_spec.rb']
20
19
  t.spec_opts = ['--color']
21
20
  t.ruby_opts = ['-Ilib']
22
21
  t.rcov = false
@@ -24,7 +23,7 @@ namespace 'test' do
24
23
 
25
24
  desc 'Runs all unit tests under RCov'
26
25
  Spec::Rake::SpecTask.new('rcov') do |t|
27
- t.spec_files = UNIT_TESTS + QUALITY_TESTS
26
+ t.spec_files = UNIT_TESTS
28
27
  t.rcov = true
29
28
  t.rcov_dir = 'build/coverage'
30
29
  end
@@ -39,7 +38,7 @@ namespace 'test' do
39
38
  end
40
39
 
41
40
  desc 'Runs all unit tests, acceptance tests and quality checks'
42
- task 'all' => ['test:spec', 'test:features', 'test:quality', 'test:multiruby']
41
+ task 'all' => ['test:spec', 'test:features', 'test:multiruby']
43
42
  end
44
43
 
45
44
  task 'clobber_rcov' => 'test:clobber_rcov'
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.1
4
+ version: 1.2.3
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-10-03 00:00:00 +01:00
12
+ date: 2009-11-02 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -62,6 +62,8 @@ files:
62
62
  - config/defaults.reek
63
63
  - features/masking_smells.feature
64
64
  - features/options.feature
65
+ - features/profile.feature
66
+ - features/rake_task.feature
65
67
  - features/reports.feature
66
68
  - features/samples.feature
67
69
  - features/stdin.feature
@@ -72,7 +74,6 @@ files:
72
74
  - lib/reek/adapters/command_line.rb
73
75
  - lib/reek/adapters/config_file.rb
74
76
  - lib/reek/adapters/core_extras.rb
75
- - lib/reek/adapters/object_source.rb
76
77
  - lib/reek/adapters/rake_task.rb
77
78
  - lib/reek/adapters/report.rb
78
79
  - lib/reek/adapters/source.rb
@@ -83,7 +84,6 @@ files:
83
84
  - lib/reek/code_parser.rb
84
85
  - lib/reek/configuration.rb
85
86
  - lib/reek/detector_stack.rb
86
- - lib/reek/exceptions.reek
87
87
  - lib/reek/if_context.rb
88
88
  - lib/reek/method_context.rb
89
89
  - lib/reek/module_context.rb
@@ -92,6 +92,7 @@ files:
92
92
  - lib/reek/sexp_formatter.rb
93
93
  - lib/reek/singleton_method_context.rb
94
94
  - lib/reek/smell_warning.rb
95
+ - lib/reek/smells/attribute.rb
95
96
  - lib/reek/smells/class_variable.rb
96
97
  - lib/reek/smells/control_couple.rb
97
98
  - lib/reek/smells/data_clump.rb
@@ -108,9 +109,9 @@ files:
108
109
  - lib/reek/smells/utility_function.rb
109
110
  - lib/reek/sniffer.rb
110
111
  - lib/reek/stop_context.rb
112
+ - lib/reek/tree_dresser.rb
111
113
  - lib/reek/yield_call_context.rb
112
114
  - reek.gemspec
113
- - spec/quality/reek_source_spec.rb
114
115
  - spec/reek/adapters/report_spec.rb
115
116
  - spec/reek/adapters/should_reek_of_spec.rb
116
117
  - spec/reek/adapters/should_reek_only_of_spec.rb
@@ -129,6 +130,8 @@ files:
129
130
  - spec/reek/object_source_spec.rb
130
131
  - spec/reek/singleton_method_context_spec.rb
131
132
  - spec/reek/smell_warning_spec.rb
133
+ - spec/reek/smells/attribute_spec.rb
134
+ - spec/reek/smells/behaves_like_variable_detector.rb
132
135
  - spec/reek/smells/class_variable_spec.rb
133
136
  - spec/reek/smells/control_couple_spec.rb
134
137
  - spec/reek/smells/data_clump_spec.rb
@@ -1,52 +0,0 @@
1
- require 'reek/adapters/source'
2
- require 'reek/configuration'
3
- require 'reek/smells/large_class'
4
-
5
- include Reek::Smells
6
-
7
- module Reek
8
- class ObjectSource < Source # :nodoc:
9
-
10
- def self.unify(sexp) # :nodoc:
11
- unifier = Unifier.new
12
- unifier.processors.each do |proc|
13
- proc.unsupported.delete :cfunc # HACK
14
- end
15
- return unifier.process(sexp[0])
16
- end
17
-
18
- def configure(sniffer)
19
- super
20
- disabled_config = {Reek::SmellConfiguration::ENABLED_KEY => false}
21
- sniffer.configure(LargeClass, disabled_config)
22
- end
23
-
24
- def self.can_parse_objects?
25
- return true if Object.const_defined?(:ParseTree)
26
- begin
27
- require 'parse_tree'
28
- true
29
- rescue LoadError
30
- false
31
- end
32
- end
33
-
34
- def syntax_tree
35
- if ObjectSource.can_parse_objects?
36
- ObjectSource.unify(ParseTree.new.parse_tree(@source))
37
- else
38
- throw ArgumentError.new('You must install the ParseTree gem to use this feature')
39
- end
40
- end
41
- end
42
- end
43
-
44
- class Object
45
- #
46
- # Constructs a Sniffer which examines this object for code smells.
47
- # (This feature is only enabled if you have the ParseTree gem installed.)
48
- #
49
- def to_reek_source
50
- ObjectSource.new(self, self.to_s)
51
- end
52
- end
@@ -1,20 +0,0 @@
1
- ---
2
- Duplication:
3
- exclude:
4
- - Reek::Options#set_options
5
- FeatureEnvy:
6
- exclude:
7
- - examine_context
8
- LargeClass:
9
- exclude:
10
- - CodeParser
11
- LongMethod:
12
- exclude:
13
- - Reek::SexpFormatter#self.format
14
- - Reek::Options#set_options
15
- UncommunicativeName:
16
- accept:
17
- - process_op_asgn1
18
- UtilityFunction:
19
- exclude:
20
- - Reek::Spec
@@ -1,15 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
-
3
- describe 'Reek source code' do
4
- it 'has no smells' do
5
- Dir['lib/**/*.rb'].should_not reek
6
- end
7
-
8
- nucleus = Dir['lib/reek/**.rb'] - Dir['lib/reek/adapters/**/*.rb']
9
- nucleus.each do |src|
10
- it "#{src} contains no references from the nucleus out to the adapters" do
11
- IO.readlines(src).grep(/adapters/).should == []
12
- end
13
- end
14
-
15
- end