rubocop-minitest 0.22.2 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8a90bf7594f331c351450d9cd2012ab3c7378e72c24fad69c79a052983d2ea8
4
- data.tar.gz: 9cbdab3ceafeddbe54fba39ea451c5347489dae3066f36208635b7aea2abcd7e
3
+ metadata.gz: 27c1c1e73140c8a3b7a03627a9e7a8772a91468924a78a55ef9d7eb1de01c41b
4
+ data.tar.gz: b04c7e1341cbe6792b360ef49fc495a0534dbbc817cc1c3643465018c5ef7776
5
5
  SHA512:
6
- metadata.gz: 8b0d79ca4c4de8521c71b8752bc759f346efd898e7538acf1e424b7f3920ca291a9e85b7017eeae7a251313643c5bd0a4abcfaa042e14ac1c592ca8c9e3dde47
7
- data.tar.gz: 838aa30294ec6f330a90dd500bbdce42febf70fa40e0e9b32490a9ffd7d663634e343a8cc321a7aa1e46a417373e26cb89f85d1d551a1b8ec2c4b1ffb1375542
6
+ metadata.gz: 60a86b10b510ca5da0d49d647ff5e20d8296e6fbb89214b3e2cb371eaf3096d4e866b3ebafeac446ae7ee6e0d2a139eadbcc77a4e23c144c10332acdef92f552
7
+ data.tar.gz: 31acd00dd4c8cbe95e50926694a1c844cb21c1ac6c9695d6a9fa120e9d936b16a7869f44552bcc413e737bf4983be67a2481935940fb5515422e5d14a2b4f0bf
data/config/default.yml CHANGED
@@ -122,6 +122,11 @@ Minitest/DuplicateTestRun:
122
122
  Enabled: pending
123
123
  VersionAdded: '0.19'
124
124
 
125
+ Minitest/EmptyLineBeforeAssertionMethods:
126
+ Description: 'Add empty line before assertion methods.'
127
+ Enabled: pending
128
+ VersionAdded: '0.23'
129
+
125
130
  Minitest/GlobalExpectations:
126
131
  Description: 'This cop checks for deprecated global expectations.'
127
132
  StyleGuide: 'https://minitest.rubystyle.guide#global-expectations'
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Minitest
6
+ # Enforces empty line before assertion methods because it separates assertion phase.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # do_something
12
+ # assert_equal(expected, actual)
13
+ #
14
+ # # good
15
+ # do_something
16
+ #
17
+ # assert_equal(expected, actual)
18
+ #
19
+ class EmptyLineBeforeAssertionMethods < Base
20
+ include MinitestExplorationHelpers
21
+ extend AutoCorrector
22
+
23
+ MSG = 'Add empty line before assertion.'
24
+
25
+ def on_send(node)
26
+ return unless assertion_method?(node)
27
+ return unless (previous_line_node = node.left_sibling)
28
+ return if accept_previous_line?(previous_line_node, node)
29
+
30
+ previous_line_node = previous_line_node.arguments.last if use_heredoc_argument?(previous_line_node)
31
+ return unless no_empty_line?(previous_line_node, node)
32
+
33
+ register_offense(node, previous_line_node)
34
+ end
35
+
36
+ private
37
+
38
+ def accept_previous_line?(previous_line_node, node)
39
+ return true if previous_line_node.args_type? || node.parent.basic_conditional?
40
+
41
+ previous_line_node.send_type? && assertion_method?(previous_line_node)
42
+ end
43
+
44
+ def use_heredoc_argument?(node)
45
+ node.respond_to?(:arguments) && heredoc?(node.arguments.last)
46
+ end
47
+
48
+ def heredoc?(last_argument)
49
+ last_argument.respond_to?(:heredoc?) && last_argument.heredoc?
50
+ end
51
+
52
+ def no_empty_line?(previous_line_node, node)
53
+ previous_line = if heredoc?(previous_line_node)
54
+ previous_line_node.loc.heredoc_end.line
55
+ else
56
+ previous_line_node.loc.last_line
57
+ end
58
+
59
+ previous_line + 1 == node.loc.line
60
+ end
61
+
62
+ def register_offense(node, previous_line_node)
63
+ add_offense(node) do |corrector|
64
+ range = if heredoc?(previous_line_node)
65
+ previous_line_node.loc.heredoc_end
66
+ else
67
+ previous_line_node
68
+ end
69
+
70
+ corrector.insert_after(range, "\n")
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -26,6 +26,7 @@ require_relative 'minitest/assert_respond_to'
26
26
  require_relative 'minitest/assert_silent'
