rubocop 1.31.1 → 1.31.2

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: 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.