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
 
| 
         @@ -88,8 +88,9 @@ module RuboCop 
     | 
|
| 
       88 
88 
     | 
    
         
             
                  #     # good
         
     | 
| 
       89 
89 
     | 
    
         
             
                  #     { a: 1,
         
     | 
| 
       90 
90 
     | 
    
         
             
                  #       b: 2 }
         
     | 
| 
       91 
     | 
    
         
            -
                  class MultilineHashBraceLayout <  
     | 
| 
      
 91 
     | 
    
         
            +
                  class MultilineHashBraceLayout < Base
         
     | 
| 
       92 
92 
     | 
    
         
             
                    include MultilineLiteralBraceLayout
         
     | 
| 
      
 93 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       93 
94 
     | 
    
         | 
| 
       94 
95 
     | 
    
         
             
                    SAME_LINE_MESSAGE = 'Closing hash brace must be on the same line as ' \
         
     | 
| 
       95 
96 
     | 
    
         
             
                      'the last hash element when opening brace is on the same line as ' \
         
     | 
| 
         @@ -108,10 +109,6 @@ module RuboCop 
     | 
|
| 
       108 
109 
     | 
    
         
             
                    def on_hash(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: 2,
         
     | 
| 
       21 
21 
     | 
    
         
             
                  #     c: 3
         
     | 
| 
       22 
22 
     | 
    
         
             
                  #   }
         
     | 
| 
       23 
     | 
    
         
            -
                  class MultilineHashKeyLineBreaks <  
     | 
| 
      
 23 
     | 
    
         
            +
                  class MultilineHashKeyLineBreaks < Base
         
     | 
| 
       24 
24 
     | 
    
         
             
                    include MultilineElementLineBreaks
         
     | 
| 
      
 25 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
27 
     | 
    
         
             
                    MSG = 'Each key in a multi-line hash must start on a ' \
         
     | 
| 
       27 
28 
     | 
    
         
             
                      'separate line.'
         
     | 
| 
         @@ -35,10 +36,6 @@ module RuboCop 
     | 
|
| 
       35 
36 
     | 
    
         
             
                      check_line_breaks(node, node.children) if node.loc.begin
         
     | 
| 
       36 
37 
     | 
    
         
             
                    end
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       39 
     | 
    
         
            -
                      EmptyLineCorrector.insert_before(node)
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
39 
     | 
    
         
             
                    private
         
     | 
| 
       43 
40 
     | 
    
         | 
| 
       44 
41 
     | 
    
         
             
                    def starts_with_curly_brace?(node)
         
     | 
| 
         @@ -19,8 +19,9 @@ module RuboCop 
     | 
|
| 
       19 
19 
     | 
    
         
             
                  #     b,
         
     | 
| 
       20 
20 
     | 
    
         
             
                  #     c
         
     | 
| 
       21 
21 
     | 
    
         
             
                  #   )
         
     | 
| 
       22 
     | 
    
         
            -
                  class MultilineMethodArgumentLineBreaks <  
     | 
| 
       23 
     | 
    
         
            -
                    include 
     | 
| 
      
 22 
     | 
    
         
            +
                  class MultilineMethodArgumentLineBreaks < Base
         
     | 
| 
      
 23 
     | 
    
         
            +
                    include MultilineElementLineBreaks
         
     | 
| 
      
 24 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
       25 
26 
     | 
    
         
             
                    MSG = 'Each argument in a multi-line method call must start ' \
         
     | 
| 
       26 
27 
     | 
    
         
             
                      'on a separate line.'
         
     | 
| 
         @@ -36,16 +37,11 @@ module RuboCop 
     | 
|
| 
       36 
37 
     | 
    
         
             
                      #
         
     | 
| 
       37 
38 
     | 
    
         
             
                      # ...then each key/value pair is treated as a method 'argument'
         
     | 
| 
       38 
39 
     | 
    
         
             
                      # when determining where line breaks should appear.
         
     | 
| 
       39 
     | 
    
         
            -
                       
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                      end
         
     | 
| 
      
 40 
     | 
    
         
            +
                      last_arg = args.last
         
     | 
| 
      
 41 
     | 
    
         
            +
                      args = args[0...-1] + last_arg.children if last_arg&.hash_type? && !last_arg&.braces?
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                      check_line_breaks(node, args)
         
     | 
| 
       44 
44 
     | 
    
         
             
                    end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       47 
     | 
    
         
            -
                      EmptyLineCorrector.insert_before(node)
         
     | 
| 
       48 
     | 
    
         
            -
                    end
         
     | 
| 
       49 
45 
     | 
    
         
             
                  end
         
     | 
| 
       50 
46 
     | 
    
         
             
                end
         
     | 
| 
       51 
47 
     | 
    
         
             
              end
         
     | 
| 
         @@ -88,8 +88,9 @@ module RuboCop 
     | 
|
| 
       88 
88 
     | 
    
         
             
                  #   # good
         
     | 
| 
       89 
89 
     | 
    
         
             
                  #   foo(a,
         
     | 
| 
       90 
90 
     | 
    
         
             
                  #     b)
         
     | 
| 
       91 
     | 
    
         
            -
                  class MultilineMethodCallBraceLayout <  
     | 
| 
      
 91 
     | 
    
         
            +
                  class MultilineMethodCallBraceLayout < Base
         
     | 
| 
       92 
92 
     | 
    
         
             
                    include MultilineLiteralBraceLayout
         
     | 
| 
      
 93 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       93 
94 
     | 
    
         | 
| 
       94 
95 
     | 
    
         
             
                    SAME_LINE_MESSAGE = 'Closing method call brace must be on the ' \
         
     | 
| 
       95 
96 
     | 
    
         
             
                      'same line as the last argument when opening brace is on the same ' \
         
     | 
| 
         @@ -109,10 +110,6 @@ module RuboCop 
     | 
|
| 
       109 
110 
     | 
    
         
             
                      check_brace_layout(node)
         
     | 
| 
       110 
111 
     | 
    
         
             
                    end
         
     | 
| 
       111 
112 
     | 
    
         | 
| 
       112 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       113 
     | 
    
         
            -
                      MultilineLiteralBraceCorrector.new(node, processed_source)
         
     | 
| 
       114 
     | 
    
         
            -
                    end
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
113 
     | 
    
         
             
                    private
         
     | 
| 
       117 
114 
     | 
    
         | 
| 
       118 
115 
     | 
    
         
             
                    def children(node)
         
     | 
| 
         @@ -100,8 +100,9 @@ module RuboCop 
     | 
|
| 
       100 
100 
     | 
    
         
             
                  #   def foo(a,
         
     | 
| 
       101 
101 
     | 
    
         
             
                  #     b)
         
     | 
| 
       102 
102 
     | 
    
         
             
                  #   end
         
     | 
| 
       103 
     | 
    
         
            -
                  class MultilineMethodDefinitionBraceLayout <  
     | 
| 
      
 103 
     | 
    
         
            +
                  class MultilineMethodDefinitionBraceLayout < Base
         
     | 
| 
       104 
104 
     | 
    
         
             
                    include MultilineLiteralBraceLayout
         
     | 
| 
      
 105 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       105 
106 
     | 
    
         | 
| 
       106 
107 
     | 
    
         
             
                    SAME_LINE_MESSAGE = 'Closing method definition brace must be on the ' \
         
     | 
| 
       107 
108 
     | 
    
         
             
                      'same line as the last parameter when opening brace is on the same ' \
         
     | 
| 
         @@ -121,10 +122,6 @@ module RuboCop 
     | 
|
| 
       121 
122 
     | 
    
         
             
                      check_brace_layout(node.arguments)
         
     | 
| 
       122 
123 
     | 
    
         
             
                    end
         
     | 
| 
       123 
124 
     | 
    
         
             
                    alias on_defs on_def
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       126 
     | 
    
         
            -
                      MultilineLiteralBraceCorrector.new(node, processed_source)
         
     | 
| 
       127 
     | 
    
         
            -
                    end
         
     | 
| 
       128 
125 
     | 
    
         
             
                  end
         
     | 
| 
       129 
126 
     | 
    
         
             
                end
         
     | 
| 
       130 
127 
     | 
    
         
             
              end
         
     | 
| 
         @@ -21,8 +21,9 @@ module RuboCop 
     | 
|
| 
       21 
21 
     | 
    
         
             
                  #   rescue
         
     | 
| 
       22 
22 
     | 
    
         
             
                  #     puts 'error'
         
     | 
| 
       23 
23 
     | 
    
         
             
                  #   end
         
     | 
| 
       24 
     | 
    
         
            -
                  class RescueEnsureAlignment <  
     | 
| 
      
 24 
     | 
    
         
            +
                  class RescueEnsureAlignment < Base
         
     | 
| 
       25 
25 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 26 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
       27 
28 
     | 
    
         
             
                    MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
         
     | 
| 
       28 
29 
     | 
    
         
             
                          'aligned with `%<beginning>s` at ' \
         
     | 
| 
         @@ -41,19 +42,7 @@ module RuboCop 
     | 
|
| 
       41 
42 
     | 
    
         
             
                      check(node)
         
     | 
| 
       42 
43 
     | 
    
         
             
                    end
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
                    def  
     | 
| 
       45 
     | 
    
         
            -
                      whitespace = whitespace_range(node)
         
     | 
| 
       46 
     | 
    
         
            -
                      # Some inline node is sitting before current node.
         
     | 
| 
       47 
     | 
    
         
            -
                      return nil unless whitespace.source.strip.empty?
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                      alignment_node = alignment_node(node)
         
     | 
| 
       50 
     | 
    
         
            -
                      return false if alignment_node.nil?
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                      new_column = alignment_node.loc.column
         
     | 
| 
       53 
     | 
    
         
            -
                      ->(corrector) { corrector.replace(whitespace, ' ' * new_column) }
         
     | 
| 
       54 
     | 
    
         
            -
                    end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                    def investigate(processed_source)
         
     | 
| 
      
 45 
     | 
    
         
            +
                    def on_new_investigation
         
     | 
| 
       57 
46 
     | 
    
         
             
                      @modifier_locations =
         
     | 
| 
       58 
47 
     | 
    
         
             
                        processed_source.tokens.each_with_object([]) do |token, locations|
         
     | 
| 
       59 
48 
     | 
    
         
             
                          next unless token.rescue_modifier?
         
     | 
| 
         @@ -73,15 +62,23 @@ module RuboCop 
     | 
|
| 
       73 
62 
     | 
    
         
             
                      alignment_loc = alignment_node.loc.expression
         
     | 
| 
       74 
63 
     | 
    
         
             
                      kw_loc        = node.loc.keyword
         
     | 
| 
       75 
64 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
                      return if
         
     | 
| 
       77 
     | 
    
         
            -
                        alignment_loc.column == kw_loc.column ||
         
     | 
| 
       78 
     | 
    
         
            -
                        alignment_loc.line   == kw_loc.line
         
     | 
| 
      
 65 
     | 
    
         
            +
                      return if alignment_loc.column == kw_loc.column || alignment_loc.line == kw_loc.line
         
     | 
| 
       79 
66 
     | 
    
         | 
| 
       80 
67 
     | 
    
         
             
                      add_offense(
         
     | 
| 
       81 
     | 
    
         
            -
                         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                         
     | 
| 
       84 
     | 
    
         
            -
                       
     | 
| 
      
 68 
     | 
    
         
            +
                        kw_loc, message: format_message(alignment_node, alignment_loc, kw_loc)
         
     | 
| 
      
 69 
     | 
    
         
            +
                      ) do |corrector|
         
     | 
| 
      
 70 
     | 
    
         
            +
                        autocorrect(corrector, node, alignment_node)
         
     | 
| 
      
 71 
     | 
    
         
            +
                      end
         
     | 
| 
      
 72 
     | 
    
         
            +
                    end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                    def autocorrect(corrector, node, alignment_node)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      whitespace = whitespace_range(node)
         
     | 
| 
      
 76 
     | 
    
         
            +
                      # Some inline node is sitting before current node.
         
     | 
| 
      
 77 
     | 
    
         
            +
                      return nil unless whitespace.source.strip.empty?
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                      new_column = alignment_node.loc.column
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                      corrector.replace(whitespace, ' ' * new_column)
         
     | 
| 
       85 
82 
     | 
    
         
             
                    end
         
     | 
| 
       86 
83 
     | 
    
         | 
| 
       87 
84 
     | 
    
         
             
                    def format_message(alignment_node, alignment_loc, kw_loc)
         
     | 
| 
         @@ -13,7 +13,9 @@ module RuboCop 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  #
         
     | 
| 
       14 
14 
     | 
    
         
             
                  #   # good
         
     | 
| 
       15 
15 
     | 
    
         
             
                  #   def f(a:, b: 2); {a: 3}; end
         
     | 
| 
       16 
     | 
    
         
            -
                  class SpaceAfterColon <  
     | 
| 
      
 16 
     | 
    
         
            +
                  class SpaceAfterColon < Base
         
     | 
| 
      
 17 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       17 
19 
     | 
    
         
             
                    MSG = 'Space missing after colon.'
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
       19 
21 
     | 
    
         
             
                    def on_pair(node)
         
     | 
| 
         @@ -21,7 +23,7 @@ module RuboCop 
     | 
|
| 
       21 
23 
     | 
    
         | 
| 
       22 
24 
     | 
    
         
             
                      colon = node.loc.operator
         
     | 
| 
       23 
25 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                       
     | 
| 
      
 26 
     | 
    
         
            +
                      register_offense(colon) unless followed_by_space?(colon)
         
     | 
| 
       25 
27 
     | 
    
         
             
                    end
         
     | 
| 
       26 
28 
     | 
    
         | 
| 
       27 
29 
     | 
    
         
             
                    def on_kwoptarg(node)
         
     | 
| 
         @@ -29,15 +31,17 @@ module RuboCop 
     | 
|
| 
       29 
31 
     | 
    
         
             
                      # optional keyword argument's name, so must construct one.
         
     | 
| 
       30 
32 
     | 
    
         
             
                      colon = node.loc.name.end.resize(1)
         
     | 
| 
       31 
33 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                       
     | 
| 
       33 
     | 
    
         
            -
                    end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                    def autocorrect(range)
         
     | 
| 
       36 
     | 
    
         
            -
                      ->(corrector) { corrector.insert_after(range, ' ') }
         
     | 
| 
      
 34 
     | 
    
         
            +
                      register_offense(colon) unless followed_by_space?(colon)
         
     | 
| 
       37 
35 
     | 
    
         
             
                    end
         
     | 
| 
       38 
36 
     | 
    
         | 
| 
       39 
37 
     | 
    
         
             
                    private
         
     | 
| 
       40 
38 
     | 
    
         | 
| 
      
 39 
     | 
    
         
            +
                    def register_offense(colon)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      add_offense(colon) do |corrector|
         
     | 
| 
      
 41 
     | 
    
         
            +
                        corrector.insert_after(colon, ' ')
         
     | 
| 
      
 42 
     | 
    
         
            +
                      end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       41 
45 
     | 
    
         
             
                    def followed_by_space?(colon)
         
     | 
| 
       42 
46 
     | 
    
         
             
                      /\s/.match?(colon.source_buffer.source[colon.end_pos])
         
     | 
| 
       43 
47 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -14,12 +14,9 @@ module RuboCop 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  #   # good
         
     | 
| 
       15 
15 
     | 
    
         
             
                  #   [1, 2]
         
     | 
| 
       16 
16 
     | 
    
         
             
                  #   { foo:bar, }
         
     | 
| 
       17 
     | 
    
         
            -
                  class SpaceAfterComma <  
     | 
| 
      
 17 
     | 
    
         
            +
                  class SpaceAfterComma < Base
         
     | 
| 
       18 
18 
     | 
    
         
             
                    include SpaceAfterPunctuation
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                    def autocorrect(comma)
         
     | 
| 
       21 
     | 
    
         
            -
                      PunctuationCorrector.add_space(comma)
         
     | 
| 
       22 
     | 
    
         
            -
                    end
         
     | 
| 
      
 19 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       23 
20 
     | 
    
         | 
| 
       24 
21 
     | 
    
         
             
                    def space_style_before_rcurly
         
     | 
| 
       25 
22 
     | 
    
         
             
                      cfg = config.for_cop('Layout/SpaceInsideHashLiteralBraces')
         
     | 
| 
         @@ -14,8 +14,9 @@ module RuboCop 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  #   # good
         
     | 
| 
       15 
15 
     | 
    
         
             
                  #   def func(x) end
         
     | 
| 
       16 
16 
     | 
    
         
             
                  #   def method=(y) end
         
     | 
| 
       17 
     | 
    
         
            -
                  class SpaceAfterMethodName <  
     | 
| 
      
 17 
     | 
    
         
            +
                  class SpaceAfterMethodName < Base
         
     | 
| 
       18 
18 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 19 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
                    MSG = 'Do not put a space between a method name and the opening ' \
         
     | 
| 
       21 
22 
     | 
    
         
             
                          'parenthesis.'
         
     | 
| 
         @@ -29,13 +30,11 @@ module RuboCop 
     | 
|
| 
       29 
30 
     | 
    
         
             
                                                            expr.begin_pos)
         
     | 
