reek 6.0.1 → 6.0.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/.rubocop.yml +2 -20
- data/.rubocop_todo.yml +24 -19
- data/.travis.yml +4 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +5 -5
- data/README.md +1 -1
- data/docs/Boolean-Parameter.md +1 -1
- data/features/command_line_interface/options.feature +2 -2
- data/features/configuration_files/schema_validation.feature +1 -1
- data/features/reports/json.feature +3 -3
- data/features/reports/reports.feature +4 -4
- data/features/reports/yaml.feature +3 -3
- data/features/step_definitions/reek_steps.rb +1 -1
- data/features/step_definitions/sample_file_steps.rb +2 -2
- data/lib/reek.rb +1 -0
- data/lib/reek/cli/options.rb +1 -1
- data/lib/reek/configuration/app_configuration.rb +4 -3
- data/lib/reek/configuration/directory_directives.rb +2 -2
- data/lib/reek/context/module_context.rb +3 -1
- data/lib/reek/report/code_climate/code_climate_configuration.yml +1 -1
- data/lib/reek/smell_detectors/boolean_parameter.rb +3 -1
- data/lib/reek/smell_detectors/uncommunicative_variable_name.rb +1 -1
- data/lib/reek/smell_warning.rb +1 -2
- data/lib/reek/source/source_locator.rb +13 -10
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +9 -1
- data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +2 -4
- data/spec/quality/documentation_spec.rb +2 -1
- data/tasks/configuration.rake +1 -2
- metadata +17 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 83760bf0344db6b8f65cd5bbb6e57f90ee4e1b54c10edb3920821a517e6649cd
|
|
4
|
+
data.tar.gz: 258214d9022fda0ecbe287c4313719472c30f056c1ff6ffd4f7ff023b255b199
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 56c12a16cc200dd475d84a543fd9edf2ce888f550a5d4d22cbe813c3439ed0915263340d7c02654417666bcd728ee5e9ba976670cae46098293b58595589f36c
|
|
7
|
+
data.tar.gz: 0f012f16ec237bdece4f797ea2977c0db5fa083df32ac86ce57b14911777eec0d832aff8e861df67c5cc80b847b0c3caf801a157b759724cc9f858ae4236ace9
|
data/.rubocop.yml
CHANGED
|
@@ -9,6 +9,7 @@ AllCops:
|
|
|
9
9
|
- 'samples/**/*'
|
|
10
10
|
- 'tmp/**/*'
|
|
11
11
|
- 'vendor/**/*'
|
|
12
|
+
NewCops: enable
|
|
12
13
|
TargetRubyVersion: 2.4
|
|
13
14
|
|
|
14
15
|
# Tables are nice
|
|
@@ -57,6 +58,7 @@ Lint/BooleanSymbol:
|
|
|
57
58
|
# Spec blocks can be any size
|
|
58
59
|
Metrics/BlockLength:
|
|
59
60
|
Exclude:
|
|
61
|
+
- '**/*.gemspec'
|
|
60
62
|
- 'spec/**/*'
|
|
61
63
|
|
|
62
64
|
# Keyword arguments make long parameter lists readable
|
|
@@ -130,23 +132,3 @@ Style/WordArray:
|
|
|
130
132
|
Metrics/ClassLength:
|
|
131
133
|
Exclude:
|
|
132
134
|
- 'lib/reek/cli/options.rb'
|
|
133
|
-
|
|
134
|
-
# Activate new cops from RuboCop 0.80 - 0.83
|
|
135
|
-
Lint/RaiseException:
|
|
136
|
-
Enabled: true
|
|
137
|
-
Lint/StructNewOverride:
|
|
138
|
-
Enabled: true
|
|
139
|
-
Layout/EmptyLinesAroundAttributeAccessor:
|
|
140
|
-
Enabled: true
|
|
141
|
-
Layout/SpaceAroundMethodCallOperator:
|
|
142
|
-
Enabled: true
|
|
143
|
-
Style/ExponentialNotation:
|
|
144
|
-
Enabled: true
|
|
145
|
-
Style/HashEachMethods:
|
|
146
|
-
Enabled: true
|
|
147
|
-
Style/HashTransformKeys:
|
|
148
|
-
Enabled: true
|
|
149
|
-
Style/HashTransformValues:
|
|
150
|
-
Enabled: true
|
|
151
|
-
Style/SlicingWithRange:
|
|
152
|
-
Enabled: true
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2020-08-19 19:02:50 UTC using RuboCop version 0.89.1.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
-
# Offense count:
|
|
9
|
+
# Offense count: 2
|
|
10
|
+
Lint/MissingSuper:
|
|
11
|
+
Exclude:
|
|
12
|
+
- 'lib/reek/rake/task.rb'
|
|
13
|
+
- 'lib/reek/smell_detectors/base_detector.rb'
|
|
14
|
+
|
|
15
|
+
# Offense count: 2
|
|
16
|
+
Lint/UnreachableLoop:
|
|
17
|
+
Exclude:
|
|
18
|
+
- 'spec/reek/ast/node_spec.rb'
|
|
19
|
+
|
|
20
|
+
# Offense count: 2
|
|
21
|
+
# Configuration parameters: IgnoredMethods.
|
|
10
22
|
Metrics/AbcSize:
|
|
11
23
|
Max: 21
|
|
12
24
|
|
|
13
25
|
# Offense count: 1
|
|
14
|
-
# Configuration parameters: CountComments.
|
|
26
|
+
# Configuration parameters: CountComments, CountAsOne.
|
|
15
27
|
Metrics/ClassLength:
|
|
16
28
|
Max: 161
|
|
17
29
|
|
|
18
|
-
# Offense count:
|
|
19
|
-
# Configuration parameters: CountComments, ExcludedMethods.
|
|
30
|
+
# Offense count: 13
|
|
31
|
+
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
|
|
20
32
|
Metrics/MethodLength:
|
|
21
33
|
Max: 16
|
|
22
34
|
|
|
@@ -25,17 +37,6 @@ RSpec/AnyInstance:
|
|
|
25
37
|
Exclude:
|
|
26
38
|
- 'spec/reek/cli/application_spec.rb'
|
|
27
39
|
|
|
28
|
-
# Offense count: 1
|
|
29
|
-
# Configuration parameters: CustomIncludeMethods.
|
|
30
|
-
RSpec/EmptyExampleGroup:
|
|
31
|
-
Exclude:
|
|
32
|
-
- 'spec/factories/factories.rb'
|
|
33
|
-
|
|
34
|
-
# Offense count: 1
|
|
35
|
-
RSpec/MissingExampleGroupArgument:
|
|
36
|
-
Exclude:
|
|
37
|
-
- 'spec/factories/factories.rb'
|
|
38
|
-
|
|
39
40
|
# Offense count: 4
|
|
40
41
|
RSpec/MultipleDescribes:
|
|
41
42
|
Exclude:
|
|
@@ -44,12 +45,16 @@ RSpec/MultipleDescribes:
|
|
|
44
45
|
- 'spec/reek/report/location_formatter_spec.rb'
|
|
45
46
|
- 'spec/reek/report/progress_formatter_spec.rb'
|
|
46
47
|
|
|
47
|
-
# Offense count:
|
|
48
|
-
# Configuration parameters: AggregateFailuresByDefault.
|
|
48
|
+
# Offense count: 30
|
|
49
49
|
RSpec/MultipleExpectations:
|
|
50
50
|
Max: 5
|
|
51
51
|
|
|
52
|
-
# Offense count:
|
|
52
|
+
# Offense count: 16
|
|
53
|
+
# Configuration parameters: AllowSubject.
|
|
54
|
+
RSpec/MultipleMemoizedHelpers:
|
|
55
|
+
Max: 9
|
|
56
|
+
|
|
57
|
+
# Offense count: 27
|
|
53
58
|
RSpec/NestedGroups:
|
|
54
59
|
Max: 5
|
|
55
60
|
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Change log
|
|
2
2
|
|
|
3
|
+
## 6.0.2 (2020-10-17)
|
|
4
|
+
|
|
5
|
+
* (mvz) Loosen dependency on psych. This should resolve installation problems on
|
|
6
|
+
mingw32
|
|
7
|
+
* (Cesario Uy) Fix typo in docs for "Boolean Parameter" smell
|
|
8
|
+
* (mvz) Set link metadata in gemspec
|
|
9
|
+
|
|
3
10
|
## 6.0.1 (2020-05-26)
|
|
4
11
|
|
|
5
12
|
* (Maxim Pertsov) Handle absolute paths for directories correctly
|
data/Gemfile
CHANGED
|
@@ -7,16 +7,16 @@ ruby RUBY_VERSION
|
|
|
7
7
|
group :development do
|
|
8
8
|
gem 'aruba', '~> 1.0'
|
|
9
9
|
gem 'codeclimate-engine-rb', '~> 0.4.0'
|
|
10
|
-
gem 'cucumber', '
|
|
10
|
+
gem 'cucumber', ['>= 4.0', '< 6.0']
|
|
11
11
|
gem 'kramdown', '~> 2.1'
|
|
12
12
|
gem 'kramdown-parser-gfm', '~> 1.0'
|
|
13
13
|
gem 'rake', '~> 13.0'
|
|
14
14
|
gem 'rspec', '~> 3.0'
|
|
15
15
|
gem 'rspec-benchmark', '~> 0.6.0'
|
|
16
|
-
gem 'rubocop', '~> 0.
|
|
17
|
-
gem 'rubocop-performance', '~> 1.
|
|
18
|
-
gem 'rubocop-rspec', '~> 1.
|
|
19
|
-
gem 'simplecov', '
|
|
16
|
+
gem 'rubocop', '~> 0.93.0'
|
|
17
|
+
gem 'rubocop-performance', '~> 1.8.0'
|
|
18
|
+
gem 'rubocop-rspec', '~> 1.43.1'
|
|
19
|
+
gem 'simplecov', ['>= 0.18.0', '< 0.20.0']
|
|
20
20
|
gem 'yard', '~> 0.9.5'
|
|
21
21
|
|
|
22
22
|
platforms :mri do
|
data/README.md
CHANGED
|
@@ -373,7 +373,7 @@ are documented in the corresponding smell type /docs page (if you want to get a
|
|
|
373
373
|
configurations you can also check out [the `defaults.reek.yml` file in this repository](docs/defaults.reek.yml).
|
|
374
374
|
|
|
375
375
|
Note that you do not need a configuration file at all.
|
|
376
|
-
If you're fine with all the [defaults
|
|
376
|
+
If you're fine with all the [defaults](docs/defaults.reek.yml) we set you can skip this completely.
|
|
377
377
|
|
|
378
378
|
Don't worry about introducing a mistake in your configuration file that might go unnoticed - Reek uses a
|
|
379
379
|
schema to validate your configuration against on start up and will faily loudly in case you
|
data/docs/Boolean-Parameter.md
CHANGED
|
@@ -38,7 +38,7 @@ Note that both smells are reported, _Boolean Parameter_ and _Control Parameter_.
|
|
|
38
38
|
|
|
39
39
|
## Getting rid of the smell
|
|
40
40
|
|
|
41
|
-
This is highly
|
|
41
|
+
This is highly dependent on your exact architecture, but looking at the example above what you could do is:
|
|
42
42
|
|
|
43
43
|
* Move everything in the `if` branch into a separate method
|
|
44
44
|
* Move everything in the `else` branch into a separate method
|
|
@@ -43,7 +43,7 @@ Feature: Reek can be controlled using command-line options
|
|
|
43
43
|
-c, --config FILE Read configuration options from FILE
|
|
44
44
|
--smell SMELL Only look for a specific smell.
|
|
45
45
|
Call it like this: reek --smell MissingSafeMethod source.rb
|
|
46
|
-
Check out https://github.com/troessner/reek/blob/v6.0.
|
|
46
|
+
Check out https://github.com/troessner/reek/blob/v6.0.2/docs/Code-Smells.md for a list of smells
|
|
47
47
|
--stdin-filename FILE When passing code in via pipe, assume this filename when checking file or directory rules in the config.
|
|
48
48
|
|
|
49
49
|
Generate a todo list:
|
|
@@ -119,5 +119,5 @@ Feature: Reek can be controlled using command-line options
|
|
|
119
119
|
UnusedPrivateMethod
|
|
120
120
|
UtilityFunction
|
|
121
121
|
|
|
122
|
-
Check out https://github.com/troessner/reek/blob/v6.0.
|
|
122
|
+
Check out https://github.com/troessner/reek/blob/v6.0.2/docs/Code-Smells.md for a details on each detector
|
|
123
123
|
"""
|
|
@@ -6,7 +6,7 @@ Feature: Validate schema
|
|
|
6
6
|
Scenario: Our generated default configuration
|
|
7
7
|
Given our default configuration file
|
|
8
8
|
And the clean file "clean.rb"
|
|
9
|
-
When I run reek -c defaults.reek clean.rb
|
|
9
|
+
When I run reek -c defaults.reek.yml clean.rb
|
|
10
10
|
Then it succeeds
|
|
11
11
|
And it reports nothing
|
|
12
12
|
|
|
@@ -24,7 +24,7 @@ Feature: Report smells using simple JSON layout
|
|
|
24
24
|
"context": "Smelly#x",
|
|
25
25
|
"lines": [ 4 ],
|
|
26
26
|
"message": "has the name 'x'",
|
|
27
|
-
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.
|
|
27
|
+
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Method-Name.md",
|
|
28
28
|
"name": "x"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
@@ -33,7 +33,7 @@ Feature: Report smells using simple JSON layout
|
|
|
33
33
|
"context": "Smelly#x",
|
|
34
34
|
"lines": [ 5 ],
|
|
35
35
|
"message": "has the variable name 'y'",
|
|
36
|
-
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.
|
|
36
|
+
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Variable-Name.md",
|
|
37
37
|
"name": "y"
|
|
38
38
|
}
|
|
39
39
|
]
|
|
@@ -53,7 +53,7 @@ Feature: Report smells using simple JSON layout
|
|
|
53
53
|
1
|
|
54
54
|
],
|
|
55
55
|
"message": "has no descriptive comment",
|
|
56
|
-
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.
|
|
56
|
+
"documentation_link": "https://github.com/troessner/reek/blob/v6.0.2/docs/Irresponsible-Module.md"
|
|
57
57
|
}
|
|
58
58
|
]
|
|
59
59
|
"""
|
|
@@ -182,8 +182,8 @@ Feature: Correctly formatted reports
|
|
|
182
182
|
And it reports:
|
|
183
183
|
"""
|
|
184
184
|
smelly.rb -- 2 warnings:
|
|
185
|
-
[4]:UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.
|
|
186
|
-
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.
|
|
185
|
+
[4]:UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Method-Name.md]
|
|
186
|
+
[5]:UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Variable-Name.md]
|
|
187
187
|
"""
|
|
188
188
|
|
|
189
189
|
Examples:
|
|
@@ -209,8 +209,8 @@ Feature: Correctly formatted reports
|
|
|
209
209
|
And it reports:
|
|
210
210
|
"""
|
|
211
211
|
smelly.rb -- 2 warnings:
|
|
212
|
-
UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.
|
|
213
|
-
UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.
|
|
212
|
+
UncommunicativeMethodName: Smelly#x has the name 'x' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Method-Name.md]
|
|
213
|
+
UncommunicativeVariableName: Smelly#x has the variable name 'y' [https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Variable-Name.md]
|
|
214
214
|
"""
|
|
215
215
|
|
|
216
216
|
Examples:
|
|
@@ -25,7 +25,7 @@ Feature: Report smells using simple YAML layout
|
|
|
25
25
|
smell_type: UncommunicativeMethodName
|
|
26
26
|
source: smelly.rb
|
|
27
27
|
name: x
|
|
28
|
-
documentation_link: https://github.com/troessner/reek/blob/v6.0.
|
|
28
|
+
documentation_link: https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Method-Name.md
|
|
29
29
|
- context: Smelly#x
|
|
30
30
|
lines:
|
|
31
31
|
- 5
|
|
@@ -33,7 +33,7 @@ Feature: Report smells using simple YAML layout
|
|
|
33
33
|
smell_type: UncommunicativeVariableName
|
|
34
34
|
source: smelly.rb
|
|
35
35
|
name: y
|
|
36
|
-
documentation_link: https://github.com/troessner/reek/blob/v6.0.
|
|
36
|
+
documentation_link: https://github.com/troessner/reek/blob/v6.0.2/docs/Uncommunicative-Variable-Name.md
|
|
37
37
|
"""
|
|
38
38
|
|
|
39
39
|
Scenario: Indicate smells and print them as yaml when using STDIN
|
|
@@ -48,5 +48,5 @@ Feature: Report smells using simple YAML layout
|
|
|
48
48
|
lines:
|
|
49
49
|
- 1
|
|
50
50
|
message: has no descriptive comment
|
|
51
|
-
documentation_link: https://github.com/troessner/reek/blob/v6.0.
|
|
51
|
+
documentation_link: https://github.com/troessner/reek/blob/v6.0.2/docs/Irresponsible-Module.md
|
|
52
52
|
"""
|
|
@@ -44,8 +44,8 @@ Given(/^a configuration file '(.+)'$/) do |filename|
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
Given(/^our default configuration file$/) do
|
|
47
|
-
default_configuration = File.read
|
|
48
|
-
write_file('defaults.reek', default_configuration)
|
|
47
|
+
default_configuration = File.read Reek::DEFAULT_SMELL_CONFIGURATION
|
|
48
|
+
write_file('defaults.reek.yml', default_configuration)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
When(/^I run "reek (.*?)" in a subdirectory$/) do |args|
|
data/lib/reek.rb
CHANGED
|
@@ -8,6 +8,7 @@ require_relative 'reek/examiner'
|
|
|
8
8
|
require_relative 'reek/report'
|
|
9
9
|
|
|
10
10
|
module Reek
|
|
11
|
+
DEFAULT_SMELL_CONFIGURATION = File.join(__dir__, '../docs/defaults.reek.yml').freeze
|
|
11
12
|
DEFAULT_CONFIGURATION_FILE_NAME = '.reek.yml'
|
|
12
13
|
DETECTORS_KEY = 'detectors'
|
|
13
14
|
EXCLUDE_PATHS_KEY = 'exclude_paths'
|
data/lib/reek/cli/options.rb
CHANGED
|
@@ -72,11 +72,12 @@ module Reek
|
|
|
72
72
|
|
|
73
73
|
def load_values(values)
|
|
74
74
|
values.each do |key, value|
|
|
75
|
-
|
|
75
|
+
case key
|
|
76
|
+
when EXCLUDE_PATHS_KEY
|
|
76
77
|
excluded_paths.add value
|
|
77
|
-
|
|
78
|
+
when DIRECTORIES_KEY
|
|
78
79
|
directory_directives.add value
|
|
79
|
-
|
|
80
|
+
when DETECTORS_KEY
|
|
80
81
|
default_directive.add value
|
|
81
82
|
end
|
|
82
83
|
end
|
|
@@ -84,7 +84,7 @@ module Reek
|
|
|
84
84
|
gsub('<<to_eol_wildcards>>', '.*').
|
|
85
85
|
gsub('<<to_wildcards>>', '.*')
|
|
86
86
|
else
|
|
87
|
-
glob
|
|
87
|
+
"#{glob}.*"
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
Regexp.new("^#{regexp}$", Regexp::IGNORECASE)
|
|
@@ -92,7 +92,7 @@ module Reek
|
|
|
92
92
|
|
|
93
93
|
def error_message_for_invalid_smell_type(klass)
|
|
94
94
|
"You are trying to configure smell type #{klass} but we can't find one with that name.\n" \
|
|
95
|
-
"Please make sure you spelled it right. (See 'docs/defaults.reek' in the Reek\n" \
|
|
95
|
+
"Please make sure you spelled it right. (See 'docs/defaults.reek.yml' in the Reek\n" \
|
|
96
96
|
'repository for a list of all available smell types.)'
|
|
97
97
|
end
|
|
98
98
|
end
|
|
@@ -66,6 +66,8 @@ module Reek
|
|
|
66
66
|
CodeComment.new(comment: exp.leading_comment).descriptive?
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
+
CONSTANT_SEXP_TYPES = [:casgn, :class, :module].freeze
|
|
70
|
+
|
|
69
71
|
# A namespace module is a module (or class) that is only there for namespacing
|
|
70
72
|
# purposes, and thus contains only nested constants, modules or classes.
|
|
71
73
|
#
|
|
@@ -78,7 +80,7 @@ module Reek
|
|
|
78
80
|
return false if exp.type == :casgn
|
|
79
81
|
|
|
80
82
|
children = exp.direct_children
|
|
81
|
-
children.any? && children.all? { |child|
|
|
83
|
+
children.any? && children.all? { |child| CONSTANT_SEXP_TYPES.include? child.type }
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
def track_visibility(visibility, names)
|
|
@@ -59,7 +59,7 @@ BooleanParameter:
|
|
|
59
59
|
|
|
60
60
|
## Getting rid of the smell
|
|
61
61
|
|
|
62
|
-
This is highly
|
|
62
|
+
This is highly dependent on your exact architecture, but looking at the example above what you could do is:
|
|
63
63
|
|
|
64
64
|
* Move everything in the `if` branch into a separate method
|
|
65
65
|
* Move everything in the `else` branch into a separate method
|
|
@@ -14,6 +14,8 @@ module Reek
|
|
|
14
14
|
#
|
|
15
15
|
# See {file:docs/Boolean-Parameter.md} for details.
|
|
16
16
|
class BooleanParameter < BaseDetector
|
|
17
|
+
BOOLEAN_VALUES = [:true, :false].freeze
|
|
18
|
+
|
|
17
19
|
#
|
|
18
20
|
# Checks whether the given method has any Boolean parameters.
|
|
19
21
|
#
|
|
@@ -21,7 +23,7 @@ module Reek
|
|
|
21
23
|
#
|
|
22
24
|
def sniff
|
|
23
25
|
context.default_assignments.select do |_parameter, value|
|
|
24
|
-
|
|
26
|
+
BOOLEAN_VALUES.include?(value.type)
|
|
25
27
|
end.map do |parameter, _value|
|
|
26
28
|
smell_warning(
|
|
27
29
|
lines: [source_line],
|
data/lib/reek/smell_warning.rb
CHANGED
|
@@ -31,8 +31,7 @@ module Reek
|
|
|
31
31
|
# public API.
|
|
32
32
|
#
|
|
33
33
|
# @quality :reek:LongParameterList { max_params: 6 }
|
|
34
|
-
def initialize(smell_type, context: '',
|
|
35
|
-
source:, parameters: {})
|
|
34
|
+
def initialize(smell_type, lines:, message:, source:, context: '', parameters: {})
|
|
36
35
|
@smell_type = smell_type
|
|
37
36
|
@source = source
|
|
38
37
|
@context = context.to_s
|
|
@@ -33,23 +33,26 @@ module Reek
|
|
|
33
33
|
|
|
34
34
|
attr_reader :configuration, :paths, :options
|
|
35
35
|
|
|
36
|
-
# @quality :reek:TooManyStatements { max_statements: 7 }
|
|
37
|
-
# @quality :reek:NestedIterators { max_allowed_nesting: 2 }
|
|
38
36
|
def source_paths
|
|
39
37
|
paths.each_with_object([]) do |given_path, relevant_paths|
|
|
40
|
-
|
|
38
|
+
if given_path.exist?
|
|
39
|
+
relevant_paths.concat source_files_from_path(given_path)
|
|
40
|
+
else
|
|
41
41
|
print_no_such_file_error(given_path)
|
|
42
|
-
next
|
|
43
42
|
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
def source_files_from_path(given_path)
|
|
47
|
+
relevant_paths = []
|
|
48
|
+
given_path.find do |path|
|
|
49
|
+
if path.directory?
|
|
50
|
+
Find.prune if ignore_path?(path)
|
|
51
|
+
elsif ruby_file?(path)
|
|
52
|
+
relevant_paths << path unless ignore_file?(path)
|
|
51
53
|
end
|
|
52
54
|
end
|
|
55
|
+
relevant_paths
|
|
53
56
|
end
|
|
54
57
|
|
|
55
58
|
def ignore_file?(path)
|
data/lib/reek/version.rb
CHANGED
data/reek.gemspec
CHANGED
|
@@ -19,8 +19,16 @@ Gem::Specification.new do |s|
|
|
|
19
19
|
s.required_ruby_version = '>= 2.4.0'
|
|
20
20
|
s.summary = 'Code smell detector for Ruby'
|
|
21
21
|
|
|
22
|
+
s.metadata = {
|
|
23
|
+
'homepage_uri' => 'https://github.com/troessner/reek',
|
|
24
|
+
'source_code_uri' => 'https://github.com/troessner/reek',
|
|
25
|
+
'bug_tracker_uri' => 'https://github.com/troessner/reek/issues',
|
|
26
|
+
'changelog_uri' => 'https://github.com/troessner/reek/CHANGELOG.md',
|
|
27
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/reek'
|
|
28
|
+
}
|
|
29
|
+
|
|
22
30
|
s.add_runtime_dependency 'kwalify', '~> 0.7.0'
|
|
23
31
|
s.add_runtime_dependency 'parser', '< 2.8', '>= 2.5.0.0', '!= 2.5.1.1'
|
|
24
|
-
s.add_runtime_dependency 'psych', '~> 3.1
|
|
32
|
+
s.add_runtime_dependency 'psych', '~> 3.1'
|
|
25
33
|
s.add_runtime_dependency 'rainbow', '>= 2.0', '< 4.0'
|
|
26
34
|
end
|
|
@@ -6,10 +6,8 @@ RSpec.describe 'Runtime speed' do
|
|
|
6
6
|
|
|
7
7
|
it 'runs on our smelly sources in less than 5 seconds' do
|
|
8
8
|
expect do
|
|
9
|
-
source_directory.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
examiner = Reek::Examiner.new entry.to_path
|
|
9
|
+
Dir[source_directory.join('**/*.rb')].each do |entry|
|
|
10
|
+
examiner = Reek::Examiner.new Pathname.new(entry)
|
|
13
11
|
examiner.smells.size
|
|
14
12
|
end
|
|
15
13
|
end.to perform_under(5).sec
|
|
@@ -4,6 +4,7 @@ require 'kramdown'
|
|
|
4
4
|
RSpec.describe 'Documentation' do
|
|
5
5
|
root = File.expand_path('../..', __dir__)
|
|
6
6
|
files = Dir.glob(File.join(root, '*.md')) + Dir.glob(File.join(root, 'docs', '*.md'))
|
|
7
|
+
code_types = [:codeblock, :codespan]
|
|
7
8
|
|
|
8
9
|
files.each do |file|
|
|
9
10
|
describe "from #{file}" do
|
|
@@ -13,7 +14,7 @@ RSpec.describe 'Documentation' do
|
|
|
13
14
|
|
|
14
15
|
blocks.each do |block|
|
|
15
16
|
# Only consider code blocks with language 'ruby'.
|
|
16
|
-
next unless
|
|
17
|
+
next unless code_types.include?(block.type)
|
|
17
18
|
next unless block.attr['class'] == 'language-ruby'
|
|
18
19
|
|
|
19
20
|
it "has a valid sample at #{block.options[:location] + 1}" do
|
data/tasks/configuration.rake
CHANGED
|
@@ -8,11 +8,10 @@ require 'yaml'
|
|
|
8
8
|
namespace :configuration do
|
|
9
9
|
desc 'Updates the default configuration file when smell defaults change'
|
|
10
10
|
task :update_default_configuration do
|
|
11
|
-
DEFAULT_SMELL_CONFIGURATION = 'docs/defaults.reek.yml'.freeze
|
|
12
11
|
content = Reek::DetectorRepository.smell_types.each_with_object({}) do |klass, hash|
|
|
13
12
|
hash[klass.smell_type] = Reek::Configuration::RakeTaskConverter.convert klass.default_config
|
|
14
13
|
end
|
|
15
|
-
File.open(DEFAULT_SMELL_CONFIGURATION, 'w') do |file|
|
|
14
|
+
File.open(Reek::DEFAULT_SMELL_CONFIGURATION, 'w') do |file|
|
|
16
15
|
YAML.dump({ Reek::DETECTORS_KEY => content }, file)
|
|
17
16
|
end
|
|
18
17
|
end
|
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: 6.0.
|
|
4
|
+
version: 6.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kevin Rutherford
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2020-
|
|
14
|
+
date: 2020-10-17 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: kwalify
|
|
@@ -31,42 +31,42 @@ dependencies:
|
|
|
31
31
|
name: parser
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
33
33
|
requirements:
|
|
34
|
+
- - "<"
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '2.8'
|
|
34
37
|
- - ">="
|
|
35
38
|
- !ruby/object:Gem::Version
|
|
36
39
|
version: 2.5.0.0
|
|
37
40
|
- - "!="
|
|
38
41
|
- !ruby/object:Gem::Version
|
|
39
42
|
version: 2.5.1.1
|
|
40
|
-
- - "<"
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: '2.8'
|
|
43
43
|
type: :runtime
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
|
47
|
+
- - "<"
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: '2.8'
|
|
47
50
|
- - ">="
|
|
48
51
|
- !ruby/object:Gem::Version
|
|
49
52
|
version: 2.5.0.0
|
|
50
53
|
- - "!="
|
|
51
54
|
- !ruby/object:Gem::Version
|
|
52
55
|
version: 2.5.1.1
|
|
53
|
-
- - "<"
|
|
54
|
-
- !ruby/object:Gem::Version
|
|
55
|
-
version: '2.8'
|
|
56
56
|
- !ruby/object:Gem::Dependency
|
|
57
57
|
name: psych
|
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
|
59
59
|
requirements:
|
|
60
60
|
- - "~>"
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: 3.1
|
|
62
|
+
version: '3.1'
|
|
63
63
|
type: :runtime
|
|
64
64
|
prerelease: false
|
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements:
|
|
67
67
|
- - "~>"
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 3.1
|
|
69
|
+
version: '3.1'
|
|
70
70
|
- !ruby/object:Gem::Dependency
|
|
71
71
|
name: rainbow
|
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -465,7 +465,12 @@ files:
|
|
|
465
465
|
homepage: https://github.com/troessner/reek
|
|
466
466
|
licenses:
|
|
467
467
|
- MIT
|
|
468
|
-
metadata:
|
|
468
|
+
metadata:
|
|
469
|
+
homepage_uri: https://github.com/troessner/reek
|
|
470
|
+
source_code_uri: https://github.com/troessner/reek
|
|
471
|
+
bug_tracker_uri: https://github.com/troessner/reek/issues
|
|
472
|
+
changelog_uri: https://github.com/troessner/reek/CHANGELOG.md
|
|
473
|
+
documentation_uri: https://www.rubydoc.info/gems/reek
|
|
469
474
|
post_install_message:
|
|
470
475
|
rdoc_options:
|
|
471
476
|
- "--main"
|
|
@@ -485,7 +490,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
485
490
|
- !ruby/object:Gem::Version
|
|
486
491
|
version: '0'
|
|
487
492
|
requirements: []
|
|
488
|
-
rubygems_version: 3.
|
|
493
|
+
rubygems_version: 3.1.2
|
|
489
494
|
signing_key:
|
|
490
495
|
specification_version: 4
|
|
491
496
|
summary: Code smell detector for Ruby
|