rubocop 1.31.1 → 1.31.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e6cb927ae20cdc9cc2258d8f57b483c0fad68f03563e4f4a1823070510c8fac
4
- data.tar.gz: 68a3e3f99f11ef787da421d67a2674027c425978e494fd7ab6c1ea0a614748df
3
+ metadata.gz: 998eb88b2df9c70d2b432d79cd43901b7e72d33714c2a1ac1e1ebf3f64d75b85
4
+ data.tar.gz: 335fd1c15204af498ebee7200f2958902ccfd96923f9530b589517a857967a72
5
5
  SHA512:
6
- metadata.gz: 991b16c032399b14752c8a71ad92d3e2000c57941eafdace759cc5cb4f7a8f18dc58952597575375cb2a7df425ffffd1e2b029dabc9d98834c5142cc38435382
7
- data.tar.gz: f92f9b6704829816959e3ccd8c61fa439dfd75cbc09a145028de9d8cae2a636946da775b49e35a7b42a78d9af288969e72afaeb1b2fd47235a9e83201cdf4df7
6
+ metadata.gz: ceda90af46b2317f03cc4a86ea8aba7c63a96f12d55d6bea533ae2537d68bdc75a647f2d2a1f5103c1799f2dda6ec0f923351891050915a237919df241d39e1e
7
+ data.tar.gz: 8a0c5273cf612ca4717d619ce33b37dc2206beb4c6d247c3b501a67ec364861e18c24878b513c37b67e499084162cb70ab618e6e090f7876fda8da37c93d45d1
@@ -179,7 +179,7 @@ module RuboCop
179
179
 
180
180
  def determine_inherit_mode(hash, key)
181
181
  cop_cfg = hash[key]
182
- local_inherit = cop_cfg.delete('inherit_mode') if cop_cfg.is_a?(Hash)
182
+ local_inherit = cop_cfg['inherit_mode'] if cop_cfg.is_a?(Hash)
183
183
  local_inherit || hash['inherit_mode'] || {}
184
184
  end
185
185
 
@@ -48,7 +48,7 @@ module RuboCop
48
48
  InvestigationReport = Struct.new(:cop, :processed_source, :offenses, :corrector)
49
49
 
50
50
  # List of methods names to restrict calls for `on_send` / `on_csend`
51
- RESTRICT_ON_SEND = Set[].freeze
51
+ RESTRICT_ON_SEND = Set[].freeze # rubocop:disable InternalAffairs/UselessRestrictOnSend
52
52
 
53
53
  # List of cops that should not try to autocorrect at the same
54
54
  # time as this cop
@@ -62,6 +62,10 @@ module RuboCop
62
62
  # For example
63
63
  MSG = 'Use `#good_method` instead of `#bad_method`.'
64
64
 
65
+ # TODO: Don't call `on_send` unless the method name is in this list
66
+ # If you don't need `on_send` in the cop you created, remove it.
67
+ RESTRICT_ON_SEND = %%i[bad_method].freeze
68
+
65
69
  # @!method bad_method?(node)
66
70
  def_node_matcher :bad_method?, <<~PATTERN
67
71
  (send nil? :bad_method ...)
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module InternalAffairs
6
+ # Check for useless `RESTRICT_ON_SEND`.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # class FooCop
11
+ # RESTRICT_ON_SEND = %i[bad_method].freeze
12
+ # end
13
+ #
14
+ # # good
15
+ # class FooCop
16
+ # RESTRICT_ON_SEND = %i[bad_method].freeze
17
+ # def on_send(node)
18
+ # # ...
19
+ # end
20
+ # end
21
+ #
22
+ # # good
23
+ # class FooCop
24
+ # RESTRICT_ON_SEND = %i[bad_method].freeze
25
+ # def after_send(node)
26
+ # # ...
27
+ # end
28
+ # end
29
+ #
30
+ class UselessRestrictOnSend < Base
31
+ extend AutoCorrector
32
+
33
+ MSG = 'Useless `RESTRICT_ON_SEND` is defined.'
34
+
35
+ # @!method defined_send_callback?(node)
36
+ def_node_search :defined_send_callback?, '(def {:on_send :after_send} ...)'
37
+
38
+ def on_casgn(node)
39
+ return if !restrict_on_send?(node) || defined_send_callback?(node.parent)
40
+
41
+ add_offense(node) do |corrector|
42
+ corrector.remove(node)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def restrict_on_send?(node)
49
+ node.name == :RESTRICT_ON_SEND
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -20,3 +20,4 @@ require_relative 'internal_affairs/redundant_method_dispatch_node'
20
20
  require_relative 'internal_affairs/style_detected_api_use'