| 
       30 
31 
     | 
    
         
             
                      return unless pos_before_left_paren.source.start_with?(' ')
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                      add_offense(pos_before_left_paren 
     | 
| 
      
 33 
     | 
    
         
            +
                      add_offense(pos_before_left_paren) do |corrector|
         
     | 
| 
      
 34 
     | 
    
         
            +
                        corrector.remove(pos_before_left_paren)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      end
         
     | 
| 
       33 
36 
     | 
    
         
             
                    end
         
     | 
| 
       34 
37 
     | 
    
         
             
                    alias on_defs on_def
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                    def autocorrect(pos_before_left_paren)
         
     | 
| 
       37 
     | 
    
         
            -
                      ->(corrector) { corrector.remove(pos_before_left_paren) }
         
     | 
| 
       38 
     | 
    
         
            -
                    end
         
     | 
| 
       39 
38 
     | 
    
         
             
                  end
         
     | 
| 
       40 
39 
     | 
    
         
             
                end
         
     | 
| 
       41 
40 
     | 
    
         
             
              end
         
     | 
| 
         @@ -11,29 +11,27 @@ module RuboCop 
     | 
|
| 
       11 
11 
     | 
    
         
             
                  #
         
     | 
| 
       12 
12 
     | 
    
         
             
                  #   # good
         
     | 
| 
       13 
13 
     | 
    
         
             
                  #   !something
         
     | 
| 
       14 
     | 
    
         
            -
                  class SpaceAfterNot <  
     | 
| 
      
 14 
     | 
    
         
            +
                  class SpaceAfterNot < Base
         
     | 
| 
       15 
15 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 16 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
18 
     | 
    
         
             
                    MSG = 'Do not leave space between `!` and its argument.'
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       20 
21 
     | 
    
         
             
                      return unless node.prefix_bang? && whitespace_after_operator?(node)
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                      add_offense(node)
         
     | 
| 
      
 23 
     | 
    
         
            +
                      add_offense(node) do |corrector|
         
     | 
| 
      
 24 
     | 
    
         
            +
                        corrector.remove(
         
     | 
| 
      
 25 
     | 
    
         
            +
                          range_between(node.loc.selector.end_pos, node.receiver.source_range.begin_pos)
         
     | 
| 
      
 26 
     | 
    
         
            +
                        )
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
       23 
28 
     | 
    
         
             
                    end
         
     | 
| 
       24 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                    private
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       25 
32 
     | 
    
         
             
                    def whitespace_after_operator?(node)
         
     | 
| 
       26 
33 
     | 
    
         
             
                      node.receiver.loc.column - node.loc.column > 1
         
     | 
| 
       27 
34 
     | 
    
         
             
                    end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                    def autocorrect(node)
         
     | 
| 
       30 
     | 
    
         
            -
                      lambda do |corrector|
         
     | 
| 
       31 
     | 
    
         
            -
                        corrector.remove(
         
     | 
| 
       32 
     | 
    
         
            -
                          range_between(node.loc.selector.end_pos,
         
     | 
| 
       33 
     | 
    
         
            -
                                        node.receiver.source_range.begin_pos)
         
     | 
| 
       34 
     | 
    
         
            -
                        )
         
     | 
| 
       35 
     | 
    
         
            -
                      end
         
     | 
| 
       36 
     | 
    
         
            -
                    end
         
     | 
| 
       37 
35 
     | 
    
         
             
                  end
         
     | 
| 
       38 
36 
     | 
    
         
             
                end
         
     | 
| 
       39 
37 
     | 
    
         
             
              end
         
     | 
| 
         @@ -11,12 +11,9 @@ module RuboCop 
     | 
|
| 
       11 
11 
     | 
    
         
             
                  #
         
     | 
| 
       12 
12 
     | 
    
         
             
                  #   # good
         
     | 
| 
       13 
13 
     | 
    
         
             
                  #   x = 1; y = 2
         
     | 
| 
       14 
     | 
    
         
            -
                  class SpaceAfterSemicolon <  
     | 
| 
      
 14 
     | 
    
         
            +
                  class SpaceAfterSemicolon < Base
         
     | 
| 
       15 
15 
     | 
    
         
             
                    include SpaceAfterPunctuation
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                    def autocorrect(semicolon)
         
     | 
| 
       18 
     | 
    
         
            -
                      PunctuationCorrector.add_space(semicolon)
         
     | 
| 
       19 
     | 
    
         
            -
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       20 
17 
     | 
    
         | 
| 
       21 
18 
     | 
    
         
             
                    def space_style_before_rcurly
         
     | 
| 
       22 
19 
     | 
    
         
             
                      cfg = config.for_cop('Layout/SpaceInsideBlockBraces')
         
     | 
| 
         @@ -27,10 +27,11 @@ module RuboCop 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  #   def some_method(arg1=:default, arg2=nil, arg3=[])
         
     | 
| 
       28 
28 
     | 
    
         
             
                  #     # do something...
         
     | 
| 
       29 
29 
     | 
    
         
             
                  #   end
         
     | 
| 
       30 
     | 
    
         
            -
                  class SpaceAroundEqualsInParameterDefault <  
     | 
| 
      
 30 
     | 
    
         
            +
                  class SpaceAroundEqualsInParameterDefault < Base
         
     | 
| 
       31 
31 
     | 
    
         
             
                    include SurroundingSpace
         
     | 
| 
       32 
32 
     | 
    
         
             
                    include ConfigurableEnforcedStyle
         
     | 
| 
       33 
33 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
      
 34 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       34 
35 
     | 
    
         | 
| 
       35 
36 
     | 
    
         
             
                    MSG = 'Surrounding space %<type>s in default value assignment.'
         
     | 
| 
       36 
37 
     | 
    
         | 
| 
         @@ -40,13 +41,6 @@ module RuboCop 
     | 
|
| 
       40 
41 
     | 
    
         
             
                      check_optarg(arg, equals, value)
         
     | 
| 
       41 
42 
     | 
    
         
             
                    end
         
     | 
| 
       42 
43 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                    def autocorrect(range)
         
     | 
| 
       44 
     | 
    
         
            -
                      m = range.source.match(/=\s*(\S+)/)
         
     | 
| 
       45 
     | 
    
         
            -
                      rest = m ? m.captures[0] : ''
         
     | 
| 
       46 
     | 
    
         
            -
                      replacement = style == :space ? ' = ' : '='
         
     | 
| 
       47 
     | 
    
         
            -
                      ->(corrector) { corrector.replace(range, replacement + rest) }
         
     | 
| 
       48 
     | 
    
         
            -
                    end
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
44 
     | 
    
         
             
                    private
         
     | 
| 
       51 
45 
     | 
    
         | 
| 
       52 
46 
     | 
    
         
             
                    def check_optarg(arg, equals, value)
         
     | 
| 
         @@ -65,14 +59,25 @@ module RuboCop 
     | 
|
| 
       65 
59 
     | 
    
         
             
                    def incorrect_style_detected(arg, value, space_on_both_sides,
         
     | 
| 
       66 
60 
     | 
    
         
             
                                                 no_surrounding_space)
         
     | 
| 
       67 
61 
     | 
    
         
             
                      range = range_between(arg.end_pos, value.begin_pos)
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                        end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                      if style == :space && no_surrounding_space ||
         
     | 
| 
      
 64 
     | 
    
         
            +
                         style == :no_space && space_on_both_sides
         
     | 
| 
      
 65 
     | 
    
         
            +
                        return unless opposite_style_detected
         
     | 
| 
      
 66 
     | 
    
         
            +
                      else
         
     | 
| 
      
 67 
     | 
    
         
            +
                        return unless unrecognized_style_detected
         
     | 
| 
       75 
68 
     | 
    
         
             
                      end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                      add_offense(range) do |corrector|
         
     | 
| 
      
 71 
     | 
    
         
            +
                        autocorrect(corrector, range)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      end
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    def autocorrect(corrector, range)
         
     | 
| 
      
 76 
     | 
    
         
            +
                      m = range.source.match(/=\s*(\S+)/)
         
     | 
| 
      
 77 
     | 
    
         
            +
                      rest = m ? m.captures[0] : ''
         
     | 
| 
      
 78 
     | 
    
         
            +
                      replacement = style == :space ? ' = ' : '='
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                      corrector.replace(range, replacement + rest)
         
     | 
| 
       76 
81 
     | 
    
         
             
                    end
         
     | 
| 
       77 
82 
     | 
    
         | 
| 
       78 
83 
     | 
    
         
             
                    def space_on_both_sides?(arg, equals)
         
     | 
| 
         @@ -24,7 +24,9 @@ module RuboCop 
     | 
|
| 
       24 
24 
     | 
    
         
             
                  #   end
         
     | 
| 
       25 
25 
     | 
    
         
             
                  #
         
     | 
| 
       26 
26 
     | 
    
         
             
                  #   something = 123 if test
         
     | 
| 
       27 
     | 
    
         
            -
                  class SpaceAroundKeyword <  
     | 
| 
      
 27 
     | 
    
         
            +
                  class SpaceAroundKeyword < Base
         
     | 
| 
      
 28 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
       28 
30 
     | 
    
         
             
                    MSG_BEFORE = 'Space before keyword `%<range>s` is missing.'
         
     | 
| 
       29 
31 
     | 
    
         
             
                    MSG_AFTER = 'Space after keyword `%<range>s` is missing.'
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
         @@ -129,14 +131,6 @@ module RuboCop 
     | 
|
| 
       129 
131 
     | 
    
         
             
                      check(node, [:keyword].freeze)
         
     | 
| 
       130 
132 
     | 
    
         
             
                    end
         
     | 
| 
       131 
133 
     | 
    
         | 
| 
       132 
     | 
    
         
            -
                    def autocorrect(range)
         
     | 
| 
       133 
     | 
    
         
            -
                      if space_before_missing?(range)
         
     | 
| 
       134 
     | 
    
         
            -
                        ->(corrector) { corrector.insert_before(range, ' ') }
         
     | 
| 
       135 
     | 
    
         
            -
                      else
         
     | 
| 
       136 
     | 
    
         
            -
                        ->(corrector) { corrector.insert_after(range, ' ') }
         
     | 
| 
       137 
     | 
    
         
            -
                      end
         
     | 
| 
       138 
     | 
    
         
            -
                    end
         
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
134 
     | 
    
         
             
                    private
         
     | 
| 
       141 
135 
     | 
    
         | 
| 
       142 
136 
     | 
    
         
             
                    def check(node, locations, begin_keyword = DO)
         
     | 
| 
         @@ -162,8 +156,11 @@ module RuboCop 
     | 
|
| 
       162 
156 
     | 
    
         | 
| 
       163 
157 
     | 
    
         
             
                    def check_end(node, range, begin_keyword)
         
     | 
| 
       164 
158 
     | 
    
         
             
                      return if begin_keyword == DO && !do?(node)
         
     | 
| 
      
 159 
     | 
    
         
            +
                      return unless space_before_missing?(range)
         
     | 
| 
       165 
160 
     | 
    
         | 
| 
       166 
     | 
    
         
            -
                       
     | 
| 
      
 161 
     | 
    
         
            +
                      add_offense(range, message: format(MSG_BEFORE, range: range.source)) do |corrector|
         
     | 
| 
      
 162 
     | 
    
         
            +
                        corrector.insert_before(range, ' ')
         
     | 
| 
      
 163 
     | 
    
         
            +
                      end
         
     | 
| 
       167 
164 
     | 
    
         
             
                    end
         
     | 
| 
       168 
165 
     | 
    
         | 
| 
       169 
166 
     | 
    
         
             
                    def do?(node)
         
     | 
| 
         @@ -171,15 +168,17 @@ module RuboCop 
     | 
|
| 
       171 
168 
     | 
    
         
             
                    end
         
     | 
| 
       172 
169 
     | 
    
         | 
| 
       173 
170 
     | 
    
         
             
                    def check_keyword(node, range)
         
     | 
| 
       174 
     | 
    
         
            -
                       
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
      
 171 
     | 
    
         
            +
                      if space_before_missing?(range) && !preceded_by_operator?(node, range)
         
     | 
| 
      
 172 
     | 
    
         
            +
                        add_offense(range, message: format(MSG_BEFORE, range: range.source)) do |corrector|
         
     | 
| 
      
 173 
     | 
    
         
            +
                          corrector.insert_before(range, ' ')
         
     | 
| 
      
 174 
     | 
    
         
            +
                        end
         
     | 
| 
      
 175 
     | 
    
         
            +
                      end
         
     | 
| 
       178 
176 
     | 
    
         | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
      
 177 
     | 
    
         
            +
                      return unless space_after_missing?(range)
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                      add_offense(range, message: format(MSG_AFTER, range: range.source)) do |corrector|
         
     | 
| 
      
 180 
     | 
    
         
            +
                        corrector.insert_after(range, ' ')
         
     | 
| 
      
 181 
     | 
    
         
            +
                      end
         
     | 
| 
       183 
182 
     | 
    
         
             
                    end
         
     | 
| 
       184 
183 
     | 
    
         | 
| 
       185 
184 
     | 
    
         
             
                    def space_before_missing?(range)
         
     | 
| 
         @@ -48,10 +48,11 @@ module RuboCop 
     | 
|
| 
       48 
48 
     | 
    
         
             
                  #
         
     | 
| 
       49 
49 
     | 
    
         
             
                  #   # good
         
     | 
| 
       50 
50 
     | 
    
         
             
                  #   a ** b
         
     | 
| 
       51 
     | 
    
         
            -
                  class SpaceAroundOperators <  
     | 
| 
      
 51 
     | 
    
         
            +
                  class SpaceAroundOperators < Base
         
     | 
| 
       52 
52 
     | 
    
         
             
                    include PrecedingFollowingAlignment
         
     | 
| 
       53 
53 
     | 
    
         
             
                    include RangeHelp
         
     | 
| 
       54 
54 
     | 
    
         
             
                    include RationalLiteral
         
     | 
| 
      
 55 
     | 
    
         
            +
                    extend AutoCorrector
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
                    IRREGULAR_METHODS = %i[[] ! []=].freeze
         
     | 
| 
       57 
58 
     | 
    
         
             
                    EXCESSIVE_SPACE = '  '
         
     | 
| 
         @@ -132,18 +133,6 @@ module RuboCop 
     | 
|
| 
       132 
133 
     | 
    
         
             
                    alias on_and_asgn on_assignment
         
     | 
| 
       133 
134 
     | 
    
         
             
                    alias on_op_asgn  on_special_asgn
         
     | 
| 
       134 
135 
     | 
    
         | 
| 
       135 
     | 
    
         
            -
                    def autocorrect(range)
         
     | 
| 
       136 
     | 
    
         
            -
                      lambda do |corrector|
         
     | 
| 
       137 
     | 
    
         
            -
                        if /\*\*/.match?(range.source) && !space_around_exponent_operator?
         
     | 
| 
       138 
     | 
    
         
            -
                          corrector.replace(range, '**')
         
     | 
| 
       139 
     | 
    
         
            -
                        elsif range.source.end_with?("\n")
         
     | 
| 
       140 
     | 
    
         
            -
                          corrector.replace(range, " #{range.source.strip}\n")
         
     | 
| 
       141 
     | 
    
         
            -
                        else
         
     | 
| 
       142 
     | 
    
         
            -
                          enclose_operator_with_space(corrector, range)
         
     | 
| 
       143 
     | 
    
         
            -
                        end
         
     | 
| 
       144 
     | 
    
         
            -
                      end
         
     | 
| 
       145 
     | 
    
         
            -
                    end
         
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
136 
     | 
    
         
             
                    private
         
     | 
| 
       148 
137 
     | 
    
         | 
| 
       149 
138 
     | 
    
         
             
                    def regular_operator?(send_node)
         
     | 
| 
         @@ -161,7 +150,9 @@ module RuboCop 
     | 
|
| 
       161 
150 
     | 
    
         
             
                      return if with_space.source.start_with?("\n")
         
     | 
| 
       162 
151 
     | 
    
         | 
| 
       163 
152 
     | 
    
         
             
                      offense(type, operator, with_space, right_operand) do |msg|
         
     | 
| 
       164 
     | 
    
         
            -
                        add_offense( 
     | 
| 
      
 153 
     | 
    
         
            +
                        add_offense(operator, message: msg) do |corrector|
         
     | 
| 
      
 154 
     | 
    
         
            +
                          autocorrect(corrector, with_space)
         
     | 
| 
      
 155 
     | 
    
         
            +
                        end
         
     | 
| 
       165 
156 
     | 
    
         
             
                      end
         
     | 
| 
       166 
157 
     | 
    
         
             
                    end
         
     | 
| 
       167 
158 
     | 
    
         | 
| 
         @@ -170,14 +161,24 @@ module RuboCop 
     | 
|
| 
       170 
161 
     | 
    
         
             
                      yield msg if msg
         
     | 
| 
       171 
162 
     | 
    
         
             
                    end
         
     | 
| 
       172 
163 
     | 
    
         | 
| 
      
 164 
     | 
    
         
            +
                    def autocorrect(corrector, range)
         
     | 
| 
      
 165 
     | 
    
         
            +
                      if /\*\*/.match?(range.source) && !space_around_exponent_operator?
         
     | 
| 
      
 166 
     | 
    
         
            +
                        corrector.replace(range, '**')
         
     | 
| 
      
 167 
     | 
    
         
            +
                      elsif range.source.end_with?("\n")
         
     | 
| 
      
 168 
     | 
    
         
            +
                        corrector.replace(range, " #{range.source.strip}\n")
         
     | 
| 
      
 169 
     | 
    
         
            +
                      else
         
     | 
| 
      
 170 
     | 
    
         
            +
                        enclose_operator_with_space(corrector, range)
         
     | 
| 
      
 171 
     | 
    
         
            +
                      end
         
     | 
| 
      
 172 
     | 
    
         
            +
                    end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
       173 
174 
     | 
    
         
             
                    def enclose_operator_with_space(corrector, range)
         
     | 
| 
       174 
175 
     | 
    
         
             
                      operator = range.source
         
     | 
| 
       175 
176 
     | 
    
         | 
| 
       176 
177 
     | 
    
         
             
                      # If `ForceEqualSignAlignment` is true, `Layout/ExtraSpacing` cop
         
     | 
| 
       177 
178 
     | 
    
         
             
                      # inserts spaces before operator. If `Layout/SpaceAroundOperators` cop
         
     | 
| 
       178 
179 
     | 
    
         
             
                      # inserts a space, it collides and raises the infinite loop error.
         
     | 
| 
       179 
     | 
    
         
            -
                      if force_equal_sign_alignment?
         
     | 
| 
       180 
     | 
    
         
            -
                        corrector.insert_after(range, ' ') 
     | 
| 
      
 180 
     | 
    
         
            +
                      if force_equal_sign_alignment? && !operator.end_with?(' ')
         
     | 
| 
      
 181 
     | 
    
         
            +
                        corrector.insert_after(range, ' ')
         
     | 
| 
       181 
182 
     | 
    
         
             
                      else
         
     | 
| 
       182 
183 
     | 
    
         
             
                        corrector.replace(range, " #{operator.strip} ")
         
     | 
| 
       183 
184 
     | 
    
         
             
                      end
         
     |