rubocop-minitest 0.6.2 → 0.7.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 +5 -5
- data/.gitattributes +1 -0
- data/.rubocop_todo.yml +1 -1
- data/CHANGELOG.md +13 -0
- data/README.md +4 -0
- data/config/default.yml +7 -2
- data/lib/rubocop/cop/minitest/assert_empty.rb +4 -30
- data/lib/rubocop/cop/minitest/assert_includes.rb +4 -4
- data/lib/rubocop/cop/minitest/assert_instance_of.rb +4 -38
- data/lib/rubocop/cop/minitest/assert_match.rb +4 -39
- data/lib/rubocop/cop/minitest/assert_nil.rb +2 -2
- data/lib/rubocop/cop/minitest/assert_respond_to.rb +10 -45
- data/lib/rubocop/cop/minitest/assert_truthy.rb +2 -2
- data/lib/rubocop/cop/minitest/global_expectations.rb +74 -0
- data/lib/rubocop/cop/minitest/refute_empty.rb +4 -30
- data/lib/rubocop/cop/minitest/refute_false.rb +3 -3
- data/lib/rubocop/cop/minitest/refute_includes.rb +4 -4
- data/lib/rubocop/cop/minitest/refute_instance_of.rb +4 -38
- data/lib/rubocop/cop/minitest/refute_match.rb +4 -39
- data/lib/rubocop/cop/minitest/refute_nil.rb +2 -2
- data/lib/rubocop/cop/minitest/refute_respond_to.rb +10 -45
- data/lib/rubocop/cop/minitest_cops.rb +2 -1
- data/lib/rubocop/cop/mixin/minitest_cop_rule.rb +104 -0
- data/lib/rubocop/minitest/version.rb +1 -1
- data/manual/cops.md +1 -0
- data/manual/cops_minitest.md +62 -41
- data/relnotes/v0.6.2.md +5 -0
- data/relnotes/v0.7.0.md +13 -0
- metadata +8 -5
- data/lib/rubocop/cop/mixin/includes_cop_rule.rb +0 -78
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2fe4a7de0dfd13839c19db673fa07861a917a78e2558fae305131eeb852ccb89
|
4
|
+
data.tar.gz: 6c2c47e6ecf6260635e87d86cbda171d4716a581fef79786af619b97b76a8dc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cf68be606a67b36392817fcf1436f5eb6b7c1b4bf1ea5c35516384dde2ff8a2a1b370bdbf900d3c58b96f0e4d0f5ae9c70084864ca08ef3fdbe0a8bf6a50a1d
|
7
|
+
data.tar.gz: 0f88de02da060b0b05c2ff6cb14d37989c1ca0d63b7c298809dda8fad8fb9271d41c98c816f90dff0282198a40096523c5a70151b7551fec0c4c6790a689bdfd
|
data/.gitattributes
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
CHANGELOG.md merge=union
|
data/.rubocop_todo.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 0.7.0 (2020-03-09)
|
6
|
+
|
7
|
+
### New features
|
8
|
+
|
9
|
+
* [#60](https://github.com/rubocop-hq/rubocop-minitest/issues/60): Add new cop `Minitest/GlobalExpectations` to check for deprecated global expectations. ([@tejasbubane][])
|
10
|
+
|
11
|
+
### Bug fixes
|
12
|
+
|
13
|
+
* [#58](https://github.com/rubocop-hq/rubocop-minitest/pull/58): Fix a false negative for `Minitest/AssertMatch` and `Minitest/RefuteMatch` when an argument is enclosed in redundant parentheses. ([@koic][])
|
14
|
+
* [#59](https://github.com/rubocop-hq/rubocop-minitest/pull/59): Fix a false negative for `Minitest/AssertRespondTo` and `Minitest/RefuteRespondTo` when an argument is enclosed in redundant parentheses. ([@koic][])
|
15
|
+
* [#61](https://github.com/rubocop-hq/rubocop-minitest/pull/61): Fix a false negative for `Minitest/AssertInstanceOf` and `Minitest/RefuteInstanceOf` when an argument is enclosed in redundant parentheses. ([@koic][])
|
16
|
+
* [#62](https://github.com/rubocop-hq/rubocop-minitest/pull/62): Fix a false negative for `Minitest/AssertEmpty` and `Minitest/RefuteEmpty` when an argument is enclosed in redundant parentheses. ([@koic][])
|
17
|
+
|
5
18
|
## 0.6.2 (2020-02-19)
|
6
19
|
|
7
20
|
### Bug fixes
|
data/README.md
CHANGED
@@ -73,6 +73,10 @@ Minitest/AssertNil:
|
|
73
73
|
- test/my_file_to_ignore_test.rb
|
74
74
|
```
|
75
75
|
|
76
|
+
## Documentation
|
77
|
+
|
78
|
+
You can read a lot more about RuboCop Minitest in its [official docs](https://docs.rubocop.org/projects/minitest/).
|
79
|
+
|
76
80
|
## Contributing
|
77
81
|
|
78
82
|
Checkout the [contribution guidelines](CONTRIBUTING.md).
|
data/config/default.yml
CHANGED
@@ -45,7 +45,7 @@ Minitest/AssertNil:
|
|
45
45
|
VersionAdded: '0.1'
|
46
46
|
|
47
47
|
Minitest/AssertRespondTo:
|
48
|
-
Description: 'This cop enforces the test to use `assert_respond_to(object, :
|
48
|
+
Description: 'This cop enforces the test to use `assert_respond_to(object, :do_something)` over `assert(object.respond_to?(:do_something))`.'
|
49
49
|
StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-responds-to-method'
|
50
50
|
Enabled: true
|
51
51
|
VersionAdded: '0.3'
|
@@ -56,6 +56,11 @@ Minitest/AssertTruthy:
|
|
56
56
|
Enabled: true
|
57
57
|
VersionAdded: '0.2'
|
58
58
|
|
59
|
+
Minitest/GlobalExpectations:
|
60
|
+
Description: 'This cop checks for deprecated global expectations.'
|
61
|
+
Enabled: true
|
62
|
+
VersionAdded: '0.7'
|
63
|
+
|
59
64
|
Minitest/RefuteEmpty:
|
60
65
|
Description: 'This cop enforces to use `refute_empty` instead of using `refute(object.empty?)`.'
|
61
66
|
StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-empty'
|
@@ -99,7 +104,7 @@ Minitest/RefuteNil:
|
|
99
104
|
VersionAdded: '0.2'
|
100
105
|
|
101
106
|
Minitest/RefuteRespondTo:
|
102
|
-
Description: 'This cop enforces the test to use `refute_respond_to(object, :
|
107
|
+
Description: 'This cop enforces the test to use `refute_respond_to(object, :do_something)` over `refute(object.respond_to?(:do_something))`.'
|
103
108
|
StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-respond-to'
|
104
109
|
Enabled: true
|
105
110
|
VersionAdded: '0.4'
|
@@ -9,42 +9,16 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
11
|
# assert(object.empty?)
|
12
|
-
# assert(object.empty?, '
|
12
|
+
# assert(object.empty?, 'message')
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# assert_empty(object)
|
16
|
-
# assert_empty(object, '
|
16
|
+
# assert_empty(object, 'message')
|
17
17
|
#
|
18
18
|
class AssertEmpty < Cop
|
19
|
-
|
19
|
+
extend MinitestCopRule
|
20
20
|
|
21
|
-
|
22
|
-
'`assert(%<receiver>s)`.'
|
23
|
-
|
24
|
-
def_node_matcher :assert_with_empty, <<~PATTERN
|
25
|
-
(send nil? :assert $(send $_ :empty?) $...)
|
26
|
-
PATTERN
|
27
|
-
|
28
|
-
def on_send(node)
|
29
|
-
assert_with_empty(node) do |first_receiver_arg, actual, rest_receiver_arg|
|
30
|
-
message = rest_receiver_arg.first
|
31
|
-
|
32
|
-
arguments = [actual.source, message&.source].compact.join(', ')
|
33
|
-
receiver = [first_receiver_arg.source, message&.source].compact.join(', ')
|
34
|
-
|
35
|
-
offense_message = format(MSG, arguments: arguments, receiver: receiver)
|
36
|
-
add_offense(node, message: offense_message)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def autocorrect(node)
|
41
|
-
lambda do |corrector|
|
42
|
-
assert_with_empty(node) do |_, actual_arg|
|
43
|
-
corrector.replace(node.loc.selector, 'assert_empty')
|
44
|
-
corrector.replace(first_argument_range(node), actual_arg.source)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
21
|
+
define_rule :assert, target_method: :empty?
|
48
22
|
end
|
49
23
|
end
|
50
24
|
end
|
@@ -9,16 +9,16 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
11
|
# assert(collection.include?(object))
|
12
|
-
# assert(collection.include?(object), '
|
12
|
+
# assert(collection.include?(object), 'message')
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# assert_includes(collection, object)
|
16
|
-
# assert_includes(collection, object, '
|
16
|
+
# assert_includes(collection, object, 'message')
|
17
17
|
#
|
18
18
|
class AssertIncludes < Cop
|
19
|
-
extend
|
19
|
+
extend MinitestCopRule
|
20
20
|
|
21
|
-
|
21
|
+
define_rule :assert, target_method: :include?, preferred_method: :assert_includes
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -9,50 +9,16 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
11
|
# assert(object.instance_of?(Class))
|
12
|
-
# assert(object.instance_of?(Class), '
|
12
|
+
# assert(object.instance_of?(Class), 'message')
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# assert_instance_of(Class, object)
|
16
|
-
# assert_instance_of(Class, object, '
|
16
|
+
# assert_instance_of(Class, object, 'message')
|
17
17
|
#
|
18
18
|
class AssertInstanceOf < Cop
|
19
|
-
|
19
|
+
extend MinitestCopRule
|
20
20
|
|
21
|
-
|
22
|
-
'`assert(%<receiver>s)`.'
|
23
|
-
|
24
|
-
def_node_matcher :assert_with_instance_of, <<~PATTERN
|
25
|
-
(send nil? :assert $(send $_ :instance_of? $_) $...)
|
26
|
-
PATTERN
|
27
|
-
|
28
|
-
def on_send(node)
|
29
|
-
assert_with_instance_of(node) do |first_receiver_arg, object, method, rest_args|
|
30
|
-
message = rest_args.first
|
31
|
-
arguments = node_arguments(object, method, message)
|
32
|
-
receiver = [first_receiver_arg.source, message&.source].compact.join(', ')
|
33
|
-
|
34
|
-
offense_message = format(MSG, arguments: arguments, receiver: receiver)
|
35
|
-
|
36
|
-
add_offense(node, message: offense_message)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def autocorrect(node)
|
41
|
-
lambda do |corrector|
|
42
|
-
assert_with_instance_of(node) do |_, object, method|
|
43
|
-
corrector.replace(node.loc.selector, 'assert_instance_of')
|
44
|
-
|
45
|
-
replacement = [method, object].map(&:source).join(', ')
|
46
|
-
corrector.replace(first_argument_range(node), replacement)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def node_arguments(object, method, message)
|
54
|
-
[method, object, message].compact.map(&:source).join(', ')
|
55
|
-
end
|
21
|
+
define_rule :assert, target_method: :instance_of?, inverse: true
|
56
22
|
end
|
57
23
|
end
|
58
24
|
end
|
@@ -9,51 +9,16 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
11
|
# assert(matcher.match(string))
|
12
|
-
# assert(matcher.match(string), '
|
12
|
+
# assert(matcher.match(string), 'message')
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# assert_match(regex, string)
|
16
|
-
# assert_match(matcher, string, '
|
16
|
+
# assert_match(matcher, string, 'message')
|
17
17
|
#
|
18
18
|
class AssertMatch < Cop
|
19
|
-
|
19
|
+
extend MinitestCopRule
|
20
20
|
|
21
|
-
|
22
|
-
'`assert(%<receiver>s)`.'
|
23
|
-
|
24
|
-
def_node_matcher :assert_with_match, <<~PATTERN
|
25
|
-
(send nil? :assert $(send $_ :match $_) $...)
|
26
|
-
PATTERN
|
27
|
-
|
28
|
-
def on_send(node)
|
29
|
-
assert_with_match(node) do
|
30
|
-
|first_receiver_arg, matcher, actual, rest_receiver_arg|
|
31
|
-
message = rest_receiver_arg.first
|
32
|
-
arguments = node_arguments(matcher, actual, message)
|
33
|
-
receiver = [first_receiver_arg.source, message&.source].compact.join(', ')
|
34
|
-
|
35
|
-
offense_message = format(MSG, arguments: arguments, receiver: receiver)
|
36
|
-
|
37
|
-
add_offense(node, message: offense_message)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def autocorrect(node)
|
42
|
-
lambda do |corrector|
|
43
|
-
assert_with_match(node) do |_, matcher, actual|
|
44
|
-
corrector.replace(node.loc.selector, 'assert_match')
|
45
|
-
|
46
|
-
replacement = [matcher, actual].map(&:source).join(', ')
|
47
|
-
corrector.replace(first_argument_range(node), replacement)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def node_arguments(matcher, actual, message)
|
55
|
-
[matcher.source, actual.source, message&.source].compact.join(', ')
|
56
|
-
end
|
21
|
+
define_rule :assert, target_method: :match
|
57
22
|
end
|
58
23
|
end
|
59
24
|
end
|
@@ -9,11 +9,11 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
11
|
# assert_equal(nil, actual)
|
12
|
-
# assert_equal(nil, actual, '
|
12
|
+
# assert_equal(nil, actual, 'message')
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# assert_nil(actual)
|
16
|
-
# assert_nil(actual, '
|
16
|
+
# assert_nil(actual, 'message')
|
17
17
|
#
|
18
18
|
class AssertNil < Cop
|
19
19
|
include ArgumentRangeHelper
|
@@ -3,59 +3,24 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Minitest
|
6
|
-
# This cop enforces the use of `assert_respond_to(object, :
|
7
|
-
# over `assert(object.respond_to?(:
|
6
|
+
# This cop enforces the use of `assert_respond_to(object, :do_something)`
|
7
|
+
# over `assert(object.respond_to?(:do_something))`.
|
8
8
|
#
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
|
-
# assert(object.respond_to?(:
|
12
|
-
# assert(object.respond_to?(:
|
13
|
-
# assert(respond_to?(:
|
11
|
+
# assert(object.respond_to?(:do_something))
|
12
|
+
# assert(object.respond_to?(:do_something), 'message')
|
13
|
+
# assert(respond_to?(:do_something))
|
14
14
|
#
|
15
15
|
# # good
|
16
|
-
# assert_respond_to(object, :
|
17
|
-
# assert_respond_to(object, :
|
18
|
-
# assert_respond_to(self,
|
16
|
+
# assert_respond_to(object, :do_something)
|
17
|
+
# assert_respond_to(object, :do_something, 'message')
|
18
|
+
# assert_respond_to(self, :do_something)
|
19
19
|
#
|
20
20
|
class AssertRespondTo < Cop
|
21
|
-
|
21
|
+
extend MinitestCopRule
|
22
22
|
|
23
|
-
|
24
|
-
'`assert(%<over>s)`.'
|
25
|
-
|
26
|
-
def_node_matcher :assert_with_respond_to, <<~PATTERN
|
27
|
-
(send nil? :assert $(send $_ :respond_to? $_) $...)
|
28
|
-
PATTERN
|
29
|
-
|
30
|
-
def on_send(node)
|
31
|
-
assert_with_respond_to(node) do |over, object, method, rest_args|
|
32
|
-
custom_message = rest_args.first
|
33
|
-
preferred = build_preferred_arguments(object, method, custom_message)
|
34
|
-
over = [over, custom_message].compact.map(&:source).join(', ')
|
35
|
-
message = format(MSG, preferred: preferred, over: over)
|
36
|
-
add_offense(node, message: message)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def autocorrect(node)
|
41
|
-
lambda do |corrector|
|
42
|
-
assert_with_respond_to(node) do |_, object, method|
|
43
|
-
corrector.replace(node.loc.selector, 'assert_respond_to')
|
44
|
-
|
45
|
-
object = object ? object.source : 'self'
|
46
|
-
replacement = [object, method.source].join(', ')
|
47
|
-
corrector.replace(first_argument_range(node), replacement)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def build_preferred_arguments(receiver, method, message)
|
55
|
-
receiver = receiver ? receiver.source : 'self'
|
56
|
-
|
57
|
-
[receiver, method.source, message&.source].compact.join(', ')
|
58
|
-
end
|
23
|
+
define_rule :assert, target_method: :respond_to?
|
59
24
|
end
|
60
25
|
end
|
61
26
|
end
|
@@ -9,11 +9,11 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
11
|
# assert_equal(true, actual)
|
12
|
-
# assert_equal(true, actual, '
|
12
|
+
# assert_equal(true, actual, 'message')
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# assert(actual)
|
16
|
-
# assert(actual, '
|
16
|
+
# assert(actual, 'message')
|
17
17
|
#
|
18
18
|
class AssertTruthy < Cop
|
19
19
|
include ArgumentRangeHelper
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Minitest
|
6
|
+
# This Cop checks for deprecated global expectations
|
7
|
+
# and autocorrects them to use expect format.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# n.must_equal 42
|
12
|
+
# n.wont_match b
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# _(n).must_equal 42
|
16
|
+
# _(n).wont_match b
|
17
|
+
class GlobalExpectations < Cop
|
18
|
+
MSG = 'Prefer using `%<corrected>s`.'
|
19
|
+
|
20
|
+
VALUE_MATCHERS = %i[
|
21
|
+
be be_close_to be_empty be_instance_of be_kind_of
|
22
|
+
be_nil be_same_as be_silent be_within_epsilon equal
|
23
|
+
include match respond_to must_exist
|
24
|
+
].map do |matcher|
|
25
|
+
[:"must_#{matcher}", :"wont_#{matcher}"]
|
26
|
+
end.flatten.freeze
|
27
|
+
|
28
|
+
BLOCK_MATCHERS = %i[must_output must_raise must_throw].freeze
|
29
|
+
|
30
|
+
MATCHERS_STR = (VALUE_MATCHERS + BLOCK_MATCHERS).map do |m|
|
31
|
+
":#{m}"
|
32
|
+
end.join(' ').freeze
|
33
|
+
|
34
|
+
def_node_matcher :global_expectation?, <<~PATTERN
|
35
|
+
(send (send _ _) {#{MATCHERS_STR}} ...)
|
36
|
+
PATTERN
|
37
|
+
|
38
|
+
def on_send(node)
|
39
|
+
return unless global_expectation?(node)
|
40
|
+
|
41
|
+
message = format(MSG, corrected: correct_suggestion(node))
|
42
|
+
add_offense(node, message: message)
|
43
|
+
end
|
44
|
+
|
45
|
+
def autocorrect(node)
|
46
|
+
return unless global_expectation?(node)
|
47
|
+
|
48
|
+
lambda do |corrector|
|
49
|
+
receiver = node.receiver.loc.selector
|
50
|
+
|
51
|
+
if BLOCK_MATCHERS.include?(node.method_name)
|
52
|
+
corrector.insert_before(receiver, '_ { ')
|
53
|
+
corrector.insert_after(receiver, ' }')
|
54
|
+
else
|
55
|
+
corrector.insert_before(receiver, '_(')
|
56
|
+
corrector.insert_after(receiver, ')')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def correct_suggestion(node)
|
64
|
+
source = node.receiver.source
|
65
|
+
if BLOCK_MATCHERS.include?(node.method_name)
|
66
|
+
node.source.sub(source, "_ { #{source} }")
|
67
|
+
else
|
68
|
+
node.source.sub(source, "_(#{source})")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -9,42 +9,16 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
# # bad
|
11
11
|
# refute(object.empty?)
|
12
|
-
# refute(object.empty?, '
|
12
|
+
# refute(object.empty?, 'message')
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# refute_empty(object)
|
16
|
-
# refute_empty(object, '
|
16
|
+
# refute_empty(object, 'message')
|
17
17
|
#
|
18
18
|
class RefuteEmpty < Cop
|
19
|
-
|
19
|
+
extend MinitestCopRule
|
20
20
|
|
21
|
-
|
22
|
-
'`refute(%<receiver>s)`.'
|
23
|
-
|
24
|
-
def_node_matcher :refute_with_empty, <<~PATTERN
|
25
|
-
(send nil? :refute $(send $_ :empty?) $...)
|
26
|
-
PATTERN
|
27
|
-
|
28
|
-
def on_send(node)
|
29
|
-
refute_with_empty(node) do |first_receiver_arg, object, rest_receiver_arg|
|
30
|
-
message = rest_receiver_arg.first
|
31
|
-
|
32
|
-
arguments = [object.source, message&.source].compact.join(', ')
|
33
|
-
receiver = [first_receiver_arg.source, message&.source].compact.join(', ')
|
34
|
-
|
35
|
-
offense_message = format(MSG, arguments: arguments, receiver: receiver)
|
36
|
-
add_offense(node, message: offense_message)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def autocorrect(node)
|
41
|
-
lambda do |corrector|
|
42
|
-
refute_with_empty(node) do |_, actual_arg|
|
43
|
-
corrector.replace(node.loc.selector, 'refute_empty')
|
44
|
-
corrector.replace(first_argument_range(node), actual_arg.source)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
21
|
+
define_rule :refute, target_method: :empty?
|
48
22
|
end
|
49
23
|
end
|
50
24
|
end
|