rubocop 1.69.2 → 1.73.1
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 +4 -4
 - data/LICENSE.txt +1 -1
 - data/README.md +4 -4
 - data/config/default.yml +90 -13
 - data/config/internal_affairs.yml +16 -0
 - data/lib/rubocop/cli/command/execute_runner.rb +3 -3
 - data/lib/rubocop/cli/command/show_cops.rb +24 -2
 - data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
 - data/lib/rubocop/comment_config.rb +2 -2
 - data/lib/rubocop/config.rb +17 -4
 - data/lib/rubocop/config_loader.rb +48 -8
 - data/lib/rubocop/config_loader_resolver.rb +35 -10
 - data/lib/rubocop/config_validator.rb +19 -9
 - data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
 - data/lib/rubocop/cop/base.rb +6 -0
 - data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -1
 - data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
 - data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
 - data/lib/rubocop/cop/internal_affairs/example_description.rb +4 -2
 - data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
 - data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
 - data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +3 -2
 - data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -1
 - data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
 - data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
 - data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +229 -0
 - data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
 - data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
 - data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
 - data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
 - data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +3 -1
 - data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
 - data/lib/rubocop/cop/internal_affairs/undefined_config.rb +7 -1
 - data/lib/rubocop/cop/internal_affairs.rb +5 -16
 - data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
 - data/lib/rubocop/cop/layout/argument_alignment.rb +2 -8
 - data/lib/rubocop/cop/layout/block_alignment.rb +3 -1
 - data/lib/rubocop/cop/layout/class_structure.rb +9 -9
 - data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -4
 - data/lib/rubocop/cop/layout/dot_position.rb +1 -1
 - data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
 - data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
 - data/lib/rubocop/cop/layout/empty_line_between_defs.rb +7 -11
 - data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +27 -1
 - data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
 - data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +22 -2
 - data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
 - data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
 - data/lib/rubocop/cop/layout/first_argument_indentation.rb +3 -8
 - data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
 - data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
 - data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
 - data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
 - data/lib/rubocop/cop/layout/hash_alignment.rb +6 -4
 - data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -1
 - data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
 - data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
 - data/lib/rubocop/cop/layout/line_length.rb +4 -3
 - data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
 - data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
 - data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -0
 - data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -4
 - data/lib/rubocop/cop/layout/redundant_line_break.rb +7 -6
 - data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +1 -1
 - data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
 - data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
 - data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
 - data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
 - data/lib/rubocop/cop/layout/space_after_semicolon.rb +1 -1
 - data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -0
 - data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
 - data/lib/rubocop/cop/layout/space_around_operators.rb +3 -3
 - data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
 - data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
 - data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -3
 - data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
 - data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +119 -0
 - data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
 - data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
 - data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
 - data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
 - data/lib/rubocop/cop/lint/cop_directive_syntax.rb +84 -0
 - data/lib/rubocop/cop/lint/debugger.rb +1 -1
 - data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
 - data/lib/rubocop/cop/lint/duplicate_methods.rb +0 -14
 - data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
 - data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
 - data/lib/rubocop/cop/lint/empty_conditional_body.rb +10 -5
 - data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
 - data/lib/rubocop/cop/lint/float_comparison.rb +6 -8
 - data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
 - data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
 - data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
 - data/lib/rubocop/cop/lint/literal_as_condition.rb +99 -9
 - data/lib/rubocop/cop/lint/literal_in_interpolation.rb +24 -6
 - data/lib/rubocop/cop/lint/missing_super.rb +2 -2
 - data/lib/rubocop/cop/lint/mixed_case_range.rb +3 -3
 - data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
 - data/lib/rubocop/cop/lint/nested_method_definition.rb +8 -4
 - data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
 - data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +4 -3
 - data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
 - data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +18 -31
 - data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +2 -1
 - data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -5
 - data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +1 -1
 - data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
 - data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
 - data/lib/rubocop/cop/lint/redundant_type_conversion.rb +252 -0
 - data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
 - data/lib/rubocop/cop/lint/safe_navigation_chain.rb +8 -1
 - data/lib/rubocop/cop/lint/shared_mutable_default.rb +65 -0
 - data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
 - data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
 - data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
 - data/lib/rubocop/cop/lint/syntax.rb +4 -1
 - data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +1 -4
 - data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
 - data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -1
 - data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
 - data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -1
 - data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -4
 - data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
 - data/lib/rubocop/cop/lint/useless_constant_scoping.rb +80 -0
 - data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
 - data/lib/rubocop/cop/lint/useless_numeric_operation.rb +2 -1
 - data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2 -2
 - data/lib/rubocop/cop/lint/void.rb +11 -9
 - data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
 - data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
 - data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
 - data/lib/rubocop/cop/metrics/method_length.rb +8 -1
 - data/lib/rubocop/cop/metrics/module_length.rb +1 -1
 - data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
 - data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
 - data/lib/rubocop/cop/mixin/alignment.rb +2 -2
 - data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
 - data/lib/rubocop/cop/mixin/check_line_breakable.rb +11 -11
 - data/lib/rubocop/cop/mixin/comments_help.rb +4 -2
 - data/lib/rubocop/cop/mixin/dig_help.rb +1 -1
 - data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
 - data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +22 -22
 - data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
 - data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
 - data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
 - data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
 - data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +48 -24
 - data/lib/rubocop/cop/mixin/range_help.rb +3 -3
 - data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
 - data/lib/rubocop/cop/mixin/statement_modifier.rb +8 -3
 - data/lib/rubocop/cop/mixin/string_help.rb +2 -2
 - data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
 - data/lib/rubocop/cop/mixin/trailing_comma.rb +15 -3
 - data/lib/rubocop/cop/naming/block_forwarding.rb +19 -15
 - data/lib/rubocop/cop/naming/predicate_name.rb +44 -0
 - data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +3 -3
 - data/lib/rubocop/cop/naming/variable_name.rb +64 -6
 - data/lib/rubocop/cop/security/compound_hash.rb +1 -0
 - data/lib/rubocop/cop/style/access_modifier_declarations.rb +34 -5
 - data/lib/rubocop/cop/style/accessor_grouping.rb +19 -5
 - data/lib/rubocop/cop/style/and_or.rb +1 -1
 - data/lib/rubocop/cop/style/arguments_forwarding.rb +39 -23
 - data/lib/rubocop/cop/style/array_first_last.rb +18 -2
 - data/lib/rubocop/cop/style/block_delimiters.rb +7 -20
 - data/lib/rubocop/cop/style/class_and_module_children.rb +6 -3
 - data/lib/rubocop/cop/style/collection_methods.rb +1 -1
 - data/lib/rubocop/cop/style/combinable_defined.rb +1 -1
 - data/lib/rubocop/cop/style/combinable_loops.rb +2 -2
 - data/lib/rubocop/cop/style/commented_keyword.rb +1 -1
 - data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
 - data/lib/rubocop/cop/style/conditional_assignment.rb +6 -4
 - data/lib/rubocop/cop/style/documentation.rb +1 -1
 - data/lib/rubocop/cop/style/double_negation.rb +3 -3
 - data/lib/rubocop/cop/style/each_for_simple_loop.rb +4 -7
 - data/lib/rubocop/cop/style/each_with_object.rb +2 -3
 - data/lib/rubocop/cop/style/empty_else.rb +4 -2
 - data/lib/rubocop/cop/style/empty_literal.rb +1 -1
 - data/lib/rubocop/cop/style/empty_method.rb +1 -1
 - data/lib/rubocop/cop/style/endless_method.rb +163 -18
 - data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
 - data/lib/rubocop/cop/style/exact_regexp_match.rb +3 -10
 - data/lib/rubocop/cop/style/explicit_block_argument.rb +15 -2
 - data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
 - data/lib/rubocop/cop/style/fetch_env_var.rb +1 -1
 - data/lib/rubocop/cop/style/float_division.rb +8 -4
 - data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
 - data/lib/rubocop/cop/style/hash_each_methods.rb +3 -6
 - data/lib/rubocop/cop/style/hash_except.rb +24 -148
 - data/lib/rubocop/cop/style/hash_slice.rb +80 -0
 - data/lib/rubocop/cop/style/hash_syntax.rb +6 -3
 - data/lib/rubocop/cop/style/identical_conditional_branches.rb +22 -3
 - data/lib/rubocop/cop/style/if_unless_modifier.rb +3 -3
 - data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +1 -1
 - data/lib/rubocop/cop/style/if_with_semicolon.rb +2 -2
 - data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
 - data/lib/rubocop/cop/style/inverse_methods.rb +6 -6
 - data/lib/rubocop/cop/style/it_assignment.rb +36 -0
 - data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -1
 - data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
 - data/lib/rubocop/cop/style/map_into_array.rb +1 -1
 - data/lib/rubocop/cop/style/map_to_hash.rb +1 -1
 - data/lib/rubocop/cop/style/map_to_set.rb +3 -2
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +19 -12
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -0
 - data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +2 -1
 - data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
 - data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
 - data/lib/rubocop/cop/style/missing_else.rb +2 -0
 - data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
 - data/lib/rubocop/cop/style/multiple_comparison.rb +26 -20
 - data/lib/rubocop/cop/style/mutable_constant.rb +3 -3
 - data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -1
 - data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
 - data/lib/rubocop/cop/style/object_then.rb +13 -15
 - data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
 - data/lib/rubocop/cop/style/parallel_assignment.rb +1 -5
 - data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
 - data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
 - data/lib/rubocop/cop/style/proc.rb +1 -2
 - data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
 - data/lib/rubocop/cop/style/raise_args.rb +6 -4
 - data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
 - data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_condition.rb +48 -2
 - data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +2 -1
 - data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
 - data/lib/rubocop/cop/style/redundant_each.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
 - data/lib/rubocop/cop/style/redundant_format.rb +250 -0
 - data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
 - data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
 - data/lib/rubocop/cop/style/redundant_line_continuation.rb +34 -13
 - data/lib/rubocop/cop/style/redundant_parentheses.rb +28 -14
 - data/lib/rubocop/cop/style/redundant_regexp_argument.rb +3 -0
 - data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_self_assignment.rb +14 -28
 - data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
 - data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
 - data/lib/rubocop/cop/style/return_nil.rb +1 -1
 - data/lib/rubocop/cop/style/safe_navigation.rb +2 -2
 - data/lib/rubocop/cop/style/semicolon.rb +1 -1
 - data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
 - data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
 - data/lib/rubocop/cop/style/single_line_do_end_block.rb +1 -2
 - data/lib/rubocop/cop/style/single_line_methods.rb +6 -7
 - data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
 - data/lib/rubocop/cop/style/sole_nested_conditional.rb +2 -2
 - data/lib/rubocop/cop/style/string_concatenation.rb +2 -2
 - data/lib/rubocop/cop/style/string_literals.rb +1 -1
 - data/lib/rubocop/cop/style/string_methods.rb +1 -1
 - data/lib/rubocop/cop/style/super_arguments.rb +65 -17
 - data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
 - data/lib/rubocop/cop/style/top_level_method_definition.rb +1 -1
 - data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -1
 - data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
 - data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
 - data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
 - data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
 - data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
 - data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
 - data/lib/rubocop/cop/util.rb +12 -5
 - data/lib/rubocop/cop/utils/format_string.rb +7 -5
 - data/lib/rubocop/cop/variable_force/variable.rb +14 -2
 - data/lib/rubocop/cop/variable_force/variable_table.rb +3 -3
 - data/lib/rubocop/cops_documentation_generator.rb +25 -14
 - data/lib/rubocop/directive_comment.rb +44 -10
 - data/lib/rubocop/formatter/formatter_set.rb +1 -1
 - data/lib/rubocop/lsp/diagnostic.rb +189 -0
 - data/lib/rubocop/lsp/logger.rb +2 -2
 - data/lib/rubocop/lsp/routes.rb +7 -23
 - data/lib/rubocop/lsp/runtime.rb +17 -49
 - data/lib/rubocop/lsp/server.rb +0 -2
 - data/lib/rubocop/lsp/stdin_runner.rb +83 -0
 - data/lib/rubocop/options.rb +28 -12
 - data/lib/rubocop/path_util.rb +15 -8
 - data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
 - data/lib/rubocop/plugin/load_error.rb +26 -0
 - data/lib/rubocop/plugin/loader.rb +100 -0
 - data/lib/rubocop/plugin/not_supported_error.rb +29 -0
 - data/lib/rubocop/plugin.rb +46 -0
 - data/lib/rubocop/rake_task.rb +4 -1
 - data/lib/rubocop/result_cache.rb +13 -13
 - data/lib/rubocop/rspec/cop_helper.rb +9 -0
 - data/lib/rubocop/rspec/expect_offense.rb +6 -2
 - data/lib/rubocop/rspec/shared_contexts.rb +19 -1
 - data/lib/rubocop/rspec/support.rb +2 -2
 - data/lib/rubocop/runner.rb +5 -6
 - data/lib/rubocop/server/cache.rb +35 -2
 - data/lib/rubocop/server/cli.rb +2 -2
 - data/lib/rubocop/target_finder.rb +1 -0
 - data/lib/rubocop/target_ruby.rb +15 -0
 - data/lib/rubocop/version.rb +17 -2
 - data/lib/rubocop.rb +11 -1
 - data/lib/ruby_lsp/rubocop/addon.rb +75 -0
 - data/lib/ruby_lsp/rubocop/runtime_adapter.rb +47 -0
 - metadata +53 -16
 - data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
 - data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
 
