rubocop 0.89.1 → 0.90.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 +79 -11
 - data/lib/rubocop.rb +13 -0
 - data/lib/rubocop/cached_data.rb +1 -0
 - data/lib/rubocop/cli/command.rb +1 -0
 - data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
 - data/lib/rubocop/cli/command/base.rb +1 -0
 - data/lib/rubocop/cli/command/execute_runner.rb +1 -0
 - data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
 - data/lib/rubocop/cli/command/show_cops.rb +1 -0
 - data/lib/rubocop/cli/command/version.rb +1 -0
 - data/lib/rubocop/cli/environment.rb +1 -0
 - data/lib/rubocop/comment_config.rb +5 -0
 - data/lib/rubocop/config_loader.rb +17 -6
 - data/lib/rubocop/config_loader_resolver.rb +1 -0
 - data/lib/rubocop/config_obsoletion.rb +1 -0
 - data/lib/rubocop/config_validator.rb +3 -0
 - data/lib/rubocop/cop/base.rb +23 -0
 - data/lib/rubocop/cop/bundler/gem_comment.rb +7 -3
 - data/lib/rubocop/cop/commissioner.rb +47 -7
 - data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
 - data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
 - data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
 - data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
 - data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
 - data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
 - data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +4 -9
 - data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
 - data/lib/rubocop/cop/documentation.rb +22 -0
 - data/lib/rubocop/cop/generator.rb +1 -0
 - data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
 - data/lib/rubocop/cop/layout/class_structure.rb +10 -9
 - data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
 - data/lib/rubocop/cop/layout/condition_position.rb +13 -15
 - data/lib/rubocop/cop/layout/def_end_alignment.rb +7 -4
 - data/lib/rubocop/cop/layout/dot_position.rb +21 -17
 - data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
 - data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +19 -16
 - data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
 - data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +144 -0
 - data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
 - data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
 - data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +4 -6
 - data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
 - data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -6
 - data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
 - data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
 - data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
 - data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -5
 - data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
 - data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
 - data/lib/rubocop/cop/layout/end_alignment.rb +6 -7
 - data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
 - data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
 - data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
 - data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
 - data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
 - data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
 - data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
 - data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
 - data/lib/rubocop/cop/layout/leading_comment_space.rb +11 -9
 - data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
 - data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
 - data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
 - data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
 - data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
 - data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
 - data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
 - data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
 - data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
 - data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
 - data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -21
 - data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
 - data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
 - data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
 - data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
 - data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
 - data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +20 -15
 - data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
 - data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
 - data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
 - data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
 - data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
 - data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
 - data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
 - data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
 - data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +13 -16
 - data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
 - data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
 - data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +16 -19
 - data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
 - data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
 - data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
 - data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +13 -16
 - data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +10 -11
 - data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
 - data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
 - data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
 - data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
 - data/lib/rubocop/cop/lint/duplicate_require.rb +41 -0
 - data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +0 -11
 - data/lib/rubocop/cop/lint/empty_file.rb +53 -0
 - data/lib/rubocop/cop/lint/missing_super.rb +2 -2
 - data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
 - data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +9 -19
 - data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
 - data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
 - data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
 - data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
 - data/lib/rubocop/cop/lint/useless_method_definition.rb +77 -0
 - data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -0
 - data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
 - data/lib/rubocop/cop/mixin/alignment.rb +3 -0
 - data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
 - data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
 - data/lib/rubocop/cop/mixin/check_line_breakable.rb +16 -7
 - data/lib/rubocop/cop/mixin/comments_help.rb +54 -0
 - data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
 - data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
 - data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +3 -1
 - data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
 - data/lib/rubocop/cop/mixin/hash_transform_method.rb +17 -0
 - data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
 - data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +12 -10
 - data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
 - data/lib/rubocop/cop/mixin/percent_array.rb +14 -3
 - data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
 - data/lib/rubocop/cop/mixin/rescue_node.rb +10 -1
 - data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
 - data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
 - data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
 - data/lib/rubocop/cop/mixin/trailing_comma.rb +7 -7
 - data/lib/rubocop/cop/offense.rb +1 -0
 - data/lib/rubocop/cop/severity.rb +0 -8
 - data/lib/rubocop/cop/style/case_equality.rb +8 -3
 - data/lib/rubocop/cop/style/case_like_if.rb +20 -4
 - data/lib/rubocop/cop/style/class_methods_definitions.rb +131 -0
 - data/lib/rubocop/cop/style/combinable_loops.rb +89 -0
 - data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
 - data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
 - data/lib/rubocop/cop/style/guard_clause.rb +1 -0
 - data/lib/rubocop/cop/style/hash_syntax.rb +6 -5
 - data/lib/rubocop/cop/style/hash_transform_keys.rb +14 -1
 - data/lib/rubocop/cop/style/hash_transform_values.rb +14 -1
 - data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -2
 - data/lib/rubocop/cop/style/keyword_parameters_order.rb +58 -0
 - data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +10 -1
 - data/lib/rubocop/cop/style/multiline_when_then.rb +2 -2
 - data/lib/rubocop/cop/style/negated_if.rb +6 -6
 - data/lib/rubocop/cop/style/negated_unless.rb +6 -6
 - data/lib/rubocop/cop/style/negated_while.rb +7 -15
 - data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
 - data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -11
 - data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
 - data/lib/rubocop/cop/style/next.rb +10 -14
 - data/lib/rubocop/cop/style/nil_comparison.rb +11 -11
 - data/lib/rubocop/cop/style/non_nil_check.rb +32 -26
 - data/lib/rubocop/cop/style/not.rb +19 -26
 - data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
 - data/lib/rubocop/cop/style/numeric_predicate.rb +4 -11
 - data/lib/rubocop/cop/style/one_line_conditional.rb +71 -23
 - data/lib/rubocop/cop/style/option_hash.rb +1 -1
 - data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
 - data/lib/rubocop/cop/style/or_assignment.rb +13 -10
 - data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
 - data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
 - data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
 - data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
 - data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
 - data/lib/rubocop/cop/style/preferred_hash_methods.rb +9 -14
 - data/lib/rubocop/cop/style/proc.rb +6 -6
 - data/lib/rubocop/cop/style/raise_args.rb +13 -24
 - data/lib/rubocop/cop/style/random_with_offset.rb +15 -16
 - data/lib/rubocop/cop/style/redundant_assignment.rb +8 -10
 - data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
 - data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
 - data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
 - data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
 - data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +8 -8
 - data/lib/rubocop/cop/style/redundant_freeze.rb +3 -6
 - data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
 - data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -9
 - data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
 - data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
 - data/lib/rubocop/cop/style/redundant_self.rb +2 -2
 - data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
 - data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
 - data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
 - data/lib/rubocop/cop/style/return_nil.rb +5 -5
 - data/lib/rubocop/cop/style/safe_navigation.rb +13 -12
 - data/lib/rubocop/cop/style/sample.rb +10 -13
 - data/lib/rubocop/cop/style/self_assignment.rb +26 -22
 - data/lib/rubocop/cop/style/semicolon.rb +6 -9
 - data/lib/rubocop/cop/style/send.rb +2 -2
 - data/lib/rubocop/cop/style/signal_exception.rb +21 -19
 - data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
 - data/lib/rubocop/cop/style/single_line_methods.rb +17 -16
 - data/lib/rubocop/cop/style/slicing_with_range.rb +4 -7
 - data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
 - data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
 - data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
 - data/lib/rubocop/cop/style/stderr_puts.rb +4 -6
 - data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
 - data/lib/rubocop/cop/style/string_methods.rb +7 -17
 - data/lib/rubocop/cop/style/strip.rb +8 -14
 - data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
 - data/lib/rubocop/cop/style/symbol_array.rb +5 -16
 - data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
 - data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
 - data/lib/rubocop/cop/style/ternary_parentheses.rb +21 -20
 - data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
 - data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
 - data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
 - data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
 - data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
 - data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +7 -6
 - data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
 - data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
 - data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
 - data/lib/rubocop/cop/style/unless_else.rb +5 -8
 - data/lib/rubocop/cop/style/unpack_first.rb +4 -8
 - data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
 - data/lib/rubocop/cop/style/when_then.rb +4 -6
 - data/lib/rubocop/cop/style/while_until_do.rb +6 -16
 - data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
 - data/lib/rubocop/cop/style/word_array.rb +5 -23
 - data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
 - data/lib/rubocop/cop/style/zero_length_predicate.rb +11 -13
 - data/lib/rubocop/cop/team.rb +1 -0
 - data/lib/rubocop/cop/util.rb +1 -1
 - data/lib/rubocop/cop/utils/format_string.rb +3 -5
 - data/lib/rubocop/cop/variable_force.rb +2 -0
 - data/lib/rubocop/cops_documentation_generator.rb +4 -2
 - data/lib/rubocop/core_ext/string.rb +1 -1
 - data/lib/rubocop/ext/regexp_node.rb +46 -0
 - data/lib/rubocop/file_finder.rb +1 -0
 - data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
 - data/lib/rubocop/formatter/html_formatter.rb +2 -0
 - data/lib/rubocop/formatter/progress_formatter.rb +2 -1
 - data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
 - data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
 - data/lib/rubocop/name_similarity.rb +1 -0
 - data/lib/rubocop/options.rb +3 -0
 - data/lib/rubocop/remote_config.rb +1 -0
 - data/lib/rubocop/result_cache.rb +1 -0
 - data/lib/rubocop/rspec/cop_helper.rb +4 -1
 - data/lib/rubocop/rspec/expect_offense.rb +10 -5
 - data/lib/rubocop/rspec/shared_contexts.rb +12 -0
 - data/lib/rubocop/runner.rb +1 -0
 - data/lib/rubocop/string_interpreter.rb +3 -0
 - data/lib/rubocop/target_finder.rb +1 -0
 - data/lib/rubocop/target_ruby.rb +6 -0
 - data/lib/rubocop/version.rb +2 -1
 - data/lib/rubocop/yaml_duplication_checker.rb +1 -0
 - metadata +15 -2
 
