rubocop 1.67.0 → 1.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +1 -1
 - data/config/default.yml +81 -6
 - data/lib/rubocop/cached_data.rb +12 -4
 - data/lib/rubocop/cli/command/execute_runner.rb +1 -1
 - data/lib/rubocop/cli/command/version.rb +2 -2
 - data/lib/rubocop/cop/autocorrect_logic.rb +22 -2
 - data/lib/rubocop/cop/base.rb +1 -1
 - data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
 - data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
 - data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -12
 - data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -1
 - data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
 - data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
 - data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
 - data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +2 -4
 - data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
 - data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +46 -0
 - data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
 - data/lib/rubocop/cop/internal_affairs.rb +1 -0
 - data/lib/rubocop/cop/layout/argument_alignment.rb +1 -2
 - data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
 - data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
 - data/lib/rubocop/cop/layout/block_alignment.rb +1 -2
 - data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
 - data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -3
 - data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -4
 - data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +3 -1
 - data/lib/rubocop/cop/layout/indentation_width.rb +7 -7
 - data/lib/rubocop/cop/layout/leading_comment_space.rb +44 -1
 - data/lib/rubocop/cop/layout/line_length.rb +118 -4
 - data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
 - data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
 - data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +2 -3
 - data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
 - data/lib/rubocop/cop/layout/redundant_line_break.rb +3 -35
 - data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -2
 - data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
 - data/lib/rubocop/cop/layout/space_around_operators.rb +16 -17
 - data/lib/rubocop/cop/layout/space_before_brackets.rb +5 -5
 - data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +6 -0
 - data/lib/rubocop/cop/layout/space_inside_block_braces.rb +4 -0
 - data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +4 -0
 - data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
 - data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -12
 - data/lib/rubocop/cop/lint/circular_argument_reference.rb +2 -0
 - data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +1 -1
 - data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
 - data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
 - data/lib/rubocop/cop/lint/empty_file.rb +0 -2
 - data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
 - data/lib/rubocop/cop/lint/float_comparison.rb +14 -6
 - data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -3
 - data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
 - data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
 - data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
 - data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
 - data/lib/rubocop/cop/lint/mixed_case_range.rb +2 -5
 - data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
 - data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -2
 - data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +8 -1
 - data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
 - data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
 - data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +106 -0
 - data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -2
 - data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -1
 - data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
 - data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +12 -7
 - data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
 - data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
 - data/lib/rubocop/cop/lint/rescue_type.rb +3 -7
 - data/lib/rubocop/cop/lint/safe_navigation_chain.rb +9 -0
 - data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +5 -1
 - data/lib/rubocop/cop/lint/self_assignment.rb +8 -10
 - data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
 - data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
 - data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
 - data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
 - data/lib/rubocop/cop/lint/useless_rescue.rb +1 -1
 - data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
 - data/lib/rubocop/cop/lint/void.rb +3 -2
 - data/lib/rubocop/cop/metrics/class_length.rb +7 -7
 - data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -1
 - data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
 - data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -2
 - data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
 - data/lib/rubocop/cop/mixin/check_line_breakable.rb +10 -0
 - data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
 - data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
 - data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
 - data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -1
 - data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +5 -9
 - data/lib/rubocop/cop/mixin/range_help.rb +0 -1
 - data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
 - data/lib/rubocop/cop/naming/block_forwarding.rb +1 -1
 - data/lib/rubocop/cop/naming/constant_name.rb +6 -7
 - data/lib/rubocop/cop/naming/file_name.rb +0 -2
 - data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +11 -12
 - data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +3 -11
 - data/lib/rubocop/cop/naming/variable_name.rb +3 -4
 - data/lib/rubocop/cop/naming/variable_number.rb +2 -3
 - data/lib/rubocop/cop/offense.rb +2 -3
 - data/lib/rubocop/cop/style/access_modifier_declarations.rb +53 -24
 - data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
 - data/lib/rubocop/cop/style/array_intersect.rb +5 -4
 - data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
 - data/lib/rubocop/cop/style/block_delimiters.rb +18 -3
 - data/lib/rubocop/cop/style/case_like_if.rb +8 -11
 - data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
 - data/lib/rubocop/cop/style/commented_keyword.rb +11 -1
 - data/lib/rubocop/cop/style/conditional_assignment.rb +19 -21
 - data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
 - data/lib/rubocop/cop/style/dig_chain.rb +90 -0
 - data/lib/rubocop/cop/style/endless_method.rb +1 -14
 - data/lib/rubocop/cop/style/file_null.rb +73 -0
 - data/lib/rubocop/cop/style/file_touch.rb +75 -0
 - data/lib/rubocop/cop/style/for.rb +0 -1
 - data/lib/rubocop/cop/style/global_vars.rb +1 -3
 - data/lib/rubocop/cop/style/guard_clause.rb +15 -2
 - data/lib/rubocop/cop/style/hash_conversion.rb +1 -2
 - data/lib/rubocop/cop/style/if_inside_else.rb +0 -1
 - data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +1 -2
 - data/lib/rubocop/cop/style/if_with_semicolon.rb +14 -5
 - data/lib/rubocop/cop/style/inverse_methods.rb +0 -1
 - data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
 - data/lib/rubocop/cop/style/lambda_call.rb +0 -1
 - data/lib/rubocop/cop/style/map_into_array.rb +6 -1
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +1 -1
 - data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +7 -11
 - data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
 - data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
 - data/lib/rubocop/cop/style/multiple_comparison.rb +28 -39
 - data/lib/rubocop/cop/style/mutable_constant.rb +4 -5
 - data/lib/rubocop/cop/style/negated_if_else_condition.rb +6 -4
 - data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
 - data/lib/rubocop/cop/style/not.rb +1 -1
 - data/lib/rubocop/cop/style/one_line_conditional.rb +25 -4
 - data/lib/rubocop/cop/style/operator_method_call.rb +5 -6
 - data/lib/rubocop/cop/style/or_assignment.rb +3 -6
 - data/lib/rubocop/cop/style/parallel_assignment.rb +8 -13
 - data/lib/rubocop/cop/style/raise_args.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_condition.rb +36 -21
 - data/lib/rubocop/cop/style/redundant_line_continuation.rb +21 -2
 - data/lib/rubocop/cop/style/redundant_parentheses.rb +9 -11
 - data/lib/rubocop/cop/style/redundant_regexp_argument.rb +1 -0
 - data/lib/rubocop/cop/style/redundant_return.rb +2 -2
 - data/lib/rubocop/cop/style/redundant_self.rb +7 -14
 - data/lib/rubocop/cop/style/redundant_self_assignment.rb +7 -5
 - data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
 - data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
 - data/lib/rubocop/cop/style/rescue_modifier.rb +2 -3
 - data/lib/rubocop/cop/style/safe_navigation.rb +13 -1
 - data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
 - data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
 - data/lib/rubocop/cop/style/self_assignment.rb +11 -17
 - data/lib/rubocop/cop/style/signal_exception.rb +2 -3
 - data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
 - data/lib/rubocop/cop/style/single_line_do_end_block.rb +13 -3
 - data/lib/rubocop/cop/style/sole_nested_conditional.rb +2 -3
 - data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
 - data/lib/rubocop/cop/style/string_concatenation.rb +0 -1
 - data/lib/rubocop/cop/style/swap_values.rb +4 -15
 - data/lib/rubocop/cop/style/ternary_parentheses.rb +25 -4
 - data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
 - data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
 - data/lib/rubocop/cop/variable_force/assignment.rb +18 -3
 - data/lib/rubocop/cop/variable_force/branch.rb +1 -1
 - data/lib/rubocop/cop/variable_force/variable.rb +5 -1
 - data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
 - data/lib/rubocop/cop/variable_force.rb +4 -10
 - data/lib/rubocop/cops_documentation_generator.rb +20 -10
 - data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
 - data/lib/rubocop/runner.rb +16 -8
 - data/lib/rubocop/target_ruby.rb +1 -1
 - data/lib/rubocop/version.rb +27 -8
 - data/lib/rubocop.rb +16 -0
 - metadata +28 -12
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 97d8db05a66f5153d186df8720a9ea65237569f976c572053b4830925df4a825
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: a2864b5abc210251dc57f5ff1180043fd99069a3151cec6ab43824f9d4a40758
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 7ab8930edd85daa8e4eddbbedd1e6baa129875798644bcbb3b5e8d8359278d5f58fdc4f372d671654b21d7088606bab5202ef4c5fe34e38ad09e6590f5825339
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 336decf7113d831b30a5ca8c8c71d324827853fb8f7102c646a1420957f8d3022f56d2f02c9e21791b280a9659138d0fe041202fff66cb33de9ea3d08548a876
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -52,7 +52,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi 
     | 