21
21
  require_relative 'internal_affairs/undefined_config'
22
22
  require_relative 'internal_affairs/useless_message_assertion'
23
+ require_relative 'internal_affairs/useless_restrict_on_send'
@@ -120,14 +120,15 @@ module RuboCop
120
120
  check_first(first_elem, left_bracket, left_parenthesis, 0)
121
121
  end
122
122
 
123
- check_right_bracket(array_node.loc.end, left_bracket, left_parenthesis)
123
+ check_right_bracket(array_node.loc.end, first_elem, left_bracket, left_parenthesis)
124
124
  end
125
125
 
126
- def check_right_bracket(right_bracket, left_bracket, left_parenthesis)
126
+ def check_right_bracket(right_bracket, first_elem, left_bracket, left_parenthesis)
127
127
  # if the right bracket is on the same line as the last value, accept
128
128
  return if /\S/.match?(right_bracket.source_line[0...right_bracket.column])
129
129
 
130
- expected_column, indent_base_type = indent_base(left_bracket, left_parenthesis)
130
+ expected_column, indent_base_type = indent_base(left_bracket, first_elem,
131
+ left_parenthesis)
131
132
  @column_delta = expected_column - right_bracket.column
132
133
  return if @column_delta.zero?
133
134
 
@@ -158,14 +158,14 @@ module RuboCop
158
158
  end
159
159
  end
160
160
 
161
- check_right_brace(hash_node.loc.end, left_brace, left_parenthesis)
161
+ check_right_brace(hash_node.loc.end, first_pair, left_brace, left_parenthesis)
162
162
  end
163
163
 
164
- def check_right_brace(right_brace, left_brace, left_parenthesis)
164
+ def check_right_brace(right_brace, first_pair, left_brace, left_parenthesis)
165
165
  # if the right brace is on the same line as the last value, accept
166
166
  return if /\S/.match?(right_brace.source_line[0...right_brace.column])
167
167
 
168
- expected_column, indent_base_type = indent_base(left_brace, left_parenthesis)
168
+ expected_column, indent_base_type = indent_base(left_brace, first_pair, left_parenthesis)
169
169
  @column_delta = expected_column - right_brace.column
170
170
  return if @column_delta.zero?
171
171
 
@@ -71,18 +71,22 @@ module RuboCop
71
71
  PATTERN
72
72
 
73
73
  def on_send(node)
74
- return unless node.parent&.if_type?
75
- return if node.parent.else_branch
74
+ return unless (parent = node.parent) && parent.if_type?
75
+ return if allowable_use_with_if?(parent)
76
76
  return if explicit_not_force?(node)
77
- return unless (exist_node = send_exist_node(node.parent).first)
77
+ return unless (exist_node = send_exist_node(parent).first)
78
78
  return unless exist_node.first_argument == node.first_argument
79
79
 
80
- offense(node, exist_node)
80
+ register_offense(node, exist_node)
81
81
  end
82
82
 
83
83
  private
84
84
 