| 
         @@ -26,8 +26,9 @@ module RuboCop 
     | 
|
| 
       26 
26 
     | 
    
         
             
                  #         bar
         
     | 
| 
       27 
27 
     | 
    
         
             
                  #       do_something
         
     | 
| 
       28 
28 
     | 
    
         
             
                  #     end
         
     | 
| 
       29 
     | 
    
         
            -
                  class FirstMethodParameterLineBreak <  
     | 
| 
      
 29 
     | 
    
         
            +
                  class FirstMethodParameterLineBreak < Base
         
     | 
| 
       30 
30 
     | 
    
         
             
                    include FirstElementLineBreak
         
     | 
| 
      
 31 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
                    MSG = 'Add a line break before the first parameter of a ' \
         
     | 
| 
       33 
34 
     | 
    
         
             
                          'multi-line method parameter list.'
         
     | 
| 
         @@ -36,10 +37,6 @@ module RuboCop 
     | 
|
| 
       36 
37 
     | 
    
         
             
                      check_method_line_break(node, node.arguments)
         
     | 
| 
       37 
38 
     | 
    
         
             
                    end
         
     | 
| 
       38 
39 
     | 
    
         
             
                    alias on_defs on_def
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       41 
     | 
    
         
            -
                      EmptyLineCorrector.insert_before(node)
         
     | 