|
| 
       52 
52 
     | 
    
         
             
            in your `Gemfile`:
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
            ```rb
         
     | 
| 
       55 
     | 
    
         
            -
            gem 'rubocop', '~> 1. 
     | 
| 
      
 55 
     | 
    
         
            +
            gem 'rubocop', '~> 1.69', require: false
         
     | 
| 
       56 
56 
     | 
    
         
             
            ```
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
         
     | 
    
        data/config/default.yml
    CHANGED
    
    | 
         @@ -1038,6 +1038,7 @@ Layout/LeadingCommentSpace: 
     | 
|
| 
       1038 
1038 
     | 
    
         
             
              AllowDoxygenCommentStyle: false
         
     | 
| 
       1039 
1039 
     | 
    
         
             
              AllowGemfileRubyComment: false
         
     | 
| 
       1040 
1040 
     | 
    
         
             
              AllowRBSInlineAnnotation: false
         
     | 
| 
      
 1041 
     | 
    
         
            +
              AllowSteepAnnotation: false
         
     | 
| 
       1041 
1042 
     | 
    
         | 
| 
       1042 
1043 
     | 
    
         
             
            Layout/LeadingEmptyLines:
         
     | 
| 
       1043 
1044 
     | 
    
         
             
              Description: Check for unnecessary blank lines at the beginning of a file.
         
     | 
| 
         @@ -1085,11 +1086,11 @@ Layout/LineLength: 
     | 
|
| 
       1085 
1086 
     | 
    
         
             
              StyleGuide: '#max-line-length'
         
     | 
| 
       1086 
1087 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       1087 
1088 
     | 
    
         
             
              VersionAdded: '0.25'
         
     | 
| 
       1088 
     | 
    
         
            -
              VersionChanged: '1. 
     | 
| 
      
 1089 
     | 
    
         
            +
              VersionChanged: '1.69'
         
     | 
| 
       1089 
1090 
     | 
    
         
             
              Max: 120
         
     | 
| 
      
 1091 
     | 
    
         
            +
              AllowHeredoc: true
         
     | 
| 
       1090 
1092 
     | 
    
         
             
              # To make it possible to copy or click on URIs in the code, we allow lines
         
     | 
| 
       1091 
1093 
     | 
    
         
             
              # containing a URI to be longer than Max.
         
     | 
| 
       1092 
     | 
    
         
            -
              AllowHeredoc: true
         
     | 
| 
       1093 
1094 
     | 
    
         
             
              AllowURI: true
         
     | 
| 
       1094 
1095 
     | 
    
         
             
              URISchemes:
         
     | 
| 
       1095 
1096 
     | 
    
         
             
                - http
         
     | 
| 
         @@ -1101,6 +1102,8 @@ Layout/LineLength: 
     | 
|
| 
       1101 
1102 
     | 
    
         
             
              # elements. Strings will be converted to Regexp objects. A line that matches
         
     | 
| 
       1102 
1103 
     | 
    
         
             
              # any regular expression listed in this option will be ignored by LineLength.
         
     | 
| 
       1103 
1104 
     | 
    
         
             
              AllowedPatterns: []
         
     | 
| 
      
 1105 
     | 
    
         
            +
              # If SplitStrings is true, long strings will be split using continuations
         
     | 
| 
      
 1106 
     | 
    
         
            +
              SplitStrings: false
         
     | 
| 
       1104 
1107 
     | 
    
         | 
| 
       1105 
1108 
     | 
    
         
             
            Layout/MultilineArrayBraceLayout:
         
     | 
| 
       1106 
1109 
     | 
    
         
             
              Description: >-
         
     | 
| 
         @@ -1498,7 +1501,6 @@ Layout/SpaceInsideHashLiteralBraces: 
     | 
|
| 
       1498 
1501 
     | 
    
         
             
                - space
         
     | 
| 
       1499 
1502 
     | 
    
         
             
                - no_space
         
     | 
| 
       1500 
1503 
     | 
    
         | 
| 
       1501 
     | 
    
         
            -
             
     | 
| 
       1502 
1504 
     | 
    
         
             
            Layout/SpaceInsideParens:
         
     | 
| 
       1503 
1505 
     | 
    
         
             
              Description: 'No spaces after ( or before ).'
         
     | 
| 
       1504 
1506 
     | 
    
         
             
              StyleGuide: '#spaces-braces'
         
     | 
| 
         @@ -1633,7 +1635,7 @@ Lint/BinaryOperatorWithIdenticalOperands: 
     | 
|
| 
       1633 
1635 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       1634 
1636 
     | 
    
         
             
              Safe: false
         
     | 
| 
       1635 
1637 
     | 
    
         
             
              VersionAdded: '0.89'
         
     | 
| 
       1636 
     | 
    
         
            -
              VersionChanged: '1. 
     | 
| 
      
 1638 
     | 
    
         
            +
              VersionChanged: '1.69'
         
     | 
| 
       1637 
1639 
     | 
    
         | 
| 
       1638 
1640 
     | 
    
         
             
            Lint/BooleanSymbol:
         
     | 
| 
       1639 
