rubocop 0.82.0 → 0.86.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 +27 -19
 - data/config/default.yml +111 -23
 - data/lib/rubocop.rb +16 -59
 - data/lib/rubocop/ast_aliases.rb +8 -0
 - data/lib/rubocop/cli.rb +3 -3
 - data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
 - data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
 - data/lib/rubocop/cli/command/show_cops.rb +2 -6
 - data/lib/rubocop/comment_config.rb +1 -1
 - data/lib/rubocop/config.rb +6 -2
 - data/lib/rubocop/config_loader.rb +19 -24
 - data/lib/rubocop/config_loader_resolver.rb +45 -6
 - data/lib/rubocop/config_store.rb +12 -2
 - data/lib/rubocop/config_validator.rb +2 -1
 - data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
 - data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
 - data/lib/rubocop/cop/commissioner.rb +0 -21
 - data/lib/rubocop/cop/cop.rb +36 -21
 - data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -6
 - data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
 - data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
 - data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
 - data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
 - data/lib/rubocop/cop/generator.rb +4 -3
 - data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
 - data/lib/rubocop/cop/ignored_node.rb +1 -3
 - data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
 - data/lib/rubocop/cop/layout/class_structure.rb +19 -16
 - data/lib/rubocop/cop/layout/comment_indentation.rb +3 -3
 - data/lib/rubocop/cop/layout/condition_position.rb +12 -2
 - data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
 - data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
 - data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +128 -0
 - data/lib/rubocop/cop/layout/end_of_line.rb +3 -3
 - data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -4
 - data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -3
 - data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
 - data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
 - data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
 - data/lib/rubocop/cop/layout/hash_alignment.rb +7 -7
 - data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +3 -7
 - data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
 - data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
 - data/lib/rubocop/cop/layout/line_length.rb +21 -18
 - data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
 - data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
 - data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
 - data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
 - data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
 - data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -3
 - data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
 - data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
 - data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
 - data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +2 -4
 - data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
 - data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
 - data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
 - data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
 - data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
 - data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
 - data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
 - data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
 - data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
 - data/lib/rubocop/cop/lint/empty_when.rb +29 -6
 - data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
 - data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -3
 - data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
 - data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +38 -2
 - data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
 - data/lib/rubocop/cop/lint/loop.rb +1 -1
 - data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
 - data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
 - data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
 - data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
 - data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
 - data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
 - data/lib/rubocop/cop/lint/raise_exception.rb +12 -4
 - data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +5 -8
 - data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
 - data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
 - data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
 - data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
 - data/lib/rubocop/cop/lint/suppressed_exception.rb +11 -4
 - data/lib/rubocop/cop/lint/syntax.rb +1 -3
 - data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
 - data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
 - data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
 - data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
 - data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
 - data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +35 -3
 - data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
 - data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
 - data/lib/rubocop/cop/migration/department_name.rb +7 -7
 - data/lib/rubocop/cop/mixin/alignment.rb +1 -3
 - data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
 - data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
 - data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
 - data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
 - data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
 - data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
 - data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
 - data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
 - data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
 - data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -1
 - data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
 - data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
 - data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
 - data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
 - data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
 - data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
 - data/lib/rubocop/cop/mixin/range_help.rb +1 -1
 - data/lib/rubocop/cop/mixin/regexp_literal_help.rb +43 -0
 - data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -23
 - data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
 - data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -3
 - data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
 - data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
 - data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -3
 - data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
 - data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
 - data/lib/rubocop/cop/naming/file_name.rb +28 -17
 - data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
 - data/lib/rubocop/cop/naming/method_name.rb +1 -5
 - data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
 - data/lib/rubocop/cop/registry.rb +63 -10
 - data/lib/rubocop/cop/severity.rb +1 -3
 - data/lib/rubocop/cop/style/and_or.rb +2 -2
 - data/lib/rubocop/cop/style/array_join.rb +1 -1
 - data/lib/rubocop/cop/style/attr.rb +1 -3
 - data/lib/rubocop/cop/style/bare_percent_literals.rb +2 -2
 - data/lib/rubocop/cop/style/block_delimiters.rb +4 -12
 - data/lib/rubocop/cop/style/case_equality.rb +1 -1
 - data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
 - data/lib/rubocop/cop/style/command_literal.rb +1 -1
 - data/lib/rubocop/cop/style/commented_keyword.rb +2 -2
 - data/lib/rubocop/cop/style/conditional_assignment.rb +2 -4
 - data/lib/rubocop/cop/style/copyright.rb +5 -5
 - data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
 - data/lib/rubocop/cop/style/documentation.rb +2 -2
 - data/lib/rubocop/cop/style/double_negation.rb +41 -4
 - data/lib/rubocop/cop/style/empty_case_condition.rb +8 -6
 - data/lib/rubocop/cop/style/empty_literal.rb +1 -3
 - data/lib/rubocop/cop/style/empty_method.rb +1 -5
 - data/lib/rubocop/cop/style/encoding.rb +1 -1
 - data/lib/rubocop/cop/style/exponential_notation.rb +5 -5
 - data/lib/rubocop/cop/style/format_string_token.rb +2 -3
 - data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
 - data/lib/rubocop/cop/style/guard_clause.rb +25 -2
 - data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
 - data/lib/rubocop/cop/style/hash_syntax.rb +16 -7
 - data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
 - data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
 - data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
 - data/lib/rubocop/cop/style/inline_comment.rb +1 -1
 - data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
 - data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
 - data/lib/rubocop/cop/style/lambda_call.rb +0 -20
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
 - data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
 - data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
 - data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
 - data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
 - data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
 - data/lib/rubocop/cop/style/negated_if.rb +3 -3
 - data/lib/rubocop/cop/style/negated_unless.rb +3 -3
 - data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
 - data/lib/rubocop/cop/style/next.rb +2 -2
 - data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
 - data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
 - data/lib/rubocop/cop/style/one_line_conditional.rb +2 -6
 - data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
 - data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_conditional.rb +4 -3
 - data/lib/rubocop/cop/style/redundant_fetch_block.rb +103 -0
 - data/lib/rubocop/cop/style/redundant_parentheses.rb +3 -7
 - data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
 - data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
 - data/lib/rubocop/cop/style/redundant_regexp_escape.rb +121 -0
 - data/lib/rubocop/cop/style/redundant_self.rb +6 -9
 - data/lib/rubocop/cop/style/safe_navigation.rb +2 -6
 - data/lib/rubocop/cop/style/sample.rb +1 -1
 - data/lib/rubocop/cop/style/semicolon.rb +1 -1
 - data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
 - data/lib/rubocop/cop/style/special_global_vars.rb +2 -6
 - data/lib/rubocop/cop/style/struct_inheritance.rb +21 -0
 - data/lib/rubocop/cop/style/symbol_array.rb +5 -5
 - data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -4
 - data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +3 -3
 - data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +3 -3
 - data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +13 -13
 - data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +3 -3
 - data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
 - data/lib/rubocop/cop/style/unless_else.rb +1 -1
 - data/lib/rubocop/cop/style/when_then.rb +1 -1
 - data/lib/rubocop/cop/style/word_array.rb +1 -1
 - data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
 - data/lib/rubocop/cop/team.rb +69 -25
 - data/lib/rubocop/cop/util.rb +27 -3
 - data/lib/rubocop/cop/utils/format_string.rb +18 -0
 - data/lib/rubocop/cop/variable_force.rb +3 -9
 - data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
 - data/lib/rubocop/cop/variable_force/branch.rb +1 -3
 - data/lib/rubocop/cop/variable_force/scope.rb +1 -0
 - data/lib/rubocop/cop/variable_force/variable.rb +3 -6
 - data/lib/rubocop/ext/processed_source.rb +18 -0
 - data/lib/rubocop/formatter/base_formatter.rb +0 -4
 - data/lib/rubocop/formatter/disabled_config_formatter.rb +5 -13
 - data/lib/rubocop/formatter/formatter_set.rb +2 -4
 - data/lib/rubocop/formatter/junit_formatter.rb +14 -4
 - data/lib/rubocop/magic_comment.rb +1 -1
 - data/lib/rubocop/name_similarity.rb +18 -9
 - data/lib/rubocop/options.rb +26 -11
 - data/lib/rubocop/path_util.rb +2 -2
 - data/lib/rubocop/platform.rb +1 -1
 - data/lib/rubocop/remote_config.rb +1 -3
 - data/lib/rubocop/result_cache.rb +5 -7
 - data/lib/rubocop/rspec/cop_helper.rb +2 -25
 - data/lib/rubocop/rspec/expect_offense.rb +58 -15
 - data/lib/rubocop/rspec/shared_contexts.rb +54 -16
 - data/lib/rubocop/runner.rb +20 -13
 - data/lib/rubocop/target_finder.rb +8 -8
 - data/lib/rubocop/target_ruby.rb +4 -1
 - data/lib/rubocop/version.rb +5 -3
 - metadata +51 -74
 - data/lib/rubocop/ast/builder.rb +0 -85
 - data/lib/rubocop/ast/node.rb +0 -637
 - data/lib/rubocop/ast/node/alias_node.rb +0 -24
 - data/lib/rubocop/ast/node/and_node.rb +0 -29
 - data/lib/rubocop/ast/node/args_node.rb +0 -29
 - data/lib/rubocop/ast/node/array_node.rb +0 -70
 - data/lib/rubocop/ast/node/block_node.rb +0 -121
 - data/lib/rubocop/ast/node/break_node.rb +0 -17
 - data/lib/rubocop/ast/node/case_match_node.rb +0 -56
 - data/lib/rubocop/ast/node/case_node.rb +0 -56
 - data/lib/rubocop/ast/node/class_node.rb +0 -31
 - data/lib/rubocop/ast/node/def_node.rb +0 -82
 - data/lib/rubocop/ast/node/defined_node.rb +0 -17
 - data/lib/rubocop/ast/node/ensure_node.rb +0 -17
 - data/lib/rubocop/ast/node/float_node.rb +0 -12
 - data/lib/rubocop/ast/node/for_node.rb +0 -53
 - data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
 - data/lib/rubocop/ast/node/hash_node.rb +0 -109
 - data/lib/rubocop/ast/node/if_node.rb +0 -175
 - data/lib/rubocop/ast/node/int_node.rb +0 -12
 - data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
 - data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
 - data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
 - data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
 - data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
 - data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
 - data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -269
 - data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
 - data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
 - data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
 - data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
 - data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
 - data/lib/rubocop/ast/node/module_node.rb +0 -24
 - data/lib/rubocop/ast/node/or_node.rb +0 -29
 - data/lib/rubocop/ast/node/pair_node.rb +0 -63
 - data/lib/rubocop/ast/node/range_node.rb +0 -18
 - data/lib/rubocop/ast/node/regexp_node.rb +0 -33
 - data/lib/rubocop/ast/node/resbody_node.rb +0 -24
 - data/lib/rubocop/ast/node/retry_node.rb +0 -17
 - data/lib/rubocop/ast/node/return_node.rb +0 -24
 - data/lib/rubocop/ast/node/self_class_node.rb +0 -24
 - data/lib/rubocop/ast/node/send_node.rb +0 -13
 - data/lib/rubocop/ast/node/str_node.rb +0 -16
 - data/lib/rubocop/ast/node/super_node.rb +0 -21
 - data/lib/rubocop/ast/node/symbol_node.rb +0 -12
 - data/lib/rubocop/ast/node/until_node.rb +0 -35
 - data/lib/rubocop/ast/node/when_node.rb +0 -53
 - data/lib/rubocop/ast/node/while_node.rb +0 -35
 - data/lib/rubocop/ast/node/yield_node.rb +0 -21
 - data/lib/rubocop/ast/sexp.rb +0 -16
 - data/lib/rubocop/ast/traversal.rb +0 -202
 - data/lib/rubocop/node_pattern.rb +0 -887
 - data/lib/rubocop/processed_source.rb +0 -213
 - data/lib/rubocop/string_util.rb +0 -14
 - data/lib/rubocop/token.rb +0 -114
 
| 
         @@ -81,9 +81,7 @@ module RuboCop 
     | 
|
| 
       81 
81 
     | 
    
         
             
                      end
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
       83 
83 
     | 
    
         
             
                      def each_ancestor(include_self: false, &block)
         
     | 
| 
       84 
     | 
    
         
            -
                        unless block_given?
         
     | 
| 
       85 
     | 
    
         
            -
                          return to_enum(__method__, include_self: include_self)
         
     | 
| 
       86 
     | 
    
         
            -
                        end
         
     | 
| 
      
 84 
     | 
    
         
            +
                        return to_enum(__method__, include_self: include_self) unless block_given?
         
     | 
| 
       87 
85 
     | 
    
         | 
| 
       88 
86 
     | 
    
         
             
                        yield self if include_self
         
     | 
| 
       89 
87 
     | 
    
         
             
                        scan_ancestors(&block)
         
     | 
| 
         @@ -11,6 +11,7 @@ module RuboCop 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                    attr_reader :name, :declaration_node, :scope,
         
     | 
| 
       13 
13 
     | 
    
         
             
                                :assignments, :references, :captured_by_block
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       14 
15 
     | 
    
         
             
                    alias captured_by_block? captured_by_block
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
                    def initialize(name, declaration_node, scope)
         
     | 
| 
         @@ -46,9 +47,7 @@ module RuboCop 
     | 
|
| 
       46 
47 
     | 
    
         
             
                      @assignments.reverse_each do |assignment|
         
     | 
| 
       47 
48 
     | 
    
         
             
                        next if consumed_branches.include?(assignment.branch)
         
     | 
| 
       48 
49 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                        unless assignment.run_exclusively_with?(reference)
         
     | 
| 
       50 
     | 
    
         
            -
                          assignment.reference!(node)
         
     | 
| 
       51 
     | 
    
         
            -
                        end
         
     | 
| 
      
 50 
     | 
    
         
            +
                        assignment.reference!(node) unless assignment.run_exclusively_with?(reference)
         
     | 
| 
       52 
51 
     | 
    
         | 
| 
       53 
52 
     | 
    
         
             
                        # Modifier if/unless conditions are special. Assignments made in
         
     | 
| 
       54 
53 
     | 
    
         
             
                        # them do not put the assigned variable in scope to the left of the
         
     | 
| 
         @@ -59,9 +58,7 @@ module RuboCop 
     | 
|
| 
       59 
58 
     | 
    
         | 
| 
       60 
59 
     | 
    
         
             
                        break if !assignment.branch || assignment.branch == reference.branch
         
     | 
| 
       61 
60 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
                        unless assignment.branch.may_run_incompletely?
         
     | 
| 
       63 
     | 
    
         
            -
                          consumed_branches << assignment.branch
         
     | 
| 
       64 
     | 
    
         
            -
                        end
         
     | 
| 
      
 61 
     | 
    
         
            +
                        consumed_branches << assignment.branch unless assignment.branch.may_run_incompletely?
         
     | 
| 
       65 
62 
     | 
    
         
             
                      end
         
     | 
| 
       66 
63 
     | 
    
         
             
                    end
         
     | 
| 
       67 
64 
     | 
    
         
             
                    # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Ext
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Extensions to AST::ProcessedSource for our cached comment_config
         
     | 
| 
      
 6 
     | 
    
         
            +
                module ProcessedSource
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def comment_config
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @comment_config ||= CommentConfig.new(self)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def disabled_line_ranges
         
     | 
| 
      
 12 
     | 
    
         
            +
                    comment_config.cop_disabled_line_ranges
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            RuboCop::ProcessedSource.include RuboCop::Ext::ProcessedSource
         
     | 
| 
         @@ -1,7 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            # rubocop:disable Layout/LineLength
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
3 
     | 
    
         
             
            module RuboCop
         
     | 
| 
       6 
4 
     | 
    
         
             
              module Formatter
         
     | 
| 
       7 
5 
     | 
    
         
             
                # Abstract base class for formatter, implements all public API methods.
         
     | 
| 
         @@ -41,8 +39,6 @@ module RuboCop 
     | 
|
| 
       41 
39 
     | 
    
         
             
                # * `#finished`
         
     | 
| 
       42 
40 
     | 
    
         
             
                #
         
     | 
| 
       43 
41 
     | 
    
         
             
                class BaseFormatter
         
     | 
| 
       44 
     | 
    
         
            -
                  # rubocop:enable Layout/LineLength
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
42 
     | 
    
         
             
                  # @api public
         
     | 
| 
       47 
43 
     | 
    
         
             
                  #
         
     | 
| 
       48 
44 
     | 
    
         
             
                  # @!attribute [r] output
         
     | 
| 
         @@ -59,9 +59,7 @@ module RuboCop 
     | 
|
| 
       59 
59 
     | 
    
         
             
                  def command
         
     | 
| 
       60 
60 
     | 
    
         
             
                    command = 'rubocop --auto-gen-config'
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
                    if @options[:auto_gen_only_exclude]
         
     | 
| 
       63 
     | 
    
         
            -
                      command += ' --auto-gen-only-exclude'
         
     | 
| 
       64 
     | 
    
         
            -
                    end
         
     | 
| 
      
 62 
     | 
    
         
            +
                    command += ' --auto-gen-only-exclude' if @options[:auto_gen_only_exclude]
         
     | 
| 
       65 
63 
     | 
    
         | 
| 
       66 
64 
     | 
    
         
             
                    if @exclude_limit_option
         
     | 
| 
       67 
65 
     | 
    
         
             
                      command +=
         
     | 
| 
         @@ -70,15 +68,13 @@ module RuboCop 
     | 
|
| 
       70 
68 
     | 
    
         
             
                    end
         
     | 
| 
       71 
69 
     | 
    
         
             
                    command += ' --no-offense-counts' if @options[:no_offense_counts]
         
     | 
| 
       72 
70 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                    if @options[:no_auto_gen_timestamp]
         
     | 
| 
       74 
     | 
    
         
            -
                      command += ' --no-auto-gen-timestamp'
         
     | 
| 
       75 
     | 
    
         
            -
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                    command += ' --no-auto-gen-timestamp' if @options[:no_auto_gen_timestamp]
         
     | 
| 
       76 
72 
     | 
    
         | 
| 
       77 
73 
     | 
    
         
             
                    command
         
     | 
| 
       78 
74 
     | 
    
         
             
                  end
         
     | 
| 
       79 
75 
     | 
    
         | 
| 
       80 
76 
     | 
    
         
             
                  def timestamp
         
     | 
| 
       81 
     | 
    
         
            -
                    @options[:no_auto_gen_timestamp] ? '' : "on #{Time.now} "
         
     | 
| 
      
 77 
     | 
    
         
            +
                    @options[:no_auto_gen_timestamp] ? '' : "on #{Time.now.utc} "
         
     | 
| 
       82 
78 
     | 
    
         
             
                  end
         
     | 
| 
       83 
79 
     | 
    
         | 
| 
       84 
80 
     | 
    
         
             
                  def output_offenses
         
     | 
| 
         @@ -116,14 +112,10 @@ module RuboCop 
     | 
|
| 
       116 
112 
     | 
    
         
             
                  end
         
     | 
| 
       117 
113 
     | 
    
         | 
| 
       118 
114 
     | 
    
         
             
                  def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
         
     | 
| 
       119 
     | 
    
         
            -
                    if @show_offense_counts
         
     | 
| 
       120 
     | 
    
         
            -
                      output_buffer.puts "# Offense count: #{offense_count}"
         
     | 
| 
       121 
     | 
    
         
            -
                    end
         
     | 
| 
      
 115 
     | 
    
         
            +
                    output_buffer.puts "# Offense count: #{offense_count}" if @show_offense_counts
         
     | 
| 
       122 
116 
     | 
    
         | 
| 
       123 
117 
     | 
    
         
             
                    cop_class = Cop::Cop.registry.find_by_cop_name(cop_name)
         
     | 
| 
       124 
     | 
    
         
            -
                    if cop_class&.new&.support_autocorrect?
         
     | 
| 
       125 
     | 
    
         
            -
                      output_buffer.puts '# Cop supports --auto-correct.'
         
     | 
| 
       126 
     | 
    
         
            -
                    end
         
     | 
| 
      
 118 
     | 
    
         
            +
                    output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.new&.support_autocorrect?
         
     | 
| 
       127 
119 
     | 
    
         | 
| 
       128 
120 
     | 
    
         
             
                    default_cfg = default_config(cop_name)
         
     | 
| 
       129 
121 
     | 
    
         
             
                    return unless default_cfg
         
     | 
| 
         @@ -82,14 +82,12 @@ module RuboCop 
     | 
|
| 
       82 
82 
     | 
    
         | 
| 
       83 
83 
     | 
    
         
             
                  def builtin_formatter_class(specified_key)
         
     | 
| 
       84 
84 
     | 
    
         
             
                    matching_keys = BUILTIN_FORMATTERS_FOR_KEYS.keys.select do |key|
         
     | 
| 
       85 
     | 
    
         
            -
                       
     | 
| 
      
 85 
     | 
    
         
            +
                      /^\[#{specified_key}\]/.match?(key) || specified_key == key.delete('[]')
         
     | 
| 
       86 
86 
     | 
    
         
             
                    end
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
       88 
88 
     | 
    
         
             
                    raise %(No formatter for "#{specified_key}") if matching_keys.empty?
         
     | 
| 
       89 
89 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
                    if matching_keys.size > 1
         
     | 
| 
       91 
     | 
    
         
            -
                      raise %(Cannot determine formatter for "#{specified_key}")
         
     | 
| 
       92 
     | 
    
         
            -
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                    raise %(Cannot determine formatter for "#{specified_key}") if matching_keys.size > 1
         
     | 
| 
       93 
91 
     | 
    
         | 
| 
       94 
92 
     | 
    
         
             
                    BUILTIN_FORMATTERS_FOR_KEYS[matching_keys.first]
         
     | 
| 
       95 
93 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -35,19 +35,29 @@ module RuboCop 
     | 
|
| 
       35 
35 
     | 
    
         
             
                    #
         
     | 
| 
       36 
36 
     | 
    
         
             
                    # In the future, it would be preferable to return only enabled cops.
         
     | 
| 
       37 
37 
     | 
    
         
             
                    Cop::Cop.all.each do |cop|
         
     | 
| 
      
 38 
     | 
    
         
            +
                      target_offenses = offenses_for_cop(offenses, cop)
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                      next unless relevant_for_output?(options, target_offenses)
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
       38 
42 
     | 
    
         
             
                      REXML::Element.new('testcase', @testsuite).tap do |testcase|
         
     | 
| 
       39 
43 
     | 
    
         
             
                        testcase.attributes['classname'] = classname_attribute_value(file)
         
     | 
| 
       40 
44 
     | 
    
         
             
                        testcase.attributes['name'] = cop.cop_name
         
     | 
| 
       41 
45 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                        target_offenses = offenses.select do |offense|
         
     | 
| 
       43 
     | 
    
         
            -
                          offense.cop_name == cop.cop_name
         
     | 
| 
       44 
     | 
    
         
            -
                        end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
46 
     | 
    
         
             
                        add_failure_to(testcase, target_offenses, cop.cop_name)
         
     | 
| 
       47 
47 
     | 
    
         
             
                      end
         
     | 
| 
       48 
48 
     | 
    
         
             
                    end
         
     | 
| 
       49 
49 
     | 
    
         
             
                  end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
      
 51 
     | 
    
         
            +
                  def relevant_for_output?(options, target_offenses)
         
     | 
| 
      
 52 
     | 
    
         
            +
                    !options[:display_only_failed] || target_offenses.any?
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  def offenses_for_cop(all_offenses, cop)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    all_offenses.select do |offense|
         
     | 
| 
      
 57 
     | 
    
         
            +
                      offense.cop_name == cop.cop_name
         
     | 
| 
      
 58 
     | 
    
         
            +
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
                  end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       51 
61 
     | 
    
         
             
                  def classname_attribute_value(file)
         
     | 
| 
       52 
62 
     | 
    
         
             
                    file.gsub(/\.rb\Z/, '').gsub("#{Dir.pwd}/", '').tr('/', '.')
         
     | 
| 
       53 
63 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -133,7 +133,7 @@ module RuboCop 
     | 
|
| 
       133 
133 
     | 
    
         
             
                # @see https://www.gnu.org/software/emacs/manual/html_node/emacs/Specify-Coding.html
         
     | 
| 
       134 
134 
     | 
    
         
             
                # @see https://git.io/vMCXh Emacs handling in Ruby's parse.y
         
     | 
| 
       135 
135 
     | 
    
         
             
                class EmacsComment < EditorComment
         
     | 
| 
       136 
     | 
    
         
            -
                  FORMAT    =  
     | 
| 
      
 136 
     | 
    
         
            +
                  FORMAT    = /-\*-(.+)-\*-/.freeze
         
     | 
| 
       137 
137 
     | 
    
         
             
                  SEPARATOR = ';'
         
     | 
| 
       138 
138 
     | 
    
         
             
                  OPERATOR  = ':'
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
         @@ -3,19 +3,28 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module RuboCop
         
     | 
| 
       4 
4 
     | 
    
         
             
              # Common functionality for finding names that are similar to a given name.
         
     | 
| 
       5 
5 
     | 
    
         
             
              module NameSimilarity
         
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
      
 6 
     | 
    
         
            +
                module_function
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                def find_similar_name(target_name,  
     | 
| 
       9 
     | 
    
         
            -
                   
     | 
| 
      
 8 
     | 
    
         
            +
                def find_similar_name(target_name, names)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  similar_names = find_similar_names(target_name, names)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  similar_names.first
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def find_similar_names(target_name, names)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # DidYouMean::SpellChecker is not available in all versions of Ruby, and
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # even on versions where it *is* available (>= 2.3), it is not always
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # required correctly. So we do a feature check first.
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # See: https://github.com/rubocop-hq/rubocop/issues/7979
         
     | 
| 
      
 19 
     | 
    
         
            +
                  return [] unless defined?(DidYouMean::SpellChecker)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  names = names.dup
         
     | 
| 
       10 
22 
     | 
    
         
             
                  names.delete(target_name)
         
     | 
| 
       11 
23 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                   
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                    hash[name] = score if score >= MINIMUM_SIMILARITY_TO_SUGGEST
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  spell_checker = DidYouMean::SpellChecker.new(dictionary: names)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  similar_names = spell_checker.correct(target_name)
         
     | 
| 
       16 
26 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
       18 
     | 
    
         
            -
                  most_similar_name
         
     | 
| 
      
 27 
     | 
    
         
            +
                  similar_names
         
     | 
| 
       19 
28 
     | 
    
         
             
                end
         
     | 
| 
       20 
29 
     | 
    
         
             
              end
         
     | 
| 
       21 
30 
     | 
    
         
             
            end
         
     | 
    
        data/lib/rubocop/options.rb
    CHANGED
    
    | 
         @@ -83,6 +83,12 @@ module RuboCop 
     | 
|
| 
       83 
83 
     | 
    
         | 
| 
       84 
84 
     | 
    
         
             
                def add_cop_selection_csv_option(option, opts)
         
     | 
| 
       85 
85 
     | 
    
         
             
                  option(opts, "--#{option} [COP1,COP2,...]") do |list|
         
     | 
| 
      
 86 
     | 
    
         
            +
                    unless list
         
     | 
| 
      
 87 
     | 
    
         
            +
                      message = "--#{option} argument should be [COP1,COP2,...]."
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                      raise OptionArgumentError, message
         
     | 
| 
      
 90 
     | 
    
         
            +
                    end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
       86 
92 
     | 
    
         
             
                    @options[:"#{option}"] =
         
     | 
| 
       87 
93 
     | 
    
         
             
                      if list.empty?
         
     | 
| 
       88 
94 
     | 
    
         
             
                        ['']
         
     | 
| 
         @@ -97,6 +103,7 @@ module RuboCop 
     | 
|
| 
       97 
103 
     | 
    
         
             
                def add_configuration_options(opts)
         
     | 
| 
       98 
104 
     | 
    
         
             
                  option(opts, '-c', '--config FILE')
         
     | 
| 
       99 
105 
     | 
    
         
             
                  option(opts, '--force-exclusion')
         
     | 
| 
      
 106 
     | 
    
         
            +
                  option(opts, '--only-recognized-file-types')
         
     | 
| 
       100 
107 
     | 
    
         
             
                  option(opts, '--ignore-parent-exclusion')
         
     | 
| 
       101 
108 
     | 
    
         
             
                  option(opts, '--force-default-config')
         
     | 
| 
       102 
109 
     | 
    
         
             
                  add_auto_gen_options(opts)
         
     | 
| 
         @@ -136,6 +143,8 @@ module RuboCop 
     | 
|
| 
       136 
143 
     | 
    
         
             
                      @options[:output_path] = path
         
     | 
| 
       137 
144 
     | 
    
         
             
                    end
         
     | 
| 
       138 
145 
     | 
    
         
             
                  end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  option(opts, '--display-only-failed')
         
     | 
| 
       139 
148 
     | 
    
         
             
                end
         
     | 
| 
       140 
149 
     | 
    
         | 
| 
       141 
150 
     | 
    
         
             
                def add_severity_option(opts)
         
     | 
| 
         @@ -241,10 +250,7 @@ module RuboCop 
     | 
|
| 
       241 
250 
     | 
    
         
             
                  def format_message_from(name, cop_names)
         
     | 
| 
       242 
251 
     | 
    
         
             
                    message = 'Unrecognized cop or department: %<name>s.'
         
     | 
| 
       243 
252 
     | 
    
         
             
                    message_with_candidate = "%<message>s\nDid you mean? %<candidate>s"
         
     | 
| 
       244 
     | 
    
         
            -
                    corrections =  
     | 
| 
       245 
     | 
    
         
            -
                      score = StringUtil.similarity(cn, name)
         
     | 
| 
       246 
     | 
    
         
            -
                      score >= NameSimilarity::MINIMUM_SIMILARITY_TO_SUGGEST
         
     | 
| 
       247 
     | 
    
         
            -
                    end.sort
         
     | 
| 
      
 253 
     | 
    
         
            +
                    corrections = NameSimilarity.find_similar_names(name, cop_names)
         
     | 
| 
       248 
254 
     | 
    
         | 
| 
       249 
255 
     | 
    
         
             
                    if corrections.empty?
         
     | 
| 
       250 
256 
     | 
    
         
             
                      format(message, name: name)
         
     | 
| 
         @@ -271,9 +277,7 @@ module RuboCop 
     | 
|
| 
       271 
277 
     | 
    
         
             
                    raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot ' \
         
     | 
| 
       272 
278 
     | 
    
         
             
                                               'be used with --only.'
         
     | 
| 
       273 
279 
     | 
    
         
             
                  end
         
     | 
| 
       274 
     | 
    
         
            -
                  if except_syntax?
         
     | 
| 
       275 
     | 
    
         
            -
                    raise OptionArgumentError, 'Syntax checking cannot be turned off.'
         
     | 
| 
       276 
     | 
    
         
            -
                  end
         
     | 
| 
      
 280 
     | 
    
         
            +
                  raise OptionArgumentError, 'Syntax checking cannot be turned off.' if except_syntax?
         
     | 
| 
       277 
281 
     | 
    
         
             
                  unless boolean_or_empty_cache?
         
     | 
| 
       278 
282 
     | 
    
         
             
                    raise OptionArgumentError, '-C/--cache argument must be true or false'
         
     | 
| 
       279 
283 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -284,6 +288,7 @@ module RuboCop 
     | 
|
| 
       284 
288 
     | 
    
         
             
                  end
         
     | 
| 
       285 
289 
     | 
    
         
             
                  validate_auto_gen_config
         
     | 
| 
       286 
290 
     | 
    
         
             
                  validate_auto_correct
         
     | 
| 
      
 291 
     | 
    
         
            +
                  validate_display_only_failed
         
     | 
| 
       287 
292 
     | 
    
         
             
                  validate_parallel
         
     | 
| 
       288 
293 
     | 
    
         | 
| 
       289 
294 
     | 
    
         
             
                  return if incompatible_options.size <= 1
         
     | 
| 
         @@ -307,13 +312,20 @@ module RuboCop 
     | 
|
| 
       307 
312 
     | 
    
         
             
                  end
         
     | 
| 
       308 
313 
     | 
    
         
             
                end
         
     | 
| 
       309 
314 
     | 
    
         | 
| 
      
 315 
     | 
    
         
            +
                def validate_display_only_failed
         
     | 
| 
      
 316 
     | 
    
         
            +
                  return unless @options.key?(:display_only_failed)
         
     | 
| 
      
 317 
     | 
    
         
            +
                  return if @options[:format] == 'junit'
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
                  raise OptionArgumentError,
         
     | 
| 
      
 320 
     | 
    
         
            +
                        format('--display-only-failed can only be used together with --format junit.')
         
     | 
| 
      
 321 
     | 
    
         
            +
                end
         
     | 
| 
      
 322 
     | 
    
         
            +
             
     | 
| 
       310 
323 
     | 
    
         
             
                def validate_auto_correct
         
     | 
| 
       311 
324 
     | 
    
         
             
                  return if @options.key?(:auto_correct)
         
     | 
| 
       312 
325 
     | 
    
         
             
                  return unless @options.key?(:disable_uncorrectable)
         
     | 
| 
       313 
326 
     | 
    
         | 
| 
       314 
327 
     | 
    
         
             
                  raise OptionArgumentError,
         
     | 
| 
       315 
     | 
    
         
            -
                        format(' 
     | 
| 
       316 
     | 
    
         
            -
                               flag: '--disable-uncorrectable')
         
     | 
| 
      
 328 
     | 
    
         
            +
                        format('--disable-uncorrectable can only be used together with --auto-correct.')
         
     | 
| 
       317 
329 
     | 
    
         
             
                end
         
     | 
| 
       318 
330 
     | 
    
         | 
| 
       319 
331 
     | 
    
         
             
                def validate_parallel
         
     | 
| 
         @@ -377,7 +389,6 @@ module RuboCop 
     | 
|
| 
       377 
389 
     | 
    
         
             
              # This module contains help texts for command line options.
         
     | 
| 
       378 
390 
     | 
    
         
             
              module OptionsHelp
         
     | 
| 
       379 
391 
     | 
    
         
             
                MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
         
     | 
| 
       380 
     | 
    
         
            -
                # rubocop:disable Layout/LineLength
         
     | 
| 
       381 
392 
     | 
    
         
             
                FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
         
     | 
| 
       382 
393 
     | 
    
         | 
| 
       383 
394 
     | 
    
         
             
                TEXT = {
         
     | 
| 
         @@ -409,6 +420,9 @@ module RuboCop 
     | 
|
| 
       409 
420 
     | 
    
         
             
                  force_exclusion:                  ['Force excluding files specified in the',
         
     | 
| 
       410 
421 
     | 
    
         
             
                                                     'configuration `Exclude` even if they are',
         
     | 
| 
       411 
422 
     | 
    
         
             
                                                     'explicitly passed as arguments.'],
         
     | 
| 
      
 423 
     | 
    
         
            +
                  only_recognized_file_types:       ['Inspect files given on the command line only if',
         
     | 
| 
      
 424 
     | 
    
         
            +
                                                     'they are listed in AllCops/Include parameters',
         
     | 
| 
      
 425 
     | 
    
         
            +
                                                     'of user configuration or default configuration.'],
         
     | 
| 
       412 
426 
     | 
    
         
             
                  ignore_disable_comments:          ['Run cops even when they are disabled locally',
         
     | 
| 
       413 
427 
     | 
    
         
             
                                                     'with a comment.'],
         
     | 
| 
       414 
428 
     | 
    
         
             
                  ignore_parent_exclusion:          ['Prevent from inheriting AllCops/Exclude from',
         
     | 
| 
         @@ -427,6 +441,8 @@ module RuboCop 
     | 
|
| 
       427 
441 
     | 
    
         
             
                                                     'if no format is specified.'],
         
     | 
| 
       428 
442 
     | 
    
         
             
                  fail_level:                       ['Minimum severity (A/R/C/W/E/F) for exit',
         
     | 
| 
       429 
443 
     | 
    
         
             
                                                     'with error code.'],
         
     | 
| 
      
 444 
     | 
    
         
            +
                  display_only_failed:              ['Only output offense messages. Omit passing',
         
     | 
| 
      
 445 
     | 
    
         
            +
                                                     'cops. Only valid for --format junit.'],
         
     | 
| 
       430 
446 
     | 
    
         
             
                  display_only_fail_level_offenses:
         
     | 
| 
       431 
447 
     | 
    
         
             
                                                    ['Only output offense messages at',
         
     | 
| 
       432 
448 
     | 
    
         
             
                                                     'the specified --fail-level or above'],
         
     | 
| 
         @@ -461,6 +477,5 @@ module RuboCop 
     | 
|
| 
       461 
477 
     | 
    
         
             
                                                     'reports. This is useful for editor integration.'],
         
     | 
| 
       462 
478 
     | 
    
         
             
                  init:                             'Generate a .rubocop.yml file in the current directory.'
         
     | 
| 
       463 
479 
     | 
    
         
             
                }.freeze
         
     | 
| 
       464 
     | 
    
         
            -
                # rubocop:enable Layout/LineLength
         
     | 
| 
       465 
480 
     | 
    
         
             
              end
         
     | 
| 
       466 
481 
     | 
    
         
             
            end
         
     | 
    
        data/lib/rubocop/path_util.rb
    CHANGED
    
    | 
         @@ -40,7 +40,7 @@ module RuboCop 
     | 
|
| 
       40 
40 
     | 
    
         
             
                      hidden_file_in_not_hidden_dir?(pattern, path)
         
     | 
| 
       41 
41 
     | 
    
         
             
                  when Regexp
         
     | 
| 
       42 
42 
     | 
    
         
             
                    begin
         
     | 
| 
       43 
     | 
    
         
            -
                      path 
     | 
| 
      
 43 
     | 
    
         
            +
                      pattern.match?(path)
         
     | 
| 
       44 
44 
     | 
    
         
             
                    rescue ArgumentError => e
         
     | 
| 
       45 
45 
     | 
    
         
             
                      return false if e.message.start_with?('invalid byte sequence')
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
         @@ -51,7 +51,7 @@ module RuboCop 
     | 
|
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                # Returns true for an absolute Unix or Windows path.
         
     | 
| 
       53 
53 
     | 
    
         
             
                def absolute?(path)
         
     | 
| 
       54 
     | 
    
         
            -
                   
     | 
| 
      
 54 
     | 
    
         
            +
                  %r{\A([A-Z]:)?/}i.match?(path)
         
     | 
| 
       55 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                def self.pwd
         
     | 
    
        data/lib/rubocop/platform.rb
    CHANGED
    
    
| 
         @@ -56,9 +56,7 @@ module RuboCop 
     | 
|
| 
       56 
56 
     | 
    
         
             
                def generate_request(uri)
         
     | 
| 
       57 
57 
     | 
    
         
             
                  request = Net::HTTP::Get.new(uri.request_uri)
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                  if cache_path_exists?
         
     | 
| 
       60 
     | 
    
         
            -
                    request['If-Modified-Since'] = File.stat(cache_path).mtime.rfc2822
         
     | 
| 
       61 
     | 
    
         
            -
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                  request['If-Modified-Since'] = File.stat(cache_path).mtime.rfc2822 if cache_path_exists?
         
     | 
| 
       62 
60 
     | 
    
         | 
| 
       63 
61 
     | 
    
         
             
                  yield request
         
     | 
| 
       64 
62 
     | 
    
         
             
                end
         
     | 
    
        data/lib/rubocop/result_cache.rb
    CHANGED
    
    | 
         @@ -33,16 +33,14 @@ module RuboCop 
     | 
|
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                  def requires_file_removal?(file_count, config_store)
         
     | 
| 
       35 
35 
     | 
    
         
             
                    file_count > 1 &&
         
     | 
| 
       36 
     | 
    
         
            -
                      file_count > config_store. 
     | 
| 
      
 36 
     | 
    
         
            +
                      file_count > config_store.for_dir('.').for_all_cops['MaxFilesInCache']
         
     | 
| 
       37 
37 
     | 
    
         
             
                  end
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
                  def remove_oldest_files(files, dirs, cache_root, verbose)
         
     | 
| 
       40 
40 
     | 
    
         
             
                    # Add 1 to half the number of files, so that we remove the file if
         
     | 
| 
       41 
41 
     | 
    
         
             
                    # there's only 1 left.
         
     | 
| 
       42 
42 
     | 
    
         
             
                    remove_count = 1 + files.length / 2
         
     | 
| 
       43 
     | 
    
         
            -
                    if verbose
         
     | 
| 
       44 
     | 
    
         
            -
                      puts "Removing the #{remove_count} oldest files from #{cache_root}"
         
     | 
| 
       45 
     | 
    
         
            -
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    puts "Removing the #{remove_count} oldest files from #{cache_root}" if verbose
         
     | 
| 
       46 
44 
     | 
    
         
             
                    sorted = files.sort_by { |path| File.mtime(path) }
         
     | 
| 
       47 
45 
     | 
    
         
             
                    remove_files(sorted, dirs, remove_count)
         
     | 
| 
       48 
46 
     | 
    
         
             
                  rescue Errno::ENOENT
         
     | 
| 
         @@ -62,7 +60,7 @@ module RuboCop 
     | 
|
| 
       62 
60 
     | 
    
         
             
                end
         
     | 
| 
       63 
61 
     | 
    
         | 
| 
       64 
62 
     | 
    
         
             
                def self.cache_root(config_store)
         
     | 
| 
       65 
     | 
    
         
            -
                  root = config_store. 
     | 
| 
      
 63 
     | 
    
         
            +
                  root = config_store.for_dir('.').for_all_cops['CacheRootDirectory']
         
     | 
| 
       66 
64 
     | 
    
         
             
                  root ||= if ENV.key?('XDG_CACHE_HOME')
         
     | 
| 
       67 
65 
     | 
    
         
             
                             # Include user ID in the path to make sure the user has write
         
     | 
| 
       68 
66 
     | 
    
         
             
                             # access.
         
     | 
| 
         @@ -74,7 +72,7 @@ module RuboCop 
     | 
|
| 
       74 
72 
     | 
    
         
             
                end
         
     | 
| 
       75 
73 
     | 
    
         | 
| 
       76 
74 
     | 
    
         
             
                def self.allow_symlinks_in_cache_location?(config_store)
         
     | 
| 
       77 
     | 
    
         
            -
                  config_store. 
     | 
| 
      
 75 
     | 
    
         
            +
                  config_store.for_dir('.').for_all_cops['AllowSymlinksInCacheRootDirectory']
         
     | 
| 
       78 
76 
     | 
    
         
             
                end
         
     | 
| 
       79 
77 
     | 
    
         | 
| 
       80 
78 
     | 
    
         
             
                def initialize(file, team, options, config_store, cache_root = nil)
         
     | 
| 
         @@ -145,7 +143,7 @@ module RuboCop 
     | 
|
| 
       145 
143 
     | 
    
         
             
                  digester = Digest::SHA1.new
         
     | 
| 
       146 
144 
     | 
    
         
             
                  mode = File.stat(file).mode
         
     | 
| 
       147 
145 
     | 
    
         
             
                  digester.update(
         
     | 
| 
       148 
     | 
    
         
            -
                    "#{file}#{mode}#{config_store. 
     | 
| 
      
 146 
     | 
    
         
            +
                    "#{file}#{mode}#{config_store.for_file(file).signature}"
         
     | 
| 
       149 
147 
     | 
    
         
             
                  )
         
     | 
| 
       150 
148 
     | 
    
         
             
                  digester.file(file)
         
     | 
| 
       151 
149 
     | 
    
         
             
                  digester.hexdigest
         
     | 
| 
         @@ -48,32 +48,9 @@ module CopHelper 
     | 
|
| 
       48 
48 
     | 
    
         
             
                corrector.rewrite
         
     | 
| 
       49 
49 
     | 
    
         
             
              end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
              def autocorrect_source_with_loop(source, file = nil)
         
     | 
| 
       52 
     | 
    
         
            -
                cnt = 0
         
     | 
| 
       53 
     | 
    
         
            -
                loop do
         
     | 
| 
       54 
     | 
    
         
            -
                  cop.instance_variable_set(:@corrections, [])
         
     | 
| 
       55 
     | 
    
         
            -
                  new_source = autocorrect_source(source, file)
         
     | 
| 
       56 
     | 
    
         
            -
                  return new_source if new_source == source
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                  source = new_source
         
     | 
| 
       59 
     | 
    
         
            -
                  cnt += 1
         
     | 
| 
       60 
     | 
    
         
            -
                  if cnt > RuboCop::Runner::MAX_ITERATIONS
         
     | 
| 
       61 
     | 
    
         
            -
                    raise RuboCop::Runner::InfiniteCorrectionLoop.new(file, [])
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
     | 
    
         
            -
              end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
51 
     | 
    
         
             
              def _investigate(cop, processed_source)
         
     | 
| 
       67 
     | 
    
         
            -
                 
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                  instances << klass.new([cop])
         
     | 
| 
       71 
     | 
    
         
            -
                end
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
                commissioner =
         
     | 
| 
       74 
     | 
    
         
            -
                  RuboCop::Cop::Commissioner.new([cop], forces, raise_error: true)
         
     | 
| 
       75 
     | 
    
         
            -
                commissioner.investigate(processed_source)
         
     | 
| 
       76 
     | 
    
         
            -
                commissioner
         
     | 
| 
      
 52 
     | 
    
         
            +
                team = RuboCop::Cop::Team.new([cop], nil, raise_error: true)
         
     | 
| 
      
 53 
     | 
    
         
            +
                team.inspect_file(processed_source)
         
     | 
| 
       77 
54 
     | 
    
         
             
              end
         
     | 
| 
       78 
55 
     | 
    
         
             
            end
         
     | 
| 
       79 
56 
     | 
    
         |