| 
       42 
     | 
    
         
            -
                    end
         
     | 
| 
       43 
40 
     | 
    
         
             
                  end
         
     | 
| 
       44 
41 
     | 
    
         
             
                end
         
     | 
| 
       45 
42 
     | 
    
         
             
              end
         
     | 
| 
         @@ -175,9 +175,10 @@ module RuboCop 
     | 
|
| 
       175 
175 
     | 
    
         
             
                  #   do_something({foo: 1,
         
     | 
| 
       176 
176 
     | 
    
         
             
                  #     bar: 2})
         
     | 
| 
       177 
177 
     | 
    
         
             
                  #
         
     | 
| 
       178 
     | 
    
         
            -
                  class HashAlignment <  
     | 
| 
      
 178 
     | 
    
         
            +
                  class HashAlignment < Base
         
     | 
| 
       179 
179 
     | 
    
         
             
                    include HashAlignmentStyles
         
     | 
| 
       180 
180 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 181 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       181 
182 
     | 
    
         | 
| 
       182 
183 
     | 
    
         
             
                    MESSAGES = { KeyAlignment => 'Align the keys of a hash literal if ' \
         
     | 
| 
       183 
184 
     | 
    
         
             
                                  'they span more than one line.',
         
     | 
| 
         @@ -212,13 +213,6 @@ module RuboCop 
     | 
|
| 
       212 
213 
     | 
    
         
             
                      check_pairs(node)
         
     | 
| 
       213 
214 
     | 
    
         
             
                    end
         
     | 
| 
       214 
215 
     | 
    
         | 
| 
       215 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       216 
     | 
    
         
            -
                      delta = column_deltas[alignment_for(node).first.class][node]
         
     | 
| 
       217 
     | 
    
         
            -
                      return if delta.nil?
         
     | 
| 
       218 
     | 
    
         
            -
             
     | 
| 
       219 
     | 
    
         
            -
                      correct_node(node, delta)
         
     | 
| 
       220 
     | 
    
         
            -
                    end
         
     | 
| 
       221 
     | 
    
         
            -
             
     | 
| 
       222 
216 
     | 
    
         
             
                    attr_accessor :offences_by, :column_deltas
         
     | 
| 
       223 
217 
     | 
    
         | 
| 
       224 
218 
     | 
    
         
             
                    private
         
     | 
| 
         @@ -254,7 +248,11 @@ module RuboCop 
     | 
|
| 
       254 
248 
     | 
    
         
             
                    def add_offences
         
     | 
| 
       255 
249 
     | 
    
         
             
                      format, offences = offences_by.min_by { |_, v| v.length }
         
     | 
| 
       256 
250 
     | 
    
         
             
                      (offences || []).each do |offence|
         
     | 
| 
       257 
     | 
    
         
            -
                        add_offense(offence, message: MESSAGES[format])
         
     | 
| 
      
 251 
     | 
    
         
            +
                        add_offense(offence, message: MESSAGES[format]) do |corrector|
         
     | 
| 
      
 252 
     | 
    
         
            +
                          delta = column_deltas[alignment_for(offence).first.class][offence]
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
                          correct_node(corrector, offence, delta) unless delta.nil?
         
     | 
| 
      
 255 
     | 
    
         
            +
                        end
         
     | 
| 
       258 
256 
     | 
    
         
             
                      end
         
     | 
| 
       259 
257 
     | 
    
         
             
                    end
         
     | 
| 
       260 
258 
     | 
    
         | 
| 
         @@ -293,25 +291,26 @@ module RuboCop 
     | 
|
| 
       293 
291 
     | 
    
         
             
                        new_alignment('EnforcedColonStyle')
         
     | 
| 
       294 
292 
     | 
    
         
             
                    end
         
     | 
| 
       295 
293 
     | 
    
         | 
| 
       296 
     | 
    
         
            -
                    def correct_node(node, delta)
         
     | 
| 
      
 294 
     | 
    
         
            +
                    def correct_node(corrector, node, delta)
         
     | 
| 
       297 
295 
     | 
    
         
             
                      # We can't use the instance variable inside the lambda. That would
         
     | 
| 
       298 
296 
     | 
    
         
             
                      # just give each lambda the same reference and they would all get the
         
     | 
| 
       299 
297 
     | 
    
         
             
                      # last value of each. A local variable fixes the problem.
         
     | 
| 
       300 
298 
     | 
    
         | 
| 
       301 
299 
     | 
    
         
             
                      if !node.value
         
     | 
| 
       302 
     | 
    
         
            -
                         
     | 
| 
      
 300 
     | 
    
         
            +
                        delta_value = delta[:key] || 0
         
     | 
| 
      
 301 
     | 
    
         
            +
                        correct_no_value(corrector, delta_value, node.source_range)
         
     | 
| 
       303 
302 
     | 
    
         
             
                      else
         
     | 
| 
       304 
     | 
    
         
            -
                        correct_key_value(delta, node.key.source_range,
         
     | 
| 
      
 303 
     | 
    
         
            +
                        correct_key_value(corrector, delta, node.key.source_range,
         
     | 
| 
       305 
304 
     | 
    
         
             
                                          node.value.source_range,
         
     | 
| 
       306 
305 
     | 
    
         
             
                                          node.loc.operator)
         
     | 
| 
       307 
306 
     | 
    
         
             
                      end
         
     | 
| 
       308 
307 
     | 
    
         
             
                    end
         
     | 
| 
       309 
308 
     | 
    
         | 
| 
       310 
     | 
    
         
            -
                    def correct_no_value(key_delta, key)
         
     | 
| 
       311 
     | 
    
         
            -
                       
     | 
| 
      
 309 
     | 
    
         
            +
                    def correct_no_value(corrector, key_delta, key)
         
     | 
| 
      
 310 
     | 
    
         
            +
                      adjust(corrector, key_delta, key)
         
     | 
| 
       312 
311 
     | 
    
         
             
                    end
         
     | 
| 
       313 
312 
     | 
    
         | 
| 
       314 
     | 
    
         
            -
                    def correct_key_value(delta, key, value, separator)
         
     | 
| 
      
 313 
     | 
    
         
            +
                    def correct_key_value(corrector, delta, key, value, separator)
         
     | 
| 
       315 
314 
     | 
    
         
             
                      # We can't use the instance variable inside the lambda. That would
         
     | 
| 
       316 
315 
     | 
    
         
             
                      # just give each lambda the same reference and they would all get the
         
     | 
| 
       317 
316 
     | 
    
         
             
                      # last value of each. Some local variables fix the problem.
         
     | 
| 
         @@ -322,11 +321,9 @@ module RuboCop 
     | 
|
| 
       322 
321 
     | 
    
         
             
                      key_column = key.column
         
     | 
| 
       323 
322 
     | 
    
         
             
                      key_delta = -key_column if key_delta < -key_column
         
     | 
| 
       324 
323 
     | 
    
         | 
| 
       325 
     | 
    
         
            -
                       
     | 
| 
       326 
     | 
    
         
            -
             
     | 
| 
       327 
     | 
    
         
            -
             
     | 
| 
       328 
     | 
    
         
            -
                        adjust(corrector, value_delta, value)
         
     | 
| 
       329 
     | 
    
         
            -
                      end
         
     | 
| 
      
 324 
     | 
    
         
            +
                      adjust(corrector, key_delta, key)
         
     | 
| 
      
 325 
     | 
    
         
            +
                      adjust(corrector, separator_delta, separator)
         
     | 
| 
      
 326 
     | 
    
         
            +
                      adjust(corrector, value_delta, value)
         
     | 
| 
       330 
327 
     | 
    
         
             
                    end
         
     | 
| 
       331 
328 
     | 
    
         | 
| 
       332 
329 
     | 
    
         
             
                    def new_alignment(key)
         
     | 
| 
         @@ -50,12 +50,17 @@ module RuboCop 
     | 
|
| 
       50 
50 
     | 
    
         
             
                  #        123,
         
     | 
| 
       51 
51 
     | 
    
         
             
                  #      )
         
     | 
| 
       52 
52 
     | 
    
         
             
                  #
         
     | 
| 
       53 
     | 
    
         
            -
                  class HeredocArgumentClosingParenthesis <  
     | 
| 
      
 53 
     | 
    
         
            +
                  class HeredocArgumentClosingParenthesis < Base
         
     | 
| 
       54 
54 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 55 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
                    MSG = 'Put the closing parenthesis for a method call with a ' \
         
     | 
| 
       57 
58 
     | 
    
         
             
                    'HEREDOC parameter on the same line as the HEREDOC opening.'
         
     | 
| 
       58 
59 
     | 
    
         | 
| 
      
 60 
     | 
    
         
            +
                    def self.autocorrect_incompatible_with
         
     | 
| 
      
 61 
     | 
    
         
            +
                      [Style::TrailingCommaInArguments]
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
       59 
64 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       60 
65 
     | 
    
         
             
                      heredoc_arg = extract_heredoc_argument(node)
         
     | 
| 
       61 
66 
     | 
    
         
             
                      return unless heredoc_arg
         
     | 
| 
         @@ -65,9 +70,13 @@ module RuboCop 
     | 
|
| 
       65 
70 
     | 
    
         
             
                      return unless outermost_send.loc.end
         
     | 
| 
       66 
71 
     | 
    
         
             
                      return unless heredoc_arg.first_line != outermost_send.loc.end.line
         
     | 
| 
       67 
72 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                      add_offense(outermost_send 
     | 
| 
      
 73 
     | 
    
         
            +
                      add_offense(outermost_send.loc.end) do |corrector|
         
     | 
| 
      
 74 
     | 
    
         
            +
                        autocorrect(corrector, outermost_send)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      end
         
     | 
| 
       69 
76 
     | 
    
         
             
                    end
         
     | 
| 
       70 
77 
     | 
    
         | 
| 
      
 78 
     | 
    
         
            +
                    private
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
       71 
80 
     | 
    
         
             
                    # Autocorrection note:
         
     | 
| 
       72 
81 
     | 
    
         
             
                    #
         
     | 
| 
       73 
82 
     | 
    
         
             
                    # Commas are a bit tricky to handle when the method call is
         
     | 
| 
         @@ -94,22 +103,14 @@ module RuboCop 
     | 
|
| 
       94 
103 
     | 
    
         
             
                    #   SQL
         
     | 
| 
       95 
104 
     | 
    
         
             
                    #   third_array_value,
         
     | 
| 
       96 
105 
     | 
    
         
             
                    # ]
         
     | 
| 
       97 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       98 
     | 
    
         
            -
                       
     | 
| 
       99 
     | 
    
         
            -
                        fix_closing_parenthesis(node, corrector)
         
     | 
| 
      
 106 
     | 
    
         
            +
                    def autocorrect(corrector, node)
         
     | 
| 
      
 107 
     | 
    
         
            +
                      fix_closing_parenthesis(node, corrector)
         
     | 
| 
       100 
108 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
      
 109 
     | 
    
         
            +
                      remove_internal_trailing_comma(node, corrector) if internal_trailing_comma?(node)
         
     | 
| 
       102 
110 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                      end
         
     | 
| 
      
 111 
     | 
    
         
            +
                      fix_external_trailing_comma(node, corrector) if external_trailing_comma?(node)
         
     | 
| 
       105 
112 
     | 
    
         
             
                    end
         
     | 
| 
       106 
113 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
                    def self.autocorrect_incompatible_with
         
     | 
| 
       108 
     | 
    
         
            -
                      [Style::TrailingCommaInArguments]
         
     | 
| 
       109 
     | 
    
         
            -
                    end
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                    private
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
114 
     | 
    
         
             
                    def outermost_send_on_same_line(heredoc)
         
     | 
| 
       114 
115 
     | 
    
         
             
                      previous = heredoc
         
     | 
| 
       115 
116 
     | 
    
         
             
                      current = previous.parent
         
     | 
| 
         @@ -21,9 +21,9 @@ module RuboCop 
     | 
|
| 
       21 
21 
     | 
    
         
             
                  #     something
         
     | 
| 
       22 
22 
     | 
    
         
             
                  #   RUBY
         
     | 
| 
       23 
23 
     | 
    
         
             
                  #
         
     | 
| 
       24 
     | 
    
         
            -
                   
     | 
| 
       25 
     | 
    
         
            -
                  class HeredocIndentation < Cop
         
     | 
| 
      
 24 
     | 
    
         
            +
                  class HeredocIndentation < Base
         
     | 
| 
       26 
25 
     | 
    
         
             
                    include Heredoc
         
     | 
| 
      
 26 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                    TYPE_MSG = 'Use %<indentation_width>d spaces for indentation in a ' \
         
     | 
| 
       29 
29 
     | 
    
         
             
                               'heredoc by using `<<~` instead of `%<current_indent_type>s`.'
         
     | 
| 
         @@ -34,8 +34,9 @@ module RuboCop 
     | 
|
| 
       34 
34 
     | 
    
         
             
                      return if body.strip.empty?
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                      body_indent_level = indent_level(body)
         
     | 
| 
      
 37 
     | 
    
         
            +
                      heredoc_indent_type = heredoc_indent_type(node)
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                      if heredoc_indent_type 
     | 
| 
      
 39 
     | 
    
         
            +
                      if heredoc_indent_type == '~'
         
     | 
| 
       39 
40 
     | 
    
         
             
                        expected_indent_level = base_indent_level(node) + indentation_width
         
     | 
| 
       40 
41 
     | 
    
         
             
                        return if expected_indent_level == body_indent_level
         
     | 
| 
       41 
42 
     | 
    
         
             
                      else
         
     | 
| 
         @@ -44,12 +45,16 @@ module RuboCop 
     | 
|
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
                      return if line_too_long?(node)
         
     | 
| 
       46 
47 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                       
     | 
| 
      
 48 
     | 
    
         
            +
                      register_offense(node, heredoc_indent_type)
         
     | 
| 
       48 
49 
     | 
    
         
             
                    end
         
     | 
| 
       49 
50 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                     
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
                    private
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    def register_offense(node, heredoc_indent_type)
         
     | 
| 
      
 54 
     | 
    
         
            +
                      message = message(heredoc_indent_type)
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                      add_offense(node.loc.heredoc_body, message: message) do |corrector|
         
     | 
| 
      
 57 
     | 
    
         
            +
                        if heredoc_indent_type == '~'
         
     | 
| 
       53 
58 
     | 
    
         
             
                          adjust_squiggly(corrector, node)
         
     | 
| 
       54 
59 
     | 
    
         
             
                        else
         
     | 
| 
       55 
60 
     | 
    
         
             
                          adjust_minus(corrector, node)
         
     | 
| 
         @@ -57,10 +62,8 @@ module RuboCop 
     | 
|
| 
       57 
62 
     | 
    
         
             
                      end
         
     | 
| 
       58 
63 
     | 
    
         
             
                    end
         
     | 
| 
       59 
64 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                     
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                    def message(node)
         
     | 
| 
       63 
     | 
    
         
            -
                      current_indent_type = "<<#{heredoc_indent_type(node)}"
         
     | 
| 
      
 65 
     | 
    
         
            +
                    def message(heredoc_indent_type)
         
     | 
| 
      
 66 
     | 
    
         
            +
                      current_indent_type = "<<#{heredoc_indent_type}"
         
     | 
| 
       64 
67 
     | 
    
         | 
| 
       65 
68 
     | 
    
         
             
                      if current_indent_type == '<<~'
         
     | 
| 
       66 
69 
     | 
    
         
             
                        width_message(indentation_width)
         
     | 
| 
         @@ -17,21 +17,20 @@ module RuboCop 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  #     def foo; end
         
     | 
| 
       18 
18 
     | 
    
         
             
                  #   end
         
     | 
| 
       19 
19 
     | 
    
         
             
                  #
         
     | 
| 
       20 
     | 
    
         
            -
                  class InitialIndentation <  
     | 
| 
      
 20 
     | 
    
         
            +
                  class InitialIndentation < Base
         
     | 
| 
       21 
21 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 22 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
                    MSG = 'Indentation of first line in file detected.'
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                    def  
     | 
| 
      
 26 
     | 
    
         
            +
                    def on_new_investigation
         
     | 
| 
       26 
27 
     | 
    
         
             
                      space_before(first_token) do |space|
         
     | 
| 
       27 
     | 
    
         
            -
                        add_offense( 
     | 
| 
      
 28 
     | 
    
         
            +
                        add_offense(first_token.pos) do |corrector|
         
     | 
| 
      
 29 
     | 
    
         
            +
                          corrector.remove(space)
         
     | 
| 
      
 30 
     | 
    
         
            +
                        end
         
     | 
| 
       28 
31 
     | 
    
         
             
                      end
         
     | 
| 
       29 
32 
     | 
    
         
             
                    end
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                    def autocorrect(range)
         
     | 
| 
       32 
     | 
    
         
            -
                      ->(corrector) { corrector.remove(range) }
         
     | 
| 
       33 
     | 
    
         
            -
                    end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
34 
     | 
    
         
             
                    private
         
     | 
| 
       36 
35 
     | 
    
         | 
| 
       37 
36 
     | 
    
         
             
                    def first_token
         
     | 
| 
         @@ -49,31 +49,33 @@ module RuboCop 
     | 
|
| 
       49 
49 
     | 
    
         
             
                  #   #ruby=2.7.0
         
     | 
| 
       50 
50 
     | 
    
         
             
                  #   #ruby-gemset=myproject
         
     | 
| 
       51 
51 
     | 
    
         
             
                  #
         
     | 
| 
       52 
     | 
    
         
            -
                  class LeadingCommentSpace <  
     | 
| 
      
 52 
     | 
    
         
            +
                  class LeadingCommentSpace < Base
         
     | 
| 
       53 
53 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 54 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       54 
55 
     | 
    
         | 
| 
       55 
56 
     | 
    
         
             
                    MSG = 'Missing space after `#`.'
         
     | 
| 
       56 
57 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
                    def  
     | 
| 
      
 58 
     | 
    
         
            +
                    def on_new_investigation
         
     | 
| 
       58 
59 
     | 
    
         
             
                      processed_source.comments.each do |comment|
         
     | 
| 
       59 
60 
     | 
    
         
             
                        next unless /\A#+[^#\s=:+-]/.match?(comment.text)
         
     | 
| 
       60 
61 
     | 
    
         
             
                        next if comment.loc.line == 1 && allowed_on_first_line?(comment)
         
     | 
| 
       61 
62 
     | 
    
         
             
                        next if doxygen_comment_style?(comment)
         
     | 
| 
       62 
63 
     | 
    
         
             
                        next if gemfile_ruby_comment?(comment)
         
     | 
| 
       63 
64 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
                        add_offense(comment)
         
     | 
| 
      
 65 
     | 
    
         
            +
                        add_offense(comment) do |corrector|
         
     | 
| 
      
 66 
     | 
    
         
            +
                          expr = comment.loc.expression
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                          corrector.insert_after(hash_mark(expr), ' ')
         
     | 
| 
      
 69 
     | 
    
         
            +
                        end
         
     | 
| 
       65 
70 
     | 
    
         
             
                      end
         
     | 
| 
       66 
71 
     | 
    
         
             
                    end
         
     | 
| 
       67 
72 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                     
     | 
| 
       69 
     | 
    
         
            -
                      expr = comment.loc.expression
         
     | 
| 
       70 
     | 
    
         
            -
                      hash_mark = range_between(expr.begin_pos, expr.begin_pos + 1)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    private
         
     | 
| 
       71 
74 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
      
 75 
     | 
    
         
            +
                    def hash_mark(expr)
         
     | 
| 
      
 76 
     | 
    
         
            +
                      range_between(expr.begin_pos, expr.begin_pos + 1)
         
     | 
| 
       73 
77 
     | 
    
         
             
                    end
         
     | 
| 
       74 
78 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                    private
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
79 
     | 
    
         
             
                    def allowed_on_first_line?(comment)
         
     | 
| 
       78 
80 
     | 
    
         
             
                      shebang?(comment) || rackup_config_file? && rackup_options?(comment)
         
     | 
| 
       79 
81 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -27,23 +27,18 @@ module RuboCop 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  #   # good
         
     | 
| 
       28 
28 
     | 
    
         
             
                  #   # (start of file)
         
     | 
| 
       29 
29 
     | 
    
         
             
                  #   # a comment
         
     | 
| 
       30 
     | 
    
         
            -
                  class LeadingEmptyLines <  
     | 
| 
      
 30 
     | 
    
         
            +
                  class LeadingEmptyLines < Base
         
     | 
| 
      
 31 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
       31 
33 
     | 
    
         
             
                    MSG = 'Unnecessary blank line at the beginning of the source.'
         
     | 
| 
       32 
34 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                    def  
     | 
| 
      
 35 
     | 
    
         
            +
                    def on_new_investigation
         
     | 
| 
       34 
36 
     | 
    
         
             
                      token = processed_source.tokens[0]
         
     | 
| 
       35 
37 
     | 
    
         
             
                      return unless token && token.line > 1
         
     | 
| 
       36 
38 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                      add_offense( 
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                    end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       42 
     | 
    
         
            -
                      range = Parser::Source::Range.new(processed_source.buffer,
         
     | 
| 
       43 
     | 
    
         
            -
                                                        0,
         
     | 
| 
       44 
     | 
    
         
            -
                                                        node.begin_pos)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      add_offense(token.pos) do |corrector|
         
     | 
| 
      
 40 
     | 
    
         
            +
                        range = Parser::Source::Range.new(processed_source.buffer, 0, token.begin_pos)
         
     | 
| 
       45 
41 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                      lambda do |corrector|
         
     | 
| 
       47 
42 
     | 
    
         
             
                        corrector.remove(range)
         
     | 
| 
       48 
43 
     | 
    
         
             
                      end
         
     | 
| 
       49 
44 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -88,8 +88,9 @@ module RuboCop 
     | 
|
| 
       88 
88 
     | 
    
         
             
                  #     # good
         
     | 
| 
       89 
89 
     | 
    
         
             
                  #     [ :a,
         
     | 
| 
       90 
90 
     | 
    
         
             
                  #       :b ]
         
     | 
| 
       91 
     | 
    
         
            -
                  class MultilineArrayBraceLayout <  
     | 
| 
      
 91 
     | 
    
         
            +
                  class MultilineArrayBraceLayout < Base
         
     | 
| 
       92 
92 
     | 
    
         
             
                    include MultilineLiteralBraceLayout
         
     | 
| 
      
 93 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       93 
94 
     | 
    
         | 
| 
       94 
95 
     | 
    
         
             
                    SAME_LINE_MESSAGE = 'The closing array brace must be on the same ' \
         
     | 
| 
       95 
96 
     | 
    
         
             
                      'line as the last array element when the opening brace is on the ' \
         
     | 
| 
         @@ -108,10 +109,6 @@ module RuboCop 
     | 
|
| 
       108 
109 
     | 
    
         
             
                    def on_array(node)
         
     | 
| 
       109 
110 
     | 
    
         
             
                      check_brace_layout(node)
         
     | 
| 
       110 
111 
     | 
    
         
             
                    end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       113 
     | 
    
         
            -
                      MultilineLiteralBraceCorrector.new(node, processed_source)
         
     | 
| 
       114 
     | 
    
         
            -
                    end
         
     | 
| 
       115 
112 
     | 
    
         
             
                  end
         
     | 
| 
       116 
113 
     | 
    
         
             
                end
         
     | 
| 
       117 
114 
     | 
    
         
             
              end
         
     | 
| 
         @@ -20,8 +20,9 @@ module RuboCop 
     | 
|
| 
       20 
20 
     | 
    
         
             
                  #     b,
         
     | 
| 
       21 
21 
     | 
    
         
             
                  #     c
         
     | 
| 
       22 
22 
     | 
    
         
             
                  #   ]
         
     | 
| 
       23 
     | 
    
         
            -
                  class MultilineArrayLineBreaks <  
     | 
| 
      
 23 
     | 
    
         
            +
                  class MultilineArrayLineBreaks < Base
         
     | 
| 
       24 
24 
     | 
    
         
             
                    include MultilineElementLineBreaks
         
     | 
| 
      
 25 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
27 
     | 
    
         
             
                    MSG = 'Each item in a multi-line array must start ' \
         
     | 
| 
       27 
28 
     | 
    
         
             
                      'on a separate line.'
         
     | 
| 
         @@ -29,10 +30,6 @@ module RuboCop 
     | 
|
| 
       29 
30 
     | 
    
         
             
                    def on_array(node)
         
     | 
| 
       30 
31 
     | 
    
         
             
                      check_line_breaks(node, node.children)
         
     | 
| 
       31 
32 
     | 
    
         
             
                    end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       34 
     | 
    
         
            -
                      EmptyLineCorrector.insert_before(node)
         
     | 
| 
       35 
     | 
    
         
            -
                    end
         
     | 
| 
       36 
33 
     | 
    
         
             
                  end
         
     | 
| 
       37 
34 
     | 
    
         
             
                end
         
     | 
| 
       38 
35 
     | 
    
         
             
              end
         
     | 
| 
         @@ -31,10 +31,11 @@ module RuboCop 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  #   foo = if expression
         
     | 
| 
       32 
32 
     | 
    
         
             
                  #     'bar'
         
     | 
| 
       33 
33 
     | 
    
         
             
                  #   end
         
     | 
| 
       34 
     | 
    
         
            -
                  class MultilineAssignmentLayout <  
     | 
| 
      
 34 
     | 
    
         
            +
                  class MultilineAssignmentLayout < Base
         
     | 
| 
       35 
35 
     | 
    
         
             
                    include CheckAssignment
         
     | 
| 
       36 
36 
     | 
    
         
             
                    include ConfigurableEnforcedStyle
         
     | 
| 
       37 
37 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 38 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
                    NEW_LINE_OFFENSE = 'Right hand side of multi-line assignment is on ' \
         
     | 
| 
       40 
41 
     | 
    
         
             
                      'the same line as the assignment operator `=`.'
         
     | 
| 
         @@ -63,24 +64,19 @@ module RuboCop 
     | 
|
| 
       63 
64 
     | 
    
         
             
                    def check_new_line_offense(node, rhs)
         
     | 
| 
       64 
65 
     | 
    
         
             
                      return unless node.loc.operator.line == rhs.first_line
         
     | 
| 
       65 
66 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                      add_offense(node, message: NEW_LINE_OFFENSE)
         
     | 
| 
      
 67 
     | 
    
         
            +
                      add_offense(node, message: NEW_LINE_OFFENSE) do |corrector|
         
     | 
| 
      
 68 
     | 
    
         
            +
                        corrector.insert_after(node.loc.operator, "\n")
         
     | 
| 
      
 69 
     | 
    
         
            +
                      end
         
     | 
| 
       67 
70 
     | 
    
         
             
                    end
         
     | 
| 
       68 
71 
     | 
    
         | 
| 
       69 
72 
     | 
    
         
             
                    def check_same_line_offense(node, rhs)
         
     | 
| 
       70 
73 
     | 
    
         
             
                      return unless node.loc.operator.line != rhs.first_line
         
     | 
| 
       71 
74 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
                      add_offense(node, message: SAME_LINE_OFFENSE)
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                      when :new_line
         
     | 
| 
       78 
     | 
    
         
            -
                        ->(corrector) { corrector.insert_after(node.loc.operator, "\n") }
         
     | 
| 
       79 
     | 
    
         
            -
                      when :same_line
         
     | 
| 
       80 
     | 
    
         
            -
                        range = range_between(node.loc.operator.end_pos,
         
     | 
| 
       81 
     | 
    
         
            -
                                              extract_rhs(node).source_range.begin_pos)
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                        ->(corrector) { corrector.replace(range, ' ') }
         
     | 
| 
      
 75 
     | 
    
         
            +
                      add_offense(node, message: SAME_LINE_OFFENSE) do |corrector|
         
     | 
| 
      
 76 
     | 
    
         
            +
                        range = range_between(
         
     | 
| 
      
 77 
     | 
    
         
            +
                          node.loc.operator.end_pos, extract_rhs(node).source_range.begin_pos
         
     | 
| 
      
 78 
     | 
    
         
            +
                        )
         
     | 
| 
      
 79 
     | 
    
         
            +
                        corrector.replace(range, ' ')
         
     | 
| 
       84 
80 
     | 
    
         
             
                      end
         
     | 
| 
       85 
81 
     | 
    
         
             
                    end
         
     | 
| 
       86 
82 
     | 
    
         | 
| 
         @@ -48,8 +48,9 @@ module RuboCop 
     | 
|
| 
       48 
48 
     | 
    
         
             
                  #     foo(i)
         
     | 
| 
       49 
49 
     | 
    
         
             
                  #     bar(i)
         
     | 
| 
       50 
50 
     | 
    
         
             
                  #   }
         
     | 
| 
       51 
     | 
    
         
            -
                  class MultilineBlockLayout <  
     | 
| 
      
 51 
     | 
    
         
            +
                  class MultilineBlockLayout < Base
         
     | 
| 
       52 
52 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 53 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       53 
54 
     | 
    
         | 
| 
       54 
55 
     | 
    
         
             
                    MSG = 'Block body expression is on the same line as ' \
         
     | 
| 
       55 
56 
     | 
    
         
             
                          'the block start.'
         
     | 
| 
         @@ -70,23 +71,6 @@ module RuboCop 
     | 
|
| 
       70 
71 
     | 
    
         
             
                      add_offense_for_expression(node, node.body, MSG)
         
     | 
| 
       71 
72 
     | 
    
         
             
                    end
         
     | 
| 
       72 
73 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       74 
     | 
    
         
            -
                      lambda do |corrector|
         
     | 
| 
       75 
     | 
    
         
            -
                        unless args_on_beginning_line?(node)
         
     | 
| 
       76 
     | 
    
         
            -
                          autocorrect_arguments(corrector, node)
         
     | 
| 
       77 
     | 
    
         
            -
                          expr_before_body = node.arguments.source_range.end
         
     | 
| 
       78 
     | 
    
         
            -
                        end
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                        return unless node.body
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                        expr_before_body ||= node.loc.begin
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                        if expr_before_body.line == node.body.first_line
         
     | 
| 
       85 
     | 
    
         
            -
                          autocorrect_body(corrector, node, node.body)
         
     | 
| 
       86 
     | 
    
         
            -
                        end
         
     | 
| 
       87 
     | 
    
         
            -
                      end
         
     | 
| 
       88 
     | 
    
         
            -
                    end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
74 
     | 
    
         
             
                    private
         
     | 
| 
       91 
75 
     | 
    
         | 
| 
       92 
76 
     | 
    
         
             
                    def args_on_beginning_line?(node)
         
     | 
| 
         @@ -116,7 +100,25 @@ module RuboCop 
     | 
|
| 
       116 
100 
     | 
    
         
             
                    def add_offense_for_expression(node, expr, msg)
         
     | 
| 
       117 
101 
     | 
    
         
             
                      expression = expr.source_range
         
     | 
| 
       118 
102 
     | 
    
         
             
                      range = range_between(expression.begin_pos, expression.end_pos)
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                      add_offense(range, message: msg) do |corrector|
         
     | 
| 
      
 105 
     | 
    
         
            +
                        autocorrect(corrector, node)
         
     | 
| 
      
 106 
     | 
    
         
            +
                      end
         
     | 
| 
      
 107 
     | 
    
         
            +
                    end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                    def autocorrect(corrector, node)
         
     | 
| 
      
 110 
     | 
    
         
            +
                      unless args_on_beginning_line?(node)
         
     | 
| 
      
 111 
     | 
    
         
            +
                        autocorrect_arguments(corrector, node)
         
     | 
| 
      
 112 
     | 
    
         
            +
                        expr_before_body = node.arguments.source_range.end
         
     | 
| 
      
 113 
     | 
    
         
            +
                      end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                      return unless node.body
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                      expr_before_body ||= node.loc.begin
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                      return unless expr_before_body.line == node.body.first_line
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                      autocorrect_body(corrector, node, node.body)
         
     | 
| 
       120 
122 
     | 
    
         
             
                    end
         
     | 
| 
       121 
123 
     | 
    
         | 
| 
       122 
124 
     | 
    
         
             
                    def autocorrect_arguments(corrector, node)
         
     |