85
- def offense(node, exist_node)
85
+ def allowable_use_with_if?(if_node)
86
+ if_node.condition.and_type? || if_node.condition.or_type? || if_node.else_branch
87
+ end
88
+
89
+ def register_offense(node, exist_node)
86
90
  range = range_between(node.parent.loc.keyword.begin_pos,
87
91
  exist_node.loc.expression.end_pos)
88
92
 
@@ -5,8 +5,7 @@ module RuboCop
5
5
  # Common functionality for checking def nodes.
6
6
  module DefNode
7
7
  extend NodePattern::Macros
8
-
9
- NON_PUBLIC_MODIFIERS = %w[private protected].freeze
8
+ include VisibilityHelp
10
9
 
11
10
  private
12
11
 
@@ -15,11 +14,7 @@ module RuboCop
15
14
  end
16
15
 
17
16
  def preceding_non_public_modifier?(node)
18
- stripped_source_upto(node.first_line).any? { |line| NON_PUBLIC_MODIFIERS.include?(line) }
19
- end
20
-
21
- def stripped_source_upto(index)
22
- processed_source[0..index].map(&:strip)
17
+ node_visibility(node) != :public
23
18
  end
24
19
 
25
20
  # @!method non_public_modifier?(node)
@@ -26,7 +26,7 @@ module RuboCop
26
26
  def check_first(first, left_brace, left_parenthesis, offset)
27
27
  actual_column = first.source_range.column
28
28
 
29
- indent_base_column, indent_base_type = indent_base(left_brace, left_parenthesis)
29
+ indent_base_column, indent_base_type = indent_base(left_brace, first, left_parenthesis)
30
30
  expected_column = indent_base_column + configured_indentation_width + offset
31
31
 
32
32
  @column_delta = expected_column - actual_column
@@ -47,10 +47,10 @@ module RuboCop
47
47
  end
48
48
  end
49
49
 
50
- def indent_base(left_brace, left_parenthesis)
50
+ def indent_base(left_brace, first, left_parenthesis)
51
51
  return [left_brace.column, :left_brace_or_bracket] if style == brace_alignment_style
52
52
 
53
- pair = hash_pair_where_value_beginning_with(left_brace)
53
+ pair = hash_pair_where_value_beginning_with(left_brace, first)
54
54
  if pair && key_and_value_begin_on_same_line?(pair) &&
55
55
  right_sibling_begins_on_subsequent_line?(pair)
56
56
  return [pair.loc.column, :parent_hash_key]
@@ -63,17 +63,10 @@ module RuboCop
63
63
  [left_brace.source_line =~ /\S/, :start_of_line]
64
64
  end
65
65
 
66
- def hash_pair_where_value_beginning_with(left_brace)
67
- node = node_beginning_with(left_brace)
68
- node.parent&.pair_type? ? node.parent : nil
69
- end
66
+ def hash_pair_where_value_beginning_with(left_brace, first)
67
+ return unless first && first.parent.loc.begin == left_brace
70
68
 
71
- def node_beginning_with(left_brace)
72
- processed_source.ast.each_descendant do |node|
73
- if node.loc.is_a?(Parser::Source::Map::Collection) && (node.loc.begin == left_brace)
74
- break node
75
- end
76
- end
69
+ first.parent&.parent&.pair_type? ? first.parent.parent : nil
77
70
  end
78
71
 
79
72
  def key_and_value_begin_on_same_line?(pair)
@@ -117,10 +117,10 @@ module RuboCop
117
117
  end
118
118
 
119
119
  def check_module_function(nodes)
120
- private_directive = nodes.any? { |node| private_directive?(node) }
120
+ return if nodes.any? { |node| private_directive?(node) }
121
121
 
122
122
  nodes.each do |node|
123
- yield node if extend_self_node?(node) && !private_directive
123
+ yield node if extend_self_node?(node)
124
124
  end
125
125
  end
126
126
 
@@ -81,7 +81,8 @@ module RuboCop
81
81
  end
82
82
 
83
83
  def like_method_argument_parentheses?(node)
