reek 6.0.1 → 6.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|