reek 3.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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -2
- data/{CHANGELOG → CHANGELOG.md} +150 -123
- data/README.md +61 -21
- data/Rakefile +2 -1
- data/bin/reek +1 -0
- data/config/defaults.reek +2 -2
- data/docs/Attribute.md +9 -13
- data/docs/Basic-Smell-Options.md +2 -2
- data/docs/Command-Line-Options.md +2 -2
- data/docs/Too-Many-Instance-Variables.md +1 -1
- data/features/samples.feature +22 -31
- data/features/step_definitions/sample_file_steps.rb +2 -2
- data/features/support/env.rb +1 -0
- data/lib/reek.rb +1 -0
- data/lib/reek/ast/ast_node_class_map.rb +5 -1
- data/lib/reek/ast/node.rb +4 -2
- data/lib/reek/ast/object_refs.rb +9 -5
- data/lib/reek/ast/reference_collector.rb +4 -2
- data/lib/reek/cli/application.rb +12 -9
- data/lib/reek/cli/command.rb +4 -0
- data/lib/reek/cli/input.rb +4 -4
- data/lib/reek/cli/option_interpreter.rb +11 -7
- data/lib/reek/cli/options.rb +42 -40
- data/lib/reek/cli/reek_command.rb +3 -3
- data/lib/reek/cli/warning_collector.rb +7 -3
- data/lib/reek/code_comment.rb +5 -1
- data/lib/reek/configuration/app_configuration.rb +4 -4
- data/lib/reek/context/code_context.rb +19 -17
- data/lib/reek/examiner.rb +8 -6
- data/lib/reek/rake/task.rb +13 -22
- data/lib/reek/report/formatter.rb +5 -1
- data/lib/reek/report/report.rb +46 -44
- data/lib/reek/smells/attribute.rb +42 -24
- data/lib/reek/smells/control_parameter.rb +21 -13
- data/lib/reek/smells/data_clump.rb +17 -9
- data/lib/reek/smells/duplicate_method_call.rb +12 -6
- data/lib/reek/smells/long_parameter_list.rb +2 -2
- data/lib/reek/smells/long_yield_list.rb +4 -4
- data/lib/reek/smells/nested_iterators.rb +4 -2
- data/lib/reek/smells/nil_check.rb +6 -2
- data/lib/reek/smells/repeated_conditional.rb +2 -2
- data/lib/reek/smells/smell_configuration.rb +15 -7
- data/lib/reek/smells/smell_detector.rb +23 -10
- data/lib/reek/smells/smell_repository.rb +9 -16
- data/lib/reek/smells/smell_warning.rb +6 -6
- data/lib/reek/smells/too_many_instance_variables.rb +4 -4
- data/lib/reek/smells/too_many_methods.rb +2 -2
- data/lib/reek/smells/too_many_statements.rb +4 -4
- data/lib/reek/smells/uncommunicative_method_name.rb +5 -5
- data/lib/reek/smells/uncommunicative_module_name.rb +5 -5
- data/lib/reek/smells/uncommunicative_parameter_name.rb +8 -4
- data/lib/reek/smells/uncommunicative_variable_name.rb +8 -4
- data/lib/reek/source/source_code.rb +6 -2
- data/lib/reek/source/source_locator.rb +4 -4
- data/lib/reek/spec/should_reek.rb +9 -4
- data/lib/reek/spec/should_reek_of.rb +8 -5
- data/lib/reek/spec/should_reek_only_of.rb +12 -8
- data/lib/reek/tree_dresser.rb +6 -2
- data/lib/reek/tree_walker.rb +28 -22
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +6 -5
- data/spec/gem/yard_spec.rb +6 -9
- data/spec/reek/code_comment_spec.rb +1 -1
- data/spec/reek/report/xml_report_spec.rb +11 -21
- data/spec/reek/smells/attribute_spec.rb +73 -57
- data/spec/reek/smells/too_many_instance_variables_spec.rb +26 -12
- data/spec/reek/source/source_locator_spec.rb +2 -2
- data/spec/samples/checkstyle.xml +12 -1
- data/spec/spec_helper.rb +1 -0
- metadata +20 -7
- data/spec/samples/unusual_syntax.rb +0 -21
data/spec/gem/yard_spec.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
|
+
require 'open3'
|
1
2
|
require_relative '../spec_helper'
|
2
|
-
require 'tempfile'
|
3
3
|
|
4
4
|
RSpec.describe 'yardoc' do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
it 'raises no warnings' do
|
12
|
-
expect(@stderr).to eq('')
|
5
|
+
it 'executes successfully with no warnings' do
|
6
|
+
stdout, stderr, status = Open3.capture3('yardoc')
|
7
|
+
expect(stdout).to_not include('[warn]')
|
8
|
+
expect(stderr).to be_empty
|
9
|
+
expect(status).to be_success
|
13
10
|
end
|
14
11
|
end
|
@@ -38,7 +38,7 @@ RSpec.describe Reek::CodeComment do
|
|
38
38
|
expect(config['Duplication']).to include('enabled')
|
39
39
|
expect(config['Duplication']['enabled']).to be_falsey
|
40
40
|
end
|
41
|
-
it 'parses hashed options with
|
41
|
+
it 'parses hashed options with Ruby names' do
|
42
42
|
comment = '# :reek:nested_iterators: { enabled: true }'
|
43
43
|
config = described_class.new(comment).config
|
44
44
|
expect(config).to include('NestedIterators')
|
@@ -1,35 +1,25 @@
|
|
1
|
-
require 'pathname'
|
2
1
|
require_relative '../../spec_helper'
|
3
2
|
require_relative '../../../lib/reek/examiner'
|
4
3
|
require_relative '../../../lib/reek/report/report'
|
5
|
-
require_relative '../../../lib/reek/report/formatter'
|
6
4
|
|
7
5
|
RSpec.describe Reek::Report::XMLReport do
|
8
|
-
let(:
|
6
|
+
let(:xml_report) { Reek::Report::XMLReport.new }
|
9
7
|
|
10
8
|
context 'empty source' do
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'prints empty checkstyle xml' do
|
18
|
-
expect { instance.show }.to output("<?xml version='1.0'?>\n<checkstyle/>\n").to_stdout
|
9
|
+
it 'prints empty checkstyle XML' do
|
10
|
+
xml_report.add_examiner Reek::Examiner.new('')
|
11
|
+
xml = "<?xml version='1.0'?>\n<checkstyle/>\n"
|
12
|
+
expect { xml_report.show }.to output(xml).to_stdout
|
19
13
|
end
|
20
14
|
end
|
21
15
|
|
22
16
|
context 'source with voliations' do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
it 'prints non-empty checkstyle xml' do
|
31
|
-
sample_path = SAMPLES_PATH.join('checkstyle.xml')
|
32
|
-
expect { instance.show }.to output(sample_path.read).to_stdout
|
17
|
+
it 'prints non-empty checkstyle XML' do
|
18
|
+
path = SAMPLES_PATH.join('two_smelly_files/dirty_one.rb')
|
19
|
+
xml_report.add_examiner Reek::Examiner.new(path)
|
20
|
+
xml = SAMPLES_PATH.join('checkstyle.xml').read
|
21
|
+
xml = xml.gsub(path.to_s, path.expand_path.to_s)
|
22
|
+
expect { xml_report.show }.to output(xml).to_stdout
|
33
23
|
end
|
34
24
|
end
|
35
25
|
end
|
@@ -1,16 +1,8 @@
|
|
1
1
|
require_relative '../../spec_helper'
|
2
2
|
require_relative '../../../lib/reek/smells/attribute'
|
3
|
-
require_relative '../../../lib/reek/smells/smell_configuration'
|
4
3
|
require_relative 'smell_detector_shared'
|
5
4
|
|
6
5
|
RSpec.describe Reek::Smells::Attribute do
|
7
|
-
let(:config) do
|
8
|
-
{
|
9
|
-
Reek::Smells::Attribute => { Reek::Smells::SmellConfiguration::ENABLED_KEY => true }
|
10
|
-
}
|
11
|
-
end
|
12
|
-
let(:configuration) { test_configuration_for(config) }
|
13
|
-
|
14
6
|
before(:each) do
|
15
7
|
@source_name = 'dummy_source'
|
16
8
|
@detector = build(:smell_detector, smell_type: :Attribute, source: @source_name)
|
@@ -20,99 +12,123 @@ RSpec.describe Reek::Smells::Attribute do
|
|
20
12
|
|
21
13
|
context 'with no attributes' do
|
22
14
|
it 'records nothing' do
|
23
|
-
|
15
|
+
src = <<-EOS
|
24
16
|
class Klass
|
25
17
|
end
|
26
|
-
|
18
|
+
EOS
|
19
|
+
expect(src).to_not reek_of(:Attribute)
|
27
20
|
end
|
28
21
|
end
|
29
22
|
|
30
23
|
context 'with attributes' do
|
31
|
-
it 'records nothing' do
|
32
|
-
|
24
|
+
it 'records nothing for attribute readers' do
|
25
|
+
src = <<-EOS
|
33
26
|
class Klass
|
34
|
-
attr :
|
35
|
-
|
36
|
-
private
|
37
|
-
attr :super_thing
|
38
|
-
public
|
39
|
-
attr :super_thing2
|
40
|
-
private
|
41
|
-
attr :super_thing2
|
27
|
+
attr :my_attr
|
28
|
+
attr_reader :my_attr2
|
42
29
|
end
|
43
|
-
|
30
|
+
EOS
|
31
|
+
expect(src).to_not reek_of(:Attribute)
|
44
32
|
end
|
45
33
|
|
46
|
-
it 'records
|
47
|
-
|
34
|
+
it 'records writer attribute' do
|
35
|
+
src = <<-EOS
|
36
|
+
class Klass
|
37
|
+
attr_writer :my_attr
|
38
|
+
end
|
39
|
+
EOS
|
40
|
+
expect(src).to reek_of(:Attribute, name: 'my_attr')
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'records attr_writer attribute in a module' do
|
44
|
+
src = <<-EOS
|
48
45
|
module Mod
|
49
|
-
|
46
|
+
attr_writer :my_attr
|
50
47
|
end
|
51
|
-
|
48
|
+
EOS
|
49
|
+
expect(src).to reek_of(:Attribute, name: 'my_attr')
|
52
50
|
end
|
53
51
|
|
54
|
-
it 'records
|
55
|
-
|
52
|
+
it 'records accessor attribute' do
|
53
|
+
src = <<-EOS
|
56
54
|
class Klass
|
57
|
-
|
55
|
+
attr_accessor :my_attr
|
58
56
|
end
|
59
|
-
|
57
|
+
EOS
|
58
|
+
expect(src).to reek_of(:Attribute, name: 'my_attr')
|
60
59
|
end
|
61
60
|
|
62
|
-
it 'records
|
63
|
-
|
61
|
+
it 'records attr defining a writer' do
|
62
|
+
src = <<-EOS
|
64
63
|
class Klass
|
65
|
-
|
64
|
+
attr :my_attr, true
|
66
65
|
end
|
67
|
-
|
66
|
+
EOS
|
67
|
+
expect(src).to reek_of(:Attribute, name: 'my_attr')
|
68
68
|
end
|
69
69
|
|
70
|
-
it '
|
71
|
-
|
70
|
+
it "doesn't record protected attributes" do
|
71
|
+
src = '
|
72
72
|
class Klass
|
73
|
-
|
73
|
+
protected
|
74
|
+
attr_writer :attr1
|
75
|
+
attr_accessor :attr2
|
76
|
+
attr :attr3
|
77
|
+
attr :attr4, true
|
78
|
+
attr_reader :attr5
|
74
79
|
end
|
75
|
-
'
|
80
|
+
'
|
81
|
+
expect(src).to_not reek_of(:Attribute)
|
76
82
|
end
|
77
83
|
|
78
|
-
it '
|
79
|
-
|
84
|
+
it "doesn't record private attributes" do
|
85
|
+
src = '
|
80
86
|
class Klass
|
81
|
-
|
87
|
+
private
|
88
|
+
attr_writer :attr1
|
89
|
+
attr_accessor :attr2
|
90
|
+
attr :attr3
|
91
|
+
attr :attr4, true
|
92
|
+
attr_reader :attr5
|
82
93
|
end
|
83
|
-
'
|
94
|
+
'
|
95
|
+
expect(src).to_not reek_of(:Attribute)
|
84
96
|
end
|
85
97
|
|
86
|
-
it 'records
|
87
|
-
|
98
|
+
it 'records attr_writer defined in public section' do
|
99
|
+
src = <<-EOS
|
88
100
|
class Klass
|
89
101
|
private
|
90
|
-
|
91
|
-
|
92
|
-
private :my_attr
|
93
|
-
public :my_attr
|
102
|
+
public
|
103
|
+
attr_writer :my_attr
|
94
104
|
end
|
95
|
-
|
105
|
+
EOS
|
106
|
+
expect(src).to reek_of(:Attribute, name: 'my_attr')
|
96
107
|
end
|
97
108
|
|
98
|
-
it
|
99
|
-
src =
|
109
|
+
it 'records attr_writer after switching visbility to public' do
|
110
|
+
src = <<-EOS
|
100
111
|
class Klass
|
101
|
-
|
102
|
-
|
112
|
+
private
|
113
|
+
attr_writer :my_attr
|
114
|
+
public :my_attr
|
103
115
|
end
|
104
|
-
|
105
|
-
expect(src).
|
116
|
+
EOS
|
117
|
+
expect(src).to reek_of(:Attribute, name: 'my_attr')
|
106
118
|
end
|
107
119
|
|
108
|
-
it
|
120
|
+
it 'resets visibility in new contexts' do
|
109
121
|
src = '
|
110
122
|
class Klass
|
111
123
|
private
|
112
|
-
|
124
|
+
attr_writer :attr1
|
125
|
+
end
|
126
|
+
|
127
|
+
class OtherKlass
|
128
|
+
attr_writer :attr1
|
113
129
|
end
|
114
130
|
'
|
115
|
-
expect(src).
|
131
|
+
expect(src).to reek_of(:Attribute)
|
116
132
|
end
|
117
133
|
end
|
118
134
|
end
|
@@ -10,12 +10,26 @@ RSpec.describe Reek::Smells::TooManyInstanceVariables do
|
|
10
10
|
|
11
11
|
it_should_behave_like 'SmellDetector'
|
12
12
|
|
13
|
+
def default_max_ivars
|
14
|
+
Reek::Smells::TooManyInstanceVariables::DEFAULT_MAX_IVARS
|
15
|
+
end
|
16
|
+
|
17
|
+
def too_many_ivars
|
18
|
+
default_max_ivars + 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def ivar_sequence(count: default_max_ivars, alphabet: ('a'..'z').to_a)
|
22
|
+
alphabet.first(count).map do |name|
|
23
|
+
"@#{name}=#{rand}"
|
24
|
+
end.join(',')
|
25
|
+
end
|
26
|
+
|
13
27
|
context 'counting instance variables' do
|
14
|
-
it 'should not report
|
28
|
+
it 'should not report for non-excessive ivars' do
|
15
29
|
src = <<-EOS
|
16
30
|
class Empty
|
17
31
|
def ivars
|
18
|
-
|
32
|
+
#{ivar_sequence}
|
19
33
|
end
|
20
34
|
end
|
21
35
|
EOS
|
@@ -26,36 +40,36 @@ RSpec.describe Reek::Smells::TooManyInstanceVariables do
|
|
26
40
|
src = <<-EOS
|
27
41
|
class Empty
|
28
42
|
def ivars
|
29
|
-
|
30
|
-
|
43
|
+
#{ivar_sequence}
|
44
|
+
#{ivar_sequence}
|
31
45
|
end
|
32
46
|
end
|
33
47
|
EOS
|
34
48
|
expect(src).not_to reek_of(:TooManyInstanceVariables)
|
35
49
|
end
|
36
50
|
|
37
|
-
it 'should report
|
51
|
+
it 'should report excessive ivars' do
|
38
52
|
src = <<-EOS
|
39
53
|
class Empty
|
40
54
|
def ivars
|
41
|
-
|
55
|
+
#{ivar_sequence(count: too_many_ivars)}
|
42
56
|
end
|
43
57
|
end
|
44
58
|
EOS
|
45
59
|
expect(src).to reek_of(:TooManyInstanceVariables)
|
46
60
|
end
|
47
61
|
|
48
|
-
it 'should not report
|
62
|
+
it 'should not report for ivars in 2 extensions' do
|
49
63
|
src = <<-EOS
|
50
64
|
class Full
|
51
65
|
def ivars_a
|
52
|
-
|
66
|
+
#{ivar_sequence}
|
53
67
|
end
|
54
68
|
end
|
55
69
|
|
56
70
|
class Full
|
57
71
|
def ivars_b
|
58
|
-
|
72
|
+
#{ivar_sequence}
|
59
73
|
end
|
60
74
|
end
|
61
75
|
EOS
|
@@ -63,12 +77,12 @@ RSpec.describe Reek::Smells::TooManyInstanceVariables do
|
|
63
77
|
end
|
64
78
|
end
|
65
79
|
|
66
|
-
it 'reports correctly
|
80
|
+
it 'reports correctly for excessive instance variables' do
|
67
81
|
src = <<-EOS
|
68
82
|
# Comment
|
69
83
|
class Empty
|
70
84
|
def ivars
|
71
|
-
|
85
|
+
#{ivar_sequence(count: too_many_ivars)}
|
72
86
|
end
|
73
87
|
end
|
74
88
|
EOS
|
@@ -77,7 +91,7 @@ RSpec.describe Reek::Smells::TooManyInstanceVariables do
|
|
77
91
|
expect(@warning.source).to eq(@source_name)
|
78
92
|
expect(@warning.smell_category).to eq(Reek::Smells::TooManyInstanceVariables.smell_category)
|
79
93
|
expect(@warning.smell_type).to eq(Reek::Smells::TooManyInstanceVariables.smell_type)
|
80
|
-
expect(@warning.parameters[:count]).to eq(
|
94
|
+
expect(@warning.parameters[:count]).to eq(too_many_ivars)
|
81
95
|
expect(@warning.lines).to eq([2])
|
82
96
|
end
|
83
97
|
end
|
@@ -46,7 +46,7 @@ RSpec.describe Reek::Source::SourceLocator do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
context 'non-
|
49
|
+
context 'non-Ruby paths' do
|
50
50
|
let(:path) { SAMPLES_PATH.join('source_with_non_ruby_files') }
|
51
51
|
let(:expected_sources) do
|
52
52
|
[SAMPLES_PATH.join('source_with_non_ruby_files/uncommunicative_parameter_name.rb')]
|
@@ -58,7 +58,7 @@ RSpec.describe Reek::Source::SourceLocator do
|
|
58
58
|
]
|
59
59
|
end
|
60
60
|
|
61
|
-
it 'does only use
|
61
|
+
it 'does only use Ruby source paths' do
|
62
62
|
sources = described_class.new([path]).sources
|
63
63
|
|
64
64
|
expect(sources).not_to include(*paths_that_are_expected_to_be_ignored)
|
data/spec/samples/checkstyle.xml
CHANGED
@@ -1,2 +1,13 @@
|
|
1
1
|
<?xml version='1.0'?>
|
2
|
-
<checkstyle
|
2
|
+
<checkstyle>
|
3
|
+
<file name='spec/samples/two_smelly_files/dirty_one.rb'>
|
4
|
+
<error column='0' line='5' message='has the variable name '@s'' severity='warning' source='UncommunicativeVariableName'/>
|
5
|
+
<error column='0' line='4' message='calls @s.title 2 times' severity='warning' source='DuplicateMethodCall'/>
|
6
|
+
<error column='0' line='6' message='calls @s.title 2 times' severity='warning' source='DuplicateMethodCall'/>
|
7
|
+
<error column='0' line='4' message='calls puts(@s.title) 2 times' severity='warning' source='DuplicateMethodCall'/>
|
8
|
+
<error column='0' line='6' message='calls puts(@s.title) 2 times' severity='warning' source='DuplicateMethodCall'/>
|
9
|
+
<error column='0' line='5' message='contains iterators nested 2 deep' severity='warning' source='NestedIterators'/>
|
10
|
+
<error column='0' line='3' message='has the name 'a'' severity='warning' source='UncommunicativeMethodName'/>
|
11
|
+
<error column='0' line='5' message='has the variable name 'x'' severity='warning' source='UncommunicativeVariableName'/>
|
12
|
+
</file>
|
13
|
+
</checkstyle>
|
data/spec/spec_helper.rb
CHANGED
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: '3.
|
4
|
+
version: '3.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Rutherford
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-08-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: parser
|
@@ -26,6 +26,20 @@ dependencies:
|
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 2.2.2.5
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: private_attr
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '1.1'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.1'
|
29
43
|
- !ruby/object:Gem::Dependency
|
30
44
|
name: rainbow
|
31
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,14 +88,14 @@ dependencies:
|
|
74
88
|
requirements:
|
75
89
|
- - "~>"
|
76
90
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.
|
91
|
+
version: 0.8.0
|
78
92
|
type: :development
|
79
93
|
prerelease: false
|
80
94
|
version_requirements: !ruby/object:Gem::Requirement
|
81
95
|
requirements:
|
82
96
|
- - "~>"
|
83
97
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.
|
98
|
+
version: 0.8.0
|
85
99
|
- !ruby/object:Gem::Dependency
|
86
100
|
name: ataru
|
87
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,14 +203,14 @@ executables:
|
|
189
203
|
- reek
|
190
204
|
extensions: []
|
191
205
|
extra_rdoc_files:
|
192
|
-
- CHANGELOG
|
206
|
+
- CHANGELOG.md
|
193
207
|
- License.txt
|
194
208
|
files:
|
195
209
|
- ".gitignore"
|
196
210
|
- ".rubocop.yml"
|
197
211
|
- ".travis.yml"
|
198
212
|
- ".yardopts"
|
199
|
-
- CHANGELOG
|
213
|
+
- CHANGELOG.md
|
200
214
|
- CONTRIBUTING.md
|
201
215
|
- Gemfile
|
202
216
|
- License.txt
|
@@ -429,7 +443,6 @@ files:
|
|
429
443
|
- spec/samples/three_clean_files/clean_two.rb
|
430
444
|
- spec/samples/two_smelly_files/dirty_one.rb
|
431
445
|
- spec/samples/two_smelly_files/dirty_two.rb
|
432
|
-
- spec/samples/unusual_syntax.rb
|
433
446
|
- spec/spec_helper.rb
|
434
447
|
- tasks/develop.rake
|
435
448
|
- tasks/reek.rake
|