reek 6.0.5 → 6.1.1
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/.github/workflows/ruby.yml +31 -26
- data/.rubocop.yml +5 -3
- data/CHANGELOG.md +15 -0
- data/Gemfile +5 -5
- data/README.md +1 -1
- data/lib/reek/ast/sexp_extensions/arguments.rb +11 -0
- data/lib/reek/ast/sexp_extensions/case.rb +1 -1
- data/lib/reek/ast/sexp_extensions/if.rb +1 -1
- data/lib/reek/ast/sexp_extensions/send.rb +1 -1
- data/lib/reek/cli/command/todo_list_command.rb +1 -1
- data/lib/reek/cli/options.rb +1 -1
- data/lib/reek/code_comment.rb +22 -17
- data/lib/reek/context/module_context.rb +4 -0
- data/lib/reek/context/send_context.rb +6 -0
- data/lib/reek/context_builder.rb +1 -1
- data/lib/reek/rake/task.rb +1 -1
- data/lib/reek/smell_detectors/unused_private_method.rb +1 -0
- data/lib/reek/smell_warning.rb +1 -1
- data/lib/reek/spec/should_reek_of.rb +6 -4
- data/lib/reek/version.rb +2 -2
- data/reek.gemspec +25 -25
- metadata +10 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e1e79296b4eb0b93d7b6d7bc7b13704b6831765416cab19c729473d2fe135ea
|
4
|
+
data.tar.gz: f9a49ffd6ad47e308a617bafb0901d438617c863ff5279c867d5db8e9148c0e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ea8856c9c0f32543af3bb336790d9875cdf385ed45d2609af219f1857931d1b15de7802386954caff9c68f5753657f138e2eb304ef4ae94edc0e7a0e7e4e070
|
7
|
+
data.tar.gz: 407628086e04a8d2972f1343a34d299e77d462b0236f18e8b4570a9b9dfcd290dc6d690be56c67e06c0fff95326e764254b70c127962f5a90914a73bae115aed
|
data/.github/workflows/ruby.yml
CHANGED
@@ -2,14 +2,19 @@
|
|
2
2
|
# run tests with Rake
|
3
3
|
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
4
4
|
|
5
|
-
name:
|
5
|
+
name: CI
|
6
6
|
|
7
7
|
on:
|
8
8
|
push:
|
9
9
|
branches: [ master ]
|
10
10
|
pull_request:
|
11
11
|
branches: [ master ]
|
12
|
+
schedule:
|
13
|
+
- cron: '16 4 12 * *'
|
12
14
|
|
15
|
+
env:
|
16
|
+
CUCUMBER_PUBLISH_QUIET: true
|
17
|
+
RUBYOPTS: "--disable-did-you-mean"
|
13
18
|
jobs:
|
14
19
|
test:
|
15
20
|
|
@@ -17,36 +22,36 @@ jobs:
|
|
17
22
|
|
18
23
|
strategy:
|
19
24
|
matrix:
|
20
|
-
ruby: [2.
|
25
|
+
ruby: [2.6, 2.7, "3.0", "3.1", jruby-9.3]
|
21
26
|
|
22
27
|
steps:
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
28
|
+
- uses: actions/checkout@v2
|
29
|
+
- name: Set up Ruby
|
30
|
+
uses: ruby/setup-ruby@v1
|
31
|
+
with:
|
32
|
+
ruby-version: ${{ matrix.ruby }}
|
33
|
+
bundler-cache: true
|
34
|
+
- name: Run specs
|
35
|
+
run: bundle exec rake test:spec
|
36
|
+
- name: Run performance tests
|
37
|
+
run: bundle exec rake test:performance
|
38
|
+
- name: Update default configuration
|
39
|
+
run: bundle exec rake configuration:update_default_configuration
|
40
|
+
- name: Run cucumber features
|
41
|
+
run: bundle exec rake test:features
|
42
|
+
- name: Run code quality specs
|
43
|
+
run: bundle exec rake test:quality
|
39
44
|
|
40
45
|
rubocop:
|
41
46
|
|
42
47
|
runs-on: ubuntu-latest
|
43
48
|
|
44
49
|
steps:
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
- uses: actions/checkout@v2
|
51
|
+
- name: Set up Ruby
|
52
|
+
uses: ruby/setup-ruby@v1
|
53
|
+
with:
|
54
|
+
ruby-version: 2.7
|
55
|
+
bundler-cache: true
|
56
|
+
- name: Run RuboCop
|
57
|
+
run: bundle exec rubocop -P
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
2
2
|
|
3
|
+
inherit_mode:
|
4
|
+
merge:
|
5
|
+
- Exclude
|
6
|
+
|
3
7
|
require:
|
4
8
|
- rubocop-rspec
|
5
9
|
- rubocop-performance
|
@@ -7,10 +11,8 @@ require:
|
|
7
11
|
AllCops:
|
8
12
|
Exclude:
|
9
13
|
- 'samples/**/*'
|
10
|
-
- 'tmp/**/*'
|
11
|
-
- 'vendor/**/*'
|
12
14
|
NewCops: enable
|
13
|
-
TargetRubyVersion: 2.
|
15
|
+
TargetRubyVersion: 2.6
|
14
16
|
|
15
17
|
# Tables are nice
|
16
18
|
Layout/HashAlignment:
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## 6.1.1 (2022-04-20)
|
4
|
+
|
5
|
+
* (ydah) UnusedPrivateMethod to be detect use of methods via `Method#to_proc`
|
6
|
+
|
7
|
+
## 6.1.0 (2022-01-14)
|
8
|
+
|
9
|
+
* (mvz) Drop support for Ruby 2.4 and 2.5
|
10
|
+
* (mvz) Support Ruby 3.0 and 3.1
|
11
|
+
* (mvz) Support argument forwarding after regular arguments
|
12
|
+
|
13
|
+
## 6.0.6 (2021-08-12)
|
14
|
+
|
15
|
+
* (mvz) Remove explicit dependency on psych. This fixes an issue where
|
16
|
+
installing Reek would unintentionally pull in psych 4.0
|
17
|
+
|
3
18
|
## 6.0.5 (2021-08-01)
|
4
19
|
|
5
20
|
* (dependabot) Loosen dependency on psych
|
data/Gemfile
CHANGED
@@ -5,17 +5,17 @@ gemspec
|
|
5
5
|
ruby RUBY_VERSION
|
6
6
|
|
7
7
|
group :development do
|
8
|
-
gem 'aruba', '~>
|
8
|
+
gem 'aruba', '~> 2.0'
|
9
9
|
gem 'codeclimate-engine-rb', '~> 0.4.0'
|
10
|
-
gem 'cucumber',
|
10
|
+
gem 'cucumber', '>= 4.0', '< 8.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', '~> 1.
|
17
|
-
gem 'rubocop-performance', '~> 1.
|
18
|
-
gem 'rubocop-rspec', '~> 2.
|
16
|
+
gem 'rubocop', '~> 1.27.0'
|
17
|
+
gem 'rubocop-performance', '~> 1.13.1'
|
18
|
+
gem 'rubocop-rspec', '~> 2.9.0'
|
19
19
|
gem 'simplecov', ['>= 0.18.0', '< 0.22.0']
|
20
20
|
gem 'yard', '~> 0.9.5'
|
21
21
|
|
data/README.md
CHANGED
@@ -94,7 +94,7 @@ demo.rb -- 2 warnings:
|
|
94
94
|
|
95
95
|
## Supported Ruby versions
|
96
96
|
|
97
|
-
Reek is officially supported for CRuby 2.
|
97
|
+
Reek is officially supported for CRuby 2.6 through 3.1 and for JRuby 9.3.
|
98
98
|
Other Ruby implementations (like Rubinius) are not officially supported but
|
99
99
|
should work as well.
|
100
100
|
|
@@ -104,6 +104,17 @@ module Reek
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
# rubocop:enable Naming/ClassAndModuleCamelCase
|
107
|
+
|
108
|
+
# Utility methods for :forward_arg nodes.
|
109
|
+
# rubocop:disable Naming/ClassAndModuleCamelCase
|
110
|
+
module Forward_ArgNode
|
111
|
+
include ArgNodeBase
|
112
|
+
|
113
|
+
def anonymous_splat?
|
114
|
+
true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
# rubocop:enable Naming/ClassAndModuleCamelCase
|
107
118
|
end
|
108
119
|
end
|
109
120
|
end
|
data/lib/reek/cli/options.rb
CHANGED
@@ -232,7 +232,7 @@ module Reek
|
|
232
232
|
puts "All available smell detectors:\n\n"
|
233
233
|
puts DetectorRepository.available_detector_names
|
234
234
|
puts "\nCheck out #{DocumentationLink.build('Code Smells')} "\
|
235
|
-
|
235
|
+
'for a details on each detector'
|
236
236
|
exit
|
237
237
|
end
|
238
238
|
parser.on_tail('-v', '--version', 'Show version') do
|
data/lib/reek/code_comment.rb
CHANGED
@@ -39,13 +39,13 @@ module Reek
|
|
39
39
|
|
40
40
|
@original_comment.scan(CONFIGURATION_REGEX) do |detector_name, separator, options|
|
41
41
|
escalate_legacy_separator separator
|
42
|
-
CodeCommentValidator.new(detector_name: detector_name,
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
42
|
+
validator = CodeCommentValidator.new(detector_name: detector_name,
|
43
|
+
original_comment: original_comment,
|
44
|
+
line: line,
|
45
|
+
source: source,
|
46
|
+
options: options)
|
47
|
+
validator.validate
|
48
|
+
@config.merge! detector_name => validator.parsed_options
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -115,6 +115,21 @@ module Reek
|
|
115
115
|
escalate_unknown_configuration_key
|
116
116
|
end
|
117
117
|
|
118
|
+
def parsed_options
|
119
|
+
@parsed_options ||=
|
120
|
+
if Psych::VERSION < '3.1.0'
|
121
|
+
YAML.safe_load(options || CodeComment::DISABLE_DETECTOR_CONFIGURATION, [Regexp])
|
122
|
+
else
|
123
|
+
YAML.safe_load(options || CodeComment::DISABLE_DETECTOR_CONFIGURATION,
|
124
|
+
permitted_classes: [Regexp])
|
125
|
+
end
|
126
|
+
rescue Psych::SyntaxError
|
127
|
+
raise Errors::GarbageDetectorConfigurationInCommentError.new(detector_name: detector_name,
|
128
|
+
original_comment: original_comment,
|
129
|
+
source: source,
|
130
|
+
line: line)
|
131
|
+
end
|
132
|
+
|
118
133
|
private
|
119
134
|
|
120
135
|
attr_reader :detector_name,
|
@@ -124,16 +139,6 @@ module Reek
|
|
124
139
|
:separator,
|
125
140
|
:options
|
126
141
|
|
127
|
-
def parsed_options
|
128
|
-
@parsed_options ||= YAML.safe_load(options || CodeComment::DISABLE_DETECTOR_CONFIGURATION,
|
129
|
-
permitted_classes: [Regexp])
|
130
|
-
rescue Psych::SyntaxError
|
131
|
-
raise Errors::GarbageDetectorConfigurationInCommentError.new(detector_name: detector_name,
|
132
|
-
original_comment: original_comment,
|
133
|
-
source: source,
|
134
|
-
line: line)
|
135
|
-
end
|
136
|
-
|
137
142
|
def escalate_unknown_configuration_key
|
138
143
|
return if given_keys_legit?
|
139
144
|
|
data/lib/reek/context_builder.rb
CHANGED
@@ -422,7 +422,7 @@ module Reek
|
|
422
422
|
# See `process_rescue` for additional reference.
|
423
423
|
#
|
424
424
|
def process_resbody(exp, _parent)
|
425
|
-
increase_statement_count_by(exp.children[1
|
425
|
+
increase_statement_count_by(exp.children[1..].compact)
|
426
426
|
process(exp)
|
427
427
|
end
|
428
428
|
|
data/lib/reek/rake/task.rb
CHANGED
@@ -88,7 +88,7 @@ module Reek
|
|
88
88
|
def source_files=(files)
|
89
89
|
unless files.is_a?(String) || files.is_a?(FileList)
|
90
90
|
raise ArgumentError, 'File list should be a FileList or a String that can contain'\
|
91
|
-
|
91
|
+
" a glob pattern, e.g. '{app,lib,spec}/**/*.rb'"
|
92
92
|
end
|
93
93
|
@source_files = FileList[files]
|
94
94
|
end
|
@@ -61,6 +61,7 @@ module Reek
|
|
61
61
|
def unused_private_methods
|
62
62
|
defined_private_methods = context.defined_instance_methods(visibility: :private)
|
63
63
|
called_method_names = context.instance_method_calls.map(&:name)
|
64
|
+
called_method_names.concat(context.instance_method_names_via_to_call)
|
64
65
|
|
65
66
|
defined_private_methods.reject do |defined_method|
|
66
67
|
called_method_names.include?(defined_method.name)
|
data/lib/reek/smell_warning.rb
CHANGED
@@ -70,18 +70,20 @@ module Reek
|
|
70
70
|
|
71
71
|
def set_failure_messages_for_smell_type
|
72
72
|
self.failure_message = "Expected #{origin} to reek of #{smell_type}, "\
|
73
|
-
|
73
|
+
'but it didn\'t'
|
74
74
|
self.failure_message_when_negated = "Expected #{origin} not to reek "\
|
75
|
-
|
75
|
+
"of #{smell_type}, but it did"
|
76
76
|
end
|
77
77
|
|
78
78
|
def set_failure_messages_for_smell_details
|
79
|
-
self.failure_message =
|
79
|
+
self.failure_message =
|
80
|
+
"Expected #{origin} to reek of #{smell_type} "\
|
80
81
|
"(which it did) with smell details #{smell_details}, which it didn't.\n"\
|
81
82
|
"The number of smell details I had to compare with the given one was #{matching_smell_types.count} "\
|
82
83
|
"and here they are:\n"\
|
83
84
|
"#{all_relevant_smell_details_formatted}"
|
84
|
-
self.failure_message_when_negated =
|
85
|
+
self.failure_message_when_negated =
|
86
|
+
"Expected #{origin} not to reek of "\
|
85
87
|
"#{smell_type} with smell details #{smell_details}, but it did"
|
86
88
|
end
|
87
89
|
|
data/lib/reek/version.rb
CHANGED
data/reek.gemspec
CHANGED
@@ -1,37 +1,37 @@
|
|
1
|
-
|
1
|
+
require_relative 'lib/reek/version'
|
2
2
|
|
3
|
-
Gem::Specification.new do |
|
4
|
-
|
5
|
-
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'reek'
|
5
|
+
spec.version = Reek::Version::STRING
|
6
|
+
spec.authors = ['Kevin Rutherford', 'Timo Roessner', 'Matijs van Zuijlen', 'Piotr Szotkowski']
|
7
|
+
spec.email = ['timo.roessner@googlemail.com']
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
+
spec.summary = 'Code smell detector for Ruby'
|
10
|
+
spec.description =
|
9
11
|
'Reek is a tool that examines Ruby classes, modules and methods and reports ' \
|
10
12
|
'any code smells it finds.'
|
13
|
+
spec.homepage = 'https://github.com/troessner/reek'
|
14
|
+
spec.license = 'MIT'
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
s.extra_rdoc_files = ['CHANGELOG.md', 'License.txt']
|
15
|
-
s.files = Dir.chdir(File.expand_path(__dir__)) do
|
16
|
+
spec.extra_rdoc_files = ['CHANGELOG.md', 'License.txt']
|
17
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
16
18
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|samples|docs|tasks)/}) }
|
17
19
|
end
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
s.required_ruby_version = '>= 2.4.0'
|
23
|
-
s.summary = 'Code smell detector for Ruby'
|
21
|
+
spec.executables = spec.files.grep(%r{^bin/}).map { |path| File.basename(path) }
|
22
|
+
spec.rdoc_options = %w(--main README.md -x assets/|bin/|config/|features/|spec/|tasks/)
|
23
|
+
spec.required_ruby_version = '>= 2.6.0'
|
24
24
|
|
25
|
-
|
26
|
-
'homepage_uri'
|
27
|
-
'source_code_uri'
|
28
|
-
'bug_tracker_uri'
|
29
|
-
'changelog_uri'
|
30
|
-
'documentation_uri'
|
25
|
+
spec.metadata = {
|
26
|
+
'homepage_uri' => 'https://github.com/troessner/reek',
|
27
|
+
'source_code_uri' => 'https://github.com/troessner/reek',
|
28
|
+
'bug_tracker_uri' => 'https://github.com/troessner/reek/issues',
|
29
|
+
'changelog_uri' => 'https://github.com/troessner/reek/CHANGELOG.md',
|
30
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/reek',
|
31
|
+
'rubygems_mfa_required' => 'true'
|
31
32
|
}
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
s.add_runtime_dependency 'rainbow', '>= 2.0', '< 4.0'
|
34
|
+
spec.add_runtime_dependency 'kwalify', '~> 0.7.0'
|
35
|
+
spec.add_runtime_dependency 'parser', '~> 3.1.0'
|
36
|
+
spec.add_runtime_dependency 'rainbow', '>= 2.0', '< 4.0'
|
37
37
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reek
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Rutherford
|
8
8
|
- Timo Roessner
|
9
9
|
- Matijs van Zuijlen
|
10
10
|
- Piotr Szotkowski
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2022-04-20 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: kwalify
|
@@ -33,34 +33,14 @@ dependencies:
|
|
33
33
|
requirements:
|
34
34
|
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 3.
|
36
|
+
version: 3.1.0
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 3.
|
44
|
-
- !ruby/object:Gem::Dependency
|
45
|
-
name: psych
|
46
|
-
requirement: !ruby/object:Gem::Requirement
|
47
|
-
requirements:
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: '3.1'
|
51
|
-
- - "<"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '5.0'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '3.1'
|
61
|
-
- - "<"
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '5.0'
|
43
|
+
version: 3.1.0
|
64
44
|
- !ruby/object:Gem::Dependency
|
65
45
|
name: rainbow
|
66
46
|
requirement: !ruby/object:Gem::Requirement
|
@@ -263,7 +243,8 @@ metadata:
|
|
263
243
|
bug_tracker_uri: https://github.com/troessner/reek/issues
|
264
244
|
changelog_uri: https://github.com/troessner/reek/CHANGELOG.md
|
265
245
|
documentation_uri: https://www.rubydoc.info/gems/reek
|
266
|
-
|
246
|
+
rubygems_mfa_required: 'true'
|
247
|
+
post_install_message:
|
267
248
|
rdoc_options:
|
268
249
|
- "--main"
|
269
250
|
- README.md
|
@@ -275,15 +256,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
275
256
|
requirements:
|
276
257
|
- - ">="
|
277
258
|
- !ruby/object:Gem::Version
|
278
|
-
version: 2.
|
259
|
+
version: 2.6.0
|
279
260
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
280
261
|
requirements:
|
281
262
|
- - ">="
|
282
263
|
- !ruby/object:Gem::Version
|
283
264
|
version: '0'
|
284
265
|
requirements: []
|
285
|
-
rubygems_version: 3.
|
286
|
-
signing_key:
|
266
|
+
rubygems_version: 3.1.6
|
267
|
+
signing_key:
|
287
268
|
specification_version: 4
|
288
269
|
summary: Code smell detector for Ruby
|
289
270
|
test_files: []
|