| 
         @@ -139,12 +139,16 @@ module RuboCop 
     | 
|
| 
       139 
139 
     | 
    
         
             
                      style == :separated
         
     | 
| 
       140 
140 
     | 
    
         
             
                    end
         
     | 
| 
       141 
141 
     | 
    
         | 
| 
      
 142 
     | 
    
         
            +
                    def groupable_sibling_accessor?(node, sibling)
         
     | 
| 
      
 143 
     | 
    
         
            +
                      sibling.attribute_accessor? &&
         
     | 
| 
      
 144 
     | 
    
         
            +
                        sibling.method?(node.method_name) &&
         
     | 
| 
      
 145 
     | 
    
         
            +
                        node_visibility(sibling) == node_visibility(node) &&
         
     | 
| 
      
 146 
     | 
    
         
            +
                        groupable_accessor?(sibling) && !previous_line_comment?(sibling)
         
     | 
| 
      
 147 
     | 
    
         
            +
                    end
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
       142 
149 
     | 
    
         
             
                    def groupable_sibling_accessors(send_node)
         
     | 
| 
       143 
150 
     | 
    
         
             
                      send_node.parent.each_child_node(:send).select do |sibling|
         
     | 
| 
       144 
     | 
    
         
            -
                         
     | 
| 
       145 
     | 
    
         
            -
                          sibling.method?(send_node.method_name) &&
         
     | 
