rubocop 1.68.0 → 1.69.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/README.md +1 -1
- data/config/default.yml +41 -6
- 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/for_to_each_corrector.rb +1 -1
- 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/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -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 +15 -0
- 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_inside_array_literal_brackets.rb +6 -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 +10 -12
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +6 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -1
- 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_as_condition.rb +1 -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 +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
- 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/refinement_import_methods.rb +1 -1
- 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_consistency.rb +2 -0
- 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 +3 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +51 -2
- 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_else_without_rescue.rb +4 -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/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +2 -3
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- 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/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/accessor_method_name.rb +6 -6
- 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/security/compound_hash.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +54 -25
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/array_intersect.rb +5 -4
- data/lib/rubocop/cop/style/bitwise_predicate.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +10 -2
- data/lib/rubocop/cop/style/case_like_if.rb +8 -11
- 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 +89 -0
- data/lib/rubocop/cop/style/fetch_env_var.rb +1 -0
- 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 +1 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -2
- data/lib/rubocop/cop/style/hash_except.rb +19 -7
- 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 +2 -2
- data/lib/rubocop/cop/style/lambda_call.rb +3 -2
- 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/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/object_then.rb +1 -0
- 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_argument.rb +3 -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 +7 -6
- data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -2
- 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 +8 -15
- 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 +1 -1
- 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 +13 -12
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- 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.rb +4 -10
- data/lib/rubocop/cops_documentation_generator.rb +9 -1
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +8 -0
- metadata +23 -14
| @@ -155,6 +155,7 @@ module RuboCop | |
| 155 155 | 
             
                    UNDERSCORE_REQUIRED = 'Memoized variable `%<var>s` does not start ' \
         | 
| 156 156 | 
             
                                          'with `_`. Use `@%<suggested_var>s` instead.'
         | 
| 157 157 | 
             
                    DYNAMIC_DEFINE_METHODS = %i[define_method define_singleton_method].to_set.freeze
         | 
| 158 | 
            +
                    INITIALIZE_METHODS = %i[initialize initialize_clone initialize_copy initialize_dup].freeze
         | 
| 158 159 |  | 
| 159 160 | 
             
                    # @!method method_definition?(node)
         | 
| 160 161 | 
             
                    def_node_matcher :method_definition?, <<~PATTERN
         | 
| @@ -168,7 +169,7 @@ module RuboCop | |
| 168 169 | 
             
                    # rubocop:disable Metrics/AbcSize
         | 
| 169 170 | 
             
                    # rubocop:disable Metrics/MethodLength
         | 
| 170 171 | 
             
                    def on_or_asgn(node)
         | 
| 171 | 
            -
                      lhs | 
| 172 | 
            +
                      lhs = node.lhs
         | 
| 172 173 | 
             
                      return unless lhs.ivasgn_type?
         | 
| 173 174 |  | 
| 174 175 | 
             
                      method_node, method_name = find_definition(node)
         | 
| @@ -181,8 +182,8 @@ module RuboCop | |
| 181 182 |  | 
| 182 183 | 
             
                      suggested_var = suggested_var(method_name)
         | 
