rubocop-minitest 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|