| 
       146 
     | 
    
         
            -
                          node_visibility(sibling) == node_visibility(send_node) &&
         
     | 
| 
       147 
     | 
    
         
            -
                          groupable_accessor?(sibling) && !previous_line_comment?(sibling)
         
     | 
| 
      
 151 
     | 
    
         
            +
                        groupable_sibling_accessor?(send_node, sibling)
         
     | 
| 
       148 
152 
     | 
    
         
             
                      end
         
     | 
| 
       149 
153 
     | 
    
         
             
                    end
         
     | 
| 
       150 
154 
     | 
    
         | 
| 
         @@ -155,13 +159,23 @@ module RuboCop 
     | 
|
| 
       155 
159 
     | 
    
         | 
| 
       156 
160 
     | 
    
         
             
                    def preferred_accessors(node)
         
     | 
| 
       157 
161 
     | 
    
         
             
                      if grouped_style?
         
     | 
| 
      
 162 
     | 
    
         
            +
                        return if skip_for_grouping?(node)
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
       158 
164 
     | 
    
         
             
                        accessors = groupable_sibling_accessors(node)
         
     | 
| 
       159 
     | 
    
         
            -
                         
     | 
| 
      
 165 
     | 
    
         
            +
                        if node.loc == accessors.first.loc || skip_for_grouping?(accessors.first)
         
     | 
| 
      
 166 
     | 
    
         
            +
                          group_accessors(node, accessors)
         
     | 
| 
      
 167 
     | 
    
         
            +
                        end
         
     | 
| 
       160 
168 
     | 
    
         
             
                      else
         
     | 
| 
       161 
169 
     | 
    
         
             
                        separate_accessors(node)
         
     | 
| 
       162 
170 
     | 
    
         
             
                      end
         
     | 
| 
       163 
171 
     | 
    
         
             
                    end
         
     | 
| 
       164 
172 
     | 
    
         | 
| 
      
 173 
     | 
    
         
            +
                    # Group after constants
         
     | 
| 
      
 174 
     | 
    
         
            +
                    def skip_for_grouping?(node)
         
     | 
| 
      
 175 
     | 
    
         
            +
                      node.right_siblings.any?(&:casgn_type?) &&
         
     | 
| 
      
 176 
     | 
    
         
            +
                        node.right_siblings.any? { |n| n.send_type? && groupable_sibling_accessor?(node, n) }
         
     | 
| 
      
 177 
     | 
    
         
            +
                    end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
       165 
179 
     | 
    
         
             
                    def group_accessors(node, accessors)
         
     | 
| 
       166 
180 
     | 
    
         
             
                      accessor_names = accessors.flat_map { |accessor| accessor.arguments.map(&:source) }.uniq
         
     | 
| 
       167 
181 
     | 
    
         | 
| 
         @@ -31,6 +31,20 @@ module RuboCop 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  #
         
     | 
| 
       32 
32 
     | 
    
         
             
                  # This cop handles not only method forwarding but also forwarding to `super`.
         
     | 
| 
       33 
33 
     | 
    
         
             
                  #
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # [NOTE]
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # ====
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # Because of a bug in Ruby 3.3.0, when a block is referenced inside of another block,
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # no offense will be registered until Ruby 3.4:
         
     | 
| 
      
 38 
     | 
    
         
            +
                  #
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # [source,ruby]
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # ----
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # def foo(&block)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  #   # Using an anonymous block would be a syntax error on Ruby 3.3.0
         
     | 
| 
      
 43 
     | 
    
         
            +
                  #   block_method { bar(&block) }
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  # ----
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # ====
         
     | 
| 
      
 47 
     | 
    
         
            +
                  #
         
     | 
| 
       34 
48 
     | 
    
         
             
                  # @example
         
     | 
| 
       35 
49 
     | 
    
         
             
                  #   # bad
         
     | 
| 
       36 
50 
     | 
    
         
             
                  #   def foo(*args, &block)
         
     | 
| 
         @@ -148,7 +162,7 @@ module RuboCop 
     | 
|
| 
       148 
162 
     | 
    
         | 
| 
       149 
163 
     | 
    
         
             
                      restarg, kwrestarg, blockarg = extract_forwardable_args(node.arguments)
         
     | 
| 
       150 
164 
     | 
    
         
             
                      forwardable_args = redundant_forwardable_named_args(restarg, kwrestarg, blockarg)
         
     | 