1641 
     | 
    
         
             
              Description: 'Check for `:true` and `:false` symbols.'
         
     | 
| 
         @@ -1785,6 +1787,7 @@ Lint/DuplicateBranch: 
     | 
|
| 
       1785 
1787 
     | 
    
         
             
              VersionChanged: '1.7'
         
     | 
| 
       1786 
1788 
     | 
    
         
             
              IgnoreLiteralBranches: false
         
     | 
| 
       1787 
1789 
     | 
    
         
             
              IgnoreConstantBranches: false
         
     | 
| 
      
 1790 
     | 
    
         
            +
              IgnoreDuplicateElseBranch: false
         
     | 
| 
       1788 
1791 
     | 
    
         | 
| 
       1789 
1792 
     | 
    
         
             
            Lint/DuplicateCaseCondition:
         
     | 
| 
       1790 
1793 
     | 
    
         
             
              Description: 'Do not repeat values in case conditionals.'
         
     | 
| 
         @@ -1954,6 +1957,11 @@ Lint/HashCompareByIdentity: 
     | 
|
| 
       1954 
1957 
     | 
    
         
             
              Safe: false
         
     | 
| 
       1955 
1958 
     | 
    
         
             
              VersionAdded: '0.93'
         
     | 
| 
       1956 
1959 
     | 
    
         | 
| 
      
 1960 
     | 
    
         
            +
            Lint/HashNewWithKeywordArgumentsAsDefault:
         
     | 
| 
      
 1961 
     | 
    
         
            +
              Description: 'Checks for the deprecated use of keyword arguments for hash default in `Hash.new`.'
         
     | 
| 
      
 1962 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 1963 
     | 
    
         
            +
              VersionAdded: '1.69'
         
     | 
| 
      
 1964 
     | 
    
         
            +
             
     | 
| 
       1957 
1965 
     | 
    
         
             
            Lint/HeredocMethodCallPosition:
         
     | 
| 
       1958 
1966 
     | 
    
         
             
              Description: >-
         
     | 
| 
       1959 
1967 
     | 
    
         
             
                             Checks for the ordering of a method call where
         
     | 
| 
         @@ -2144,6 +2152,11 @@ Lint/NumberedParameterAssignment: 
     | 
|
| 
       2144 
2152 
     | 
    
         
             
              Enabled: pending
         
     | 
| 
       2145 
2153 
     | 
    
         
             
              VersionAdded: '1.9'
         
     | 
| 
       2146 
2154 
     | 
    
         | 
| 
      
 2155 
     | 
    
         
            +
            Lint/NumericOperationWithConstantResult:
         
     | 
| 
      
 2156 
     | 
    
         
            +
              Description: 'Checks for numeric operations with constant results.'
         
     | 
| 
      
 2157 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 2158 
     | 
    
         
            +
              VersionAdded: '1.69'
         
     | 
| 
      
 2159 
     | 
    
         
            +
             
     | 
| 
       2147 
2160 
     | 
    
         
             
            Lint/OrAssignmentToConstant:
         
     | 
| 
       2148 
2161 
     | 
    
         
             
              Description: 'Checks unintended or-assignment to constant.'
         
     | 
| 
       2149 
2162 
     | 
    
         
             
              Enabled: pending
         
     | 
| 
         @@ -2375,7 +2388,6 @@ Lint/ShadowedArgument: 
     | 
|
| 
       2375 
2388 
     | 
    
         
             
              VersionAdded: '0.52'
         
     | 
| 
       2376 
2389 
     | 
    
         
             
              IgnoreImplicitReferences: false
         
     | 
| 
       2377 
2390 
     | 
    
         | 
| 
       2378 
     | 
    
         
            -
             
     | 
| 
       2379 
2391 
     | 
    
         
             
            Lint/ShadowedException:
         
     | 
| 
       2380 
2392 
     | 
    
         
             
              Description: >-
         
     | 
| 
       2381 
2393 
     | 
    
         
             
                              Avoid rescuing a higher level exception
         
     | 
| 
         @@ -2455,6 +2467,11 @@ Lint/UnderscorePrefixedVariableName: 
     | 
|
| 
       2455 
2467 
     | 
    
         
             
              VersionAdded: '0.21'
         
     | 
| 
       2456 
2468 
     | 
    
         
             
              AllowKeywordBlockArguments: false
         
     | 
| 
       2457 
2469 
     | 
    
         | 
| 
      
 2470 
     | 
    
         
            +
            Lint/UnescapedBracketInRegexp:
         
     | 
| 
      
 2471 
     | 
    
         
            +
              Description: 'Checks for unescaped literal `]` in Regexp.'
         
     | 
| 
      
 2472 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 2473 
     | 
    
         
            +
              VersionAdded: '1.68'
         
     | 
| 
      
 2474 
     | 
    
         
            +
             
     | 
| 
       2458 
2475 
     | 
    
         
             
            Lint/UnexpectedBlockArity:
         
     | 
| 
       2459 
2476 
     | 
    
         
             
              Description: 'Looks for blocks that have fewer arguments that the calling method expects.'
         
     | 
| 
       2460 
2477 
     | 
    
         
             
              Enabled: pending
         
     | 
| 
         @@ -2514,10 +2531,12 @@ Lint/UnusedMethodArgument: 
     | 
|
| 
       2514 
2531 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       2515 
2532 
     | 
    
         
             
              AutoCorrect: contextual
         
     | 
| 
       2516 
2533 
     | 
    
         
             
              VersionAdded: '0.21'
         
     | 
| 
       2517 
     | 
    
         
            -
              VersionChanged: '1. 
     | 
| 
      
 2534 
     | 
    
         
            +
              VersionChanged: '1.69'
         
     | 
| 
       2518 
2535 
     | 
    
         
             
              AllowUnusedKeywordArguments: false
         
     | 
| 
       2519 
2536 
     | 
    
         
             
              IgnoreEmptyMethods: true
         
     | 
| 
       2520 
2537 
     | 
    
         
             
              IgnoreNotImplementedMethods: true
         
     | 
| 
      
 2538 
     | 
    
         
            +
              NotImplementedExceptions:
         
     | 
| 
      
 2539 
     | 
    
         
            +
                - NotImplementedError
         
     | 
| 
       2521 
2540 
     | 
    
         | 
| 
       2522 
2541 
     | 
    
         
             
            Lint/UriEscapeUnescape:
         
     | 
| 
       2523 
2542 
     | 
    
         
             
              Description: >-
         
     | 
| 
         @@ -2552,6 +2571,11 @@ Lint/UselessAssignment: 
     | 
|
| 
       2552 
2571 
     | 
    
         
             
              VersionAdded: '0.11'
         
     | 
| 
       2553 
2572 
     | 
    
         
             
              VersionChanged: '1.66'
         
     | 
| 
       2554 
2573 
     | 
    
         | 
| 
      
 2574 
     | 
    
         
            +
            Lint/UselessDefined:
         
     | 