| 183 184 | 
             
                      msg = format(
         | 
| 184 | 
            -
                        message(lhs. | 
| 185 | 
            -
                        var: lhs. | 
| 185 | 
            +
                        message(lhs.name),
         | 
| 186 | 
            +
                        var: lhs.name,
         | 
| 186 187 | 
             
                        suggested_var: suggested_var,
         | 
| 187 188 | 
             
                        method: method_name
         | 
| 188 189 | 
             
                      )
         | 
| @@ -209,14 +210,13 @@ module RuboCop | |
| 209 210 | 
             
                      method_node, method_name = find_definition(node)
         | 
| 210 211 | 
             
                      return false unless method_node
         | 
| 211 212 |  | 
| 212 | 
            -
                       | 
| 213 | 
            -
                      defined_memoized?(method_node.body, var_name) do |defined_ivar, return_ivar, ivar_assign|
         | 
| 213 | 
            +
                      defined_memoized?(method_node.body, arg.name) do |defined_ivar, return_ivar, ivar_assign|
         | 
| 214 214 | 
             
                        return false if matches?(method_name, ivar_assign)
         | 
| 215 215 |  | 
| 216 216 | 
             
                        suggested_var = suggested_var(method_name)
         | 
| 217 217 | 
             
                        msg = format(
         | 
| 218 | 
            -
                          message( | 
| 219 | 
            -
                          var:  | 
| 218 | 
            +
                          message(arg.name),
         | 
| 219 | 
            +
                          var: arg.name,
         | 
| 220 220 | 
             
                          suggested_var: suggested_var,
         | 
| 221 221 | 
             
                          method: method_name
         | 
| 222 222 | 
             
                        )
         | 
| @@ -251,11 +251,10 @@ module RuboCop | |
| 251 251 | 
             
                    end
         | 
| 252 252 |  | 
| 253 253 | 
             
                    def matches?(method_name, ivar_assign)
         | 
| 254 | 
            -
                      return true if ivar_assign.nil? || method_name | 
| 254 | 
            +
                      return true if ivar_assign.nil? || INITIALIZE_METHODS.include?(method_name)
         | 
| 255 255 |  | 
| 256 | 
            -
                      method_name = method_name.to_s.delete(' | 
| 257 | 
            -
                       | 
| 258 | 
            -
                      variable_name = variable.to_s.sub('@', '')
         | 
| 256 | 
            +
                      method_name = method_name.to_s.delete('!?=')
         | 
| 257 | 
            +
                      variable_name = ivar_assign.name.to_s.sub('@', '')
         | 
| 259 258 |  | 
| 260 259 | 
             
                      variable_name_candidates(method_name).include?(variable_name)
         | 
| 261 260 | 
             
                    end
         | 
| @@ -269,7 +268,7 @@ module RuboCop | |
| 269 268 | 
             
                    end
         | 
| 270 269 |  | 
| 271 270 | 
             
                    def suggested_var(method_name)
         | 
| 272 | 
            -
                      suggestion = method_name.to_s.delete(' | 
| 271 | 
            +
                      suggestion = method_name.to_s.delete('!?=')
         | 
| 273 272 |  | 
| 274 273 | 
             
                      style == :required ? "_#{suggestion}" : suggestion
         | 
| 275 274 | 
             
                    end
         | 
| @@ -109,7 +109,7 @@ module RuboCop | |
| 109 109 | 
             
                          variable_name_matches?(lvasgn_node, name)
         | 
| 110 110 | 
             
                        end
         | 
| 111 111 | 
             
                      else
         | 
| 112 | 
            -
                        node. | 
| 112 | 
            +
                        node.name == name
         | 
| 113 113 | 
             
                      end
         | 
| 114 114 | 
             
                    end
         | 
| 115 115 |  | 
| @@ -141,12 +141,7 @@ module RuboCop | |
| 141 141 | 
             
                    # Further `lvar` nodes will not be corrected though since they now refer to a
         | 
| 142 142 | 
             
                    # different variable.
         | 
| 143 143 | 
             
                    def correct_reassignment(corrector, node, offending_name, preferred_name)
         | 
| 144 | 
            -
                       | 
| 145 | 
            -
                        correct_node(corrector, node.child_nodes.first, offending_name, preferred_name)
         | 
| 146 | 
            -
                      elsif node.masgn_type?
         | 
| 147 | 
            -
                        # With multiple assign, the assignments are in an array as the last child
         | 
| 148 | 
            -
                        correct_node(corrector, node.children.last, offending_name, preferred_name)
         | 
| 149 | 
            -
                      end
         | 
| 144 | 
            +
                      correct_node(corrector, node.rhs, offending_name, preferred_name)
         | 
| 150 145 | 
             
                    end
         | 
| 151 146 |  | 
| 152 147 | 
             
                    def preferred_name(variable_name)
         | 
| @@ -159,10 +154,7 @@ module RuboCop | |
| 159 154 | 
             
                    end
         | 
| 160 155 |  | 
| 161 156 | 
             
                    def variable_name(node)
         | 
| 162 | 
            -
                       | 
| 163 | 
            -
                      return unless asgn_node
         | 
| 164 | 
            -
             | 
| 165 | 
            -
                      asgn_node.children.last
         | 
| 157 | 
            +
                      node.exception_variable&.name
         | 
| 166 158 | 
             
                    end
         | 
| 167 159 |  | 
| 168 160 | 
             
                    def message(node)
         | 
| @@ -40,11 +40,10 @@ module RuboCop | |
| 40 40 | 
             
                    end
         | 
| 41 41 |  | 
| 42 42 | 
             
                    def on_lvasgn(node)
         | 
| 43 | 
            -
                       | 
| 44 | 
            -
                      return  | 
| 45 | 
            -
                      return if allowed_identifier?(name)
         | 
| 43 | 
            +
                      return unless node.name
         | 
| 44 | 
            +
                      return if allowed_identifier?(node.name)
         | 
| 46 45 |  | 
| 47 | 
            -
                      check_name(node, name, node.loc.name)
         | 
| 46 | 
            +
                      check_name(node, node.name, node.loc.name)
         | 
| 48 47 | 
             
                    end
         | 
| 49 48 | 
             
                    alias on_ivasgn    on_lvasgn
         | 
| 50 49 | 
             
                    alias on_cvasgn    on_lvasgn
         | 
| @@ -113,10 +113,9 @@ module RuboCop | |
| 113 113 |  | 
| 114 114 | 
             
                    def on_arg(node)
         | 
| 115 115 | 
             
                      @node = node
         | 
| 116 | 
            -
                       | 
| 117 | 
            -
                      return if allowed_identifier?(name)
         | 
| 116 | 
            +
                      return if allowed_identifier?(node.name)
         | 
| 118 117 |  | 
| 119 | 
            -
                      check_name(node, name, node.loc.name)
         | 
| 118 | 
            +
                      check_name(node, node.name, node.loc.name)
         | 
| 120 119 | 
             
                    end
         | 
| 121 120 | 
             
                    alias on_lvasgn on_arg
         | 
| 122 121 | 
             
                    alias on_ivasgn on_arg
         | 
| @@ -32,6 +32,7 @@ module RuboCop | |
| 32 32 | 
             
                    MONUPLE_HASH_MSG =
         | 
| 33 33 | 
             
                      'Delegate hash directly without wrapping in an array when only using a single value.'
         | 
| 34 34 | 
             
                    REDUNDANT_HASH_MSG = 'Calling .hash on elements of a hashed array is redundant.'
         | 
| 35 | 
            +
                    RESTRICT_ON_SEND = %i[hash ^ + * |].freeze
         | 
| 35 36 |  | 
| 36 37 | 
             
                    # @!method hash_method_definition?(node)
         | 
| 37 38 | 
             
                    def_node_matcher :hash_method_definition?, <<~PATTERN
         | 
| @@ -25,18 +25,19 @@ module RuboCop | |
| 25 25 | 
             
                  #
         | 
| 26 26 | 
             
                  class YAMLLoad < Base
         | 
| 27 27 | 
             
                    extend AutoCorrector
         | 
| 28 | 
            +
                    extend TargetRubyVersion
         | 
| 28 29 |  | 
| 29 30 | 
             
                    MSG = 'Prefer using `YAML.safe_load` over `YAML.load`.'
         | 
| 30 31 | 
             
                    RESTRICT_ON_SEND = %i[load].freeze
         | 
| 31 32 |  | 
| 33 | 
            +
                    maximum_target_ruby_version 3.0
         | 
| 34 | 
            +
             | 
| 32 35 | 
             
                    # @!method yaml_load(node)
         | 
| 33 36 | 
             
                    def_node_matcher :yaml_load, <<~PATTERN
         | 
| 34 37 | 
             
                      (send (const {nil? cbase} :YAML) :load ...)
         | 
| 35 38 | 
             
                    PATTERN
         | 
| 36 39 |  | 
| 37 40 | 
             
                    def on_send(node)
         | 
| 38 | 
            -
                      return if target_ruby_version >= 3.1
         | 
| 39 | 
            -
             | 
| 40 41 | 
             
                      yaml_load(node) do
         | 
| 41 42 | 
             
                        add_offense(node.loc.selector) do |corrector|
         | 
| 42 43 | 
             
                          corrector.replace(node.loc.selector, 'safe_load')
         | 
| @@ -70,6 +70,7 @@ module RuboCop | |
| 70 70 | 
             
                  #     private :bar, :baz
         | 
| 71 71 | 
             
                  #     private *%i[qux quux]
         | 
| 72 72 | 
             
                  #     private *METHOD_NAMES
         | 
| 73 | 
            +
                  #     private *private_methods
         | 
| 73 74 | 
             
                  #
         | 
| 74 75 | 
             
                  #   end
         | 
| 75 76 | 
             
                  #
         | 
| @@ -80,6 +81,7 @@ module RuboCop | |
| 80 81 | 
             
                  #     private :bar, :baz
         | 
| 81 82 | 
             
                  #     private *%i[qux quux]
         | 
| 82 83 | 
             
                  #     private *METHOD_NAMES
         | 
| 84 | 
            +
                  #     private *private_methods
         | 
| 83 85 | 
             
                  #
         | 
| 84 86 | 
             
                  #   end
         | 
| 85 87 | 
             
                  #
         | 
| @@ -133,21 +135,18 @@ module RuboCop | |
| 133 135 | 
             
                    # @!method access_modifier_with_symbol?(node)
         | 
| 134 136 | 
             
                    def_node_matcher :access_modifier_with_symbol?, <<~PATTERN
         | 
| 135 137 | 
             
                      (send nil? {:private :protected :public :module_function}
         | 
| 136 | 
            -
                        {(sym _) (splat {#percent_symbol_array? const})}
         | 
| 138 | 
            +
                        {(sym _)+ (splat {#percent_symbol_array? const send})}
         | 
| 137 139 | 
             
                      )
         | 
| 138 140 | 
             
                    PATTERN
         | 
| 139 141 |  | 
| 140 142 | 
             
                    # @!method access_modifier_with_attr?(node)
         | 
| 141 143 | 
             
                    def_node_matcher :access_modifier_with_attr?, <<~PATTERN
         | 
| 142 144 | 
             
                      (send nil? {:private :protected :public :module_function}
         | 
| 143 | 
            -
                        (send nil? {:attr :attr_reader :attr_writer :attr_accessor} _))
         | 
| 145 | 
            +
                        (send nil? {:attr :attr_reader :attr_writer :attr_accessor} _+))
         | 
| 144 146 | 
             
                    PATTERN
         | 
| 145 147 |  | 
| 146 148 | 
             
                    def on_send(node)
         | 
| 147 | 
            -
                      return  | 
| 148 | 
            -
                      return if ALLOWED_NODE_TYPES.include?(node.parent&.type)
         | 
| 149 | 
            -
                      return if allow_modifiers_on_symbols?(node)
         | 
| 150 | 
            -
                      return if allow_modifiers_on_attrs?(node)
         | 
| 149 | 
            +
                      return if allowed?(node)
         | 
| 151 150 |  | 
| 152 151 | 
             
                      if offense?(node)
         | 
| 153 152 | 
             
                        add_offense(node.loc.selector) do |corrector|
         | 
| @@ -161,15 +160,22 @@ module RuboCop | |
| 161 160 |  | 
| 162 161 | 
             
                    private
         | 
| 163 162 |  | 
| 163 | 
            +
                    def allowed?(node)
         | 
| 164 | 
            +
                      !node.access_modifier? ||
         | 
| 165 | 
            +
                        ALLOWED_NODE_TYPES.include?(node.parent&.type) ||
         | 
| 166 | 
            +
                        allow_modifiers_on_symbols?(node) ||
         | 
| 167 | 
            +
                        allow_modifiers_on_attrs?(node)
         | 
| 168 | 
            +
                    end
         | 
| 169 | 
            +
             | 
| 164 170 | 
             
                    def autocorrect(corrector, node)
         | 
| 165 171 | 
             
                      case style
         | 
| 166 172 | 
             
                      when :group
         | 
| 167 | 
            -
                         | 
| 168 | 
            -
                        return unless  | 
| 173 | 
            +
                        def_nodes = find_corresponding_def_nodes(node)
         | 
| 174 | 
            +
                        return unless def_nodes.any?
         | 
| 169 175 |  | 
| 170 | 
            -
                         | 
| 176 | 
            +
                        replace_defs(corrector, node, def_nodes)
         | 
| 171 177 | 
             
                      when :inline
         | 
| 172 | 
            -
                         | 
| 178 | 
            +
                        remove_nodes(corrector, node)
         | 
| 173 179 | 
             
                        select_grouped_def_nodes(node).each do |grouped_def_node|
         | 
| 174 180 | 
             
                          insert_inline_modifier(corrector, grouped_def_node, node.method_name)
         | 
| 175 181 | 
             
                        end
         | 
| @@ -190,10 +196,17 @@ module RuboCop | |
| 190 196 |  | 
| 191 197 | 
             
                    def offense?(node)
         | 
| 192 198 | 
             
                      (group_style? && access_modifier_is_inlined?(node) &&
         | 
| 193 | 
            -
                        !right_siblings_same_inline_method?(node)) ||
         | 
| 199 | 
            +
                        !node.parent&.if_type? && !right_siblings_same_inline_method?(node)) ||
         | 
| 194 200 | 
             
                        (inline_style? && access_modifier_is_not_inlined?(node))
         | 
| 195 201 | 
             
                    end
         | 
| 196 202 |  | 
| 203 | 
            +
                    def correctable_group_offense?(node)
         | 
| 204 | 
            +
                      return false unless group_style?
         | 
| 205 | 
            +
                      return false if allowed?(node)
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                      access_modifier_is_inlined?(node) && find_corresponding_def_nodes(node).any?
         | 
| 208 | 
            +
                    end
         | 
| 209 | 
            +
             | 
| 197 210 | 
             
                    def group_style?
         | 
| 198 211 | 
             
                      style == :group
         | 
| 199 212 | 
             
                    end
         | 
| @@ -212,7 +225,11 @@ module RuboCop | |
| 212 225 |  | 
| 213 226 | 
             
                    def right_siblings_same_inline_method?(node)
         | 
| 214 227 | 
             
                      node.right_siblings.any? do |sibling|
         | 
| 215 | 
            -
                        sibling.send_type? && | 
| 228 | 
            +
                        sibling.send_type? &&
         | 
| 229 | 
            +
                          correctable_group_offense?(sibling) &&
         | 
| 230 | 
            +
                          sibling.method?(node.method_name) &&
         | 
| 231 | 
            +
                          !sibling.arguments.empty? &&
         | 
| 232 | 
            +
                          find_corresponding_def_nodes(sibling).any?
         | 
| 216 233 | 
             
                      end
         | 
| 217 234 | 
             
                    end
         | 
| 218 235 |  | 
| @@ -226,14 +243,22 @@ module RuboCop | |
| 226 243 | 
             
                      end
         | 
| 227 244 | 
             
                    end
         | 
| 228 245 |  | 
| 229 | 
            -
                    def  | 
| 246 | 
            +
                    def find_corresponding_def_nodes(node)
         | 
| 230 247 | 
             
                      if access_modifier_with_symbol?(node)
         | 
| 231 | 
            -
                         | 
| 232 | 
            -
             | 
| 233 | 
            -
             | 
| 248 | 
            +
                        method_names = node.arguments.filter_map do |argument|
         | 
| 249 | 
            +
                          next unless argument.sym_type?
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                          argument.respond_to?(:value) && argument.value
         | 
| 252 | 
            +
                        end
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                        def_nodes = node.parent.each_child_node(:def).select do |child|
         | 
| 255 | 
            +
                          method_names.include?(child.method_name)
         | 
| 234 256 | 
             
                        end
         | 
| 257 | 
            +
             | 
| 258 | 
            +
                        # If there isn't a `def` node for each symbol, we will skip autocorrection.
         | 
| 259 | 
            +
                        def_nodes.size == method_names.size ? def_nodes : []
         | 
| 235 260 | 
             
                      else
         | 
| 236 | 
            -
                        node.first_argument
         | 
| 261 | 
            +
                        [node.first_argument]
         | 
| 237 262 | 
             
                      end
         | 
| 238 263 | 
             
                    end
         | 
| 239 264 |  | 
| @@ -251,8 +276,8 @@ module RuboCop | |
| 251 276 | 
             
                      end.select(&:def_type?)
         | 
| 252 277 | 
             
                    end
         | 
| 253 278 |  | 
| 254 | 
            -
                    def  | 
| 255 | 
            -
                      source = def_source(node,  | 
| 279 | 
            +
                    def replace_defs(corrector, node, def_nodes)
         | 
| 280 | 
            +
                      source = def_source(node, def_nodes)
         | 
| 256 281 | 
             
                      argument_less_modifier_node = find_argument_less_modifier_node(node)
         | 
| 257 282 | 
             
                      if argument_less_modifier_node
         | 
| 258 283 | 
             
                        corrector.insert_after(argument_less_modifier_node, "\n\n#{source}")
         | 
| @@ -264,20 +289,24 @@ module RuboCop | |
| 264 289 | 
             
                        return
         | 
| 265 290 | 
             
                      end
         | 
| 266 291 |  | 
| 267 | 
            -
                       | 
| 268 | 
            -
                      remove_node(corrector, node)
         | 
| 292 | 
            +
                      remove_nodes(corrector, *def_nodes, node)
         | 
| 269 293 | 
             
                    end
         | 
| 270 294 |  | 
| 271 295 | 
             
                    def insert_inline_modifier(corrector, node, modifier_name)
         | 
| 272 296 | 
             
                      corrector.insert_before(node, "#{modifier_name} ")
         | 
| 273 297 | 
             
                    end
         | 
| 274 298 |  | 
| 275 | 
            -
                    def  | 
| 276 | 
            -
                       | 
| 299 | 
            +
                    def remove_nodes(corrector, *nodes)
         | 
| 300 | 
            +
                      nodes.each do |node|
         | 
| 301 | 
            +
                        corrector.remove(range_with_comments_and_lines(node))
         | 
| 302 | 
            +
                      end
         | 
| 277 303 | 
             
                    end
         | 
| 278 304 |  | 
| 279 | 
            -
                    def def_source(node,  | 
| 280 | 
            -
                      [ | 
| 305 | 
            +
                    def def_source(node, def_nodes)
         | 
| 306 | 
            +
                      [
         | 
| 307 | 
            +
                        *processed_source.ast_with_comments[node].map(&:text),
         | 
| 308 | 
            +
                        *def_nodes.map(&:source)
         | 
| 309 | 
            +
                      ].join("\n")
         | 
| 281 310 | 
             
                    end
         | 
| 282 311 | 
             
                  end
         | 
| 283 312 | 
             
                end
         | 
| @@ -28,6 +28,7 @@ module RuboCop | |
| 28 28 | 
             
                  #   # bad
         | 
| 29 29 | 
             
                  #   (array1 & array2).any?
         | 
| 30 30 | 
             
                  #   (array1 & array2).empty?
         | 
| 31 | 
            +
                  #   (array1 & array2).none?
         | 
| 31 32 | 
             
                  #
         | 
| 32 33 | 
             
                  #   # good
         | 
| 33 34 | 
             
                  #   array1.intersect?(array2)
         | 
| @@ -57,7 +58,7 @@ module RuboCop | |
| 57 58 | 
             
                      (send
         | 
| 58 59 | 
             
                        (begin
         | 
| 59 60 | 
             
                          (send $(...) :& $(...))
         | 
| 60 | 
            -
                        ) ${:any? :empty?}
         | 
| 61 | 
            +
                        ) ${:any? :empty? :none?}
         | 
| 61 62 | 
             
                      )
         | 
| 62 63 | 
             
                    PATTERN
         | 
| 63 64 |  | 
| @@ -66,18 +67,18 @@ module RuboCop | |
| 66 67 | 
             
                      (send
         | 
| 67 68 | 
             
                        (begin
         | 
| 68 69 | 
             
                          (send $(...) :& $(...))
         | 
| 69 | 
            -
                        ) ${:present? :any? :blank? :empty?}
         | 
| 70 | 
            +
                        ) ${:present? :any? :blank? :empty? :none?}
         | 
| 70 71 | 
             
                      )
         | 
| 71 72 | 
             
                    PATTERN
         | 
| 72 73 |  | 
| 73 74 | 
             
                    MSG = 'Use `%<negated>s%<receiver>s.intersect?(%<argument>s)` ' \
         | 
| 74 75 | 
             
                          'instead of `(%<receiver>s & %<argument>s).%<method_name>s`.'
         | 
| 75 76 | 
             
                    STRAIGHT_METHODS = %i[present? any?].freeze
         | 
| 76 | 
            -
                    NEGATED_METHODS = %i[blank? empty?].freeze
         | 
| 77 | 
            +
                    NEGATED_METHODS = %i[blank? empty? none?].freeze
         | 
| 77 78 | 
             
                    RESTRICT_ON_SEND = (STRAIGHT_METHODS + NEGATED_METHODS).freeze
         | 
| 78 79 |  | 
| 79 80 | 
             
                    def on_send(node)
         | 
| 80 | 
            -
                      return if  | 
| 81 | 
            +
                      return if node.block_literal?
         | 
| 81 82 | 
             
                      return unless (receiver, argument, method_name = bad_intersection_check?(node))
         | 
| 82 83 |  | 
| 83 84 | 
             
                      message = message(receiver.source, argument.source, method_name)
         | 
| @@ -342,16 +342,23 @@ module RuboCop | |
| 342 342 | 
             
                      node.respond_to?(:block_node) && node.block_node
         | 
| 343 343 | 
             
                    end
         | 
| 344 344 |  | 
| 345 | 
            +
                    # rubocop:disable Metrics/CyclomaticComplexity
         | 
| 345 346 | 
             
                    def get_blocks(node, &block)
         | 
| 346 347 | 
             
                      case node.type
         | 
| 347 348 | 
             
                      when :block, :numblock
         | 
| 348 349 | 
             
                        yield node
         | 
| 349 350 | 
             
                      when :send
         | 
| 351 | 
            +
                        # When a method has an argument which is another method with a block,
         | 
| 352 | 
            +
                        # that block needs braces, otherwise a syntax error will be introduced
         | 
| 353 | 
            +
                        # for subsequent arguments.
         | 
| 354 | 
            +
                        # Additionally, even without additional arguments, changing `{...}` to
         | 
| 355 | 
            +
                        # `do...end` will change the binding of the block to the outer method.
         | 
| 350 356 | 
             
                        get_blocks(node.receiver, &block) if node.receiver
         | 
| 357 | 
            +
                        node.arguments.each { |argument| get_blocks(argument, &block) }
         | 
| 351 358 | 
             
                      when :hash
         | 
| 352 359 | 
             
                        # A hash which is passed as method argument may have no braces
         | 
| 353 360 | 
             
                        # In that case, one of the K/V pairs could contain a block node
         | 
| 354 | 
            -
                        # which could change in meaning if do...end replaced {...}
         | 
| 361 | 
            +
                        # which could change in meaning if `do...end` is replaced with `{...}`
         | 
| 355 362 | 
             
                        return if node.braces?
         | 
| 356 363 |  | 
| 357 364 | 
             
                        node.each_child_node { |child| get_blocks(child, &block) }
         | 
| @@ -359,6 +366,7 @@ module RuboCop | |
| 359 366 | 
             
                        node.each_child_node { |child| get_blocks(child, &block) }
         | 
| 360 367 | 
             
                      end
         | 
| 361 368 | 
             
                    end
         | 
| 369 | 
            +
                    # rubocop:enable Metrics/CyclomaticComplexity
         | 
| 362 370 |  | 
| 363 371 | 
             
                    # rubocop:disable Metrics/CyclomaticComplexity
         | 
| 364 372 | 
             
                    def proper_block_style?(node)
         | 
| @@ -481,7 +489,7 @@ module RuboCop | |
| 481 489 | 
             
                    end
         | 
| 482 490 |  | 
| 483 491 | 
             
                    def conditional?(node)
         | 
| 484 | 
            -
                      node.if_type? || node. | 
| 492 | 
            +
                      node.if_type? || node.operator_keyword?
         | 
| 485 493 | 
             
                    end
         | 
| 486 494 |  | 
| 487 495 | 
             
                    def array_or_range?(node)
         | 
| @@ -106,7 +106,7 @@ module RuboCop | |
| 106 106 | 
             
                      when :or
         | 
| 107 107 | 
             
                        find_target(node.lhs)
         | 
| 108 108 | 
             
                      when :match_with_lvasgn
         | 
| 109 | 
            -
                        lhs, rhs = *node
         | 
| 109 | 
            +
                        lhs, rhs = *node # rubocop:disable InternalAffairs/NodeDestructuring
         | 
| 110 110 | 
             
                        if lhs.regexp_type?
         | 
| 111 111 | 
             
                          rhs
         | 
| 112 112 | 
             
                        elsif rhs.regexp_type?
         | 
| @@ -172,7 +172,7 @@ module RuboCop | |
| 172 172 | 
             
                          return collect_conditions(node.lhs, target, conditions) &&
         | 
| 173 173 | 
             
                                 collect_conditions(node.rhs, target, conditions)
         | 
| 174 174 | 
             
                        when :match_with_lvasgn
         | 
| 175 | 
            -
                          lhs, rhs = *node
         | 
| 175 | 
            +
                          lhs, rhs = *node # rubocop:disable InternalAffairs/NodeDestructuring
         | 
| 176 176 | 
             
                          condition_from_binary_op(lhs, rhs, target)
         | 
| 177 177 | 
             
                        when :send
         | 
| 178 178 | 
             
                          condition_from_send_node(node, target)
         | 
| @@ -191,8 +191,7 @@ module RuboCop | |
| 191 191 | 
             
                      when :=~, :match, :match?
         | 
| 192 192 | 
             
                        condition_from_match_node(node, target)
         | 
| 193 193 | 
             
                      when :===
         | 
| 194 | 
            -
                         | 
| 195 | 
            -
                        lhs if rhs == target
         | 
| 194 | 
            +
                        node.receiver if node.first_argument == target
         | 
| 196 195 | 
             
                      when :include?, :cover?
         | 
| 197 196 | 
             
                        condition_from_include_or_cover_node(node, target)
         | 
| 198 197 | 
             
                      end
         | 
| @@ -200,14 +199,12 @@ module RuboCop | |
| 200 199 | 
             
                    # rubocop:enable Metrics/CyclomaticComplexity
         | 
| 201 200 |  | 
| 202 201 | 
             
                    def condition_from_equality_node(node, target)
         | 
| 203 | 
            -
                       | 
| 204 | 
            -
                      condition = condition_from_binary_op(lhs, rhs, target)
         | 
| 202 | 
            +
                      condition = condition_from_binary_op(node.receiver, node.first_argument, target)
         | 
| 205 203 | 
             
                      condition if condition && !class_reference?(condition)
         | 
| 206 204 | 
             
                    end
         | 
| 207 205 |  | 
| 208 206 | 
             
                    def condition_from_match_node(node, target)
         | 
| 209 | 
            -
                       | 
| 210 | 
            -
                      condition_from_binary_op(lhs, rhs, target)
         | 
| 207 | 
            +
                      condition_from_binary_op(node.receiver, node.first_argument, target)
         | 
| 211 208 | 
             
                    end
         | 
| 212 209 |  | 
| 213 210 | 
             
                    def condition_from_include_or_cover_node(node, target)
         | 
| @@ -263,11 +260,11 @@ module RuboCop | |
| 263 260 | 
             
                    def regexp_with_working_captures?(node)
         | 
| 264 261 | 
             
                      case node.type
         | 
| 265 262 | 
             
                      when :match_with_lvasgn
         | 
| 266 | 
            -
                        lhs, _rhs = *node
         | 
| 263 | 
            +
                        lhs, _rhs = *node # rubocop:disable InternalAffairs/NodeDestructuring
         | 
| 267 264 | 
             
                        node.loc.selector.source == '=~' && regexp_with_named_captures?(lhs)
         | 
| 268 265 | 
             
                      when :send
         | 
| 269 | 
            -
                         | 
| 270 | 
            -
             | 
| 266 | 
            +
                        node.method?(:match) &&
         | 
| 267 | 
            +
                          [node.receiver, node.first_argument].any? { |n| regexp_with_named_captures?(n) }
         | 
| 271 268 | 
             
                      end
         | 
| 272 269 | 
             
                    end
         | 
| 273 270 |  | 
| @@ -57,6 +57,9 @@ module RuboCop | |
| 57 57 |  | 
| 58 58 | 
             
                    REGEXP = /(?<keyword>\S+).*#/.freeze
         | 
| 59 59 |  | 
| 60 | 
            +
                    SUBCLASS_DEFINITION = /\A\s*class\s+\w+\s*<\s*\w+/.freeze
         | 
| 61 | 
            +
                    METHOD_DEFINITION = /\A\s*def\s/.freeze
         | 
| 62 | 
            +
             | 
| 60 63 | 
             
                    def on_new_investigation
         | 
| 61 64 | 
             
                      processed_source.comments.each do |comment|
         | 
| 62 65 | 
             
                        next unless offensive?(comment) && (match = source_line(comment).match(REGEXP))
         | 
| @@ -93,7 +96,14 @@ module RuboCop | |
| 93 96 | 
             
                    end
         | 
| 94 97 |  | 
| 95 98 | 
             
                    def rbs_inline_annotation?(line, comment)
         | 
| 96 | 
            -
                       | 
| 99 | 
            +
                      case line
         | 
| 100 | 
            +
                      when SUBCLASS_DEFINITION
         | 
| 101 | 
            +
                        comment.text.start_with?(/#\[.+\]/)
         | 
| 102 | 
            +
                      when METHOD_DEFINITION
         | 
| 103 | 
            +
                        comment.text.start_with?('#:')
         | 
| 104 | 
            +
                      else
         | 
| 105 | 
            +
                        false
         | 
| 106 | 
            +
                      end
         | 
| 97 107 | 
             
                    end
         | 
| 98 108 | 
             
                  end
         | 
| 99 109 | 
             
                end
         | 
| @@ -33,24 +33,20 @@ module RuboCop | |
| 33 33 | 
             
                      branch.begin_type? ? Array(branch).last : branch
         | 
| 34 34 | 
             
                    end
         | 
| 35 35 |  | 
| 36 | 
            -
                    # rubocop:disable Metrics/AbcSize
         | 
| 37 36 | 
             
                    def lhs(node)
         | 
| 38 37 | 
             
                      case node.type
         | 
| 39 38 | 
             
                      when :send
         | 
| 40 39 | 
             
                        lhs_for_send(node)
         | 
| 41 | 
            -
                      when :op_asgn
         | 
| 42 | 
            -
                        "#{node. | 
| 43 | 
            -
                      when :and_asgn, :or_asgn
         | 
| 44 | 
            -
                        "#{node.children[0].source} #{node.loc.operator.source} "
         | 
| 40 | 
            +
                      when :op_asgn, :and_asgn, :or_asgn
         | 
| 41 | 
            +
                        "#{node.assignment_node.source} #{node.operator}= "
         | 
| 45 42 | 
             
                      when :casgn
         | 
| 46 43 | 
             
                        lhs_for_casgn(node)
         | 
| 47 44 | 
             
                      when *ConditionalAssignment::VARIABLE_ASSIGNMENT_TYPES
         | 
| 48 | 
            -
                        "#{node. | 
| 45 | 
            +
                        "#{node.name} = "
         | 
| 49 46 | 
             
                      else
         | 
| 50 47 | 
             
                        node.source
         | 
| 51 48 | 
             
                      end
         | 
| 52 49 | 
             
                    end
         | 
| 53 | 
            -
                    # rubocop:enable Metrics/AbcSize
         | 
| 54 50 |  | 
| 55 51 | 
             
                    def indent(cop, source)
         | 
| 56 52 | 
             
                      conf = cop.config.for_cop(END_ALIGNMENT)
         | 
| @@ -94,11 +90,12 @@ module RuboCop | |
| 94 90 | 
             
                    end
         | 
| 95 91 |  | 
| 96 92 | 
             
                    def lhs_for_casgn(node)
         | 
| 97 | 
            -
                       | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 93 | 
            +
                      if node.namespace.nil?
         | 
| 94 | 
            +
                        "#{node.name} = "
         | 
| 95 | 
            +
                      elsif node.namespace.cbase_type?
         | 
| 96 | 
            +
                        "::#{node.name} = "
         | 
| 100 97 | 
             
                      else
         | 
| 101 | 
            -
                        "#{namespace. | 
| 98 | 
            +
                        "#{node.namespace.const_name}::#{node.name} = "
         | 
| 102 99 | 
             
                      end
         | 
| 103 100 | 
             
                    end
         | 
| 104 101 |  | 
| @@ -210,7 +207,6 @@ module RuboCop | |
| 210 207 | 
             
                  class ConditionalAssignment < Base
         | 
| 211 208 | 
             
                    include ConditionalAssignmentHelper
         | 
| 212 209 | 
             
                    include ConfigurableEnforcedStyle
         | 
| 213 | 
            -
                    include IgnoredNode
         | 
| 214 210 | 
             
                    extend AutoCorrector
         | 
| 215 211 |  | 
| 216 212 | 
             
                    MSG = 'Use the return of the conditional for variable assignment and comparison.'
         | 
| @@ -317,12 +313,14 @@ module RuboCop | |
| 317 313 | 
             
                    end
         | 
| 318 314 |  | 
| 319 315 | 
             
                    def assignment_node(node)
         | 
| 320 | 
            -
                       | 
| 316 | 
            +
                      assignment = node.send_type? ? node.last_argument : node.expression
         | 
| 321 317 |  | 
| 322 318 | 
             
                      # ignore pseudo-assignments without rhs in for nodes
         | 
| 323 319 | 
             
                      return if node.parent&.for_type?
         | 
| 324 320 |  | 
| 325 | 
            -
                       | 
| 321 | 
            +
                      if assignment.begin_type? && assignment.children.one?
         | 
| 322 | 
            +
                        assignment = assignment.children.first
         | 
| 323 | 
            +
                      end
         | 
| 326 324 |  | 
| 327 325 | 
             
                      assignment
         | 
| 328 326 | 
             
                    end
         | 
| @@ -338,7 +336,7 @@ module RuboCop | |
| 338 336 | 
             
                    end
         | 
| 339 337 |  | 
| 340 338 | 
             
                    def move_assignment_inside_condition(corrector, node)
         | 
| 341 | 
            -
                       | 
| 339 | 
            +
                      condition = node.send_type? ? node.last_argument : node.expression
         | 
| 342 340 |  | 
| 343 341 | 
             
                      if ternary_condition?(condition)
         | 
| 344 342 | 
             
                        TernaryCorrector.move_assignment_inside_condition(corrector, node)
         | 
| @@ -459,7 +457,7 @@ module RuboCop | |
| 459 457 | 
             
                    end
         | 
| 460 458 |  | 
| 461 459 | 
             
                    def assignment(node)
         | 
| 462 | 
            -
                       | 
| 460 | 
            +
                      condition = node.send_type? ? node.last_argument : node.expression
         | 
| 463 461 |  | 
| 464 462 | 
             
                      node.source_range.begin.join(condition.source_range.begin)
         | 
| 465 463 | 
             
                    end
         | 
| @@ -506,7 +504,7 @@ module RuboCop | |
| 506 504 | 
             
                      end
         | 
| 507 505 |  | 
| 508 506 | 
             
                      def move_assignment_inside_condition(corrector, node)
         | 
| 509 | 
            -
                         | 
| 507 | 
            +
                        rhs = node.send_type? ? node.last_argument : node.expression
         | 
| 510 508 | 
             
                        if_branch, else_branch = extract_branches(node)
         | 
| 511 509 | 
             
                        assignment = assignment(node)
         | 
| 512 510 |  | 
| @@ -537,8 +535,8 @@ module RuboCop | |
| 537 535 | 
             
                      end
         | 
| 538 536 |  | 
| 539 537 | 
             
                      def extract_branches(node)
         | 
| 540 | 
            -
                         | 
| 541 | 
            -
                        condition | 
| 538 | 
            +
                        rhs = node.send_type? ? node.last_argument : node.expression
         | 
| 539 | 
            +
                        condition = rhs.children.first if rhs.begin_type? && rhs.children.one?
         | 
| 542 540 | 
             
                        _condition, if_branch, else_branch = *(condition || rhs)
         | 
| 543 541 |  | 
| 544 542 | 
             
                        [if_branch, else_branch]
         | 
| @@ -567,7 +565,7 @@ module RuboCop | |
| 567 565 |  | 
| 568 566 | 
             
                      def move_assignment_inside_condition(corrector, node)
         | 
| 569 567 | 
             
                        column = node.source_range.column
         | 
| 570 | 
            -
                         | 
| 568 | 
            +
                        condition = node.send_type? ? node.last_argument : node.expression
         | 
| 571 569 | 
             
                        assignment = assignment(node)
         | 
| 572 570 |  | 
| 573 571 | 
             
                        corrector.remove(assignment)
         | 
| @@ -618,7 +616,7 @@ module RuboCop | |
| 618 616 |  | 
| 619 617 | 
             
                      def move_assignment_inside_condition(corrector, node)
         | 
| 620 618 | 
             
                        column = node.source_range.column
         | 
| 621 | 
            -
                         | 
| 619 | 
            +
                        condition = node.send_type? ? node.last_argument : node.expression
         | 
| 622 620 | 
             
                        assignment = assignment(node)
         | 
| 623 621 |  | 
| 624 622 | 
             
                        corrector.remove(assignment)
         |