| 
       151 
     | 
    
         
            -
                      send_nodes = node.each_descendant(: 
     | 
| 
      
 165 
     | 
    
         
            +
                      send_nodes = node.each_descendant(:call, :super, :yield).to_a
         
     | 
| 
       152 
166 
     | 
    
         | 
| 
       153 
167 
     | 
    
         
             
                      send_classifications = classify_send_nodes(
         
     | 
| 
       154 
168 
     | 
    
         
             
                        node, send_nodes, non_splat_or_block_pass_lvar_references(node.body), forwardable_args
         
     | 
| 
         @@ -191,9 +205,7 @@ module RuboCop 
     | 
|
| 
       191 
205 
     | 
    
         | 
| 
       192 
206 
     | 
    
         
             
                      send_classifications.each do |send_node, c, forward_rest, forward_kwrest, forward_block_arg| # rubocop:disable Layout/LineLength
         
     | 
| 
       193 
207 
     | 
    
         
             
                        if !forward_rest && !forward_kwrest && c != :all_anonymous
         
     | 
| 
       194 
     | 
    
         
            -
                           
     | 
| 
       195 
     | 
    
         
            -
                          # in Ruby 3.3.0.
         
     | 
| 
       196 
     | 
    
         
            -
                          if outside_block?(forward_block_arg)
         
     | 
| 
      
 208 
     | 
    
         
            +
                          if allow_anonymous_forwarding_in_block?(forward_block_arg)
         
     | 
| 
       197 
209 
     | 
    
         
             
                            register_forward_block_arg_offense(!forward_rest, node.arguments, block_arg)
         
     | 
| 
       198 
210 
     | 
    
         
             
                            register_forward_block_arg_offense(!forward_rest, send_node, forward_block_arg)
         
     | 
| 
       199 
211 
     | 
    
         
             
                          end
         
     | 
| 
         @@ -214,24 +226,22 @@ module RuboCop 
     | 
|
| 
       214 
226 
     | 
    
         
             
                    # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
         
     | 
| 
       215 
227 
     | 
    
         
             
                    def add_post_ruby_32_offenses(def_node, send_classifications, forwardable_args)
         
     | 
| 
       216 
228 
     | 
    
         
             
                      return unless use_anonymous_forwarding?
         
     | 
| 
       217 
     | 
    
         
            -
                      return  
     | 
| 
      
 229 
     | 
    
         
            +
                      return unless all_forwarding_offenses_correctable?(send_classifications)
         
     | 
| 
       218 
230 
     | 
    
         | 
| 
       219 
231 
     | 
    
         
             
                      rest_arg, kwrest_arg, block_arg = *forwardable_args
         
     | 
| 
       220 
232 
     | 
    
         | 
| 
       221 
233 
     | 
    
         
             
                      send_classifications.each do |send_node, _c, forward_rest, forward_kwrest, forward_block_arg| # rubocop:disable Layout/LineLength
         
     | 
| 
       222 
     | 
    
         
            -
                        if  
     | 
| 
      
 234 
     | 
    
         
            +
                        if allow_anonymous_forwarding_in_block?(forward_rest)
         
     | 
| 
       223 
235 
     | 
    
         
             
                          register_forward_args_offense(def_node.arguments, rest_arg)
         
     | 
| 
       224 
236 
     | 
    
         
             
                          register_forward_args_offense(send_node, forward_rest)
         
     | 
| 
       225 
237 
     | 
    
         
             
                        end
         
     | 
| 
       226 
238 
     | 
    
         | 
| 
       227 
     | 
    
         
            -
                        if  
     | 
| 
      
 239 
     | 
    
         
            +
                        if allow_anonymous_forwarding_in_block?(forward_kwrest)
         
     | 
| 
       228 
240 
     | 
    
         
             
                          register_forward_kwargs_offense(!forward_rest, def_node.arguments, kwrest_arg)
         
     | 
| 
       229 
241 
     | 
    
         
             
                          register_forward_kwargs_offense(!forward_rest, send_node, forward_kwrest)
         
     | 
| 
       230 
242 
     | 
    
         
             
                        end
         
     | 
| 
       231 
243 
     | 
    
         | 
| 
       232 
     | 
    
         
            -
                         
     | 
| 
       233 
     | 
    
         
            -
                        # in Ruby 3.3.0.
         
     | 
| 
       234 
     | 
    
         
            -
                        if outside_block?(forward_block_arg)
         
     | 
| 
      
 244 
     | 
    
         
            +
                        if allow_anonymous_forwarding_in_block?(forward_block_arg)
         
     | 
| 
       235 
245 
     | 
    
         
             
                          register_forward_block_arg_offense(!forward_rest, def_node.arguments, block_arg)
         
     | 
| 
       236 
246 
     | 
    
         
             
                          register_forward_block_arg_offense(!forward_rest, send_node, forward_block_arg)
         
     | 
| 
       237 
247 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -293,10 +303,25 @@ module RuboCop 
     | 
|
| 
       293 
303 
     | 
    
         
             
                      redundant_arg_names.include?(arg.source) ? arg : nil
         
     | 
| 
       294 
304 
     | 
    
         
             
                    end
         
     | 
| 
       295 
305 
     | 
    
         | 
| 
       296 
     | 
    
         
            -
                     
     | 
| 
      
 306 
     | 
    
         
            +
                    # Checks if forwarding is uses both in blocks and outside of blocks.
         
     | 
| 
      
 307 
     | 
    
         
            +
                    # On Ruby 3.3.0, anonymous block forwarding in blocks can be is a syntax
         
     | 
| 
      
 308 
     | 
    
         
            +
                    # error, so we only want to register an offense if we can change all occurrences.
         
     | 
| 
      
 309 
     | 
    
         
            +
                    def all_forwarding_offenses_correctable?(send_classifications)
         
     | 
| 
      
 310 
     | 
    
         
            +
                      return true if target_ruby_version >= 3.4
         
     | 
| 
      
 311 
     | 
    
         
            +
             
     | 
| 
      
 312 
     | 
    
         
            +
                      send_classifications.none? do |send_node, *|
         
     | 
| 
      
 313 
     | 
    
         
            +
                        send_node.each_ancestor(:any_block).any?
         
     | 
| 
      
 314 
     | 
    
         
            +
                      end
         
     | 
| 
      
 315 
     | 
    
         
            +
                    end
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
                    # Ruby 3.3.0 had a bug where accessing an anonymous block argument inside of a block
         
     | 
| 
      
 318 
     | 
    
         
            +
                    # was a syntax error in unambiguous cases: https://bugs.ruby-lang.org/issues/20090
         
     | 
| 
      
 319 
     | 
    
         
            +
                    # We disallow this also for earlier Ruby versions so that code is forwards compatible.
         
     | 
| 
      
 320 
     | 
    
         
            +
                    def allow_anonymous_forwarding_in_block?(node)
         
     | 
| 
       297 
321 
     | 
    
         
             
                      return false unless node
         
     | 
| 
      
 322 
     | 
    
         
            +
                      return true if target_ruby_version >= 3.4
         
     | 
| 
       298 
323 
     | 
    
         | 
| 
       299 
     | 
    
         
            -
                      node.each_ancestor(: 
     | 
| 
      
 324 
     | 
    
         
            +
                      node.each_ancestor(:any_block).none?
         
     | 
| 
       300 
325 
     | 
    
         
             
                    end
         
     | 
| 
       301 
326 
     | 
    
         | 
| 
       302 
327 
     | 
    
         
             
                    def register_forward_args_offense(def_arguments_or_send, rest_arg_or_splat)
         
     | 
| 
         @@ -357,12 +382,6 @@ module RuboCop 
     | 
|
| 
       357 
382 
     | 
    
         
             
                      cop_config.fetch('UseAnonymousForwarding', false)
         
     | 
| 
       358 
383 
     | 
    
         
             
                    end
         
     | 
| 
       359 
384 
     | 
    
         | 
| 
       360 
     | 
    
         
            -
                    def send_inside_block?(send_classifications)
         
     | 
| 
       361 
     | 
    
         
            -
                      send_classifications.any? do |send_node, *|
         
     | 
| 
       362 
     | 
    
         
            -
                        send_node.each_ancestor(:block, :numblock).any?
         
     | 
| 
       363 
     | 
    
         
            -
                      end
         
     | 
| 
       364 
     | 
    
         
            -
                    end
         
     | 
| 
       365 
     | 
    
         
            -
             
     | 
| 
       366 
385 
     | 
    
         
             
                    def add_parens_if_missing(node, corrector)
         
     | 
| 
       367 
386 
     | 
    
         
             
                      return if parentheses?(node)
         
     | 
| 
       368 
387 
     | 
    
         
             
                      return if node.send_type? && node.method?(:[])
         
     | 
| 
         @@ -511,7 +530,7 @@ module RuboCop 
     | 
|
| 
       511 
530 
     | 
    
         
             
                      end
         
     | 
| 
       512 
531 
     | 
    
         | 
| 
       513 
532 
     | 
    
         
             
                      def additional_kwargs?
         
     | 
| 
       514 
     | 
    
         
            -
                        @def_node.arguments.any? { |a| a. 
     | 
| 
      
 533 
     | 
    
         
            +
                        @def_node.arguments.any? { |a| a.type?(:kwarg, :kwoptarg) }
         
     | 
| 
       515 
534 
     | 
    
         
             
                      end
         
     | 
| 
       516 
535 
     | 
    
         | 
| 
       517 
536 
     | 
    
         
             
                      def forward_additional_kwargs?
         
     | 
| 
         @@ -540,10 +559,7 @@ module RuboCop 
     | 
|
| 
       540 
559 
     | 
    
         
             
                    end
         
     | 
| 
       541 
560 
     | 
    
         | 
| 
       542 
561 
     | 
    
         
             
                    def explicit_block_name?
         
     | 
| 
       543 
     | 
    
         
            -
                       
     | 
| 
       544 
     | 
    
         
            -
                      return false unless block_forwarding_config['Enabled']
         
     | 
| 
       545 
     | 
    
         
            -
             
     | 
| 
       546 
     | 
    
         
            -
                      block_forwarding_config['EnforcedStyle'] == 'explicit'
         
     | 
| 
      
 562 
     | 
    
         
            +
                      config.for_enabled_cop('Naming/BlockForwarding')['EnforcedStyle'] == 'explicit'
         
     | 
| 
       547 
563 
     | 
    
         
             
                    end
         
     | 
| 
       548 
564 
     | 
    
         
             
                  end
         
     | 
| 
       549 
565 
     | 
    
         
             
                end
         
     | 
| 
         @@ -42,14 +42,30 @@ module RuboCop 
     | 
|
| 
       42 
42 
     | 
    
         
             
                      return if node.parent && brace_method?(node.parent)
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
                      preferred = (value.zero? ? 'first' : 'last')
         
     | 
| 
       45 
     | 
    
         
            -
                       
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
                      offense_range = find_offense_range(node)
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                      add_offense(offense_range, message: format(MSG, preferred: preferred)) do |corrector|
         
     | 
| 
      
 48 
     | 
    
         
            +
                        corrector.replace(offense_range, preferred_value(node, preferred))
         
     | 
| 
       47 
49 
     | 
    
         
             
                      end
         
     | 
| 
       48 
50 
     | 
    
         
             
                    end
         
     | 
| 
       49 
51 
     | 
    
         
             
                    # rubocop:enable Metrics/AbcSize
         
     | 
| 
      
 52 
     | 
    
         
            +
                    alias on_csend on_send
         
     | 
| 
       50 
53 
     | 
    
         | 
| 
       51 
54 
     | 
    
         
             
                    private
         
     | 
| 
       52 
55 
     | 
    
         | 
| 
      
 56 
     | 
    
         
            +
                    def preferred_value(node, value)
         
     | 
| 
      
 57 
     | 
    
         
            +
                      value = ".#{value}" unless node.loc.dot
         
     | 
| 
      
 58 
     | 
    
         
            +
                      value
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    def find_offense_range(node)
         
     | 
| 
      
 62 
     | 
    
         
            +
                      if node.loc.dot
         
     | 
| 
      
 63 
     | 
    
         
            +
                        node.loc.selector.join(node.source_range.end)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      else
         
     | 
| 
      
 65 
     | 
    
         
            +
                        node.loc.selector
         
     | 
| 
      
 66 
     | 
    
         
            +
                      end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
       53 
69 
     | 
    
         
             
                    def innermost_braces_node(node)
         
     | 
| 
       54 
70 
     | 
    
         
             
                      node = node.receiver while node.receiver.send_type? && node.receiver.method?(:[])
         
     | 
| 
       55 
71 
     | 
    
         
             
                      node
         
     | 
| 
         @@ -195,6 +195,7 @@ module RuboCop 
     | 
|
| 
       195 
195 
     | 
    
         
             
                        end
         
     | 
| 
       196 
196 
     | 
    
         
             
                      end
         
     | 
| 
       197 
197 
     | 
    
         
             
                    end
         
     | 
| 
      
 198 
     | 
    
         
            +
                    alias on_csend on_send
         
     | 
| 
       198 
199 
     | 
    
         | 
| 
       199 
200 
     | 
    
         
             
                    def on_block(node)
         
     | 
| 
       200 
201 
     | 
    
         
             
                      return if ignored_node?(node)
         
     | 
| 
         @@ -348,7 +349,7 @@ module RuboCop 
     | 
|
| 
       348 
349 
     | 
    
         
             
                      case node.type
         
     | 
| 
       349 
350 
     | 
    
         
             
                      when :block, :numblock
         
     | 
| 
       350 
351 
     | 
    
         
             
                        yield node
         
     | 
| 
       351 
     | 
    
         
            -
                      when :send
         
     | 
| 
      
 352 
     | 
    
         
            +
                      when :send, :csend
         
     | 
| 
       352 
353 
     | 
    
         
             
                        # When a method has an argument which is another method with a block,
         
     | 
| 
       353 
354 
     | 
    
         
             
                        # that block needs braces, otherwise a syntax error will be introduced
         
     | 
| 
       354 
355 
     | 
    
         
             
                        # for subsequent arguments.
         
     | 
| 
         @@ -369,9 +370,8 @@ module RuboCop 
     | 
|
| 
       369 
370 
     | 
    
         
             
                    end
         
     | 
| 
       370 
371 
     | 
    
         
             
                    # rubocop:enable Metrics/CyclomaticComplexity
         
     | 
| 
       371 
372 
     | 
    
         | 
| 
       372 
     | 
    
         
            -
                    # rubocop:disable Metrics/CyclomaticComplexity
         
     | 
| 
       373 
373 
     | 
    
         
             
                    def proper_block_style?(node)
         
     | 
| 
       374 
     | 
    
         
            -
                      return true if  
     | 
| 
      
 374 
     | 
    
         
            +
                      return true if require_do_end?(node)
         
     | 
| 
       375 
375 
     | 
    
         
             
                      return special_method_proper_block_style?(node) if special_method?(node.method_name)
         
     | 
| 
       376 
376 
     | 
    
         | 
| 
       377 
377 
     | 
    
         
             
                      case style
         
     | 
| 
         @@ -381,15 +381,6 @@ module RuboCop 
     | 
|
| 
       381 
381 
     | 
    
         
             
                      when :always_braces       then braces_style?(node)
         
     | 
| 
       382 
382 
     | 
    
         
             
                      end
         
     | 
| 
       383 
383 
     | 
    
         
             
                    end
         
     | 
| 
       384 
     | 
    
         
            -
                    # rubocop:enable Metrics/CyclomaticComplexity
         
     | 
| 
       385 
     | 
    
         
            -
             
     | 
| 
       386 
     | 
    
         
            -
                    def require_braces?(node)
         
     | 
| 
       387 
     | 
    
         
            -
                      return false unless node.braces?
         
     | 
| 
       388 
     | 
    
         
            -
             
     | 
| 
       389 
     | 
    
         
            -
                      node.each_ancestor(:send).any? do |send|
         
     | 
| 
       390 
     | 
    
         
            -
                        send.arithmetic_operation? && node.source_range.end_pos < send.loc.selector.begin_pos
         
     | 
| 
       391 
     | 
    
         
            -
                      end
         
     | 
| 
       392 
     | 
    
         
            -
                    end
         
     | 
| 
       393 
384 
     | 
    
         | 
| 
       394 
385 
     | 
    
         
             
                    def require_do_end?(node)
         
     | 
| 
       395 
386 
     | 
    
         
             
                      return false if node.braces? || node.multiline?
         
     | 
| 
         @@ -483,18 +474,14 @@ module RuboCop 
     | 
|
| 
       483 
474 
     | 
    
         
             
                    end
         
     | 
| 
       484 
475 
     | 
    
         | 
| 
       485 
476 
     | 
    
         
             
                    def return_value_of_scope?(node)
         
     | 
| 
       486 
     | 
    
         
            -
                      return false unless node.parent
         
     | 
| 
       487 
     | 
    
         
            -
             
     | 
| 
       488 
     | 
    
         
            -
                      conditional?(node.parent) || array_or_range?(node.parent) ||
         
     | 
| 
       489 
     | 
    
         
            -
                        node.parent.children.last == node
         
     | 
| 
       490 
     | 
    
         
            -
                    end
         
     | 
| 
      
 477 
     | 
    
         
            +
                      return false unless (parent = node.parent)
         
     | 
| 
       491 
478 
     | 
    
         | 
| 
       492 
     | 
    
         
            -
             
     | 
| 
       493 
     | 
    
         
            -
             
     | 
| 
      
 479 
     | 
    
         
            +
                      parent.conditional? || parent.operator_keyword? || array_or_range?(parent) ||
         
     | 
| 
      
 480 
     | 
    
         
            +
                        parent.children.last == node
         
     | 
| 
       494 
481 
     | 
    
         
             
                    end
         
     | 
| 
       495 
482 
     | 
    
         | 
| 
       496 
483 
     | 
    
         
             
                    def array_or_range?(node)
         
     | 
| 
       497 
     | 
    
         
            -
                      node. 
     | 
| 
      
 484 
     | 
    
         
            +
                      node.type?(:array, :range)
         
     | 
| 
       498 
485 
     | 
    
         
             
                    end
         
     | 
| 
       499 
486 
     | 
    
         | 
| 
       500 
487 
     | 
    
         
             
                    def begin_required?(block_node)
         
     | 
| 
         @@ -126,9 +126,12 @@ module RuboCop 
     | 
|
| 
       126 
126 
     | 
    
         
             
                    end
         
     | 
| 
       127 
127 
     | 
    
         | 
| 
       128 
128 
     | 
    
         
             
                    def unindent(corrector, node)
         
     | 
| 
       129 
     | 
    
         
            -
                      return  
     | 
| 
      
 129 
     | 
    
         
            +
                      return unless node.body.children.last
         
     | 
| 
       130 
130 
     | 
    
         | 
| 
       131 
     | 
    
         
            -
                       
     | 
| 
      
 131 
     | 
    
         
            +
                      last_child_leading_spaces = leading_spaces(node.body.children.last)
         
     | 
| 
      
 132 
     | 
    
         
            +
                      return if leading_spaces(node).size == last_child_leading_spaces.size
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                      column_delta = configured_indentation_width - last_child_leading_spaces.size
         
     | 
| 
       132 
135 
     | 
    
         
             
                      return if column_delta.zero?
         
     | 
| 
       133 
136 
     | 
    
         | 
| 
       134 
137 
     | 
    
         
             
                      AlignmentCorrector.correct(corrector, processed_source, node, column_delta)
         
     | 
| 
         @@ -158,7 +161,7 @@ module RuboCop 
     | 
|
| 
       158 
161 
     | 
    
         | 
| 
       159 
162 
     | 
    
         
             
                    def check_compact_style(node, body)
         
     | 
| 
       160 
163 
     | 
    
         
             
                      parent = node.parent
         
     | 
| 
       161 
     | 
    
         
            -
                      return if parent&. 
     | 
| 
      
 164 
     | 
    
         
            +
                      return if parent&.type?(:class, :module)
         
     | 
| 
       162 
165 
     | 
    
         | 
| 
       163 
166 
     | 
    
         
             
                      return unless needs_compacting?(body)
         
     | 
| 
       164 
167 
     | 
    
         | 
| 
         @@ -49,7 +49,6 @@ module RuboCop 
     | 
|
| 
       49 
49 
     | 
    
         
             
                    def on_block(node)
         
     | 
| 
       50 
50 
     | 
    
         
             
                      check_method_node(node.send_node)
         
     | 
| 
       51 
51 
     | 
    
         
             
                    end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
52 
     | 
    
         
             
                    alias on_numblock on_block
         
     | 
| 
       54 
53 
     | 
    
         | 
| 
       55 
54 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
         @@ -57,6 +56,7 @@ module RuboCop 
     | 
|
| 
       57 
56 
     | 
    
         | 
| 
       58 
57 
     | 
    
         
             
                      check_method_node(node)
         
     | 
| 
       59 
58 
     | 
    
         
             
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
                    alias on_csend on_send
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                    private
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
         @@ -98,7 +98,7 @@ module RuboCop 
     | 
|
| 
       98 
98 
     | 
    
         
             
                    end
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
       100 
100 
     | 
    
         
             
                    def same_collection_looping_block?(node, sibling)
         
     | 
| 
       101 
     | 
    
         
            -
                      return false if sibling.nil? ||  
     | 
| 
      
 101 
     | 
    
         
            +
                      return false if sibling.nil? || !sibling.any_block_type?
         
     | 
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
                      sibling.method?(node.method_name) &&
         
     | 
| 
       104 
104 
     | 
    
         
             
                        sibling.receiver == node.receiver &&
         
     | 
| 
         @@ -118,7 +118,7 @@ module RuboCop 
     | 
|
| 
       118 
118 
     | 
    
         | 
| 
       119 
119 
     | 
    
         
             
                    def correct_end_of_block(corrector, node)
         
     | 
| 
       120 
120 
     | 
    
         
             
                      return unless node.left_sibling.respond_to?(:braces?)
         
     | 
| 
       121 
     | 
    
         
            -
                      return if node.right_sibling&. 
     | 
| 
      
 121 
     | 
    
         
            +
                      return if node.right_sibling&.any_block_type?
         
     | 
| 
       122 
122 
     | 
    
         | 
| 
       123 
123 
     | 
    
         
             
                      end_of_block = node.left_sibling.braces? ? '}' : ' end'
         
     | 
| 
       124 
124 
     | 
    
         
             
                      corrector.remove(node.loc.end)
         
     | 
| 
         @@ -57,7 +57,7 @@ module RuboCop 
     | 
|
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                    REGEXP = /(?<keyword>\S+).*#/.freeze
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                    SUBCLASS_DEFINITION = /\A\s*class\s 
     | 
| 
      
 60 
     | 
    
         
            +
                    SUBCLASS_DEFINITION = /\A\s*class\s+(\w|::)+\s*<\s*(\w|::)+/.freeze
         
     | 
| 
       61 
61 
     | 
    
         
             
                    METHOD_DEFINITION = /\A\s*def\s/.freeze
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
       63 
63 
     | 
    
         
             
                    def on_new_investigation
         
     | 
| 
         @@ -86,7 +86,7 @@ module RuboCop 
     | 
|
| 
       86 
86 
     | 
    
         | 
| 
       87 
87 
     | 
    
         
             
                    def percent_literals_includes_only_basic_literals?(node)
         
     | 
| 
       88 
88 
     | 
    
         
             
                      node.arguments.select(&:percent_literal?).all? do |arg|
         
     | 
| 
       89 
     | 
    
         
            -
                        arg.children.all? { |child| child. 
     | 
| 
      
 89 
     | 
    
         
            +
                        arg.children.all? { |child| child.type?(:str, :sym) }
         
     | 
| 
       90 
90 
     | 
    
         
             
                      end
         
     | 
| 
       91 
91 
     | 
    
         
             
                    end
         
     | 
| 
       92 
92 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -107,7 +107,7 @@ module RuboCop 
     | 
|
| 
       107 
107 
     | 
    
         
             
                      parent = node.parent
         
     | 
| 
       108 
108 
     | 
    
         
             
                      return true unless parent
         
     | 
| 
       109 
109 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
                      ! 
     | 
| 
      
 110 
     | 
    
         
            +
                      !parent.type?(:mlhs, :resbody)
         
     | 
| 
       111 
111 
     | 
    
         
             
                    end
         
     | 
| 
       112 
112 
     | 
    
         
             
                  end
         
     | 
| 
       113 
113 
     | 
    
         | 
| 
         @@ -309,7 +309,7 @@ module RuboCop 
     | 
|
| 
       309 
309 
     | 
    
         
             
                    end
         
     | 
| 
       310 
310 
     | 
    
         | 
| 
       311 
311 
     | 
    
         
             
                    def allowed_single_line?(branches)
         
     | 
| 
       312 
     | 
    
         
            -
                      single_line_conditions_only? && branches.any?(&:begin_type?)
         
     | 
| 
      
 312 
     | 
    
         
            +
                      single_line_conditions_only? && branches.compact.any?(&:begin_type?)
         
     | 
| 
       313 
313 
     | 
    
         
             
                    end
         
     | 
| 
       314 
314 
     | 
    
         | 
| 
       315 
315 
     | 
    
         
             
                    def assignment_node(node)
         
     | 
| 
         @@ -326,7 +326,7 @@ module RuboCop 
     | 
|
| 
       326 
326 
     | 
    
         
             
                    end
         
     | 
| 
       327 
327 
     | 
    
         | 
| 
       328 
328 
     | 
    
         
             
                    def move_assignment_outside_condition(corrector, node)
         
     | 
| 
       329 
     | 
    
         
            -
                      if node. 
     | 
| 
      
 329 
     | 
    
         
            +
                      if node.type?(:case, :case_match)
         
     | 
| 
       330 
330 
     | 
    
         
             
                        CaseCorrector.correct(corrector, self, node)
         
     | 
| 
       331 
331 
     | 
    
         
             
                      elsif node.ternary?
         
     | 
| 
       332 
332 
     | 
    
         
             
                        TernaryCorrector.correct(corrector, node)
         
     | 
| 
         @@ -340,7 +340,7 @@ module RuboCop 
     | 
|
| 
       340 
340 
     | 
    
         | 
| 
       341 
341 
     | 
    
         
             
                      if ternary_condition?(condition)
         
     | 
| 
       342 
342 
     | 
    
         
             
                        TernaryCorrector.move_assignment_inside_condition(corrector, node)
         
     | 
| 
       343 
     | 
    
         
            -
                      elsif condition. 
     | 
| 
      
 343 
     | 
    
         
            +
                      elsif condition.type?(:case, :case_match)
         
     | 
| 
       344 
344 
     | 
    
         
             
                        CaseCorrector.move_assignment_inside_condition(corrector, node)
         
     | 
| 
       345 
345 
     | 
    
         
             
                      elsif condition.if_type?
         
     | 
| 
       346 
346 
     | 
    
         
             
                        IfCorrector.move_assignment_inside_condition(corrector, node)
         
     | 
| 
         @@ -445,6 +445,8 @@ module RuboCop 
     | 
|
| 
       445 
445 
     | 
    
         
             
                      end
         
     | 
| 
       446 
446 
     | 
    
         | 
| 
       447 
447 
     | 
    
         
             
                      [condition.loc.else, condition.loc.end].each do |loc|
         
     | 
| 
      
 448 
     | 
    
         
            +
                        next unless loc
         
     | 
| 
      
 449 
     | 
    
         
            +
             
     | 
| 
       448 
450 
     | 
    
         
             
                        corrector.remove_preceding(loc, loc.column - column)
         
     | 
| 
       449 
451 
     | 
    
         
             
                      end
         
     | 
| 
       450 
452 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -186,7 +186,7 @@ module RuboCop 
     | 
|
| 
       186 
186 
     | 
    
         
             
                    def qualify_const(node)
         
     | 
| 
       187 
187 
     | 
    
         
             
                      return if node.nil?
         
     | 
| 
       188 
188 
     | 
    
         | 
| 
       189 
     | 
    
         
            -
                      if node. 
     | 
| 
      
 189 
     | 
    
         
            +
                      if node.type?(:cbase, :self, :call) || node.variable?
         
     | 
| 
       190 
190 
     | 
    
         
             
                        node.source
         
     | 
| 
       191 
191 
     | 
    
         
             
                      else
         
     | 
| 
       192 
192 
     | 
    
         
             
                        [qualify_const(node.namespace), node.short_name].compact
         
     | 
| 
         @@ -93,7 +93,7 @@ module RuboCop 
     | 
|
| 
       93 
93 
     | 
    
         | 
| 
       94 
94 
     | 
    
         
             
                      if conditional_node
         
     | 
| 
       95 
95 
     | 
    
         
             
                        double_negative_condition_return_value?(node, last_child, conditional_node)
         
     | 
| 
       96 
     | 
    
         
            -
                      elsif last_child. 
     | 
| 
      
 96 
     | 
    
         
            +
                      elsif last_child.type?(:pair, :hash) || last_child.parent.array_type?
         
     | 
| 
       97 
97 
     | 
    
         
             
                        false
         
     | 
| 
       98 
98 
     | 
    
         
             
                      else
         
     | 
| 
       99 
99 
     | 
    
         
             
                        last_child.last_line <= node.last_line
         
     | 
| 
         @@ -102,7 +102,7 @@ module RuboCop 
     | 
|
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
                    def find_def_node_from_ascendant(node)
         
     | 
| 
       104 
104 
     | 
    
         
             
                      return unless (parent = node.parent)
         
     | 
| 
       105 
     | 
    
         
            -
                      return parent if parent. 
     | 
| 
      
 105 
     | 
    
         
            +
                      return parent if parent.type?(:def, :defs)
         
     | 
| 
       106 
106 
     | 
    
         
             
                      return node.parent.child_nodes.first if define_method?(parent)
         
     | 
| 
       107 
107 
     | 
    
         | 
| 
       108 
108 
     | 
    
         
             
                      find_def_node_from_ascendant(node.parent)
         
     | 
| 
         @@ -147,7 +147,7 @@ module RuboCop 
     | 
|
| 
       147 
147 
     | 
    
         
             
                    def find_parent_not_enumerable(node)
         
     | 
| 
       148 
148 
     | 
    
         
             
                      return unless (parent = node.parent)
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
                      if parent. 
     | 
| 
      
 150 
     | 
    
         
            +
                      if parent.type?(:pair, :hash, :array)
         
     | 
| 
       151 
151 
     | 
    
         
             
                        find_parent_not_enumerable(parent)
         
     | 
| 
       152 
152 
     | 
    
         
             
                      else
         
     | 
| 
       153 
153 
     | 
    
         
             
                        parent
         
     | 
| 
         @@ -4,7 +4,7 @@ module RuboCop 
     | 
|
| 
       4 
4 
     | 
    
         
             
              module Cop
         
     | 
| 
       5 
5 
     | 
    
         
             
                module Style
         
     | 
| 
       6 
6 
     | 
    
         
             
                  # Checks for loops which iterate a constant number of times,
         
     | 
| 
       7 
     | 
    
         
            -
                  # using a Range literal and `#each`. This can be done more readably using
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # using a `Range` literal and `#each`. This can be done more readably using
         
     | 
| 
       8 
8 
     | 
    
         
             
                  # `Integer#times`.
         
     | 
| 
       9 
9 
     | 
    
         
             
                  #
         
     | 
| 
       10 
10 
     | 
    
         
             
                  # This check only applies if the block takes no parameters.
         
     | 
| 
         @@ -53,8 +53,7 @@ module RuboCop 
     | 
|
| 
       53 
53 
     | 
    
         
             
                      (block
         
     | 
| 
       54 
54 
     | 
    
         
             
                        (call
         
     | 
| 
       55 
55 
     | 
    
         
             
                          (begin
         
     | 
| 
       56 
     | 
    
         
            -
                            ($ 
     | 
| 
       57 
     | 
    
         
            -
                              (int $_) (int $_)))
         
     | 
| 
      
 56 
     | 
    
         
            +
                            ($range (int $_) (int $_)))
         
     | 
| 
       58 
57 
     | 
    
         
             
                          :each)
         
     | 
| 
       59 
58 
     | 
    
         
             
                        (args ...)
         
     | 
| 
       60 
59 
     | 
    
         
             
                        ...)
         
     | 
| 
         @@ -65,8 +64,7 @@ module RuboCop 
     | 
|
| 
       65 
64 
     | 
    
         
             
                      (block
         
     | 
| 
       66 
65 
     | 
    
         
             
                        (call
         
     | 
| 
       67 
66 
     | 
    
         
             
                          (begin
         
     | 
| 
       68 
     | 
    
         
            -
                            ( 
     | 
| 
       69 
     | 
    
         
            -
                              (int 0) (int _)))
         
     | 
| 
      
 67 
     | 
    
         
            +
                            (range (int 0) (int _)))
         
     | 
| 
       70 
68 
     | 
    
         
             
                          :each)
         
     | 
| 
       71 
69 
     | 
    
         
             
                        (args ...)
         
     | 
| 
       72 
70 
     | 
    
         
             
                        ...)
         
     | 
| 
         @@ -77,8 +75,7 @@ module RuboCop 
     | 
|
| 
       77 
75 
     | 
    
         
             
                      (block
         
     | 
| 
       78 
76 
     | 
    
         
             
                        (call
         
     | 
| 
       79 
77 
     | 
    
         
             
                          (begin
         
     | 
| 
       80 
     | 
    
         
            -
                            ( 
     | 
| 
       81 
     | 
    
         
            -
                              (int _) (int _)))
         
     | 
| 
      
 78 
     | 
    
         
            +
                            (range (int _) (int _)))
         
     | 
| 
       82 
79 
     | 
    
         
             
                          :each)
         
     | 
| 
       83 
80 
     | 
    
         
             
                        (args)
         
     | 
| 
       84 
81 
     | 
    
         
             
                        ...)
         
     | 
| 
         @@ -58,7 +58,7 @@ module RuboCop 
     | 
|
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
                    # @!method each_with_object_block_candidate?(node)
         
     | 
| 
       60 
60 
     | 
    
         
             
                    def_node_matcher :each_with_object_block_candidate?, <<~PATTERN
         
     | 
| 
       61 
     | 
    
         
            -
                      (block $(call _ {:inject :reduce} _) $_ $_)
         
     | 
| 
      
 61 
     | 
    
         
            +
                      (block $(call _ {:inject :reduce} _) $(args _ _) $_)
         
     | 
| 
       62 
62 
     | 
    
         
             
                    PATTERN
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
                    # @!method each_with_object_numblock_candidate?(node)
         
     | 
| 
         @@ -71,8 +71,7 @@ module RuboCop 
     | 
|
| 
       71 
71 
     | 
    
         | 
| 
       72 
72 
     | 
    
         
             
                      first_arg, second_arg = *node.arguments
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                      corrector. 
     | 
| 
       75 
     | 
    
         
            -
                      corrector.replace(second_arg, first_arg.source)
         
     | 
| 
      
 74 
     | 
    
         
            +
                      corrector.swap(first_arg, second_arg)
         
     | 
| 
       76 
75 
     | 
    
         | 
| 
       77 
76 
     | 
    
         
             
                      if return_value_occupies_whole_line?(return_value)
         
     | 
| 
       78 
77 
     | 
    
         
             
                        corrector.remove(whole_line_expression(return_value))
         
     | 
| 
         @@ -131,6 +131,8 @@ module RuboCop 
     | 
|
| 
       131 
131 
     | 
    
         
             
                    extend AutoCorrector
         
     | 
| 
       132 
132 
     | 
    
         | 
| 
       133 
133 
     | 
    
         
             
                    MSG = 'Redundant `else`-clause.'
         
     | 
| 
      
 134 
     | 
    
         
            +
                    NIL_STYLES = %i[nil both].freeze
         
     | 
| 
      
 135 
     | 
    
         
            +
                    EMPTY_STYLES = %i[empty both].freeze
         
     | 
| 
       134 
136 
     | 
    
         | 
| 
       135 
137 
     | 
    
         
             
                    def on_normal_if_unless(node)
         
     | 
| 
       136 
138 
     | 
    
         
             
                      check(node)
         
     | 
| 
         @@ -150,11 +152,11 @@ module RuboCop 
     | 
|
| 
       150 
152 
     | 
    
         
             
                    end
         
     | 
| 
       151 
153 
     | 
    
         | 
| 
       152 
154 
     | 
    
         
             
                    def nil_style?
         
     | 
| 
       153 
     | 
    
         
            -
                      style 
     | 
| 
      
 155 
     | 
    
         
            +
                      NIL_STYLES.include?(style)
         
     | 
| 
       154 
156 
     | 
    
         
             
                    end
         
     | 
| 
       155 
157 
     | 
    
         | 
| 
       156 
158 
     | 
    
         
             
                    def empty_style?
         
     | 
| 
       157 
     | 
    
         
            -
                      style 
     | 
| 
      
 159 
     | 
    
         
            +
                      EMPTY_STYLES.include?(style)
         
     | 
| 
       158 
160 
     | 
    
         
             
                    end
         
     | 
| 
       159 
161 
     | 
    
         | 
| 
       160 
162 
     | 
    
         
             
                    def empty_check(node)
         
     | 
| 
         @@ -136,7 +136,7 @@ module RuboCop 
     | 
|
| 
       136 
136 
     | 
    
         
             
                    def frozen_strings?
         
     | 
| 
       137 
137 
     | 
    
         
             
                      return true if frozen_string_literals_enabled?
         
     | 
| 
       138 
138 
     | 
    
         | 
| 
       139 
     | 
    
         
            -
                      frozen_string_cop_enabled = config. 
     | 
| 
      
 139 
     | 
    
         
            +
                      frozen_string_cop_enabled = config.cop_enabled?('Style/FrozenStringLiteralComment')
         
     | 
| 
       140 
140 
     | 
    
         
             
                      frozen_string_cop_enabled &&
         
     | 
| 
       141 
141 
     | 
    
         
             
                        !frozen_string_literals_disabled? &&
         
     | 
| 
       142 
142 
     | 
    
         
             
                        string_literals_frozen_by_default?.nil?
         
     |