| 
      
 2575 
     | 
    
         
            +
              Description: 'Checks for calls to `defined?` with strings and symbols. The result of such a call will always be truthy.'
         
     | 
| 
      
 2576 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 2577 
     | 
    
         
            +
              VersionAdded: '1.69'
         
     | 
| 
      
 2578 
     | 
    
         
            +
             
     | 
| 
       2555 
2579 
     | 
    
         
             
            Lint/UselessElseWithoutRescue:
         
     | 
| 
       2556 
2580 
     | 
    
         
             
              Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
         
     | 
| 
       2557 
2581 
     | 
    
         
             
              Enabled: true
         
     | 
| 
         @@ -3143,6 +3167,12 @@ Style/Alias: 
     | 
|
| 
       3143 
3167 
     | 
    
         
             
                - prefer_alias
         
     | 
| 
       3144 
3168 
     | 
    
         
             
                - prefer_alias_method
         
     | 
| 
       3145 
3169 
     | 
    
         | 
| 
      
 3170 
     | 
    
         
            +
            Style/AmbiguousEndlessMethodDefinition:
         
     | 
| 
      
 3171 
     | 
    
         
            +
              Description: 'Checks for endless methods inside operators of lower precedence.'
         
     | 
| 
      
 3172 
     | 
    
         
            +
              StyleGuide: '#ambiguous-endless-method-defintions'
         
     | 
| 
      
 3173 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 3174 
     | 
    
         
            +
              VersionAdded: '1.68'
         
     | 
| 
      
 3175 
     | 
    
         
            +
             
     | 
| 
       3146 
3176 
     | 
    
         
             
            Style/AndOr:
         
     | 
| 
       3147 
3177 
     | 
    
         
             
              Description: 'Use &&/|| instead of and/or.'
         
     | 
| 
       3148 
3178 
     | 
    
         
             
              StyleGuide: '#no-and-or-or'
         
     | 
| 
         @@ -3250,6 +3280,13 @@ Style/BisectedAttrAccessor: 
     | 
|
| 
       3250 
3280 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       3251 
3281 
     | 
    
         
             
              VersionAdded: '0.87'
         
     | 
| 
       3252 
3282 
     | 
    
         | 
| 
      
 3283 
     | 
    
         
            +
            Style/BitwisePredicate:
         
     | 
| 
      
 3284 
     | 
    
         
            +
              Description: 'Prefer bitwise predicate methods over direct comparison operations.'
         
     | 
| 
      
 3285 
     | 
    
         
            +
              StyleGuide: '#bitwise-predicate-methods'
         
     | 
| 
      
 3286 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 3287 
     | 
    
         
            +
              Safe: false
         
     | 
| 
      
 3288 
     | 
    
         
            +
              VersionAdded: '1.68'
         
     | 
| 
      
 3289 
     | 
    
         
            +
             
     | 
| 
       3253 
3290 
     | 
    
         
             
            Style/BlockComments:
         
     | 
| 
       3254 
3291 
     | 
    
         
             
              Description: 'Do not use block comments.'
         
     | 
| 
       3255 
3292 
     | 
    
         
             
              StyleGuide: '#no-block-comments'
         
     | 
| 
         @@ -3533,6 +3570,11 @@ Style/ColonMethodDefinition: 
     | 
|
| 
       3533 
3570 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       3534 
3571 
     | 
    
         
             
              VersionAdded: '0.52'
         
     | 
| 
       3535 
3572 
     | 
    
         | 
| 
      
 3573 
     | 
    
         
            +
            Style/CombinableDefined:
         
     | 
| 
      
 3574 
     | 
    
         
            +
              Description: 'Checks successive `defined?` calls that can be combined into a single call.'
         
     | 
| 
      
 3575 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 3576 
     | 
    
         
            +
              VersionAdded: '1.68'
         
     | 
| 
      
 3577 
     | 
    
         
            +
             
     | 
| 
       3536 
3578 
     | 
    
         
             
            Style/CombinableLoops:
         
     | 
| 
       3537 
3579 
     | 
    
         
             
              Description: >-
         
     | 
| 
       3538 
3580 
     | 
    
         
             
                              Checks for places where multiple consecutive loops over the same data
         
     | 
| 
         @@ -3673,6 +3715,12 @@ Style/DefWithParentheses: 
     | 
|
| 
       3673 
3715 
     | 
    
         
             
              VersionAdded: '0.9'
         
     | 
| 
       3674 
3716 
     | 
    
         
             
              VersionChanged: '0.12'
         
     | 
| 
       3675 
3717 
     | 
    
         | 
| 
      
 3718 
     | 
    
         
            +
            Style/DigChain:
         
     | 
| 
      
 3719 
     | 
    
         
            +
              Description: 'Use `dig` with multiple parameters instead of chaining multiple calls.'
         
     | 
| 
      
 3720 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 3721 
     | 
    
         
            +
              Safe: false
         
     | 
| 
      
 3722 
     | 
    
         
            +
              VersionAdded: '1.69'
         
     | 
| 
      
 3723 
     | 
    
         
            +
             
     | 
| 
       3676 
3724 
     | 
    
         
             
            Style/Dir:
         
     | 
| 
       3677 
3725 
     | 
    
         
             
              Description: >-
         
     | 
| 
       3678 
3726 
     | 
    
         
             
                             Use the `__dir__` method to retrieve the canonicalized
         
     | 
| 
         @@ -3899,12 +3947,24 @@ Style/FileEmpty: 
     | 
|
| 
       3899 
3947 
     | 
    
         
             
              Safe: false
         
     | 
| 
       3900 
3948 
     | 
    
         
             
              VersionAdded: '1.48'
         
     | 
| 
       3901 
3949 
     | 
    
         | 
| 
      
 3950 
     | 
    
         
            +
            Style/FileNull:
         
     | 
| 
      
 3951 
     | 
    
         
            +
              Description: 'Use `File::NULL` instead of hardcoding "dev/null".'
         
     | 
| 
      
 3952 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 3953 
     | 
    
         
            +
              SafeAutoCorrect: false
         
     | 
| 
      
 3954 
     | 
    
         
            +
              VersionAdded: '1.69'
         
     | 
| 
      
 3955 
     | 
    
         
            +
             
     | 
| 
       3902 
3956 
     | 
    
         
             
            Style/FileRead:
         
     | 
| 
       3903 
3957 
     | 
    
         
             
              Description: 'Favor `File.(bin)read` convenience methods.'
         
     | 
| 
       3904 
3958 
     | 
    
         
             
              StyleGuide: '#file-read'
         
     | 
| 
       3905 
3959 
     | 
    
         
             
              Enabled: pending
         
     | 
| 
       3906 
3960 
     | 
    
         
             
              VersionAdded: '1.24'
         
     | 
| 
       3907 
3961 
     | 
    
         | 
| 
      
 3962 
     | 
    
         
            +
            Style/FileTouch:
         
     | 
