reek 1.3.4 → 1.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +5 -0
- data/README.md +27 -2
- data/features/command_line_interface/options.feature +5 -2
- data/features/command_line_interface/smells_count.feature +43 -45
- data/features/command_line_interface/stdin.feature +9 -15
- data/features/configuration_files/masking_smells.feature +9 -17
- data/features/rake_task/rake_task.feature +4 -4
- data/features/reports/reports.feature +80 -21
- data/features/samples.feature +8 -18
- data/features/step_definitions/reek_steps.rb +4 -0
- data/lib/reek/cli/application.rb +3 -6
- data/lib/reek/cli/command_line.rb +16 -6
- data/lib/reek/cli/reek_command.rb +4 -12
- data/lib/reek/cli/report.rb +61 -19
- data/lib/reek/config_file_exception.rb +5 -0
- data/lib/reek/smells/control_parameter.rb +45 -14
- data/lib/reek/smells/data_clump.rb +15 -39
- data/lib/reek/smells/duplicate_method_call.rb +76 -26
- data/lib/reek/source/config_file.rb +30 -19
- data/lib/reek/source/sexp_extensions.rb +139 -0
- data/lib/reek/source/sexp_node.rb +64 -0
- data/lib/reek/source/source_code.rb +1 -1
- data/lib/reek/source/tree_dresser.rb +30 -175
- data/lib/reek/spec/should_reek.rb +2 -5
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +1 -1
- data/spec/matchers/smell_of_matcher.rb +12 -15
- data/spec/reek/cli/report_spec.rb +10 -6
- data/spec/reek/core/code_parser_spec.rb +0 -6
- data/spec/reek/smells/control_parameter_spec.rb +195 -8
- data/spec/reek/smells/data_clump_spec.rb +28 -3
- data/spec/reek/smells/uncommunicative_method_name_spec.rb +7 -7
- data/spec/reek/source/sexp_extensions_spec.rb +290 -0
- data/spec/reek/source/sexp_node_spec.rb +28 -0
- data/spec/reek/source/source_code_spec.rb +59 -19
- data/spec/reek/source/tree_dresser_spec.rb +7 -314
- data/spec/reek/spec/should_reek_spec.rb +51 -64
- data/spec/samples/all_but_one_masked/dirty.rb +2 -2
- data/spec/samples/corrupt_config_file/dirty.rb +1 -0
- data/spec/samples/masked/dirty.rb +1 -1
- data/spec/samples/masked_by_dotfile/dirty.rb +2 -2
- data/spec/samples/no_config_file/dirty.rb +8 -0
- data/spec/samples/not_quite_masked/dirty.rb +0 -3
- data/spec/samples/three_smelly_files/dirty_one.rb +3 -0
- data/spec/samples/three_smelly_files/dirty_three.rb +5 -0
- data/spec/samples/three_smelly_files/dirty_two.rb +4 -0
- data/spec/spec_helper.rb +5 -0
- metadata +145 -137
- data/spec/reek/cli/reek_command_spec.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad832e1c2e46ca1fd1789a92f7b8b30854ff2215
|
4
|
+
data.tar.gz: 800911908bdc3111d76ff930e161a7d6f87fecf1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4588f0c10b1bb8bb3e8ac9afab01f1209588919b8939a3dbec5276eb5b8383c9f55f52e68e5f111a21c77d72cc57fd9acc4755797383a6c72bc4ed86e04c42a
|
7
|
+
data.tar.gz: 22d3b703a28c5b561ac4f53d2e846333d2cda22b27e8e4931fe7ea64033d4436486e40b7f5d02838f06a4e76d88d7a7d44b98492b040794c57c23ec499baf935
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -27,9 +27,32 @@ or run
|
|
27
27
|
$ reek --help
|
28
28
|
```
|
29
29
|
|
30
|
-
##
|
30
|
+
## Usage
|
31
31
|
|
32
|
-
|
32
|
+
For scanning the current directory you're in do a
|
33
|
+
|
34
|
+
```bash
|
35
|
+
$ reek .
|
36
|
+
```
|
37
|
+
|
38
|
+
(Mind the "." at the end to indicate the current directory)
|
39
|
+
|
40
|
+
|
41
|
+
Likewise you can scan specific directories like this
|
42
|
+
|
43
|
+
```bash
|
44
|
+
$ reek lib/your/files
|
45
|
+
```
|
46
|
+
|
47
|
+
Note that if you just call
|
48
|
+
|
49
|
+
```bash
|
50
|
+
$ reek
|
51
|
+
```
|
52
|
+
|
53
|
+
without any arguments reek will wait for input from STDIN.
|
54
|
+
|
55
|
+
Given a source file <tt>demo.rb</tt> containing:
|
33
56
|
|
34
57
|
```ruby
|
35
58
|
class Dirty
|
@@ -106,6 +129,8 @@ spec spec/your/file -u # Runs all tests stopping at the breakpoints you have
|
|
106
129
|
|
107
130
|
There's a vim plugin for `reek`: [https://github.com/rainerborene/vim-reek](https://github.com/rainerborene/vim-reek)
|
108
131
|
|
132
|
+
TextMate Bundle for `reek`: [https://github.com/peeyush1234/reek.tmbundle](https://github.com/peeyush1234/reek.tmbundle)
|
133
|
+
|
109
134
|
### Dependencies
|
110
135
|
|
111
136
|
Reek makes use of the following other gems:
|
@@ -38,9 +38,12 @@ Feature: Reek can be controlled using command-line options
|
|
38
38
|
-c, --config FILE Read configuration options from FILE
|
39
39
|
|
40
40
|
Report formatting:
|
41
|
-
-q, --
|
42
|
-
-
|
41
|
+
-q, --quiet Suppress headings for smell-free source files (this is the default)
|
42
|
+
-V, --no-quiet, --verbose Show headings for smell-free source files
|
43
|
+
-n, --no-line-numbers Suppress line numbers from the output
|
44
|
+
--line-numbers Show line numbers in the output (this is the default)
|
43
45
|
-s, --single-line Show IDE-compatible single-line-per-warning
|
46
|
+
-S, --sort-by-issue-count Sort by "issue-count", listing the "smelliest" files first
|
44
47
|
-y, --yaml Report smells in YAML format
|
45
48
|
|
46
49
|
"""
|
@@ -1,50 +1,48 @@
|
|
1
1
|
@smells_count
|
2
2
|
Feature: Reports total number of code smells
|
3
|
-
|
4
|
-
|
3
|
+
In order to monitor the total number of smells
|
4
|
+
Reek outputs the total number of smells among all files inspected.
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
Scenario: Does not output total number of smells when inspecting single file
|
7
|
+
When I run reek spec/samples/not_quite_masked/dirty.rb
|
8
|
+
Then the exit status indicates smells
|
9
|
+
And it reports:
|
10
|
+
"""
|
11
|
+
spec/samples/not_quite_masked/dirty.rb -- 5 warnings:
|
12
|
+
[5]:Dirty has the variable name '@s' (UncommunicativeVariableName)
|
13
|
+
[4, 6]:Dirty#a calls @s.title twice (DuplicateMethodCall)
|
14
|
+
[4, 6]:Dirty#a calls puts(@s.title) twice (DuplicateMethodCall)
|
15
|
+
[5]:Dirty#a contains iterators nested 2 deep (NestedIterators)
|
16
|
+
[3]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
17
|
+
"""
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
19
|
+
Scenario: Output total number of smells when inspecting multiple files
|
20
|
+
When I run reek spec/samples/two_smelly_files
|
21
|
+
Then the exit status indicates smells
|
22
|
+
And it reports:
|
23
|
+
"""
|
24
|
+
spec/samples/two_smelly_files/dirty_one.rb -- 6 warnings:
|
25
|
+
[5]:Dirty has the variable name '@s' (UncommunicativeVariableName)
|
26
|
+
[4, 6]:Dirty#a calls @s.title twice (DuplicateMethodCall)
|
27
|
+
[4, 6]:Dirty#a calls puts(@s.title) twice (DuplicateMethodCall)
|
28
|
+
[5]:Dirty#a contains iterators nested 2 deep (NestedIterators)
|
29
|
+
[3]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
30
|
+
[5]:Dirty#a has the variable name 'x' (UncommunicativeVariableName)
|
31
|
+
spec/samples/two_smelly_files/dirty_two.rb -- 6 warnings:
|
32
|
+
[5]:Dirty has the variable name '@s' (UncommunicativeVariableName)
|
33
|
+
[4, 6]:Dirty#a calls @s.title twice (DuplicateMethodCall)
|
34
|
+
[4, 6]:Dirty#a calls puts(@s.title) twice (DuplicateMethodCall)
|
35
|
+
[5]:Dirty#a contains iterators nested 2 deep (NestedIterators)
|
36
|
+
[3]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
37
|
+
[5]:Dirty#a has the variable name 'x' (UncommunicativeVariableName)
|
38
|
+
12 total warnings
|
39
|
+
"""
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
0 total warnings
|
50
|
-
"""
|
41
|
+
Scenario: Output total number of smells even if total equals 0
|
42
|
+
When I run reek spec/samples/three_clean_files
|
43
|
+
Then it succeeds
|
44
|
+
And it reports:
|
45
|
+
"""
|
46
|
+
|
47
|
+
0 total warnings
|
48
|
+
"""
|
@@ -9,12 +9,15 @@ Feature: Reek reads from $stdin when no files are given
|
|
9
9
|
Then it succeeds
|
10
10
|
And it reports:
|
11
11
|
"""
|
12
|
-
$stdin -- 0 warnings
|
13
|
-
|
14
12
|
"""
|
15
13
|
|
16
|
-
Scenario: outputs
|
17
|
-
When I pass "" to reek
|
14
|
+
Scenario: outputs nothing on empty stdin
|
15
|
+
When I pass "" to reek --quiet
|
16
|
+
Then it succeeds
|
17
|
+
And stdout equals ""
|
18
|
+
|
19
|
+
Scenario: outputs header only on empty stdin in verbose mode
|
20
|
+
When I pass "" to reek -V
|
18
21
|
Then it succeeds
|
19
22
|
And it reports:
|
20
23
|
"""
|
@@ -22,11 +25,6 @@ Feature: Reek reads from $stdin when no files are given
|
|
22
25
|
|
23
26
|
"""
|
24
27
|
|
25
|
-
Scenario: outputs nothing on empty stdin in quiet mode
|
26
|
-
When I pass "" to reek --quiet
|
27
|
-
Then it succeeds
|
28
|
-
And stdout equals ""
|
29
|
-
|
30
28
|
Scenario: return non-zero status when there are smells
|
31
29
|
When I pass "class Turn; def y() @x = 3; end end" to reek
|
32
30
|
Then the exit status indicates smells
|
@@ -42,11 +40,7 @@ Feature: Reek reads from $stdin when no files are given
|
|
42
40
|
@stderr
|
43
41
|
Scenario: syntax error causes the source to be ignored
|
44
42
|
When I pass "def incomplete" to reek
|
43
|
+
Then it reports a parsing error
|
45
44
|
Then it succeeds
|
46
|
-
And
|
47
|
-
"""
|
48
|
-
$stdin -- 0 warnings
|
49
|
-
|
50
|
-
"""
|
51
|
-
And it reports a parsing error
|
45
|
+
And stdout equals ""
|
52
46
|
|
@@ -6,7 +6,8 @@ Feature: Masking smells using config files
|
|
6
6
|
|
7
7
|
Scenario: empty config file is ignored
|
8
8
|
When I run reek spec/samples/empty_config_file/dirty.rb
|
9
|
-
Then the
|
9
|
+
Then it reports the error 'Warning: Invalid configuration file "empty.reek" -- Empty file'
|
10
|
+
And the exit status indicates smells
|
10
11
|
And it reports:
|
11
12
|
"""
|
12
13
|
spec/samples/empty_config_file/dirty.rb -- 6 warnings:
|
@@ -20,19 +21,11 @@ Feature: Masking smells using config files
|
|
20
21
|
|
21
22
|
Scenario: corrupt config file prevents normal output
|
22
23
|
When I run reek spec/samples/corrupt_config_file
|
23
|
-
Then the
|
24
|
+
Then it reports the error 'Error: Invalid configuration file "corrupt.reek" -- Not a hash'
|
25
|
+
And the exit status indicates an error
|
24
26
|
And it reports:
|
25
27
|
"""
|
26
|
-
spec/samples/corrupt_config_file/dirty.rb -- 7 warnings:
|
27
|
-
[1]:Dirty has no descriptive comment (IrresponsibleModule)
|
28
|
-
[4]:Dirty has the variable name '@s' (UncommunicativeVariableName)
|
29
|
-
[3, 5]:Dirty#a calls @s.title twice (DuplicateMethodCall)
|
30
|
-
[3, 5]:Dirty#a calls puts(@s.title) twice (DuplicateMethodCall)
|
31
|
-
[4]:Dirty#a contains iterators nested 2 deep (NestedIterators)
|
32
|
-
[2]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
33
|
-
[4]:Dirty#a has the variable name 'x' (UncommunicativeVariableName)
|
34
28
|
"""
|
35
|
-
And it reports an error
|
36
29
|
|
37
30
|
Scenario: missing source file is an error
|
38
31
|
When I run reek no_such_file.rb spec/samples/masked/dirty.rb
|
@@ -63,11 +56,11 @@ Feature: Masking smells using config files
|
|
63
56
|
And it reports:
|
64
57
|
"""
|
65
58
|
spec/samples/not_quite_masked/dirty.rb -- 5 warnings:
|
66
|
-
[
|
67
|
-
[
|
68
|
-
[
|
69
|
-
[
|
70
|
-
[
|
59
|
+
[5]:Dirty has the variable name '@s' (UncommunicativeVariableName)
|
60
|
+
[4, 6]:Dirty#a calls @s.title twice (DuplicateMethodCall)
|
61
|
+
[4, 6]:Dirty#a calls puts(@s.title) twice (DuplicateMethodCall)
|
62
|
+
[5]:Dirty#a contains iterators nested 2 deep (NestedIterators)
|
63
|
+
[3]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
71
64
|
"""
|
72
65
|
|
73
66
|
@overrides
|
@@ -115,5 +108,4 @@ Feature: Masking smells using config files
|
|
115
108
|
Then it succeeds
|
116
109
|
And it reports:
|
117
110
|
"""
|
118
|
-
spec/samples/masked/dirty.rb -- 0 warnings
|
119
111
|
"""
|
@@ -51,13 +51,14 @@ Feature: Reek can be driven through its Task
|
|
51
51
|
"""
|
52
52
|
Reek::Rake::Task.new do |t|
|
53
53
|
t.fail_on_error = false
|
54
|
-
t.source_files = 'spec/samples/
|
54
|
+
t.source_files = 'spec/samples/no_config_file/dirty.rb'
|
55
55
|
end
|
56
56
|
"""
|
57
|
-
Then it
|
57
|
+
Then it reports no errors
|
58
|
+
And it succeeds
|
58
59
|
And it reports:
|
59
60
|
"""
|
60
|
-
spec/samples/
|
61
|
+
spec/samples/no_config_file/dirty.rb -- 6 warnings:
|
61
62
|
[5]:Dirty has the variable name '@s' (UncommunicativeVariableName)
|
62
63
|
[4, 6]:Dirty#a calls @s.title twice (DuplicateMethodCall)
|
63
64
|
[4, 6]:Dirty#a calls puts(@s.title) twice (DuplicateMethodCall)
|
@@ -77,5 +78,4 @@ Feature: Reek can be driven through its Task
|
|
77
78
|
Then it succeeds
|
78
79
|
And it reports:
|
79
80
|
"""
|
80
|
-
spec/samples/masked/dirty.rb -- 0 warnings
|
81
81
|
"""
|
@@ -31,14 +31,57 @@ Feature: Correctly formatted reports
|
|
31
31
|
| spec/samples/two_smelly_files/*.rb |
|
32
32
|
| spec/samples/two_smelly_files |
|
33
33
|
|
34
|
-
Scenario
|
34
|
+
Scenario: Do not sort by default (which means report each file as it is read in)
|
35
|
+
When I run reek spec/samples/three_smelly_files/*.rb
|
36
|
+
Then the exit status indicates smells
|
37
|
+
And it reports:
|
38
|
+
"""
|
39
|
+
spec/samples/three_smelly_files/dirty_one.rb -- 2 warnings:
|
40
|
+
[1]:Dirty has no descriptive comment (IrresponsibleModule)
|
41
|
+
[2]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
42
|
+
spec/samples/three_smelly_files/dirty_three.rb -- 4 warnings:
|
43
|
+
[1]:Dirty has no descriptive comment (IrresponsibleModule)
|
44
|
+
[2]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
45
|
+
[3]:Dirty#b has the name 'b' (UncommunicativeMethodName)
|
46
|
+
[4]:Dirty#c has the name 'c' (UncommunicativeMethodName)
|
47
|
+
spec/samples/three_smelly_files/dirty_two.rb -- 3 warnings:
|
48
|
+
[1]:Dirty has no descriptive comment (IrresponsibleModule)
|
49
|
+
[2]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
50
|
+
[3]:Dirty#b has the name 'b' (UncommunicativeMethodName)
|
51
|
+
9 total warnings
|
52
|
+
"""
|
53
|
+
|
54
|
+
Scenario Outline: Sort by issue count
|
55
|
+
When I run reek <option> spec/samples/three_smelly_files/*.rb
|
56
|
+
Then the exit status indicates smells
|
57
|
+
And it reports:
|
58
|
+
"""
|
59
|
+
spec/samples/three_smelly_files/dirty_three.rb -- 4 warnings:
|
60
|
+
[1]:Dirty has no descriptive comment (IrresponsibleModule)
|
61
|
+
[2]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
62
|
+
[3]:Dirty#b has the name 'b' (UncommunicativeMethodName)
|
63
|
+
[4]:Dirty#c has the name 'c' (UncommunicativeMethodName)
|
64
|
+
spec/samples/three_smelly_files/dirty_two.rb -- 3 warnings:
|
65
|
+
[1]:Dirty has no descriptive comment (IrresponsibleModule)
|
66
|
+
[2]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
67
|
+
[3]:Dirty#b has the name 'b' (UncommunicativeMethodName)
|
68
|
+
spec/samples/three_smelly_files/dirty_one.rb -- 2 warnings:
|
69
|
+
[1]:Dirty has no descriptive comment (IrresponsibleModule)
|
70
|
+
[2]:Dirty#a has the name 'a' (UncommunicativeMethodName)
|
71
|
+
9 total warnings
|
72
|
+
"""
|
73
|
+
|
74
|
+
Examples:
|
75
|
+
| option |
|
76
|
+
| -S |
|
77
|
+
| --sort-by-issue-count |
|
78
|
+
|
79
|
+
Scenario Outline: good files show no headers by default
|
35
80
|
When I run reek <args>
|
36
81
|
Then it succeeds
|
37
82
|
And it reports:
|
38
83
|
"""
|
39
|
-
|
40
|
-
spec/samples/three_clean_files/clean_three.rb -- 0 warnings
|
41
|
-
spec/samples/three_clean_files/clean_two.rb -- 0 warnings
|
84
|
+
|
42
85
|
0 total warnings
|
43
86
|
"""
|
44
87
|
|
@@ -47,20 +90,36 @@ Feature: Correctly formatted reports
|
|
47
90
|
| spec/samples/three_clean_files/*.rb |
|
48
91
|
| spec/samples/three_clean_files |
|
49
92
|
|
93
|
+
Scenario Outline: --verbose and --no-quiet turn on headers for fragrant files
|
94
|
+
When I run reek <option> spec/samples/three_clean_files/*.rb
|
95
|
+
Then it succeeds
|
96
|
+
And it reports:
|
97
|
+
"""
|
98
|
+
spec/samples/three_clean_files/clean_one.rb -- 0 warnings
|
99
|
+
spec/samples/three_clean_files/clean_three.rb -- 0 warnings
|
100
|
+
spec/samples/three_clean_files/clean_two.rb -- 0 warnings
|
101
|
+
0 total warnings
|
102
|
+
"""
|
103
|
+
|
104
|
+
Examples:
|
105
|
+
| option |
|
106
|
+
| --verbose |
|
107
|
+
| -V |
|
108
|
+
| --no-quiet |
|
109
|
+
|
50
110
|
Scenario Outline: --quiet turns off headers for fragrant files
|
51
111
|
When I run reek <option> spec/samples/three_clean_files/*.rb
|
52
112
|
Then it succeeds
|
53
113
|
And it reports:
|
54
114
|
"""
|
115
|
+
|
55
116
|
0 total warnings
|
56
117
|
"""
|
57
118
|
|
58
119
|
Examples:
|
59
|
-
| option
|
60
|
-
| -q
|
61
|
-
| --quiet
|
62
|
-
| -n -q |
|
63
|
-
| -q -n |
|
120
|
+
| option |
|
121
|
+
| -V -q |
|
122
|
+
| -V --quiet |
|
64
123
|
|
65
124
|
Scenario Outline: --line-number turns off line numbers
|
66
125
|
When I run reek <option> spec/samples/not_quite_masked/dirty.rb
|
@@ -76,11 +135,11 @@ Feature: Correctly formatted reports
|
|
76
135
|
"""
|
77
136
|
|
78
137
|
Examples:
|
79
|
-
| option
|
80
|
-
| -n
|
81
|
-
| --line-
|
82
|
-
| -n -
|
83
|
-
| -
|
138
|
+
| option |
|
139
|
+
| -n |
|
140
|
+
| --no-line-numbers |
|
141
|
+
| -n -V |
|
142
|
+
| -V -n |
|
84
143
|
|
85
144
|
Scenario Outline: --single-line shows filename and one line number
|
86
145
|
When I run reek <option> spec/samples/not_quite_masked/dirty.rb
|
@@ -88,19 +147,19 @@ Feature: Correctly formatted reports
|
|
88
147
|
And it reports:
|
89
148
|
"""
|
90
149
|
spec/samples/not_quite_masked/dirty.rb -- 5 warnings:
|
91
|
-
spec/samples/not_quite_masked/dirty.rb:
|
92
|
-
spec/samples/not_quite_masked/dirty.rb:
|
93
|
-
spec/samples/not_quite_masked/dirty.rb:
|
94
|
-
spec/samples/not_quite_masked/dirty.rb:
|
95
|
-
spec/samples/not_quite_masked/dirty.rb:
|
150
|
+
spec/samples/not_quite_masked/dirty.rb:5: Dirty has the variable name '@s' (UncommunicativeVariableName)
|
151
|
+
spec/samples/not_quite_masked/dirty.rb:4: Dirty#a calls @s.title twice (DuplicateMethodCall)
|
152
|
+
spec/samples/not_quite_masked/dirty.rb:4: Dirty#a calls puts(@s.title) twice (DuplicateMethodCall)
|
153
|
+
spec/samples/not_quite_masked/dirty.rb:5: Dirty#a contains iterators nested 2 deep (NestedIterators)
|
154
|
+
spec/samples/not_quite_masked/dirty.rb:3: Dirty#a has the name 'a' (UncommunicativeMethodName)
|
96
155
|
"""
|
97
156
|
|
98
157
|
Examples:
|
99
158
|
| option |
|
100
159
|
| -s |
|
101
160
|
| --single-line |
|
102
|
-
| -s -
|
103
|
-
| -
|
161
|
+
| -s -V |
|
162
|
+
| -V -s |
|
104
163
|
|
105
164
|
Scenario Outline: Extra slashes aren't added to directory names
|
106
165
|
When I run reek <args>
|
data/features/samples.feature
CHANGED
@@ -10,7 +10,7 @@ Feature: Basic smell detection
|
|
10
10
|
Then the exit status indicates smells
|
11
11
|
And it reports:
|
12
12
|
"""
|
13
|
-
spec/samples/inline.rb --
|
13
|
+
spec/samples/inline.rb -- 39 warnings:
|
14
14
|
File has no descriptive comment (IrresponsibleModule)
|
15
15
|
Inline declares the class variable @@directory (ClassVariable)
|
16
16
|
Inline declares the class variable @@rootdir (ClassVariable)
|
@@ -23,7 +23,7 @@ Feature: Basic smell detection
|
|
23
23
|
Inline::C tests $DEBUG at least 7 times (RepeatedConditional)
|
24
24
|
Inline::C tests $TESTING at least 4 times (RepeatedConditional)
|
25
25
|
Inline::C tests @@type_map.has_key?(type) at least 3 times (RepeatedConditional)
|
26
|
-
Inline::C#build calls
|
26
|
+
Inline::C#build calls ($? != 0) twice (DuplicateMethodCall)
|
27
27
|
Inline::C#build calls Inline.directory 5 times (DuplicateMethodCall)
|
28
28
|
Inline::C#build calls io.puts 6 times (DuplicateMethodCall)
|
29
29
|
Inline::C#build calls io.puts("#endif") twice (DuplicateMethodCall)
|
@@ -50,7 +50,6 @@ Feature: Basic smell detection
|
|
50
50
|
Inline::C#strip_comments refers to src more than self (FeatureEnvy)
|
51
51
|
Module#inline calls Inline.const_get(lang) twice (DuplicateMethodCall)
|
52
52
|
Module#inline has approx 11 statements (TooManyStatements)
|
53
|
-
Module#inline is controlled by argument options (ControlParameter)
|
54
53
|
"""
|
55
54
|
|
56
55
|
Scenario: Correct smells from optparse.rb
|
@@ -58,7 +57,7 @@ Feature: Basic smell detection
|
|
58
57
|
Then the exit status indicates smells
|
59
58
|
And it reports:
|
60
59
|
"""
|
61
|
-
spec/samples/optparse.rb --
|
60
|
+
spec/samples/optparse.rb -- 103 warnings:
|
62
61
|
OptionParser has at least 42 methods (TooManyMethods)
|
63
62
|
OptionParser has the variable name 'f' (UncommunicativeVariableName)
|
64
63
|
OptionParser has the variable name 'k' (UncommunicativeVariableName)
|
@@ -110,7 +109,6 @@ Feature: Basic smell detection
|
|
110
109
|
OptionParser#parse_in_order calls sw.switch_name twice (DuplicateMethodCall)
|
111
110
|
OptionParser#parse_in_order contains iterators nested 3 deep (NestedIterators)
|
112
111
|
OptionParser#parse_in_order has approx 28 statements (TooManyStatements)
|
113
|
-
OptionParser#parse_in_order is controlled by argument setter (ControlParameter)
|
114
112
|
OptionParser#permute calls argv[0] twice (DuplicateMethodCall)
|
115
113
|
OptionParser#permute refers to argv more than self (FeatureEnvy)
|
116
114
|
OptionParser#search has the variable name 'k' (UncommunicativeVariableName)
|
@@ -118,6 +116,7 @@ Feature: Basic smell detection
|
|
118
116
|
OptionParser#summarize has 4 parameters (LongParameterList)
|
119
117
|
OptionParser#summarize has the variable name 'l' (UncommunicativeVariableName)
|
120
118
|
OptionParser#ver has the variable name 'v' (UncommunicativeVariableName)
|
119
|
+
OptionParser::Arguable#options= is controlled by argument opt (ControlParameter)
|
121
120
|
OptionParser::CompletingHash#match contains iterators nested 2 deep (NestedIterators)
|
122
121
|
OptionParser::Completion#complete calls candidates.size twice (DuplicateMethodCall)
|
123
122
|
OptionParser::Completion#complete calls k.id2name twice (DuplicateMethodCall)
|
@@ -128,7 +127,6 @@ Feature: Basic smell detection
|
|
128
127
|
OptionParser::Completion#complete refers to candidates more than self (FeatureEnvy)
|
129
128
|
OptionParser::Completion#convert has unused parameter 'opt' (UnusedParameters)
|
130
129
|
OptionParser::List#accept has the parameter name 't' (UncommunicativeParameterName)
|
131
|
-
OptionParser::List#accept is controlled by argument pat (ControlParameter)
|
132
130
|
OptionParser::List#accept refers to pat more than self (FeatureEnvy)
|
133
131
|
OptionParser::List#add_banner refers to opt more than self (FeatureEnvy)
|
134
132
|
OptionParser::List#complete has 4 parameters (LongParameterList)
|
@@ -138,8 +136,6 @@ Feature: Basic smell detection
|
|
138
136
|
OptionParser::List#update has 5 parameters (LongParameterList)
|
139
137
|
OptionParser::List#update has approx 6 statements (TooManyStatements)
|
140
138
|
OptionParser::List#update has the variable name 'o' (UncommunicativeVariableName)
|
141
|
-
OptionParser::List#update is controlled by argument lopts (ControlParameter)
|
142
|
-
OptionParser::List#update is controlled by argument sopts (ControlParameter)
|
143
139
|
OptionParser::ParseError#set_option is controlled by argument eq (ControlParameter)
|
144
140
|
OptionParser::Switch#add_banner has the variable name 's' (UncommunicativeVariableName)
|
145
141
|
OptionParser::Switch#initialize has 7 parameters (LongParameterList)
|
@@ -163,11 +159,8 @@ Feature: Basic smell detection
|
|
163
159
|
OptionParser::Switch#summarize has the variable name 'r' (UncommunicativeVariableName)
|
164
160
|
OptionParser::Switch#summarize has the variable name 's' (UncommunicativeVariableName)
|
165
161
|
OptionParser::Switch::NoArgument#parse has unused parameter 'argv' (UnusedParameters)
|
166
|
-
OptionParser::Switch::NoArgument#parse is controlled by argument arg (ControlParameter)
|
167
162
|
OptionParser::Switch::OptionalArgument#parse has unused parameter 'argv' (UnusedParameters)
|
168
|
-
OptionParser::Switch::OptionalArgument#parse is controlled by argument arg (ControlParameter)
|
169
163
|
OptionParser::Switch::PlacedArgument#parse has approx 6 statements (TooManyStatements)
|
170
|
-
OptionParser::Switch::RequiredArgument#parse is controlled by argument arg (ControlParameter)
|
171
164
|
"""
|
172
165
|
|
173
166
|
Scenario: Correct smells from redcloth.rb
|
@@ -175,7 +168,7 @@ Feature: Basic smell detection
|
|
175
168
|
Then the exit status indicates smells
|
176
169
|
And it reports:
|
177
170
|
"""
|
178
|
-
spec/samples/redcloth.rb --
|
171
|
+
spec/samples/redcloth.rb -- 98 warnings:
|
179
172
|
RedCloth has at least 44 methods (TooManyMethods)
|
180
173
|
RedCloth has the variable name 'a' (UncommunicativeVariableName)
|
181
174
|
RedCloth has the variable name 'b' (UncommunicativeVariableName)
|
@@ -207,7 +200,6 @@ Feature: Basic smell detection
|
|
207
200
|
RedCloth#blocks has approx 18 statements (TooManyStatements)
|
208
201
|
RedCloth#blocks has boolean parameter 'deep_code' (BooleanParameter)
|
209
202
|
RedCloth#blocks is controlled by argument deep_code (ControlParameter)
|
210
|
-
RedCloth#check_refs is controlled by argument text (ControlParameter)
|
211
203
|
RedCloth#clean_html calls tags[tag] twice (DuplicateMethodCall)
|
212
204
|
RedCloth#clean_html contains iterators nested 3 deep (NestedIterators)
|
213
205
|
RedCloth#clean_html doesn't depend on instance state (UtilityFunction)
|
@@ -224,6 +216,7 @@ Feature: Basic smell detection
|
|
224
216
|
RedCloth#footnote_ref refers to text more than self (FeatureEnvy)
|
225
217
|
RedCloth#glyphs_textile has approx 10 statements (TooManyStatements)
|
226
218
|
RedCloth#htmlesc doesn't depend on instance state (UtilityFunction)
|
219
|
+
RedCloth#htmlesc is controlled by argument mode (ControlParameter)
|
227
220
|
RedCloth#htmlesc refers to str more than self (FeatureEnvy)
|
228
221
|
RedCloth#incoming_entities refers to text more than self (FeatureEnvy)
|
229
222
|
RedCloth#initialize has the variable name 'r' (UncommunicativeVariableName)
|
@@ -243,11 +236,12 @@ Feature: Basic smell detection
|
|
243
236
|
RedCloth#inline_textile_span has approx 8 statements (TooManyStatements)
|
244
237
|
RedCloth#inline_textile_span has the variable name 'm' (UncommunicativeVariableName)
|
245
238
|
RedCloth#lT has the name 'lT' (UncommunicativeMethodName)
|
239
|
+
RedCloth#lT is controlled by argument text (ControlParameter)
|
246
240
|
RedCloth#no_textile doesn't depend on instance state (UtilityFunction)
|
247
241
|
RedCloth#no_textile refers to text more than self (FeatureEnvy)
|
248
242
|
RedCloth#pba calls $1.length twice (DuplicateMethodCall)
|
249
243
|
RedCloth#pba has approx 21 statements (TooManyStatements)
|
250
|
-
RedCloth#pba is controlled by argument
|
244
|
+
RedCloth#pba is controlled by argument element (ControlParameter)
|
251
245
|
RedCloth#pba refers to style more than self (FeatureEnvy)
|
252
246
|
RedCloth#pba refers to text more than self (FeatureEnvy)
|
253
247
|
RedCloth#refs_markdown has the variable name 'm' (UncommunicativeVariableName)
|
@@ -265,15 +259,11 @@ Feature: Basic smell detection
|
|
265
259
|
RedCloth#rip_offtags has approx 18 statements (TooManyStatements)
|
266
260
|
RedCloth#textile_bq has 4 parameters (LongParameterList)
|
267
261
|
RedCloth#textile_bq has unused parameter 'tag' (UnusedParameters)
|
268
|
-
RedCloth#textile_bq is controlled by argument atts (ControlParameter)
|
269
|
-
RedCloth#textile_bq is controlled by argument cite (ControlParameter)
|
270
262
|
RedCloth#textile_fn_ has 5 parameters (LongParameterList)
|
271
263
|
RedCloth#textile_fn_ has unused parameter 'cite' (UnusedParameters)
|
272
264
|
RedCloth#textile_fn_ has unused parameter 'tag' (UnusedParameters)
|
273
|
-
RedCloth#textile_fn_ is controlled by argument atts (ControlParameter)
|
274
265
|
RedCloth#textile_p has 4 parameters (LongParameterList)
|
275
266
|
RedCloth#textile_p has unused parameter 'cite' (UnusedParameters)
|
276
|
-
RedCloth#textile_p is controlled by argument atts (ControlParameter)
|
277
267
|
RedCloth#textile_popup_help has the parameter name 'windowH' (UncommunicativeParameterName)
|
278
268
|
RedCloth#textile_popup_help has the parameter name 'windowW' (UncommunicativeParameterName)
|
279
269
|
RedCloth#to_html has approx 24 statements (TooManyStatements)
|