rubocop-minitest 0.20.1 → 0.21.0
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 +9 -0
- data/CHANGELOG.md +6 -0
- data/Rakefile +2 -6
- data/config/default.yml +5 -0
- data/docs/antora.yml +1 -1
- data/docs/modules/ROOT/pages/cops.adoc +1 -0
- data/docs/modules/ROOT/pages/cops_minitest.adoc +38 -0
- data/lib/rubocop/cop/generator.rb +1 -7
- data/lib/rubocop/cop/minitest/assert_in_delta.rb +1 -1
- data/lib/rubocop/cop/minitest/assert_predicate.rb +1 -1
- data/lib/rubocop/cop/minitest/assert_raises_compound_body.rb +45 -0
- data/lib/rubocop/cop/minitest/refute_equal.rb +1 -2
- data/lib/rubocop/cop/minitest/refute_in_delta.rb +1 -1
- data/lib/rubocop/cop/minitest/refute_predicate.rb +1 -1
- data/lib/rubocop/cop/minitest_cops.rb +1 -0
- data/lib/rubocop/cop/mixin/argument_range_helper.rb +3 -12
- data/lib/rubocop/cop/mixin/predicate_assertion_handleable.rb +1 -5
- data/lib/rubocop/minitest/assert_offense.rb +1 -1
- data/lib/rubocop/minitest/version.rb +1 -1
- data/relnotes/v0.21.0.md +5 -0
- data/tasks/changelog.rb +1 -1
- data/tasks/cops_documentation.rake +2 -2
- data/tasks/cut_release.rake +3 -8
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1026c124f46d1dc887ec84cc1a0bf3b246afee76f0201c3d96bbd0895f3045e9
|
4
|
+
data.tar.gz: 2a66060a132b7235c2bbe77747df17fdb47bcf0011b0f03467612f514c7454de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd56df2ffbf84f91e18af928f18d66decae8879a030db57f1833f1c4811aaf670c367067e42304b6ba94a38cbb7a13aeb55706d02f8495d25e4b5a1a66930c38
|
7
|
+
data.tar.gz: bf2460fca6fe8af2921a84e8b9f6c2fd6e34528a01f9c3c4b781dac4946fe7b042943977baf2c6d9dee7e83f4cf1a8573db492b06b6f63dff559320ccf5e733e
|
data/.rubocop.yml
CHANGED
@@ -31,6 +31,12 @@ Naming/InclusiveLanguage:
|
|
31
31
|
Enabled: true
|
32
32
|
CheckStrings: true
|
33
33
|
FlaggedTerms:
|
34
|
+
auto-correct:
|
35
|
+
Suggestions:
|
36
|
+
- autocorrect
|
37
|
+
auto_correct:
|
38
|
+
Suggestions:
|
39
|
+
- autocorrect
|
34
40
|
behaviour:
|
35
41
|
Suggestions:
|
36
42
|
- behavior
|
@@ -68,6 +74,9 @@ Layout/ClassStructure:
|
|
68
74
|
- protected_methods
|
69
75
|
- private_methods
|
70
76
|
|
77
|
+
Layout/RedundantLineBreak:
|
78
|
+
Enabled: true
|
79
|
+
|
71
80
|
# Trailing white space is meaningful in code examples
|
72
81
|
Layout/TrailingWhitespace:
|
73
82
|
AllowInHeredoc: true
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 0.21.0 (2022-07-31)
|
6
|
+
|
7
|
+
### New features
|
8
|
+
|
9
|
+
* [#109](https://github.com/rubocop/rubocop-minitest/issues/109): Add new `Minitest/AssertRaisesCompoundBody` cop. ([@fatkodima][])
|
10
|
+
|
5
11
|
## 0.20.1 (2022-06-13)
|
6
12
|
|
7
13
|
### Bug fixes
|
data/Rakefile
CHANGED
@@ -28,18 +28,14 @@ end
|
|
28
28
|
desc 'Run RuboCop over itself'
|
29
29
|
RuboCop::RakeTask.new(:internal_investigation)
|
30
30
|
|
31
|
-
task default: %i[
|
32
|
-
documentation_syntax_check
|
33
|
-
test
|
34
|
-
internal_investigation
|
35
|
-
]
|
31
|
+
task default: %i[documentation_syntax_check test internal_investigation]
|
36
32
|
|
37
33
|
desc 'Generate a new cop template'
|
38
34
|
task :new_cop, [:cop] do |_task, args|
|
39
35
|
require 'rubocop'
|
40
36
|
|
41
37
|
cop_name = args.fetch(:cop) do
|
42
|
-
warn
|
38
|
+
warn "usage: bundle exec rake 'new_cop[Department/Name]'"
|
43
39
|
exit!
|
44
40
|
end
|
45
41
|
|
data/config/default.yml
CHANGED
@@ -76,6 +76,11 @@ Minitest/AssertPredicate:
|
|
76
76
|
Enabled: pending
|
77
77
|
VersionAdded: '0.18'
|
78
78
|
|
79
|
+
Minitest/AssertRaisesCompoundBody:
|
80
|
+
Description: 'This cop enforces the block body of `assert_raises { ... }` to be reduced to only the raising code.'
|
81
|
+
Enabled: pending
|
82
|
+
VersionAdded: '0.21'
|
83
|
+
|
79
84
|
Minitest/AssertRespondTo:
|
80
85
|
Description: 'This cop enforces the test to use `assert_respond_to(object, :do_something)` over `assert(object.respond_to?(:do_something))`.'
|
81
86
|
StyleGuide: 'https://minitest.rubystyle.guide#assert-responds-to-method'
|
data/docs/antora.yml
CHANGED
@@ -25,6 +25,7 @@ based on the https://minitest.rubystyle.guide/[Minitest Style Guide].
|
|
25
25
|
* xref:cops_minitest.adoc#minitestassertoutput[Minitest/AssertOutput]
|
26
26
|
* xref:cops_minitest.adoc#minitestassertpathexists[Minitest/AssertPathExists]
|
27
27
|
* xref:cops_minitest.adoc#minitestassertpredicate[Minitest/AssertPredicate]
|
28
|
+
* xref:cops_minitest.adoc#minitestassertraisescompoundbody[Minitest/AssertRaisesCompoundBody]
|
28
29
|
* xref:cops_minitest.adoc#minitestassertrespondto[Minitest/AssertRespondTo]
|
29
30
|
* xref:cops_minitest.adoc#minitestassertsilent[Minitest/AssertSilent]
|
30
31
|
* xref:cops_minitest.adoc#minitestasserttruthy[Minitest/AssertTruthy]
|
@@ -379,6 +379,44 @@ assert_predicate(obj, :one?, 'message')
|
|
379
379
|
|
380
380
|
* https://minitest.rubystyle.guide/#assert-predicate
|
381
381
|
|
382
|
+
== Minitest/AssertRaisesCompoundBody
|
383
|
+
|
384
|
+
|===
|
385
|
+
| Enabled by default | Safe | Supports autocorrection | Version Added | Version Changed
|
386
|
+
|
387
|
+
| Pending
|
388
|
+
| Yes
|
389
|
+
| No
|
390
|
+
| 0.21
|
391
|
+
| -
|
392
|
+
|===
|
393
|
+
|
394
|
+
Enforces the block body of `assert_raises { ... }` to be reduced to only the raising code.
|
395
|
+
|
396
|
+
=== Examples
|
397
|
+
|
398
|
+
[source,ruby]
|
399
|
+
----
|
400
|
+
# bad
|
401
|
+
assert_raises(MyError) do
|
402
|
+
foo
|
403
|
+
bar
|
404
|
+
end
|
405
|
+
|
406
|
+
# good
|
407
|
+
assert_raises(MyError) do
|
408
|
+
foo
|
409
|
+
end
|
410
|
+
|
411
|
+
# good
|
412
|
+
assert_raises(MyError) do
|
413
|
+
foo do
|
414
|
+
bar
|
415
|
+
baz
|
416
|
+
end
|
417
|
+
end
|
418
|
+
----
|
419
|
+
|
382
420
|
== Minitest/AssertRespondTo
|
383
421
|
|
384
422
|
|===
|
@@ -39,13 +39,7 @@ module RuboCop
|
|
39
39
|
private
|
40
40
|
|
41
41
|
def test_path
|
42
|
-
File.join(
|
43
|
-
'test',
|
44
|
-
'rubocop',
|
45
|
-
'cop',
|
46
|
-
'minitest',
|
47
|
-
"#{snake_case(badge.cop_name.to_s)}_test.rb"
|
48
|
-
)
|
42
|
+
File.join('test', 'rubocop', 'cop', 'minitest', "#{snake_case(badge.cop_name.to_s)}_test.rb")
|
49
43
|
end
|
50
44
|
|
51
45
|
def generated_test
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
include InDeltaMixin
|
20
20
|
extend AutoCorrector
|
21
21
|
|
22
|
-
RESTRICT_ON_SEND = %i[assert_equal].freeze
|
22
|
+
RESTRICT_ON_SEND = %i[assert_equal].freeze # rubocop:disable InternalAffairs/UselessRestrictOnSend
|
23
23
|
|
24
24
|
def_node_matcher :equal_floats_call, <<~PATTERN
|
25
25
|
(send nil? :assert_equal $_ $_ $...)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Minitest
|
6
|
+
# Enforces the block body of `assert_raises { ... }` to be reduced to only the raising code.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# assert_raises(MyError) do
|
11
|
+
# foo
|
12
|
+
# bar
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# # good
|
16
|
+
# assert_raises(MyError) do
|
17
|
+
# foo
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# assert_raises(MyError) do
|
22
|
+
# foo do
|
23
|
+
# bar
|
24
|
+
# baz
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
class AssertRaisesCompoundBody < Base
|
29
|
+
MSG = 'Reduce `assert_raises` block body to contain only the raising code.'
|
30
|
+
|
31
|
+
def on_block(node)
|
32
|
+
return unless node.method?(:assert_raises) && multi_statement_begin?(node.body)
|
33
|
+
|
34
|
+
add_offense(node)
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def multi_statement_begin?(node)
|
40
|
+
node.begin_type? && node.children.size > 1
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -44,8 +44,7 @@ module RuboCop
|
|
44
44
|
private
|
45
45
|
|
46
46
|
def preferred_usage(first_arg, second_arg, custom_message = nil)
|
47
|
-
[first_arg, second_arg, custom_message]
|
48
|
-
.compact.map(&:source).join(', ')
|
47
|
+
[first_arg, second_arg, custom_message].compact.map(&:source).join(', ')
|
49
48
|
end
|
50
49
|
|
51
50
|
def original_usage(first_part, custom_message)
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
include InDeltaMixin
|
20
20
|
extend AutoCorrector
|
21
21
|
|
22
|
-
RESTRICT_ON_SEND = %i[refute_equal].freeze
|
22
|
+
RESTRICT_ON_SEND = %i[refute_equal].freeze # rubocop:disable InternalAffairs/UselessRestrictOnSend
|
23
23
|
|
24
24
|
def_node_matcher :equal_floats_call, <<~PATTERN
|
25
25
|
(send nil? :refute_equal $_ $_ $...)
|
@@ -11,6 +11,7 @@ require_relative 'minitest/assert_empty_literal'
|
|
11
11
|
require_relative 'minitest/assert_equal'
|
12
12
|
require_relative 'minitest/assert_in_delta'
|
13
13
|
require_relative 'minitest/assert_predicate'
|
14
|
+
require_relative 'minitest/assert_raises_compound_body'
|
14
15
|
require_relative 'minitest/assert_with_expected_argument'
|
15
16
|
require_relative 'minitest/assertion_in_lifecycle_hook'
|
16
17
|
require_relative 'minitest/assert_kind_of'
|
@@ -11,30 +11,21 @@ module RuboCop
|
|
11
11
|
def first_argument_range(node)
|
12
12
|
first_argument = node.first_argument
|
13
13
|
|
14
|
-
range_between(
|
15
|
-
first_argument.source_range.begin_pos,
|
16
|
-
first_argument.source_range.end_pos
|
17
|
-
)
|
14
|
+
range_between(first_argument.source_range.begin_pos, first_argument.source_range.end_pos)
|
18
15
|
end
|
19
16
|
|
20
17
|
def first_and_second_arguments_range(node)
|
21
18
|
first_argument = node.first_argument
|
22
19
|
second_argument = node.arguments[1]
|
23
20
|
|
24
|
-
range_between(
|
25
|
-
first_argument.source_range.begin_pos,
|
26
|
-
second_argument.source_range.end_pos
|
27
|
-
)
|
21
|
+
range_between(first_argument.source_range.begin_pos, second_argument.source_range.end_pos)
|
28
22
|
end
|
29
23
|
|
30
24
|
def all_arguments_range(node)
|
31
25
|
first_argument = node.first_argument
|
32
26
|
last_argument = node.arguments.last
|
33
27
|
|
34
|
-
range_between(
|
35
|
-
first_argument.source_range.begin_pos,
|
36
|
-
last_argument.source_range.end_pos
|
37
|
-
)
|
28
|
+
range_between(first_argument.source_range.begin_pos, last_argument.source_range.end_pos)
|
38
29
|
end
|
39
30
|
end
|
40
31
|
end
|
@@ -6,7 +6,6 @@ module RuboCop
|
|
6
6
|
# Common functionality for `Minitest/AssertPredicate` and `Minitest/RefutePredicate` cops.
|
7
7
|
module PredicateAssertionHandleable
|
8
8
|
MSG = 'Prefer using `%<assertion_type>s_predicate(%<new_arguments>s)`.'
|
9
|
-
RESTRICT_ON_SEND = %i[assert].freeze
|
10
9
|
|
11
10
|
def on_send(node)
|
12
11
|
return unless (arguments = peel_redundant_parentheses_from(node.arguments))
|
@@ -46,10 +45,7 @@ module RuboCop
|
|
46
45
|
def offense_message(arguments)
|
47
46
|
message_argument = arguments.last if arguments.first != arguments.last
|
48
47
|
|
49
|
-
new_arguments = [
|
50
|
-
new_arguments(arguments),
|
51
|
-
message_argument&.source
|
52
|
-
].flatten.compact.join(', ')
|
48
|
+
new_arguments = [new_arguments(arguments), message_argument&.source].flatten.compact.join(', ')
|
53
49
|
|
54
50
|
format(MSG, assertion_type: assertion_type, new_arguments: new_arguments)
|
55
51
|
end
|
data/relnotes/v0.21.0.md
ADDED
data/tasks/changelog.rb
CHANGED
@@ -22,7 +22,7 @@ end
|
|
22
22
|
|
23
23
|
desc 'Syntax check for the documentation comments'
|
24
24
|
task documentation_syntax_check: :yard_for_generate_documentation do
|
25
|
-
require 'parser/
|
25
|
+
require 'parser/ruby31'
|
26
26
|
|
27
27
|
ok = true
|
28
28
|
YARD::Registry.load!
|
@@ -37,7 +37,7 @@ task documentation_syntax_check: :yard_for_generate_documentation do
|
|
37
37
|
examples.to_a.each do |example|
|
38
38
|
buffer = Parser::Source::Buffer.new('<code>', 1)
|
39
39
|
buffer.source = example.text
|
40
|
-
parser = Parser::
|
40
|
+
parser = Parser::Ruby31.new(RuboCop::AST::Builder.new)
|
41
41
|
parser.diagnostics.all_errors_are_fatal = true
|
42
42
|
parser.parse(buffer)
|
43
43
|
rescue Parser::SyntaxError => e
|
data/tasks/cut_release.rake
CHANGED
@@ -38,10 +38,7 @@ namespace :cut_release do
|
|
38
38
|
antora_metadata = File.read('docs/antora.yml')
|
39
39
|
|
40
40
|
File.open('docs/antora.yml', 'w') do |f|
|
41
|
-
f << antora_metadata.sub(
|
42
|
-
'version: ~',
|
43
|
-
"version: '#{version_sans_patch(new_version)}'"
|
44
|
-
)
|
41
|
+
f << antora_metadata.sub('version: ~', "version: '#{version_sans_patch(new_version)}'")
|
45
42
|
end
|
46
43
|
end
|
47
44
|
|
@@ -52,8 +49,7 @@ namespace :cut_release do
|
|
52
49
|
# Replace `<<next>>` (and variations) with version being cut.
|
53
50
|
def update_cop_versions(_old_version, new_version)
|
54
51
|
update_file('config/default.yml') do |default|
|
55
|
-
default.gsub(/['"]?<<\s*next\s*>>['"]?/i,
|
56
|
-
"'#{version_sans_patch(new_version)}'")
|
52
|
+
default.gsub(/['"]?<<\s*next\s*>>['"]?/i, "'#{version_sans_patch(new_version)}'")
|
57
53
|
end
|
58
54
|
end
|
59
55
|
|
@@ -70,8 +66,7 @@ namespace :cut_release do
|
|
70
66
|
|
71
67
|
def user_links(text)
|
72
68
|
names = text.scan(/\[@(\S+)\]\[\]/).map(&:first).uniq
|
73
|
-
names.map { |name| "[@#{name}]: https://github.com/#{name}" }
|
74
|
-
.join("\n")
|
69
|
+
names.map { |name| "[@#{name}]: https://github.com/#{name}" }.join("\n")
|
75
70
|
end
|
76
71
|
|
77
72
|
def run(release_type)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-minitest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-07-31 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubocop
|
@@ -103,6 +103,7 @@ files:
|
|
103
103
|
- lib/rubocop/cop/minitest/assert_output.rb
|
104
104
|
- lib/rubocop/cop/minitest/assert_path_exists.rb
|
105
105
|
- lib/rubocop/cop/minitest/assert_predicate.rb
|
106
|
+
- lib/rubocop/cop/minitest/assert_raises_compound_body.rb
|
106
107
|
- lib/rubocop/cop/minitest/assert_respond_to.rb
|
107
108
|
- lib/rubocop/cop/minitest/assert_silent.rb
|
108
109
|
- lib/rubocop/cop/minitest/assert_truthy.rb
|
@@ -168,6 +169,7 @@ files:
|
|
168
169
|
- relnotes/v0.2.1.md
|
169
170
|
- relnotes/v0.20.0.md
|
170
171
|
- relnotes/v0.20.1.md
|
172
|
+
- relnotes/v0.21.0.md
|
171
173
|
- relnotes/v0.3.0.md
|
172
174
|
- relnotes/v0.4.0.md
|
173
175
|
- relnotes/v0.4.1.md
|
@@ -192,7 +194,7 @@ metadata:
|
|
192
194
|
homepage_uri: https://docs.rubocop.org/rubocop-minitest/
|
193
195
|
changelog_uri: https://github.com/rubocop/rubocop-minitest/blob/master/CHANGELOG.md
|
194
196
|
source_code_uri: https://github.com/rubocop/rubocop-minitest
|
195
|
-
documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.
|
197
|
+
documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.21
|
196
198
|
bug_tracker_uri: https://github.com/rubocop/rubocop-minitest/issues
|
197
199
|
rubygems_mfa_required: 'true'
|
198
200
|
post_install_message:
|