| 
      
 3963 
     | 
    
         
            +
              Description: 'Favor `FileUtils.touch` for touching files.'
         
     | 
| 
      
 3964 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 3965 
     | 
    
         
            +
              VersionAdded: '1.69'
         
     | 
| 
      
 3966 
     | 
    
         
            +
              SafeAutoCorrect: false
         
     | 
| 
      
 3967 
     | 
    
         
            +
             
     | 
| 
       3908 
3968 
     | 
    
         
             
            Style/FileWrite:
         
     | 
| 
       3909 
3969 
     | 
    
         
             
              Description: 'Favor `File.(bin)write` convenience methods.'
         
     | 
| 
       3910 
3970 
     | 
    
         
             
              StyleGuide: '#file-write'
         
     | 
| 
         @@ -4256,6 +4316,14 @@ Style/IpAddresses: 
     | 
|
| 
       4256 
4316 
     | 
    
         
             
                - '**/gems.rb'
         
     | 
| 
       4257 
4317 
     | 
    
         
             
                - '**/*.gemspec'
         
     | 
| 
       4258 
4318 
     | 
    
         | 
| 
      
 4319 
     | 
    
         
            +
            Style/KeywordArgumentsMerging:
         
     | 
| 
      
 4320 
     | 
    
         
            +
              Description: >-
         
     | 
| 
      
 4321 
     | 
    
         
            +
                             When passing an existing hash as keyword arguments, provide additional arguments
         
     | 
| 
      
 4322 
     | 
    
         
            +
                             directly rather than using `merge`.
         
     | 
| 
      
 4323 
     | 
    
         
            +
              StyleGuide: '#merging-keyword-arguments'
         
     | 
| 
      
 4324 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 4325 
     | 
    
         
            +
              VersionAdded: '1.68'
         
     | 
| 
      
 4326 
     | 
    
         
            +
             
     | 
| 
       4259 
4327 
     | 
    
         
             
            Style/KeywordParametersOrder:
         
     | 
| 
       4260 
4328 
     | 
    
         
             
              Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
         
     | 
| 
       4261 
4329 
     | 
    
         
             
              StyleGuide: '#keyword-parameters-order'
         
     | 
| 
         @@ -5241,6 +5309,13 @@ Style/SafeNavigation: 
     | 
|
| 
       5241 
5309 
     | 
    
         
             
              # Maximum length of method chains for register an offense.
         
     | 
| 
       5242 
5310 
     | 
    
         
             
              MaxChainLength: 2
         
     | 
| 
       5243 
5311 
     | 
    
         | 
| 
      
 5312 
     | 
    
         
            +
            Style/SafeNavigationChainLength:
         
     | 
| 
      
 5313 
     | 
    
         
            +
              Description: 'Enforces safe navigation chains length to not exceed the configured maximum.'
         
     | 
| 
      
 5314 
     | 
    
         
            +
              StyleGuide: '#safe-navigation'
         
     | 
| 
      
 5315 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 5316 
     | 
    
         
            +
              VersionAdded: '1.68'
         
     | 
| 
      
 5317 
     | 
    
         
            +
              Max: 2
         
     | 
| 
      
 5318 
     | 
    
         
            +
             
     | 
| 
       5244 
5319 
     | 
    
         
             
            Style/Sample:
         
     | 
| 
       5245 
5320 
     | 
    
         
             
              Description: >-
         
     | 
| 
       5246 
5321 
     | 
    
         
             
                              Use `sample` instead of `shuffle.first`,
         
     | 
    
        data/lib/rubocop/cached_data.rb
    CHANGED
    
    | 
         @@ -45,15 +45,13 @@ module RuboCop 
     | 
|
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                # Restore an offense object loaded from a JSON file.
         
     | 
| 
       47 
47 
     | 
    
         
             
                def deserialize_offenses(offenses)
         
     | 
| 
       48 
     | 
    
         
            -
                  source_buffer = Parser::Source::Buffer.new(@filename)
         
     | 
| 
       49 
     | 
    
         
            -
                  source_buffer.source = File.read(@filename, encoding: Encoding::UTF_8)
         
     | 
| 
       50 
48 
     | 
    
         
             
                  offenses.map! do |o|
         
     | 