27
27
  require_relative 'minitest/assert_truthy'
28
28
  require_relative 'minitest/duplicate_test_run'
29
+ require_relative 'minitest/empty_line_before_assertion_methods'
29
30
  require_relative 'minitest/global_expectations'
30
31
  require_relative 'minitest/literal_as_actual_argument'
31
32
  require_relative 'minitest/multiple_assertions'
@@ -172,7 +172,33 @@ module RuboCop
172
172
  file = file.path
173
173
  end
174
174
 
175
- RuboCop::ProcessedSource.new(source, ruby_version, file)
175
+ processed_source = RuboCop::ProcessedSource.new(source, ruby_version, file)
176
+
177
+ # Follow up https://github.com/rubocop/rubocop/pull/10987.
178
+ # When support for RuboCop 1.37.1 ends, this condition can be removed.
179
+ if processed_source.respond_to?(:config) && processed_source.respond_to?(:registry)
180
+ processed_source.config = configuration
181
+ processed_source.registry = registry
182
+ end
183
+
184
+ processed_source
185
+ end
186
+
187
+ def configuration
188
+ @configuration ||= if defined?(config)
189
+ config
190
+ else
191
+ RuboCop::Config.new({}, "#{Dir.pwd}/.rubocop.yml")
192
+ end
193
+ end
194
+
195
+ def registry
196
+ @registry ||= begin
197
+ cops = configuration.keys.map { |cop| RuboCop::Cop::Registry.global.find_by_cop_name(cop) }
198
+ cops << cop_class if defined?(cop_class) && !cops.include?(cop_class)
199
+ cops.compact!
200
+ RuboCop::Cop::Registry.new(cops)
201
+ end
176
202
  end
177
203
 
178
204
  def ruby_version
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Minitest
5
5
  # This module holds the RuboCop Minitest version information.
6
6
  module Version
7
- STRING = '0.22.2'
7
+ STRING = '0.23.0'
8
8
 
9
9
  def self.document_version
10
10
  STRING.match('\d+\.\d+').to_s
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.22.2
4
+ version: 0.23.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-10-01 00:00:00.000000000 Z
13
+ date: 2022-10-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -79,6 +79,7 @@ files:
79
79
  - lib/rubocop/cop/minitest/assert_with_expected_argument.rb
80
80
  - lib/rubocop/cop/minitest/assertion_in_lifecycle_hook.rb
81
81
  - lib/rubocop/cop/minitest/duplicate_test_run.rb
82
+ - lib/rubocop/cop/minitest/empty_line_before_assertion_methods.rb
82
83
  - lib/rubocop/cop/minitest/global_expectations.rb
83
84
  - lib/rubocop/cop/minitest/literal_as_actual_argument.rb
84
85
  - lib/rubocop/cop/minitest/multiple_assertions.rb
@@ -118,7 +119,7 @@ metadata:
118
119
  homepage_uri: https://docs.rubocop.org/rubocop-minitest/
119
120
  changelog_uri: https://github.com/rubocop/rubocop-minitest/blob/master/CHANGELOG.md
120
121
  source_code_uri: https://github.com/rubocop/rubocop-minitest
121
- documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.22
122
+ documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.23
122
123
  bug_tracker_uri: https://github.com/rubocop/rubocop-minitest/issues
123
124
  rubygems_mfa_required: 'true'
124
125
  post_install_message: