rubocop 0.15.0 → 0.16.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.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/.rubocop.yml +1 -10
 - data/.travis.yml +2 -1
 - data/CHANGELOG.md +55 -0
 - data/Gemfile +3 -0
 - data/README.md +37 -0
 - data/config/default.yml +99 -16
 - data/config/enabled.yml +28 -16
 - data/lib/rubocop.rb +16 -2
 - data/lib/rubocop/cli.rb +10 -91
 - data/lib/rubocop/config.rb +4 -1
 - data/lib/rubocop/config_loader.rb +18 -10
 - data/lib/rubocop/config_store.rb +3 -2
 - data/lib/rubocop/cop/check_assignment.rb +43 -0
 - data/lib/rubocop/cop/check_methods.rb +18 -0
 - data/lib/rubocop/cop/commissioner.rb +15 -3
 - data/lib/rubocop/cop/cop.rb +51 -43
 - data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
 - data/lib/rubocop/cop/lint/block_alignment.rb +7 -7
 - data/lib/rubocop/cop/lint/debugger.rb +1 -1
 - data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
 - data/lib/rubocop/cop/lint/end_alignment.rb +56 -19
 - data/lib/rubocop/cop/lint/end_in_method.rb +4 -10
 - data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
 - data/lib/rubocop/cop/lint/eval.rb +1 -1
 - data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
 - data/lib/rubocop/cop/lint/literal_in_condition.rb +2 -2
 - data/lib/rubocop/cop/lint/loop.rb +1 -1
 - data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
 - data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
 - data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
 - data/lib/rubocop/cop/lint/syntax.rb +1 -1
 - data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
 - data/lib/rubocop/cop/lint/useless_assignment.rb +2 -2
 - data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
 - data/lib/rubocop/cop/lint/useless_setter_call.rb +6 -16
 - data/lib/rubocop/cop/lint/void.rb +5 -5
 - data/lib/rubocop/cop/rails/default_scope.rb +33 -0
 - data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +2 -4
 - data/lib/rubocop/cop/rails/output.rb +1 -1
 - data/lib/rubocop/cop/rails/read_attribute.rb +1 -1
 - data/lib/rubocop/cop/rails/validation.rb +1 -1
 - data/lib/rubocop/cop/style/access_modifier_indentation.rb +31 -16
 - data/lib/rubocop/cop/style/accessor_method_name.rb +53 -0
 - data/lib/rubocop/cop/style/alias.rb +14 -2
 - data/lib/rubocop/cop/style/align_hash.rb +15 -16
 - data/lib/rubocop/cop/style/and_or.rb +3 -3
 - data/lib/rubocop/cop/style/array_syntax.rb +22 -0
 - data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
 - data/lib/rubocop/cop/style/ascii_identifiers.rb +1 -3
 - data/lib/rubocop/cop/style/attr.rb +1 -1
 - data/lib/rubocop/cop/style/autocorrect_alignment.rb +13 -12
 - data/lib/rubocop/cop/style/begin_block.rb +1 -1
 - data/lib/rubocop/cop/style/block_comments.rb +1 -1
 - data/lib/rubocop/cop/style/block_nesting.rb +5 -1
 - data/lib/rubocop/cop/style/blocks.rb +4 -4
 - data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +48 -22
 - data/lib/rubocop/cop/style/case_equality.rb +1 -1
 - data/lib/rubocop/cop/style/case_indentation.rb +25 -6
 - data/lib/rubocop/cop/style/class_and_module_camel_case.rb +1 -1
 - data/lib/rubocop/cop/style/class_length.rb +7 -19
 - data/lib/rubocop/cop/style/class_methods.rb +1 -1
 - data/lib/rubocop/cop/style/class_vars.rb +1 -1
 - data/lib/rubocop/cop/style/code_length.rb +35 -0
 - data/lib/rubocop/cop/style/collection_methods.rb +1 -1
 - data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
 - data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
 - data/lib/rubocop/cop/style/configurable_enforced_style.rb +51 -0
 - data/lib/rubocop/cop/style/configurable_max.rb +17 -0
 - data/lib/rubocop/cop/style/configurable_naming.rb +4 -10
 - data/lib/rubocop/cop/style/constant_name.rb +5 -3
 - data/lib/rubocop/cop/style/cyclomatic_complexity.rb +8 -13
 - data/lib/rubocop/cop/style/def_parentheses.rb +4 -43
 - data/lib/rubocop/cop/style/documentation.rb +1 -1
 - data/lib/rubocop/cop/style/dot_position.rb +6 -2
 - data/lib/rubocop/cop/style/empty_line_between_defs.rb +1 -1
 - data/lib/rubocop/cop/style/empty_lines.rb +5 -1
 - data/lib/rubocop/cop/style/empty_lines_around_access_modifier.rb +1 -1
 - data/lib/rubocop/cop/style/empty_lines_around_body.rb +28 -13
 - data/lib/rubocop/cop/style/empty_literal.rb +3 -3
 - data/lib/rubocop/cop/style/encoding.rb +5 -5
 - data/lib/rubocop/cop/style/end_block.rb +1 -1
 - data/lib/rubocop/cop/style/end_of_line.rb +8 -6
 - data/lib/rubocop/cop/style/even_odd.rb +6 -6
 - data/lib/rubocop/cop/style/favor_join.rb +1 -1
 - data/lib/rubocop/cop/style/favor_modifier.rb +20 -34
 - data/lib/rubocop/cop/style/favor_sprintf.rb +1 -1
 - data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +1 -1
 - data/lib/rubocop/cop/style/final_newline.rb +1 -1
 - data/lib/rubocop/cop/style/flip_flop.rb +20 -0
 - data/lib/rubocop/cop/style/for.rb +34 -3
 - data/lib/rubocop/cop/style/global_vars.rb +1 -1
 - data/lib/rubocop/cop/style/hash_methods.rb +3 -3
 - data/lib/rubocop/cop/style/hash_syntax.rb +8 -11
 - data/lib/rubocop/cop/style/if_node.rb +25 -0
 - data/lib/rubocop/cop/style/if_then_else.rb +1 -1
 - data/lib/rubocop/cop/style/indentation_width.rb +77 -43
 - data/lib/rubocop/cop/style/lambda.rb +2 -2
 - data/lib/rubocop/cop/style/lambda_call.rb +4 -12
 - data/lib/rubocop/cop/style/leading_comment_space.rb +1 -1
 - data/lib/rubocop/cop/style/line_length.rb +9 -5
 - data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
 - data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
 - data/lib/rubocop/cop/style/method_def_parentheses.rb +52 -0
 - data/lib/rubocop/cop/style/method_length.rb +9 -22
 - data/lib/rubocop/cop/style/module_function.rb +1 -1
 - data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
 - data/lib/rubocop/cop/style/multiline_if_then.rb +11 -1
 - data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
 - data/lib/rubocop/cop/style/not.rb +1 -1
 - data/lib/rubocop/cop/style/numeric_literals.rb +2 -2
 - data/lib/rubocop/cop/style/op_method.rb +2 -2
 - data/lib/rubocop/cop/style/parameter_lists.rb +2 -2
 - data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -1
 - data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
 - data/lib/rubocop/cop/style/predicate_name.rb +54 -0
 - data/lib/rubocop/cop/style/proc.rb +1 -1
 - data/lib/rubocop/cop/style/raise_args.rb +4 -10
 - data/lib/rubocop/cop/style/redundant_begin.rb +5 -15
 - data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_return.rb +9 -19
 - data/lib/rubocop/cop/style/redundant_self.rb +8 -3
 - data/lib/rubocop/cop/style/regexp_literal.rb +4 -3
 - data/lib/rubocop/cop/style/rescue_modifier.rb +9 -17
 - data/lib/rubocop/cop/style/semicolon.rb +20 -22
 - data/lib/rubocop/cop/style/signal_exception.rb +10 -17
 - data/lib/rubocop/cop/style/single_line_block_params.rb +62 -0
 - data/lib/rubocop/cop/style/single_line_methods.rb +5 -15
 - data/lib/rubocop/cop/style/space_after_comma_etc.rb +1 -3
 - data/lib/rubocop/cop/style/space_after_control_keyword.rb +1 -1
 - data/lib/rubocop/cop/style/space_after_method_name.rb +4 -12
 - data/lib/rubocop/cop/style/space_after_not.rb +1 -1
 - data/lib/rubocop/cop/style/space_around_block_braces.rb +105 -94
 - data/lib/rubocop/cop/style/space_around_equals_in_parameter_default.rb +1 -1
 - data/lib/rubocop/cop/style/space_around_operators.rb +38 -123
 - data/lib/rubocop/cop/style/space_before_modifier_keyword.rb +1 -1
 - data/lib/rubocop/cop/style/space_inside.rb +1 -3
 - data/lib/rubocop/cop/style/space_inside_brackets.rb +0 -2
 - data/lib/rubocop/cop/style/space_inside_hash_literal_braces.rb +5 -5
 - data/lib/rubocop/cop/style/space_inside_parens.rb +0 -2
 - data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
 - data/lib/rubocop/cop/style/string_help.rb +1 -1
 - data/lib/rubocop/cop/style/string_literals.rb +4 -11
 - data/lib/rubocop/cop/style/surrounding_space.rb +0 -2
 - data/lib/rubocop/cop/style/symbol_array.rb +3 -10
 - data/lib/rubocop/cop/style/tab.rb +5 -5
 - data/lib/rubocop/cop/style/ternary_operator.rb +2 -2
 - data/lib/rubocop/cop/style/trailing_blank_lines.rb +1 -1
 - data/lib/rubocop/cop/style/trailing_whitespace.rb +1 -1
 - data/lib/rubocop/cop/style/trivial_accessors.rb +4 -14
 - data/lib/rubocop/cop/style/unless_else.rb +1 -1
 - data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
 - data/lib/rubocop/cop/style/when_then.rb +3 -1
 - data/lib/rubocop/cop/style/while_until_do.rb +2 -2
 - data/lib/rubocop/cop/style/word_array.rb +4 -10
 - data/lib/rubocop/cop/util.rb +85 -12
 - data/lib/rubocop/cop/variable_inspector.rb +4 -2
 - data/lib/rubocop/file_inspector.rb +98 -0
 - data/lib/rubocop/formatter/base_formatter.rb +2 -2
 - data/lib/rubocop/formatter/disabled_config_formatter.rb +10 -2
 - data/lib/rubocop/rake_task.rb +5 -1
 - data/lib/rubocop/target_finder.rb +3 -3
 - data/lib/rubocop/version.rb +1 -1
 - data/rubocop-todo.yml +12 -0
 - data/rubocop.gemspec +1 -1
 - data/spec/isolated_environment_spec.rb +24 -0
 - data/spec/rubocop/cli_spec.rb +120 -27
 - data/spec/rubocop/config_loader_spec.rb +25 -11
 - data/spec/rubocop/config_spec.rb +25 -9
 - data/spec/rubocop/config_store_spec.rb +1 -1
 - data/spec/rubocop/cop/cop_spec.rb +22 -3
 - data/spec/rubocop/cop/lint/block_alignment_spec.rb +4 -4
 - data/spec/rubocop/cop/lint/end_alignment_spec.rb +79 -47
 - data/spec/rubocop/cop/lint/syntax_spec.rb +4 -3
 - data/spec/rubocop/cop/rails/default_scope_spec.rb +31 -0
 - data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +37 -2
 - data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
 - data/spec/rubocop/cop/style/alias_spec.rb +10 -0
 - data/spec/rubocop/cop/style/align_parameters_spec.rb +3 -3
 - data/spec/rubocop/cop/style/block_nesting_spec.rb +4 -1
 - data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +83 -0
 - data/spec/rubocop/cop/style/case_indentation_spec.rb +227 -71
 - data/spec/rubocop/cop/style/class_length_spec.rb +2 -0
 - data/spec/rubocop/cop/style/constant_name_spec.rb +6 -0
 - data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +1 -0
 - data/spec/rubocop/cop/style/documentation_spec.rb +12 -0
 - data/spec/rubocop/cop/style/dot_position_spec.rb +10 -0
 - data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +22 -0
 - data/spec/rubocop/cop/style/empty_lines_spec.rb +6 -0
 - data/spec/rubocop/cop/style/end_of_line_spec.rb +17 -0
 - data/spec/rubocop/cop/style/favor_modifier_spec.rb +15 -0
 - data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
 - data/spec/rubocop/cop/style/for_spec.rb +96 -18
 - data/spec/rubocop/cop/style/hash_syntax_spec.rb +8 -2
 - data/spec/rubocop/cop/style/indentation_width_spec.rb +185 -20
 - data/spec/rubocop/cop/style/line_length_spec.rb +1 -0
 - data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +72 -0
 - data/spec/rubocop/cop/style/multiline_if_then_spec.rb +16 -0
 - data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +34 -3
 - data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
 - data/spec/rubocop/cop/style/redundant_self_spec.rb +15 -0
 - data/spec/rubocop/cop/style/regexp_literal_spec.rb +5 -0
 - data/spec/rubocop/cop/style/semicolon_spec.rb +16 -16
 - data/spec/rubocop/cop/style/{reduce_arguments_spec.rb → single_line_block_params_spec.rb} +12 -4
 - data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +58 -8
 - data/spec/rubocop/cop/style/space_around_operators_spec.rb +71 -0
 - data/spec/rubocop/cop/style/string_literals_spec.rb +18 -0
 - data/spec/rubocop/file_inspector_spec.rb +78 -0
 - data/spec/rubocop/formatter/clang_style_formatter_spec.rb +7 -7
 - data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +3 -3
 - data/spec/rubocop/formatter/file_list_formatter_spec.rb +2 -2
 - data/spec/rubocop/processed_source_spec.rb +7 -3
 - data/spec/rubocop/token_spec.rb +1 -1
 - data/spec/spec_helper.rb +3 -2
 - data/spec/support/isolated_environment.rb +7 -0
 - data/spec/support/shared_context.rb +5 -1
 - metadata +35 -12
 - data/lib/rubocop/cop/style/reduce_arguments.rb +0 -34
 - data/lib/rubocop/cop/style/symbol_name.rb +0 -45
 - data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +0 -33
 - data/spec/rubocop/cop/style/symbol_name_spec.rb +0 -138
 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Rubocop
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Cop
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Common functionality for checking if nodes.
         
     | 
| 
      
 6 
     | 
    
         
            +
                module IfNode
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def modifier_if?(node)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    node.loc.end.nil?
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def ternary_op?(node)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    node.loc.respond_to?(:question)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def elsif?(node)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    node.loc.respond_to?(:keyword) && node.loc.keyword &&
         
     | 
| 
      
 17 
     | 
    
         
            +
                      node.loc.keyword.is?('elsif')
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def if_else?(node)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    node.loc.respond_to?(:else) && node.loc.else
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -17,7 +17,7 @@ module Rubocop 
     | 
|
| 
       17 
17 
     | 
    
         
             
                      # We won't check modifier or ternary conditionals.
         
     | 
| 
       18 
18 
     | 
    
         
             
                      if node.loc.expression.source =~ /\A(if|unless)\b/
         
     | 
| 
       19 
19 
     | 
    
         
             
                        if offending_line(node)
         
     | 
| 
       20 
     | 
    
         
            -
                           
     | 
| 
      
 20 
     | 
    
         
            +
                          add_offence(node, :expression, error_message)
         
     | 
| 
       21 
21 
     | 
    
         
             
                        end
         
     | 
| 
       22 
22 
     | 
    
         
             
                      end
         
     | 
| 
       23 
23 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -13,11 +13,19 @@ module Rubocop 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  #  end
         
     | 
| 
       14 
14 
     | 
    
         
             
                  # end
         
     | 
| 
       15 
15 
     | 
    
         
             
                  class IndentationWidth < Cop
         
     | 
| 
      
 16 
     | 
    
         
            +
                    include CheckMethods
         
     | 
| 
      
 17 
     | 
    
         
            +
                    include CheckAssignment
         
     | 
| 
      
 18 
     | 
    
         
            +
                    include IfNode
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       16 
20 
     | 
    
         
             
                    CORRECT_INDENTATION = 2
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    def on_begin(node)
         
     | 
| 
      
 23 
     | 
    
         
            +
                      check_consistent(node)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
       18 
25 
     | 
    
         | 
| 
       19 
26 
     | 
    
         
             
                    def on_kwbegin(node)
         
     | 
| 
       20 
     | 
    
         
            -
                       
     | 
| 
      
 27 
     | 
    
         
            +
                      check_indentation(node.loc.end, node.children.first)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      check_consistent(node)
         
     | 
| 
       21 
29 
     | 
    
         
             
                    end
         
     | 
| 
       22 
30 
     | 
    
         | 
| 
       23 
31 
     | 
    
         
             
                    def on_block(node)
         
     | 
| 
         @@ -37,13 +45,7 @@ module Rubocop 
     | 
|
| 
       37 
45 
     | 
    
         
             
                      members.each { |m| check_indentation(node.loc.keyword, m) }
         
     | 
| 
       38 
46 
     | 
    
         
             
                    end
         
     | 
| 
       39 
47 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                    def  
     | 
| 
       41 
     | 
    
         
            -
                      _method_name, _args, body = *node
         
     | 
| 
       42 
     | 
    
         
            -
                      check_indentation(node.loc.keyword, body)
         
     | 
| 
       43 
     | 
    
         
            -
                    end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                    def on_defs(node)
         
     | 
| 
       46 
     | 
    
         
            -
                      _scope, _method_name, _args, body = *node
         
     | 
| 
      
 48 
     | 
    
         
            +
                    def check(node, _method_name, _args, body)
         
     | 
| 
       47 
49 
     | 
    
         
             
                      check_indentation(node.loc.keyword, body)
         
     | 
| 
       48 
50 
     | 
    
         
             
                    end
         
     | 
| 
       49 
51 
     | 
    
         | 
| 
         @@ -54,7 +56,9 @@ module Rubocop 
     | 
|
| 
       54 
56 
     | 
    
         | 
| 
       55 
57 
     | 
    
         
             
                    def on_while(node)
         
     | 
| 
       56 
58 
     | 
    
         
             
                      _condition, body = *node
         
     | 
| 
       57 
     | 
    
         
            -
                       
     | 
| 
      
 59 
     | 
    
         
            +
                      if node.loc.keyword.begin_pos == node.loc.expression.begin_pos
         
     | 
| 
      
 60 
     | 
    
         
            +
                        check_indentation(node.loc.keyword, body)
         
     | 
| 
      
 61 
     | 
    
         
            +
                      end
         
     | 
| 
       58 
62 
     | 
    
         
             
                    end
         
     | 
| 
       59 
63 
     | 
    
         | 
| 
       60 
64 
     | 
    
         
             
                    alias_method :on_until, :on_while
         
     | 
| 
         @@ -76,7 +80,8 @@ module Rubocop 
     | 
|
| 
       76 
80 
     | 
    
         
             
                      end
         
     | 
| 
       77 
81 
     | 
    
         
             
                    end
         
     | 
| 
       78 
82 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
                    def on_if(node)
         
     | 
| 
      
 83 
     | 
    
         
            +
                    def on_if(node, offset = 0)
         
     | 
| 
      
 84 
     | 
    
         
            +
                      return if ignored_node?(node)
         
     | 
| 
       80 
85 
     | 
    
         
             
                      return if ternary_op?(node)
         
     | 
| 
       81 
86 
     | 
    
         
             
                      return if modifier_if?(node)
         
     | 
| 
       82 
87 
     | 
    
         | 
| 
         @@ -86,60 +91,89 @@ module Rubocop 
     | 
|
| 
       86 
91 
     | 
    
         
             
                      else               _condition, body = *node
         
     | 
| 
       87 
92 
     | 
    
         
             
                      end
         
     | 
| 
       88 
93 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
                      check_if(node, body, else_clause) if body
         
     | 
| 
      
 94 
     | 
    
         
            +
                      check_if(node, body, else_clause, offset) if body
         
     | 
| 
       90 
95 
     | 
    
         
             
                    end
         
     | 
| 
       91 
96 
     | 
    
         | 
| 
       92 
97 
     | 
    
         
             
                    private
         
     | 
| 
       93 
98 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
                    def  
     | 
| 
      
 99 
     | 
    
         
            +
                    def check_assignment(node, rhs)
         
     | 
| 
      
 100 
     | 
    
         
            +
                      # If there are method calls chained to the right hand side of the
         
     | 
| 
      
 101 
     | 
    
         
            +
                      # assignment, we let rhs be the receiver of those method calls before
         
     | 
| 
      
 102 
     | 
    
         
            +
                      # we check its indentation.
         
     | 
| 
      
 103 
     | 
    
         
            +
                      rhs = first_part_of_call_chain(rhs)
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                      if rhs && rhs.type == :if
         
     | 
| 
      
 106 
     | 
    
         
            +
                        on_if(rhs, rhs.loc.column - node.loc.column)
         
     | 
| 
      
 107 
     | 
    
         
            +
                        ignore_node(rhs)
         
     | 
| 
      
 108 
     | 
    
         
            +
                      end
         
     | 
| 
      
 109 
     | 
    
         
            +
                    end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                    def check_if(node, body, else_clause, offset)
         
     | 
| 
       95 
112 
     | 
    
         
             
                      return if ternary_op?(node)
         
     | 
| 
       96 
113 
     | 
    
         
             
                      # Don't check if expression is on same line as "then" keyword.
         
     | 
| 
       97 
     | 
    
         
            -
                      check_indentation(node.loc.keyword, body)
         
     | 
| 
      
 114 
     | 
    
         
            +
                      check_indentation(node.loc.keyword, body, offset)
         
     | 
| 
       98 
115 
     | 
    
         
             
                      if else_clause
         
     | 
| 
       99 
116 
     | 
    
         
             
                        if elsif?(else_clause)
         
     | 
| 
       100 
117 
     | 
    
         
             
                          _condition, inner_body, inner_else_clause = *else_clause
         
     | 
| 
       101 
     | 
    
         
            -
                          check_if(else_clause, inner_body, inner_else_clause)
         
     | 
| 
      
 118 
     | 
    
         
            +
                          check_if(else_clause, inner_body, inner_else_clause, offset)
         
     | 
| 
       102 
119 
     | 
    
         
             
                        else
         
     | 
| 
       103 
     | 
    
         
            -
                          check_indentation(node.loc. 
     | 
| 
      
 120 
     | 
    
         
            +
                          check_indentation(node.loc.else, else_clause)
         
     | 
| 
       104 
121 
     | 
    
         
             
                        end
         
     | 
| 
       105 
122 
     | 
    
         
             
                      end
         
     | 
| 
       106 
123 
     | 
    
         
             
                    end
         
     | 
| 
       107 
124 
     | 
    
         | 
| 
       108 
     | 
    
         
            -
                    def  
     | 
| 
       109 
     | 
    
         
            -
                      node.loc.end.nil?
         
     | 
| 
       110 
     | 
    
         
            -
                    end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                    def ternary_op?(node)
         
     | 
| 
       113 
     | 
    
         
            -
                      node.loc.respond_to?(:question)
         
     | 
| 
       114 
     | 
    
         
            -
                    end
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                    def elsif?(node)
         
     | 
| 
       117 
     | 
    
         
            -
                      node.loc.respond_to?(:keyword) && node.loc.keyword &&
         
     | 
| 
       118 
     | 
    
         
            -
                        node.loc.keyword.is?('elsif')
         
     | 
| 
       119 
     | 
    
         
            -
                    end
         
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
                    def check_indentation(base_loc, body_node)
         
     | 
| 
      
 125 
     | 
    
         
            +
                    def check_indentation(base_loc, body_node, offset = 0)
         
     | 
| 
       122 
126 
     | 
    
         
             
                      return unless body_node
         
     | 
| 
       123 
127 
     | 
    
         
             
                      return if body_node.loc.line == base_loc.line
         
     | 
| 
      
 128 
     | 
    
         
            +
                      return if starts_with_access_modifier?(body_node)
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
       124 
130 
     | 
    
         
             
                      # Don't check indentation if the line doesn't start with the body.
         
     | 
| 
       125 
131 
     | 
    
         
             
                      # For example lines like "else do_something".
         
     | 
| 
       126 
132 
     | 
    
         
             
                      first_char_pos_on_line = body_node.loc.expression.source_line =~ /\S/
         
     | 
| 
       127 
133 
     | 
    
         
             
                      return unless body_node.loc.column == first_char_pos_on_line
         
     | 
| 
       128 
134 
     | 
    
         | 
| 
       129 
135 
     | 
    
         
             
                      indentation = body_node.loc.column - base_loc.column
         
     | 
| 
       130 
     | 
    
         
            -
                      if indentation  
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
                         
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
      
 136 
     | 
    
         
            +
                      return if indentation == CORRECT_INDENTATION ||
         
     | 
| 
      
 137 
     | 
    
         
            +
                          indentation + offset == CORRECT_INDENTATION
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                      expr = body_node.loc.expression
         
     | 
| 
      
 140 
     | 
    
         
            +
                      begin_pos, end_pos =
         
     | 
| 
      
 141 
     | 
    
         
            +
                        if indentation >= 0
         
     | 
| 
      
 142 
     | 
    
         
            +
                          [expr.begin_pos - indentation, expr.begin_pos]
         
     | 
| 
      
 143 
     | 
    
         
            +
                        else
         
     | 
| 
      
 144 
     | 
    
         
            +
                          [expr.begin_pos, expr.begin_pos - indentation]
         
     | 
| 
      
 145 
     | 
    
         
            +
                        end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                      add_offence(nil,
         
     | 
| 
      
 148 
     | 
    
         
            +
                                  Parser::Source::Range.new(expr.source_buffer,
         
     | 
| 
      
 149 
     | 
    
         
            +
                                                            begin_pos, end_pos),
         
     | 
| 
      
 150 
     | 
    
         
            +
                                  sprintf("Use #{CORRECT_INDENTATION} (not %d) spaces " +
         
     | 
| 
      
 151 
     | 
    
         
            +
                                          'for indentation.', indentation))
         
     | 
| 
      
 152 
     | 
    
         
            +
                    end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                    def starts_with_access_modifier?(body_node)
         
     | 
| 
      
 155 
     | 
    
         
            +
                      body_node.type == :begin &&
         
     | 
| 
      
 156 
     | 
    
         
            +
                        AccessModifierIndentation.modifier_node?(body_node.children.first)
         
     | 
| 
      
 157 
     | 
    
         
            +
                    end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
                    def check_consistent(node)
         
     | 
| 
      
 160 
     | 
    
         
            +
                      children_to_check = node.children.reject do |child|
         
     | 
| 
      
 161 
     | 
    
         
            +
                        # Don't check nodes that have special indentation and will be
         
     | 
| 
      
 162 
     | 
    
         
            +
                        # checked by the AccessModifierIndentation cop.
         
     | 
| 
      
 163 
     | 
    
         
            +
                        AccessModifierIndentation.modifier_node?(child)
         
     | 
| 
      
 164 
     | 
    
         
            +
                      end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                      children_to_check.map(&:loc).each_cons(2) do |child1, child2|
         
     | 
| 
      
 167 
     | 
    
         
            +
                        if child2.line > child1.line && child2.column != child1.column
         
     | 
| 
      
 168 
     | 
    
         
            +
                          expr = child2.expression
         
     | 
| 
      
 169 
     | 
    
         
            +
                          indentation = expr.source_line =~ /\S/
         
     | 
| 
      
 170 
     | 
    
         
            +
                          end_pos = expr.begin_pos
         
     | 
| 
      
 171 
     | 
    
         
            +
                          begin_pos = end_pos - indentation
         
     | 
| 
      
 172 
     | 
    
         
            +
                          add_offence(nil,
         
     | 
| 
      
 173 
     | 
    
         
            +
                                      Parser::Source::Range.new(expr.source_buffer,
         
     | 
| 
      
 174 
     | 
    
         
            +
                                                                begin_pos, end_pos),
         
     | 
| 
      
 175 
     | 
    
         
            +
                                      'Inconsistent indentation detected.')
         
     | 
| 
      
 176 
     | 
    
         
            +
                        end
         
     | 
| 
       143 
177 
     | 
    
         
             
                      end
         
     | 
| 
       144 
178 
     | 
    
         
             
                    end
         
     | 
| 
       145 
179 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -24,9 +24,9 @@ module Rubocop 
     | 
|
| 
       24 
24 
     | 
    
         
             
                        lambda_length = lambda_length(node)
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                        if selector != '->' && lambda_length == 0
         
     | 
| 
       27 
     | 
    
         
            -
                           
     | 
| 
      
 27 
     | 
    
         
            +
                          add_offence(block_method, :expression, SINGLE_MSG)
         
     | 
| 
       28 
28 
     | 
    
         
             
                        elsif selector == '->' && lambda_length > 0
         
     | 
| 
       29 
     | 
    
         
            -
                           
     | 
| 
      
 29 
     | 
    
         
            +
                          add_offence(block_method, :expression, MULTI_MSG)
         
     | 
| 
       30 
30 
     | 
    
         
             
                        end
         
     | 
| 
       31 
31 
     | 
    
         
             
                      end
         
     | 
| 
       32 
32 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -13,6 +13,8 @@ module Rubocop 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  #  # good
         
     | 
| 
       14 
14 
     | 
    
         
             
                  #  lambda.call(x, y)
         
     | 
| 
       15 
15 
     | 
    
         
             
                  class LambdaCall < Cop
         
     | 
| 
      
 16 
     | 
    
         
            +
                    include ConfigurableEnforcedStyle
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       16 
18 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       17 
19 
     | 
    
         
             
                      _receiver, selector, = *node
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
         @@ -21,9 +23,9 @@ module Rubocop 
     | 
|
| 
       21 
23 
     | 
    
         | 
| 
       22 
24 
     | 
    
         
             
                      if style == :call && node.loc.selector.nil?
         
     | 
| 
       23 
25 
     | 
    
         
             
                        # lambda.() does not have a selector
         
     | 
| 
       24 
     | 
    
         
            -
                         
     | 
| 
      
 26 
     | 
    
         
            +
                        add_offence(node, :expression)
         
     | 
| 
       25 
27 
     | 
    
         
             
                      elsif style == :braces && node.loc.selector
         
     | 
| 
       26 
     | 
    
         
            -
                         
     | 
| 
      
 28 
     | 
    
         
            +
                        add_offence(node, :expression)
         
     | 
| 
       27 
29 
     | 
    
         
             
                      end
         
     | 
| 
       28 
30 
     | 
    
         
             
                    end
         
     | 
| 
       29 
31 
     | 
    
         | 
| 
         @@ -48,16 +50,6 @@ module Rubocop 
     | 
|
| 
       48 
50 
     | 
    
         
             
                        'Prefer the use of `lambda.(...)` over `lambda.call(...)`.'
         
     | 
| 
       49 
51 
     | 
    
         
             
                      end
         
     | 
| 
       50 
52 
     | 
    
         
             
                    end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                    private
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                    def style
         
     | 
| 
       55 
     | 
    
         
            -
                      case cop_config['EnforcedStyle']
         
     | 
| 
       56 
     | 
    
         
            -
                      when 'call' then :call
         
     | 
| 
       57 
     | 
    
         
            -
                      when 'braces' then :braces
         
     | 
| 
       58 
     | 
    
         
            -
                      else fail 'Unknown style selected!'
         
     | 
| 
       59 
     | 
    
         
            -
                      end
         
     | 
| 
       60 
     | 
    
         
            -
                    end
         
     | 
| 
       61 
53 
     | 
    
         
             
                  end
         
     | 
| 
       62 
54 
     | 
    
         
             
                end
         
     | 
| 
       63 
55 
     | 
    
         
             
              end
         
     | 
| 
         @@ -6,17 +6,21 @@ module Rubocop 
     | 
|
| 
       6 
6 
     | 
    
         
             
                  # This cop checks the length of lines in the source code.
         
     | 
| 
       7 
7 
     | 
    
         
             
                  # The maximum length is configurable.
         
     | 
| 
       8 
8 
     | 
    
         
             
                  class LineLength < Cop
         
     | 
| 
      
 9 
     | 
    
         
            +
                    include ConfigurableMax
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       9 
11 
     | 
    
         
             
                    MSG = 'Line is too long. [%d/%d]'
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
       11 
13 
     | 
    
         
             
                    def investigate(processed_source)
         
     | 
| 
       12 
14 
     | 
    
         
             
                      processed_source.lines.each_with_index do |line, index|
         
     | 
| 
       13 
15 
     | 
    
         
             
                        if line.length > max
         
     | 
| 
       14 
16 
     | 
    
         
             
                          message = sprintf(MSG, line.length, max)
         
     | 
| 
       15 
     | 
    
         
            -
                           
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                          add_offence(nil,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                      source_range(processed_source.buffer,
         
     | 
| 
      
 19 
     | 
    
         
            +
                                                   processed_source[0...index], max,
         
     | 
| 
      
 20 
     | 
    
         
            +
                                                   line.length - max),
         
     | 
| 
      
 21 
     | 
    
         
            +
                                      message) do
         
     | 
| 
      
 22 
     | 
    
         
            +
                            self.max = line.length
         
     | 
| 
      
 23 
     | 
    
         
            +
                          end
         
     | 
| 
       20 
24 
     | 
    
         
             
                        end
         
     | 
| 
       21 
25 
     | 
    
         
             
                      end
         
     | 
| 
       22 
26 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -13,7 +13,7 @@ module Rubocop 
     | 
|
| 
       13 
13 
     | 
    
         
             
                      # methods starting with a capital letter should be skipped
         
     | 
| 
       14 
14 
     | 
    
         
             
                      return if method_name =~ /\A[A-Z]/
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                       
     | 
| 
      
 16 
     | 
    
         
            +
                      add_offence(node, :begin) if args.empty? && node.loc.begin
         
     | 
| 
       17 
17 
     | 
    
         
             
                    end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                    def autocorrect(node)
         
     | 
| 
         @@ -0,0 +1,52 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Rubocop
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Cop
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Style
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # This cops checks for parentheses around the arguments in method
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # definitions. Both instance and class/singleton methods are checked.
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class MethodDefParentheses < Cop
         
     | 
| 
      
 9 
     | 
    
         
            +
                    include CheckMethods
         
     | 
| 
      
 10 
     | 
    
         
            +
                    include ConfigurableEnforcedStyle
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    def check(node, _method_name, args, _body)
         
     | 
| 
      
 13 
     | 
    
         
            +
                      if style == :require_parentheses &&
         
     | 
| 
      
 14 
     | 
    
         
            +
                          arguments?(args) &&
         
     | 
| 
      
 15 
     | 
    
         
            +
                          !parentheses?(args)
         
     | 
| 
      
 16 
     | 
    
         
            +
                        add_offence(node,
         
     | 
| 
      
 17 
     | 
    
         
            +
                                    args.loc.expression,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                    'Use def with parentheses when there are parameters.')
         
     | 
| 
      
 19 
     | 
    
         
            +
                      elsif style == :require_no_parentheses && parentheses?(args)
         
     | 
| 
      
 20 
     | 
    
         
            +
                        add_offence(args,
         
     | 
| 
      
 21 
     | 
    
         
            +
                                    :expression,
         
     | 
| 
      
 22 
     | 
    
         
            +
                                    'Use def without parentheses.')
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    def autocorrect(node)
         
     | 
| 
      
 27 
     | 
    
         
            +
                      @corrections << lambda do |corrector|
         
     | 
| 
      
 28 
     | 
    
         
            +
                        if style == :require_parentheses
         
     | 
| 
      
 29 
     | 
    
         
            +
                          corrector.insert_after(node.children[1].loc.expression, ')')
         
     | 
| 
      
 30 
     | 
    
         
            +
                          expression = node.loc.expression
         
     | 
| 
      
 31 
     | 
    
         
            +
                          replacement = expression.source.sub(/(def\s+\S+)\s+/, '\1(')
         
     | 
| 
      
 32 
     | 
    
         
            +
                          corrector.replace(expression, replacement)
         
     | 
| 
      
 33 
     | 
    
         
            +
                        elsif style == :require_no_parentheses
         
     | 
| 
      
 34 
     | 
    
         
            +
                          corrector.replace(node.loc.begin, ' ')
         
     | 
| 
      
 35 
     | 
    
         
            +
                          corrector.remove(node.loc.end)
         
     | 
| 
      
 36 
     | 
    
         
            +
                        end
         
     | 
| 
      
 37 
     | 
    
         
            +
                      end
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    private
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    def arguments?(args)
         
     | 
| 
      
 43 
     | 
    
         
            +
                      args.children.size > 0
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    def parentheses?(args)
         
     | 
| 
      
 47 
     | 
    
         
            +
                      args.loc.begin
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -7,34 +7,21 @@ module Rubocop 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  # Comment lines can optionally be ignored.
         
     | 
| 
       8 
8 
     | 
    
         
             
                  # The maximum allowed length is configurable.
         
     | 
| 
       9 
9 
     | 
    
         
             
                  class MethodLength < Cop
         
     | 
| 
       10 
     | 
    
         
            -
                     
     | 
| 
      
 10 
     | 
    
         
            +
                    include CheckMethods
         
     | 
| 
      
 11 
     | 
    
         
            +
                    include CodeLength
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                     
     | 
| 
       13 
     | 
    
         
            -
                      check(node)
         
     | 
| 
       14 
     | 
    
         
            -
                    end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                    def on_defs(node)
         
     | 
| 
       17 
     | 
    
         
            -
                      check(node)
         
     | 
| 
       18 
     | 
    
         
            -
                    end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                    def max_length
         
     | 
| 
       21 
     | 
    
         
            -
                      cop_config['Max']
         
     | 
| 
       22 
     | 
    
         
            -
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
                    private
         
     | 
| 
       23 
14 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                    def  
     | 
| 
       25 
     | 
    
         
            -
                       
     | 
| 
      
 15 
     | 
    
         
            +
                    def message
         
     | 
| 
      
 16 
     | 
    
         
            +
                      'Method has too many lines. [%d/%d]'
         
     | 
| 
       26 
17 
     | 
    
         
             
                    end
         
     | 
| 
       27 
18 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                     
     | 
| 
      
 19 
     | 
    
         
            +
                    def code_length(node)
         
     | 
| 
      
 20 
     | 
    
         
            +
                      lines = node.loc.expression.source.lines.to_a[1..-2] || []
         
     | 
| 
       29 
21 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                      method_length = Util.source_length(node.loc.expression.source,
         
     | 
| 
       32 
     | 
    
         
            -
                                                         count_comments?)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      lines.reject! { |line| irrelevant_line(line) }
         
     | 
| 
       33 
23 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                       
     | 
| 
       35 
     | 
    
         
            -
                        message = sprintf(MSG, method_length, max_length)
         
     | 
| 
       36 
     | 
    
         
            -
                        convention(node, :keyword, message)
         
     | 
| 
       37 
     | 
    
         
            -
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
                      lines.size
         
     | 
| 
       38 
25 
     | 
    
         
             
                    end
         
     | 
| 
       39 
26 
     | 
    
         
             
                  end
         
     | 
| 
       40 
27 
     | 
    
         
             
                end
         
     | 
| 
         @@ -30,7 +30,7 @@ module Rubocop 
     | 
|
| 
       30 
30 
     | 
    
         
             
                              Parser::Source::Range.new(end_kw_loc.source_buffer,
         
     | 
| 
       31 
31 
     | 
    
         
             
                                                        end_kw_loc.begin_pos,
         
     | 
| 
       32 
32 
     | 
    
         
             
                                                        method.loc.expression.end_pos)
         
     | 
| 
       33 
     | 
    
         
            -
                             
     | 
| 
      
 33 
     | 
    
         
            +
                            add_offence(nil, range)
         
     | 
| 
       34 
34 
     | 
    
         
             
                            # Done. If there are more blocks in the chain, they will be
         
     | 
| 
       35 
35 
     | 
    
         
             
                            # found by subsequent calls to on_block.
         
     | 
| 
       36 
36 
     | 
    
         
             
                            break
         
     | 
| 
         @@ -29,13 +29,23 @@ module Rubocop 
     | 
|
| 
       29 
29 
     | 
    
         
             
                                   end
         
     | 
| 
       30 
30 
     | 
    
         
             
                      right_after_cond =
         
     | 
| 
       31 
31 
     | 
    
         
             
                        Parser::Source::Range.new(next_thing.source_buffer,
         
     | 
| 
       32 
     | 
    
         
            -
                                                  condition 
     | 
| 
      
 32 
     | 
    
         
            +
                                                  end_position(condition),
         
     | 
| 
       33 
33 
     | 
    
         
             
                                                  next_thing.begin_pos)
         
     | 
| 
       34 
34 
     | 
    
         
             
                      if right_after_cond.source =~ /\A\s*then\s*(#.*)?\s*\n/
         
     | 
| 
       35 
35 
     | 
    
         
             
                        node.loc.expression.begin.line
         
     | 
| 
       36 
36 
     | 
    
         
             
                      end
         
     | 
| 
       37 
37 
     | 
    
         
             
                    end
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
      
 39 
     | 
    
         
            +
                    def end_position(conditional_node)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      node = if conditional_node.type == :match_current_line
         
     | 
| 
      
 41 
     | 
    
         
            +
                               conditional_node.children.first
         
     | 
| 
      
 42 
     | 
    
         
            +
                             else
         
     | 
| 
      
 43 
     | 
    
         
            +
                               conditional_node
         
     | 
| 
      
 44 
     | 
    
         
            +
                             end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                      node.loc.expression.end.end_pos
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
       39 
49 
     | 
    
         
             
                    def error_message
         
     | 
| 
       40 
50 
     | 
    
         
             
                      'Never use then for multi-line if/unless.'
         
     | 
| 
       41 
51 
     | 
    
         
             
                    end
         
     |