| 
       51 
     | 
    
         
            -
                    location = location_from_source_buffer(o 
     | 
| 
      
 49 
     | 
    
         
            +
                    location = location_from_source_buffer(o)
         
     | 
| 
       52 
50 
     | 
    
         
             
                    Cop::Offense.new(o['severity'], location, o['message'], o['cop_name'], o['status'].to_sym)
         
     | 
| 
       53 
51 
     | 
    
         
             
                  end
         
     | 
| 
       54 
52 
     | 
    
         
             
                end
         
     | 
| 
       55 
53 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                def location_from_source_buffer(offense 
     | 
| 
      
 54 
     | 
    
         
            +
                def location_from_source_buffer(offense)
         
     | 
| 
       57 
55 
     | 
    
         
             
                  begin_pos = offense['location']['begin_pos']
         
     | 
| 
       58 
56 
     | 
    
         
             
                  end_pos = offense['location']['end_pos']
         
     | 
| 
       59 
57 
     | 
    
         
             
                  if begin_pos.zero? && end_pos.zero?
         
     | 
| 
         @@ -62,5 +60,15 @@ module RuboCop 
     | 
|
| 
       62 
60 
     | 
    
         
             
                    Parser::Source::Range.new(source_buffer, begin_pos, end_pos)
         
     | 
| 
       63 
61 
     | 
    
         
             
                  end
         
     | 
| 
       64 
62 
     | 
    
         
             
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                # Delay creation until needed. Some type of offenses will have no buffer associated with them
         
     | 
| 
      
 65 
     | 
    
         
            +
                # and be global only. For these, trying to create the buffer will likely fail, for example
         
     | 
| 
      
 66 
     | 
    
         
            +
                # because of unknown encoding comments.
         
     | 
| 
      
 67 
     | 
    
         
            +
                def source_buffer
         
     | 
| 
      
 68 
     | 
    
         
            +
                  @source_buffer ||= begin
         
     | 
| 
      
 69 
     | 
    
         
            +
                    source = File.read(@filename, encoding: Encoding::UTF_8)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    Parser::Source::Buffer.new(@filename, source: source)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
       65 
73 
     | 
    
         
             
              end
         
     | 
| 
       66 
74 
     | 
    
         
             
            end
         
     | 
| 
         @@ -9,8 +9,8 @@ module RuboCop 
     | 
|
| 
       9 
9 
     | 
    
         
             
                    self.command_name = :version
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                    def run
         
     | 
| 
       12 
     | 
    
         
            -
                      puts RuboCop::Version 
     | 
| 
       13 
     | 
    
         
            -
                      puts RuboCop::Version. 
     | 
| 
      
 12 
     | 
    
         
            +
                      puts RuboCop::Version::STRING if @options[:version]
         
     | 
| 
      
 13 
     | 
    
         
            +
                      puts RuboCop::Version.verbose(env: env) if @options[:verbose_version]
         
     | 
| 
       14 
14 
     | 
    
         
             
                    end
         
     | 
| 
       15 
15 
     | 
    
         
             
                  end
         
     | 
| 
       16 
16 
     | 
    
         
             
                end
         
     | 
| 
         @@ -49,7 +49,9 @@ module RuboCop 
     | 
|
| 
       49 
49 
     | 
    
         
             
                  private
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
51 
     | 
    
         
             
                  def disable_offense(offense_range)
         
     | 
| 
       52 
     | 
    
         
            -
                    range = surrounding_heredoc(offense_range) || 
     | 
| 
      
 52 
     | 
    
         
            +
                    range = surrounding_heredoc(offense_range) ||
         
     | 
| 
      
 53 
     | 
    
         
            +
                            surrounding_percent_array(offense_range) ||
         
     | 
| 
      
 54 
     | 
    
         
            +
                            string_continuation(offense_range)
         
     | 
| 
       53 
55 
     | 
    
         | 
| 
       54 
56 
     | 
    
         
             
                    if range
         
     | 
| 
       55 
57 
     | 
    
         
             
                      disable_offense_before_and_after(range_by_lines(range))
         
     | 
| 
         @@ -88,10 +90,28 @@ module RuboCop 
     | 
|
| 
       88 
90 
     | 
    
         
             
                    end
         
     | 
| 
       89 
91 
     | 
    
         | 
| 
       90 
92 
     | 
    
         
             
                    percent_array.map(&:source_range).find do |range|
         
     | 
| 
       91 
     | 
    
         
            -
                      offense_range 
     | 
| 
      
 93 
     | 
    
         
            +
                      range_overlaps_offense?(offense_range, range)
         
     | 
| 
       92 
94 
     | 
    
         
             
                    end
         
     | 
| 
       93 
95 
     | 
    
         
             
                  end
         
     | 
| 
       94 
96 
     | 
    
         | 
| 
      
 97 
     | 
    
         
            +
                  def string_continuation(offense_range)
         
     | 
| 
      
 98 
     | 
    
         
            +
                    return nil if offense_range.empty?
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                    string_continuation_nodes = processed_source.ast.each_descendant.filter_map do |node|
         
     | 
| 
      
 101 
     | 
    
         
            +
                      range_by_lines(node.source_range) if string_continuation?(node)
         
     | 
| 
      
 102 
     | 
    
         
            +
                    end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                    string_continuation_nodes.find { |range| range_overlaps_offense?(offense_range, range) }
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                  def range_overlaps_offense?(offense_range, range)
         
     | 
| 
      
 108 
     | 
    
         
            +
                    offense_range.begin_pos > range.begin_pos && range.overlaps?(offense_range)
         
     | 
| 
      
 109 
     | 
    
         
            +
                  end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                  def string_continuation?(node)
         
     | 
| 
      
 112 
     | 
    
         
            +
                    (node.str_type? || node.dstr_type? || node.xstr_type?) && node.source.match?(/\\\s*$/)
         
     | 
| 
      
 113 
     | 
    
         
            +
                  end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
       95 
115 
     | 
    
         
             
                  def range_of_first_line(range)
         
     | 
| 
       96 
116 
     | 
    
         
             
                    begin_of_first_line = range.begin_pos - range.column
         
     | 
| 
       97 
117 
     | 
    
         
             
                    end_of_first_line = begin_of_first_line + range.source_line.length
         
     | 
    
        data/lib/rubocop/cop/base.rb
    CHANGED
    
    | 
         @@ -60,7 +60,7 @@ module RuboCop 
     | 
|
| 
       60 
60 
     | 
    
         
             
                    []
         
     | 
| 
       61 
61 
     | 
    
         
             
                  end
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                  # Returns  
     | 
| 
      
 63 
     | 
    
         
            +
                  # Returns a url to view this cops documentation online.
         
     | 
| 
       64 
64 
     | 
    
         
             
                  # Requires 'DocumentationBaseURL' to be set for your department.
         
     | 
| 
       65 
65 
     | 
    
         
             
                  # Will follow the convention of RuboCops own documentation structure,
         
     | 
| 
       66 
66 
     | 
    
         
             
                  # overwrite this method to accommodate your custom layout.
         
     | 
| 
         @@ -27,7 +27,6 @@ module RuboCop 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  #   Project contains gems.rb and gems.locked files
         
     | 
| 
       28 
28 
     | 
    
         
             
                  class GemFilename < Base
         
     | 
| 
       29 
29 
     | 
    
         
             
                    include ConfigurableEnforcedStyle
         
     | 
| 
       30 
     | 
    
         
            -
                    include RangeHelp
         
     | 
| 
       31 
30 
     | 
    
         | 
| 
       32 
31 
     | 
    
         
             
                    MSG_GEMFILE_REQUIRED = '`gems.rb` file was found but `Gemfile` is required ' \
         
     | 
| 
       33 
32 
     | 
    
         
             
                                           '(file path: %<file_path>s).'
         
     | 
| 
         @@ -47,7 +47,7 @@ module RuboCop 
     | 
|
| 
       47 
47 
     | 
    
         
             
                      if column_delta.positive? && range.resize(1).source != "\n"
         
     | 
| 
       48 
48 
     | 
    
         
             
                        corrector.insert_before(range, ' ' * column_delta)
         
     | 
| 
       49 
49 
     | 
    
         
             
                      elsif /\A[ \t]+\z/.match?(range.source)
         
     | 
| 
       50 
     | 
    
         
            -
                        remove(range 
     | 
| 
      
 50 
     | 
    
         
            +
                        corrector.remove(range)
         
     | 
| 
       51 
51 
     | 
    
         
             
                      end
         
     | 
| 
       52 
52 
     | 
    
         
             
                    end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
         @@ -96,17 +96,6 @@ module RuboCop 
     | 
|
| 
       96 
96 
     | 
    
         
             
                      end
         
     | 
| 
       97 
97 
     | 
    
         
             
                    end
         
     | 
| 
       98 
98 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
                    def remove(range, corrector)
         
     | 
| 
       100 
     | 
    
         
            -
                      original_stderr = $stderr
         
     | 
| 
       101 
     | 
    
         
            -
                      $stderr = StringIO.new # Avoid error messages on console
         
     | 
| 
       102 
     | 
    
         
            -
                      corrector.remove(range)
         
     | 
| 
       103 
     | 
    
         
            -
                    rescue RuntimeError
         
     | 
| 
       104 
     | 
    
         
            -
                      range = range_between(range.begin_pos + 1, range.end_pos + 1)
         
     | 
| 
       105 
     | 
    
         
            -
                      retry if /^ +$/.match?(range.source)
         
     | 
| 
       106 
     | 
    
         
            -
                    ensure
         
     | 
| 
       107 
     | 
    
         
            -
                      $stderr = original_stderr
         
     | 
| 
       108 
     | 
    
         
            -
                    end
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
99 
     | 
    
         
             
                    def each_line(expr)
         
     | 
| 
       111 
100 
     | 
    
         
             
                      line_begin_pos = expr.begin_pos
         
     | 
| 
       112 
101 
     | 
    
         
             
                      expr.source.each_line do |line|
         
     | 
| 
         @@ -39,7 +39,7 @@ module RuboCop 
     | 
|
| 
       39 
39 
     | 
    
         
             
                  def requires_parentheses?
         
     | 
| 
       40 
40 
     | 
    
         
             
                    return true if collection_node.send_type? && collection_node.operator_method?
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                    collection_node.range_type? || collection_node. 
     | 
| 
      
 42 
     | 
    
         
            +
                    collection_node.range_type? || collection_node.operator_keyword?
         
     | 
| 
       43 
43 
     | 
    
         
             
                  end
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
                  def end_range
         
     | 
| 
         @@ -94,6 +94,16 @@ module RuboCop 
     | 
|
| 
       94 
94 
     | 
    
         
             
                  end
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
       96 
96 
     | 
    
         
             
                  def substitute_escaped_delimiters(content, delimiters)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    if delimiters.first != delimiters.last
         
     | 
| 
      
 98 
     | 
    
         
            +
                      # With different delimiters (eg. `[]`, `()`), if there are the same
         
     | 
| 
      
 99 
     | 
    
         
            +
                      # number of each, escaping is not necessary
         
     | 
| 
      
 100 
     | 
    
         
            +
                      delimiter_counts = delimiters.each_with_object({}) do |delimiter, counts|
         
     | 
| 
      
 101 
     | 
    
         
            +
                        counts[delimiter] = content.count(delimiter)
         
     | 
| 
      
 102 
     | 
    
         
            +
                      end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                      return content if delimiter_counts[delimiters.first] == delimiter_counts[delimiters.last]
         
     | 
| 
      
 105 
     | 
    
         
            +
                    end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
       97 
107 
     | 
    
         
             
                    delimiters.each { |delim| content.gsub!(delim, "\\#{delim}") }
         
     | 
| 
       98 
108 
     | 
    
         
             
                  end
         
     | 
| 
       99 
109 
     | 
    
         | 
| 
         @@ -53,8 +53,6 @@ module RuboCop 
     | 
|
| 
       53 
53 
     | 
    
         
             
                  #     spec.required_ruby_version = '~> 2.5'
         
     | 
| 
       54 
54 
     | 
    
         
             
                  #   end
         
     | 
| 
       55 
55 
     | 
    
         
             
                  class RequiredRubyVersion < Base
         
     | 
| 
       56 
     | 
    
         
            -
                    include RangeHelp
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
56 
     | 
    
         
             
                    RESTRICT_ON_SEND = %i[required_ruby_version=].freeze
         
     | 
| 
       59 
57 
     | 
    
         
             
                    NOT_EQUAL_MSG = '`required_ruby_version` and `TargetRubyVersion` ' \
         
     | 
| 
       60 
58 
     | 
    
         
             
                                    '(%<target_ruby_version>s, which may be specified in ' \
         
     | 
| 
         @@ -36,10 +36,8 @@ module RuboCop 
     | 
|
| 
       36 
36 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       37 
37 
     | 
    
         
             
                      return unless location_line_equality_comparison?(node)
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                       
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                      lhs_receiver = extract_receiver(lhs)
         
     | 
| 
       42 
     | 
    
         
            -
                      rhs_receiver = extract_receiver(rhs)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      lhs_receiver = extract_receiver(node.receiver)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      rhs_receiver = extract_receiver(node.first_argument)
         
     | 
| 
       43 
41 
     | 
    
         
             
                      preferred = "same_line?(#{lhs_receiver}, #{rhs_receiver})"
         
     | 
| 
       44 
42 
     | 
    
         | 
| 
       45 
43 
     | 
    
         
             
                      add_offense(node, message: format(MSG, preferred: preferred)) do |corrector|
         
     | 
| 
         @@ -3,7 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module RuboCop
         
     | 
| 
       4 
4 
     | 
    
         
             
              module Cop
         
     | 
| 
       5 
5 
     | 
    
         
             
                module InternalAffairs
         
     | 
| 
       6 
     | 
    
         
            -
                  # Checks for missing `numblock handlers. The blocks with numbered
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Checks for missing `numblock` handlers. The blocks with numbered
         
     | 
| 
       7 
7 
     | 
    
         
             
                  # arguments introduced in Ruby 2.7 are parsed with a node type of
         
     | 
| 
       8 
8 
     | 
    
         
             
                  # `numblock` instead of block. Cops that define `block` handlers
         
     | 
| 
       9 
9 
     | 
    
         
             
                  # need to define `numblock` handlers or disable this cope for them.
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Cop
         
     | 
| 
      
 5 
     | 
    
         
            +
                module InternalAffairs
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Enforces the use of `node.operator_keyword?` instead of `node.and_type? || node.or_type?`.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  #
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # @example
         
     | 
| 
      
 9 
     | 
    
         
            +
                  #   # bad
         
     | 
| 
      
 10 
     | 
    
         
            +
                  #   node.and_type? || node.or_type?
         
     | 
| 
      
 11 
     | 
    
         
            +
                  #   node.or_type? || node.and_type?
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #
         
     | 
| 
      
 13 
     | 
    
         
            +
                  #   # good
         
     | 
| 
      
 14 
     | 
    
         
            +
                  #   node.operator_keyword?
         
     | 
| 
      
 15 
     | 
    
         
            +
                  #
         
     | 
| 
      
 16 
     | 
    
         
            +
                  class OperatorKeyword < Base
         
     | 
| 
      
 17 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    MSG = 'Use `%<prefer>s`.'
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    # @!method and_or_type(node)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    def_node_matcher :and_or_type, <<~PATTERN
         
     | 
| 
      
 23 
     | 
    
         
            +
                      {
         
     | 
| 
      
 24 
     | 
    
         
            +
                        (or $(send _node :and_type?) $(send _node :or_type?))
         
     | 
| 
      
 25 
     | 
    
         
            +
                        (or $(send _node :or_type?) $(send _node :and_type?))
         
     | 
| 
      
 26 
     | 
    
         
            +
                        (or
         
     | 
| 
      
 27 
     | 
    
         
            +
                          (or _ $(send _node :and_type?)) $(send _node :or_type?))
         
     | 
| 
      
 28 
     | 
    
         
            +
                        (or
         
     | 
| 
      
 29 
     | 
    
         
            +
                          (or _ $(send _node :or_type?)) $(send _node :and_type?))
         
     | 
| 
      
 30 
     | 
    
         
            +
                      }
         
     | 
| 
      
 31 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    def on_or(node)
         
     | 
| 
      
 34 
     | 
    
         
            +
                      return unless (lhs, rhs = and_or_type(node))
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                      offense = lhs.receiver.source_range.join(rhs.source_range.end)
         
     | 
| 
      
 37 
     | 
    
         
            +
                      prefer = "#{lhs.receiver.source}.operator_keyword?"
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                      add_offense(offense, message: format(MSG, prefer: prefer)) do |corrector|
         
     | 
| 
      
 40 
     | 
    
         
            +
                        corrector.replace(offense, prefer)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      end
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -17,6 +17,7 @@ require_relative 'internal_affairs/node_matcher_directive' 
     | 
|
| 
       17 
17 
     | 
    
         
             
            require_relative 'internal_affairs/node_type_predicate'
         
     | 
| 
       18 
18 
     | 
    
         
             
            require_relative 'internal_affairs/numblock_handler'
         
     | 
| 
       19 
19 
     | 
    
         
             
            require_relative 'internal_affairs/offense_location_keyword'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require_relative 'internal_affairs/operator_keyword'
         
     | 
| 
       20 
21 
     | 
    
         
             
            require_relative 'internal_affairs/processed_source_buffer_name'
         
     | 
| 
       21 
22 
     | 
    
         
             
            require_relative 'internal_affairs/redundant_context_config_parameter'
         
     | 
| 
       22 
23 
     | 
    
         
             
            require_relative 'internal_affairs/redundant_described_class_as_subject'
         
     | 
| 
         @@ -3,8 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module RuboCop
         
     | 
| 
       4 
4 
     | 
    
         
             
              module Cop
         
     | 
| 
       5 
5 
     | 
    
         
             
                module Layout
         
     | 
| 
       6 
     | 
    
         
            -
                  #  
     | 
| 
       7 
     | 
    
         
            -
                  # definition are aligned.
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Check that the arguments on a multi-line method definition are aligned.
         
     | 
| 
       8 
7 
     | 
    
         
             
                  #
         
     | 
| 
       9 
8 
     | 
    
         
             
                  # @example EnforcedStyle: with_first_argument (default)
         
     | 
| 
       10 
9 
     | 
    
         
             
                  #   # good
         
     | 
| 
         @@ -127,7 +127,6 @@ module RuboCop 
     | 
|
| 
       127 
127 
     | 
    
         
             
                                         start_loc,
         
     | 
| 
       128 
128 
     | 
    
         
             
                                         end_loc,
         
     | 
| 
       129 
129 
     | 
    
         
             
                                         do_source_line_column)
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
130 
     | 
    
         
             
                      error_source_line_column = if style == :start_of_block
         
     | 
| 
       132 
131 
     | 
    
         
             
                                                   do_source_line_column
         
     | 
| 
       133 
132 
     | 
    
         
             
                                                 else
         
     | 
| 
         @@ -189,7 +188,7 @@ module RuboCop 
     | 
|
| 
       189 
188 
     | 
    
         
             
                    # In offense message, we want to show the assignment LHS rather than
         
     | 
| 
       190 
189 
     | 
    
         
             
                    # the entire assignment.
         
     | 
| 
       191 
190 
     | 
    
         
             
                    def find_lhs_node(node)
         
     | 
| 
       192 
     | 
    
         
            -
                      node 
     | 
| 
      
 191 
     | 
    
         
            +
                      node = node.lhs while node.op_asgn_type? || node.masgn_type?
         
     | 
| 
       193 
192 
     | 
    
         
             
                      node
         
     | 
| 
       194 
193 
     | 
    
         
             
                    end
         
     | 
| 
       195 
194 
     | 
    
         | 
| 
         @@ -200,7 +200,7 @@ module RuboCop 
     | 
|
| 
       200 
200 
     | 
    
         
             
                      parent = node.parent
         
     | 
| 
       201 
201 
     | 
    
         
             
                      return false unless parent
         
     | 
| 
       202 
202 
     | 
    
         | 
| 
       203 
     | 
    
         
            -
                      parent.begin_type? &&  
     | 
| 
      
 203 
     | 
    
         
            +
                      parent.begin_type? && same_line?(node, node.right_sibling)
         
     | 
| 
       204 
204 
     | 
    
         
             
                    end
         
     | 
| 
       205 
205 
     | 
    
         | 
| 
       206 
206 
     | 
    
         
             
                    # SimpleCov excludes code from the coverage report by wrapping it in `# :nocov:`:
         
     | 
| 
         @@ -84,9 +84,8 @@ module RuboCop 
     | 
|
| 
       84 
84 
     | 
    
         | 
| 
       85 
85 
     | 
    
         
             
                    alias on_numblock on_block
         
     | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
                    def on_send(node) 
     | 
| 
       88 
     | 
    
         
            -
                      return unless node.bare_access_modifier? &&
         
     | 
| 
       89 
     | 
    
         
            -
                                    !(node.parent&.block_type? || node.parent&.numblock_type?)
         
     | 
| 
      
 87 
     | 
    
         
            +
                    def on_send(node)
         
     | 
| 
      
 88 
     | 
    
         
            +
                      return unless node.bare_access_modifier? && !node.block_literal?
         
     | 
| 
       90 
89 
     | 
    
         
             
                      return if expected_empty_lines?(node)
         
     | 
| 
       91 
90 
     | 
    
         | 
| 
       92 
91 
     | 
    
         
             
                      message = message(node)
         
     | 
| 
         @@ -72,8 +72,7 @@ module RuboCop 
     | 
|
| 
       72 
72 
     | 
    
         
             
                    alias on_numblock on_def
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
                    def on_kwbegin(node)
         
     | 
| 
       75 
     | 
    
         
            -
                       
     | 
| 
       76 
     | 
    
         
            -
                      check_body(body, node.loc.line)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      check_body(node.children.first, node.loc.line)
         
     | 
| 
       77 
76 
     | 
    
         
             
                    end
         
     | 
| 
       78 
77 
     | 
    
         | 
| 
       79 
78 
     | 
    
         
             
                    private
         
     | 
| 
         @@ -128,10 +127,10 @@ module RuboCop 
     | 
|
| 
       128 
127 
     | 
    
         
             
                    end
         
     | 
| 
       129 
128 
     | 
    
         | 
| 
       130 
129 
     | 
    
         
             
                    def keyword_locations_in_ensure(node)
         
     | 
| 
       131 
     | 
    
         
            -
                       
     | 
| 
      
 130 
     | 
    
         
            +
                      rescue_body_without_ensure = node.children.first
         
     | 
| 
       132 
131 
     | 
    
         
             
                      [
         
     | 
| 
       133 
132 
     | 
    
         
             
                        node.loc.keyword,
         
     | 
| 
       134 
     | 
    
         
            -
                        *keyword_locations( 
     | 
| 
      
 133 
     | 
    
         
            +
                        *keyword_locations(rescue_body_without_ensure)
         
     | 
| 
       135 
134 
     | 
    
         
             
                      ]
         
     | 
| 
       136 
135 
     | 
    
         
             
                    end
         
     | 
| 
       137 
136 
     | 
    
         
             
                  end
         
     |