rubocop-minitest 0.5.1 → 0.6.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/.circleci/config.yml +3 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -4
- data/README.md +2 -2
- data/config/default.yml +12 -0
- data/lib/rubocop/cop/minitest/assert_match.rb +60 -0
- data/lib/rubocop/cop/minitest/refute_match.rb +60 -0
- data/lib/rubocop/cop/minitest_cops.rb +2 -0
- data/lib/rubocop/minitest/inject.rb +1 -1
- data/lib/rubocop/minitest/version.rb +1 -1
- data/manual/cops.md +2 -0
- data/manual/cops_minitest.md +50 -0
- data/relnotes/v0.5.1.md +2 -0
- data/relnotes/v0.6.0.md +5 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b6f7bc7c5d1f40800643ddc8cfbdb5b3b716484e
|
4
|
+
data.tar.gz: d2f4fedb8db4422c4f601a4410b04b77ef51bf12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0eaa51499fa109978fae23597f05cb11c0003fb7a4d887249b17c4966f6a2422aec2ee29c2c62baa044b006eb2965076072c306a3863b821382019324274c549
|
7
|
+
data.tar.gz: 79225d37425d04fcc425ad661b7970b99ab291f93f2337cf7cb7008ffa55aeb9d29cc0a79d9129f1e089c7eb5f00af95187b785a002f63ffde8b92ea0cd0df52
|
data/.circleci/config.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,8 +2,16 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 0.6.0 (2020-02-07)
|
6
|
+
|
7
|
+
### New features
|
8
|
+
|
9
|
+
* [#49](https://github.com/rubocop-hq/rubocop-minitest/pull/49): New cops `AssertMatch` and `RefuteMatch` check for use of `assert_match`/`refute_match` instead of `assert(foo.match(bar))`/`refute(foo.match(bar))`. ([@fsateler][])
|
10
|
+
|
5
11
|
## 0.5.1 (2019-12-25)
|
6
12
|
|
13
|
+
### Bug fixes
|
14
|
+
|
7
15
|
* [#42](https://github.com/rubocop-hq/rubocop-minitest/issues/42): Fix an incorrect autocorrect for some cops of `Minitest` department when using heredoc message. ([@koic][])
|
8
16
|
|
9
17
|
## 0.5.0 (2019-11-24)
|
@@ -72,3 +80,4 @@
|
|
72
80
|
[@tejasbubane]: https://github.com/tejasbubane
|
73
81
|
[@abhaynikam]: https://github.com/abhaynikam
|
74
82
|
[@herwinw]: https://github.com/herwinw
|
83
|
+
[@fsateler]: https://github.com/fsateler
|
data/Gemfile
CHANGED
@@ -10,7 +10,4 @@ gem 'bump', require: false
|
|
10
10
|
gem 'rake'
|
11
11
|
gem 'rubocop', github: 'rubocop-hq/rubocop'
|
12
12
|
gem 'rubocop-performance', '~> 1.5.0'
|
13
|
-
|
14
|
-
# It specifies `github` until the release that includes the following changes:
|
15
|
-
# https://github.com/lsegal/yard/pull/1290
|
16
|
-
gem 'yard', github: 'lsegal/yard', ref: '10a2e5b'
|
13
|
+
gem 'yard', '~> 0.9'
|
data/README.md
CHANGED
data/config/default.yml
CHANGED
@@ -20,6 +20,12 @@ Minitest/AssertEqual:
|
|
20
20
|
Enabled: true
|
21
21
|
VersionAdded: '0.4'
|
22
22
|
|
23
|
+
Minitest/AssertMatch:
|
24
|
+
Description: 'This cop enforces the test to use `assert_match` instead of using `assert(matcher.match(object))`.'
|
25
|
+
StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-match'
|
26
|
+
Enabled: true
|
27
|
+
VersionAdded: '0.6'
|
28
|
+
|
23
29
|
Minitest/AssertIncludes:
|
24
30
|
Description: 'This cop enforces the test to use `assert_includes` instead of using `assert(collection.include?(object))`.'
|
25
31
|
StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-includes'
|
@@ -74,6 +80,12 @@ Minitest/RefuteIncludes:
|
|
74
80
|
Enabled: true
|
75
81
|
VersionAdded: '0.3'
|
76
82
|
|
83
|
+
Minitest/RefuteMatch:
|
84
|
+
Description: 'This cop enforces the test to use `refute_match` instead of using `refute(matcher.match(object))`.'
|
85
|
+
StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-match'
|
86
|
+
Enabled: true
|
87
|
+
VersionAdded: '0.6'
|
88
|
+
|
77
89
|
Minitest/RefuteInstanceOf:
|
78
90
|
Description: 'This cop enforces the test to use `refute_instance_of(Class, object)` over `refute(object.instance_of?(Class))`.'
|
79
91
|
StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-instance-of'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Minitest
|
6
|
+
# This cop enforces the test to use `assert_match`
|
7
|
+
# instead of using `assert(matcher.match(string))`.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# assert(matcher.match(string))
|
12
|
+
# assert(matcher.match(string), 'the message')
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# assert_match(regex, string)
|
16
|
+
# assert_match(matcher, string, 'the message')
|
17
|
+
#
|
18
|
+
class AssertMatch < Cop
|
19
|
+
include ArgumentRangeHelper
|
20
|
+
|
21
|
+
MSG = 'Prefer using `assert_match(%<arguments>s)` over ' \
|
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
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Minitest
|
6
|
+
# This cop enforces the test to use `refute_match`
|
7
|
+
# instead of using `refute(matcher.match(string))`.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# refute(matcher.match(string))
|
12
|
+
# refute(matcher.match(string), 'the message')
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# refute_match(matcher, string)
|
16
|
+
# refute_match(matcher, string, 'the message')
|
17
|
+
#
|
18
|
+
class RefuteMatch < Cop
|
19
|
+
include ArgumentRangeHelper
|
20
|
+
|
21
|
+
MSG = 'Prefer using `refute_match(%<arguments>s)` over ' \
|
22
|
+
'`refute(%<receiver>s)`.'
|
23
|
+
|
24
|
+
def_node_matcher :refute_with_match, <<~PATTERN
|
25
|
+
(send nil? :refute $(send $_ :match $_) $...)
|
26
|
+
PATTERN
|
27
|
+
|
28
|
+
def on_send(node)
|
29
|
+
refute_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
|
+
refute_with_match(node) do |_, matcher, actual|
|
44
|
+
corrector.replace(node.loc.selector, 'refute_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
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -7,6 +7,7 @@ require_relative 'minitest/assert_equal'
|
|
7
7
|
require_relative 'minitest/assert_nil'
|
8
8
|
require_relative 'minitest/assert_includes'
|
9
9
|
require_relative 'minitest/assert_instance_of'
|
10
|
+
require_relative 'minitest/assert_match'
|
10
11
|
require_relative 'minitest/assert_respond_to'
|
11
12
|
require_relative 'minitest/assert_truthy'
|
12
13
|
require_relative 'minitest/refute_empty'
|
@@ -14,5 +15,6 @@ require_relative 'minitest/refute_false'
|
|
14
15
|
require_relative 'minitest/refute_equal'
|
15
16
|
require_relative 'minitest/refute_nil'
|
16
17
|
require_relative 'minitest/refute_includes'
|
18
|
+
require_relative 'minitest/refute_match'
|
17
19
|
require_relative 'minitest/refute_instance_of'
|
18
20
|
require_relative 'minitest/refute_respond_to'
|
@@ -8,7 +8,7 @@ module RuboCop
|
|
8
8
|
def self.defaults!
|
9
9
|
path = CONFIG_DEFAULT.to_s
|
10
10
|
hash = ConfigLoader.send(:load_yaml_configuration, path)
|
11
|
-
config = Config.new(hash, path)
|
11
|
+
config = Config.new(hash, path).tap(&:make_excludes_absolute)
|
12
12
|
puts "configuration from #{path}" if ConfigLoader.debug?
|
13
13
|
config = ConfigLoader.merge_with_default(config, path)
|
14
14
|
ConfigLoader.instance_variable_set(:@default_configuration, config)
|
data/manual/cops.md
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
* [Minitest/AssertEqual](cops_minitest.md#minitestassertequal)
|
7
7
|
* [Minitest/AssertIncludes](cops_minitest.md#minitestassertincludes)
|
8
8
|
* [Minitest/AssertInstanceOf](cops_minitest.md#minitestassertinstanceof)
|
9
|
+
* [Minitest/AssertMatch](cops_minitest.md#minitestassertmatch)
|
9
10
|
* [Minitest/AssertNil](cops_minitest.md#minitestassertnil)
|
10
11
|
* [Minitest/AssertRespondTo](cops_minitest.md#minitestassertrespondto)
|
11
12
|
* [Minitest/AssertTruthy](cops_minitest.md#minitestasserttruthy)
|
@@ -14,6 +15,7 @@
|
|
14
15
|
* [Minitest/RefuteFalse](cops_minitest.md#minitestrefutefalse)
|
15
16
|
* [Minitest/RefuteIncludes](cops_minitest.md#minitestrefuteincludes)
|
16
17
|
* [Minitest/RefuteInstanceOf](cops_minitest.md#minitestrefuteinstanceof)
|
18
|
+
* [Minitest/RefuteMatch](cops_minitest.md#minitestrefutematch)
|
17
19
|
* [Minitest/RefuteNil](cops_minitest.md#minitestrefutenil)
|
18
20
|
* [Minitest/RefuteRespondTo](cops_minitest.md#minitestrefuterespondto)
|
19
21
|
|
data/manual/cops_minitest.md
CHANGED
@@ -118,6 +118,31 @@ assert_instance_of(Class, object, 'the message')
|
|
118
118
|
|
119
119
|
* [https://github.com/rubocop-hq/minitest-style-guide#assert-instance-of](https://github.com/rubocop-hq/minitest-style-guide#assert-instance-of)
|
120
120
|
|
121
|
+
## Minitest/AssertMatch
|
122
|
+
|
123
|
+
Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
|
124
|
+
--- | --- | --- | --- | ---
|
125
|
+
Enabled | Yes | Yes | 0.6 | -
|
126
|
+
|
127
|
+
This cop enforces the test to use `assert_match`
|
128
|
+
instead of using `assert(matcher.match(string))`.
|
129
|
+
|
130
|
+
### Examples
|
131
|
+
|
132
|
+
```ruby
|
133
|
+
# bad
|
134
|
+
assert(matcher.match(string))
|
135
|
+
assert(matcher.match(string), 'the message')
|
136
|
+
|
137
|
+
# good
|
138
|
+
assert_match(regex, string)
|
139
|
+
assert_match(matcher, string, 'the message')
|
140
|
+
```
|
141
|
+
|
142
|
+
### References
|
143
|
+
|
144
|
+
* [https://github.com/rubocop-hq/minitest-style-guide#assert-match](https://github.com/rubocop-hq/minitest-style-guide#assert-match)
|
145
|
+
|
121
146
|
## Minitest/AssertNil
|
122
147
|
|
123
148
|
Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
|
@@ -319,6 +344,31 @@ refute_instance_of(Class, object, 'the message')
|
|
319
344
|
|
320
345
|
* [https://github.com/rubocop-hq/minitest-style-guide#refute-instance-of](https://github.com/rubocop-hq/minitest-style-guide#refute-instance-of)
|
321
346
|
|
347
|
+
## Minitest/RefuteMatch
|
348
|
+
|
349
|
+
Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
|
350
|
+
--- | --- | --- | --- | ---
|
351
|
+
Enabled | Yes | Yes | 0.6 | -
|
352
|
+
|
353
|
+
This cop enforces the test to use `refute_match`
|
354
|
+
instead of using `refute(matcher.match(string))`.
|
355
|
+
|
356
|
+
### Examples
|
357
|
+
|
358
|
+
```ruby
|
359
|
+
# bad
|
360
|
+
refute(matcher.match(string))
|
361
|
+
refute(matcher.match(string), 'the message')
|
362
|
+
|
363
|
+
# good
|
364
|
+
refute_match(matcher, string)
|
365
|
+
refute_match(matcher, string, 'the message')
|
366
|
+
```
|
367
|
+
|
368
|
+
### References
|
369
|
+
|
370
|
+
* [https://github.com/rubocop-hq/minitest-style-guide#refute-match](https://github.com/rubocop-hq/minitest-style-guide#refute-match)
|
371
|
+
|
322
372
|
## Minitest/RefuteNil
|
323
373
|
|
324
374
|
Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
|
data/relnotes/v0.5.1.md
CHANGED
data/relnotes/v0.6.0.md
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
### New features
|
2
|
+
|
3
|
+
* [#49](https://github.com/rubocop-hq/rubocop-minitest/pull/49): New cops `AssertMatch` and `RefuteMatch` check for use of `assert_match`/`refute_match` instead of `assert(foo.match(bar))`/`refute(foo.match(bar))`. ([@fsateler][])
|
4
|
+
|
5
|
+
[@fsateler]: https://github.com/fsateler
|
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.6.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:
|
13
|
+
date: 2020-02-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubocop
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/rubocop/cop/minitest/assert_equal.rb
|
72
72
|
- lib/rubocop/cop/minitest/assert_includes.rb
|
73
73
|
- lib/rubocop/cop/minitest/assert_instance_of.rb
|
74
|
+
- lib/rubocop/cop/minitest/assert_match.rb
|
74
75
|
- lib/rubocop/cop/minitest/assert_nil.rb
|
75
76
|
- lib/rubocop/cop/minitest/assert_respond_to.rb
|
76
77
|
- lib/rubocop/cop/minitest/assert_truthy.rb
|
@@ -79,6 +80,7 @@ files:
|
|
79
80
|
- lib/rubocop/cop/minitest/refute_false.rb
|
80
81
|
- lib/rubocop/cop/minitest/refute_includes.rb
|
81
82
|
- lib/rubocop/cop/minitest/refute_instance_of.rb
|
83
|
+
- lib/rubocop/cop/minitest/refute_match.rb
|
82
84
|
- lib/rubocop/cop/minitest/refute_nil.rb
|
83
85
|
- lib/rubocop/cop/minitest/refute_respond_to.rb
|
84
86
|
- lib/rubocop/cop/minitest_cops.rb
|
@@ -101,6 +103,7 @@ files:
|
|
101
103
|
- relnotes/v0.4.1.md
|
102
104
|
- relnotes/v0.5.0.md
|
103
105
|
- relnotes/v0.5.1.md
|
106
|
+
- relnotes/v0.6.0.md
|
104
107
|
- rubocop-minitest.gemspec
|
105
108
|
- tasks/cops_documentation.rake
|
106
109
|
- tasks/cut_release.rake
|
@@ -128,7 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
131
|
- !ruby/object:Gem::Version
|
129
132
|
version: '0'
|
130
133
|
requirements: []
|
131
|
-
|
134
|
+
rubyforge_project:
|
135
|
+
rubygems_version: 2.5.2.3
|
132
136
|
signing_key:
|
133
137
|
specification_version: 4
|
134
138
|
summary: Automatic Minitest code style checking tool.
|