84
- node.send_type? && node.arguments.size == 1 && !node.arithmetic_operation?
84
+ node.send_type? && node.arguments.one? &&
85
+ !node.arithmetic_operation? && node.first_argument.begin_type?
85
86
  end
86
87
 
87
88
  def empty_parentheses?(node)
@@ -47,8 +47,6 @@ module RuboCop
47
47
  class TopLevelMethodDefinition < Base
48
48
  MSG = 'Do not define methods at the top-level.'
49
49
 
50
- RESTRICT_ON_SEND = %i[define_method].freeze
51
-
52
50
  def on_def(node)
53
51
  return unless top_level_method_definition?(node)
54
52
 
@@ -73,11 +73,15 @@ module RuboCop
73
73
  namespace(name) do
74
74
  # rubocop:todo Naming/InclusiveLanguage
75
75
  task(:auto_correct, *args) do
76
+ require 'rainbow'
76
77
  warn Rainbow(
77
78
  'rubocop:auto_correct task is deprecated; ' \
78
79
  'use rubocop:autocorrect task or rubocop:autocorrect_all task instead.'
79
80
  ).yellow
80
- ::Rake::Task['rubocop:autocorrect'].invoke
81
+ RakeFileUtils.verbose(verbose) do
82
+ yield(*[self, task_args].slice(0, task_block.arity)) if task_block
83
+ perform('--autocorrect')
84
+ end
81
85
  end
82
86
  # rubocop:enable Naming/InclusiveLanguage
83
87
 
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '1.31.1'
6
+ STRING = '1.31.2'
7
7
 
8
8
  MSG = '%<version>s (using Parser %<parser_version>s, ' \
9
9
  'rubocop-ast %<rubocop_ast_version>s, ' \
data/lib/rubocop.rb CHANGED
@@ -72,7 +72,6 @@ require_relative 'rubocop/cop/mixin/configurable_enforced_style'
72
72
  require_relative 'rubocop/cop/mixin/configurable_formatting'
73
73
  require_relative 'rubocop/cop/mixin/configurable_naming'
74
74
  require_relative 'rubocop/cop/mixin/configurable_numbering'
75
- require_relative 'rubocop/cop/mixin/def_node'
76
75
  require_relative 'rubocop/cop/mixin/documentation_comment'
77
76
  require_relative 'rubocop/cop/mixin/duplication'
78
77
  require_relative 'rubocop/cop/mixin/range_help'
@@ -130,6 +129,7 @@ require_relative 'rubocop/cop/mixin/uncommunicative_name'
130
129
  require_relative 'rubocop/cop/mixin/unused_argument'
131
130
  require_relative 'rubocop/cop/mixin/visibility_help'
132
131
  require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help
132
+ require_relative 'rubocop/cop/mixin/def_node' # relies on visibility_help
133
133
 
134
134
  require_relative 'rubocop/cop/utils/format_string'
135
135
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.31.1
4
+ version: 1.31.2
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-06-29 00:00:00.000000000 Z
13
+ date: 2022-07-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -301,6 +301,7 @@ files:
301
301
  - lib/rubocop/cop/internal_affairs/style_detected_api_use.rb
302
302
  - lib/rubocop/cop/internal_affairs/undefined_config.rb
303
303
  - lib/rubocop/cop/internal_affairs/useless_message_assertion.rb
304
+ - lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb
304
305
  - lib/rubocop/cop/layout/access_modifier_indentation.rb
305
306
  - lib/rubocop/cop/layout/argument_alignment.rb
306
307
  - lib/rubocop/cop/layout/array_alignment.rb
@@ -985,7 +986,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
985
986
  - !ruby/object:Gem::Version
986
987
  version: '0'
987
988
  requirements: []
988
- rubygems_version: 3.2.22
989
+ rubygems_version: 3.1.2
989
990
  signing_key:
990
991
  specification_version: 4
991
992
  summary: Automatic Ruby code style checking tool.