rubocop 1.32.0 → 1.37.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 +2 -2
 - data/config/default.yml +104 -16
 - data/config/obsoletion.yml +23 -1
 - data/lib/rubocop/arguments_env.rb +17 -0
 - data/lib/rubocop/arguments_file.rb +17 -0
 - data/lib/rubocop/cache_config.rb +29 -0
 - data/lib/rubocop/cli/command/{auto_genenerate_config.rb → auto_generate_config.rb} +2 -2
 - data/lib/rubocop/cli/command/execute_runner.rb +7 -7
 - data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
 - data/lib/rubocop/cli/command/suggest_extensions.rb +53 -15
 - data/lib/rubocop/config.rb +1 -1
 - data/lib/rubocop/config_finder.rb +68 -0
 - data/lib/rubocop/config_loader.rb +12 -40
 - data/lib/rubocop/config_loader_resolver.rb +1 -5
 - data/lib/rubocop/config_obsoletion/changed_parameter.rb +5 -0
 - data/lib/rubocop/config_obsoletion/parameter_rule.rb +4 -0
 - data/lib/rubocop/config_obsoletion.rb +7 -2
 - data/lib/rubocop/cop/cop.rb +1 -1
 - data/lib/rubocop/cop/correctors/parentheses_corrector.rb +58 -0
 - data/lib/rubocop/cop/gemspec/require_mfa.rb +1 -1
 - data/lib/rubocop/cop/generator/require_file_injector.rb +2 -2
 - data/lib/rubocop/cop/generator.rb +1 -2
 - data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +69 -0
 - data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +62 -0
 - data/lib/rubocop/cop/internal_affairs.rb +2 -0
 - data/lib/rubocop/cop/layout/block_alignment.rb +16 -12
 - data/lib/rubocop/cop/layout/block_end_newline.rb +35 -5
 - data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +5 -2
 - data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -0
 - data/lib/rubocop/cop/layout/end_of_line.rb +4 -4
 - data/lib/rubocop/cop/layout/first_argument_indentation.rb +7 -1
 - data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -2
 - data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -2
 - data/lib/rubocop/cop/layout/indentation_width.rb +6 -2
 - data/lib/rubocop/cop/layout/line_length.rb +4 -1
 - data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
 - data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -0
 - data/lib/rubocop/cop/layout/redundant_line_break.rb +1 -1
 - data/lib/rubocop/cop/layout/space_around_block_parameters.rb +1 -1
 - data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
 - data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -0
 - data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +13 -9
 - data/lib/rubocop/cop/layout/space_inside_block_braces.rb +25 -9
 - data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +28 -3
 - data/lib/rubocop/cop/legacy/corrections_proxy.rb +1 -1
 - data/lib/rubocop/cop/legacy/corrector.rb +1 -1
 - data/lib/rubocop/cop/lint/ambiguous_block_association.rb +21 -8
 - data/lib/rubocop/cop/lint/debugger.rb +26 -16
 - data/lib/rubocop/cop/lint/deprecated_class_methods.rb +4 -4
 - data/lib/rubocop/cop/lint/duplicate_magic_comment.rb +73 -0
 - data/lib/rubocop/cop/lint/duplicate_methods.rb +11 -1
 - data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +25 -6
 - data/lib/rubocop/cop/lint/duplicate_require.rb +1 -1
 - data/lib/rubocop/cop/lint/empty_block.rb +1 -1
 - data/lib/rubocop/cop/lint/empty_class.rb +3 -1
 - data/lib/rubocop/cop/lint/empty_conditional_body.rb +107 -1
 - data/lib/rubocop/cop/lint/erb_new_arguments.rb +9 -9
 - data/lib/rubocop/cop/lint/literal_in_interpolation.rb +4 -0
 - data/lib/rubocop/cop/lint/nested_method_definition.rb +50 -1
 - data/lib/rubocop/cop/lint/next_without_accumulator.rb +25 -6
 - data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +6 -6
 - data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +12 -0
 - data/lib/rubocop/cop/lint/number_conversion.rb +24 -8
 - data/lib/rubocop/cop/lint/ordered_magic_comments.rb +4 -5
 - data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -1
 - data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +12 -1
 - data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +7 -0
 - data/lib/rubocop/cop/lint/redundant_require_statement.rb +29 -9
 - data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +9 -3
 - data/lib/rubocop/cop/lint/redundant_with_index.rb +13 -10
 - data/lib/rubocop/cop/lint/redundant_with_object.rb +12 -11
 - data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
 - data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -2
 - data/lib/rubocop/cop/lint/shadowed_exception.rb +15 -10
 - data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +27 -3
 - data/lib/rubocop/cop/lint/unreachable_loop.rb +9 -3
 - data/lib/rubocop/cop/lint/unused_method_argument.rb +4 -0
 - data/lib/rubocop/cop/lint/useless_access_modifier.rb +8 -6
 - data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +1 -1
 - data/lib/rubocop/cop/lint/void.rb +2 -0
 - data/lib/rubocop/cop/metrics/abc_size.rb +3 -1
 - data/lib/rubocop/cop/metrics/block_length.rb +6 -7
 - data/lib/rubocop/cop/metrics/method_length.rb +8 -8
 - data/lib/rubocop/cop/mixin/allowed_methods.rb +20 -1
 - data/lib/rubocop/cop/mixin/allowed_pattern.rb +17 -1
 - data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
 - data/lib/rubocop/cop/mixin/comments_help.rb +17 -1
 - data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -1
 - data/lib/rubocop/cop/mixin/frozen_string_literal.rb +4 -0
 - data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +82 -4
 - data/lib/rubocop/cop/mixin/hash_transform_method.rb +10 -6
 - data/lib/rubocop/cop/mixin/method_complexity.rb +8 -13
 - data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -1
 - data/lib/rubocop/cop/mixin/range_help.rb +4 -5
 - data/lib/rubocop/cop/mixin/rescue_node.rb +3 -1
 - data/lib/rubocop/cop/mixin/surrounding_space.rb +6 -5
 - data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
 - data/lib/rubocop/cop/naming/constant_name.rb +2 -2
 - data/lib/rubocop/cop/naming/inclusive_language.rb +1 -1
 - data/lib/rubocop/cop/naming/predicate_name.rb +24 -3
 - data/lib/rubocop/cop/style/access_modifier_declarations.rb +97 -1
 - data/lib/rubocop/cop/style/accessor_grouping.rb +7 -3
 - data/lib/rubocop/cop/style/arguments_forwarding.rb +2 -2
 - data/lib/rubocop/cop/style/block_delimiters.rb +26 -7
 - data/lib/rubocop/cop/style/case_equality.rb +40 -10
 - data/lib/rubocop/cop/style/class_and_module_children.rb +4 -4
 - data/lib/rubocop/cop/style/class_equality_comparison.rb +32 -7
 - data/lib/rubocop/cop/style/class_methods_definitions.rb +2 -1
 - data/lib/rubocop/cop/style/collection_compact.rb +6 -1
 - data/lib/rubocop/cop/style/collection_methods.rb +2 -0
 - data/lib/rubocop/cop/style/combinable_loops.rb +3 -1
 - data/lib/rubocop/cop/style/double_negation.rb +2 -0
 - data/lib/rubocop/cop/style/each_for_simple_loop.rb +41 -6
 - data/lib/rubocop/cop/style/each_with_object.rb +39 -8
 - data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
 - data/lib/rubocop/cop/style/empty_heredoc.rb +15 -1
 - data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
 - data/lib/rubocop/cop/style/empty_method.rb +1 -1
 - data/lib/rubocop/cop/style/endless_method.rb +1 -1
 - data/lib/rubocop/cop/style/explicit_block_argument.rb +4 -0
 - data/lib/rubocop/cop/style/for.rb +2 -0
 - data/lib/rubocop/cop/style/format_string_token.rb +21 -8
 - data/lib/rubocop/cop/style/guard_clause.rb +27 -16
 - data/lib/rubocop/cop/style/hash_each_methods.rb +3 -1
 - data/lib/rubocop/cop/style/hash_except.rb +0 -4
 - data/lib/rubocop/cop/style/hash_syntax.rb +17 -0
 - data/lib/rubocop/cop/style/if_unless_modifier.rb +1 -1
 - data/lib/rubocop/cop/style/inverse_methods.rb +8 -6
 - data/lib/rubocop/cop/style/magic_comment_format.rb +307 -0
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +15 -4
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +5 -1
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +7 -7
 - data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11 -6
 - data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +4 -1
 - data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -1
 - data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +1 -1
 - data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -1
 - data/lib/rubocop/cop/style/next.rb +3 -5
 - data/lib/rubocop/cop/style/nil_lambda.rb +1 -1
 - data/lib/rubocop/cop/style/numeric_literals.rb +16 -1
 - data/lib/rubocop/cop/style/numeric_predicate.rb +28 -8
 - data/lib/rubocop/cop/style/object_then.rb +2 -0
 - data/lib/rubocop/cop/style/operator_method_call.rb +39 -0
 - data/lib/rubocop/cop/style/perl_backrefs.rb +22 -1
 - data/lib/rubocop/cop/style/proc.rb +4 -1
 - data/lib/rubocop/cop/style/redundant_begin.rb +3 -0
 - data/lib/rubocop/cop/style/redundant_condition.rb +24 -6
 - data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_initialize.rb +3 -1
 - data/lib/rubocop/cop/style/redundant_parentheses.rb +19 -22
 - data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +8 -1
 - data/lib/rubocop/cop/style/redundant_self.rb +2 -0
 - data/lib/rubocop/cop/style/redundant_sort.rb +21 -6
 - data/lib/rubocop/cop/style/redundant_sort_by.rb +24 -8
 - data/lib/rubocop/cop/style/redundant_string_escape.rb +173 -0
 - data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
 - data/lib/rubocop/cop/style/safe_navigation.rb +4 -2
 - data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
 - data/lib/rubocop/cop/style/sole_nested_conditional.rb +14 -5
 - data/lib/rubocop/cop/style/static_class.rb +32 -1
 - data/lib/rubocop/cop/style/symbol_array.rb +3 -1
 - data/lib/rubocop/cop/style/symbol_proc.rb +38 -12
 - data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -13
 - data/lib/rubocop/cop/style/top_level_method_definition.rb +3 -1
 - data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
 - data/lib/rubocop/cop/style/word_array.rb +3 -1
 - data/lib/rubocop/cop/util.rb +1 -1
 - data/lib/rubocop/ext/range.rb +15 -0
 - data/lib/rubocop/feature_loader.rb +94 -0
 - data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
 - data/lib/rubocop/formatter/disabled_config_formatter.rb +9 -3
 - data/lib/rubocop/formatter/html_formatter.rb +3 -3
 - data/lib/rubocop/formatter/markdown_formatter.rb +1 -1
 - data/lib/rubocop/formatter/tap_formatter.rb +1 -1
 - data/lib/rubocop/options.rb +13 -13
 - data/lib/rubocop/result_cache.rb +22 -20
 - data/lib/rubocop/rspec/shared_contexts.rb +13 -1
 - data/lib/rubocop/runner.rb +4 -0
 - data/lib/rubocop/server/cache.rb +41 -2
 - data/lib/rubocop/server/cli.rb +26 -2
 - data/lib/rubocop/server/client_command/exec.rb +5 -0
 - data/lib/rubocop/server/core.rb +2 -1
 - data/lib/rubocop/server/socket_reader.rb +5 -1
 - data/lib/rubocop/server.rb +1 -1
 - data/lib/rubocop/version.rb +8 -2
 - data/lib/rubocop.rb +8 -3
 - metadata +20 -9
 - data/lib/rubocop/cop/mixin/ignored_methods.rb +0 -52
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e928a8547def9cafd9cddc36b5a407aef7d46fdf9825941c7906073492d88668
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3ef9727850f93815ba310b7c3a8cf74e53a0ee18a0fcf6731fd97a3640ffe28d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f57e5d25375fe47734a6e198924db74b341501762dc8f54277a888788ab821215c96847940cec1af4d90673fe79ab906b451bf25bec90f9c8c080e78efc01111
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 69cafbca956eaa49887596d255f6888057ede94f3621349398de95da5c477201f7bee7eae074ab4750ce0131dcb26d6dfdc77c31f5fcb478d2fc25d5ca73e68c
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -46,14 +46,14 @@ If you'd rather install RuboCop using `bundler`, add a line for it in your `Gemf 
     | 
|
| 
       46 
46 
     | 
    
         
             
            gem 'rubocop', require: false
         
     | 
| 
       47 
47 
     | 
    
         
             
            ```
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
            RuboCop is stable between  
     | 
| 
      
 49 
     | 
    
         
            +
            RuboCop is stable between minor versions, both in terms of API and cop configuration.
         
     | 
| 
       50 
50 
     | 
    
         
             
            We aim to ease the maintenance of RuboCop extensions and the upgrades between RuboCop
         
     | 
| 
       51 
51 
     | 
    
         
             
            releases. All big changes are reserved for major releases.
         
     | 
| 
       52 
52 
     | 
    
         
             
            To prevent an unwanted RuboCop update you might want to use a conservative version lock
         
     | 
| 
       53 
53 
     | 
    
         
             
            in your `Gemfile`:
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
            ```rb
         
     | 
| 
       56 
     | 
    
         
            -
            gem 'rubocop', '~> 1. 
     | 
| 
      
 56 
     | 
    
         
            +
            gem 'rubocop', '~> 1.37', require: false
         
     | 
| 
       57 
57 
     | 
    
         
             
            ```
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
            See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
         
     | 
    
        data/config/default.yml
    CHANGED
    
    | 
         @@ -1502,7 +1502,9 @@ Lint/AmbiguousBlockAssociation: 
     | 
|
| 
       1502 
1502 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       1503 
1503 
     | 
    
         
             
              VersionAdded: '0.48'
         
     | 
| 
       1504 
1504 
     | 
    
         
             
              VersionChanged: '1.13'
         
     | 
| 
       1505 
     | 
    
         
            -
               
     | 
| 
      
 1505 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 1506 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 1507 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       1506 
1508 
     | 
    
         | 
| 
       1507 
1509 
     | 
    
         
             
            Lint/AmbiguousOperator:
         
     | 
| 
       1508 
1510 
     | 
    
         
             
              Description: >-
         
     | 
| 
         @@ -1602,6 +1604,7 @@ Lint/Debugger: 
     | 
|
| 
       1602 
1604 
     | 
    
         
             
                # a user's configuration, but are otherwise not significant.
         
     | 
| 
       1603 
1605 
     | 
    
         
             
                Kernel:
         
     | 
| 
       1604 
1606 
     | 
    
         
             
                  - binding.irb
         
     | 
| 
      
 1607 
     | 
    
         
            +
                  - Kernel.binding.irb
         
     | 
| 
       1605 
1608 
     | 
    
         
             
                Byebug:
         
     | 
| 
       1606 
1609 
     | 
    
         
             
                  - byebug
         
     | 
| 
       1607 
1610 
     | 
    
         
             
                  - remote_byebug
         
     | 
| 
         @@ -1619,6 +1622,9 @@ Lint/Debugger: 
     | 
|
| 
       1619 
1622 
     | 
    
         
             
                  - binding.pry
         
     | 
| 
       1620 
1623 
     | 
    
         
             
                  - binding.remote_pry
         
     | 
| 
       1621 
1624 
     | 
    
         
             
                  - binding.pry_remote
         
     | 
| 
      
 1625 
     | 
    
         
            +
                  - Kernel.binding.pry
         
     | 
| 
      
 1626 
     | 
    
         
            +
                  - Kernel.binding.remote_pry
         
     | 
| 
      
 1627 
     | 
    
         
            +
                  - Kernel.binding.pry_remote
         
     | 
| 
       1622 
1628 
     | 
    
         
             
                  - Pry.rescue
         
     | 
| 
       1623 
1629 
     | 
    
         
             
                Rails:
         
     | 
| 
       1624 
1630 
     | 
    
         
             
                  - debugger
         
     | 
| 
         @@ -1701,6 +1707,11 @@ Lint/DuplicateHashKey: 
     | 
|
| 
       1701 
1707 
     | 
    
         
             
              VersionAdded: '0.34'
         
     | 
| 
       1702 
1708 
     | 
    
         
             
              VersionChanged: '0.77'
         
     | 
| 
       1703 
1709 
     | 
    
         | 
| 
      
 1710 
     | 
    
         
            +
            Lint/DuplicateMagicComment:
         
     | 
| 
      
 1711 
     | 
    
         
            +
              Description: 'Check for duplicated magic comments.'
         
     | 
| 
      
 1712 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 1713 
     | 
    
         
            +
              VersionAdded: '1.37'
         
     | 
| 
      
 1714 
     | 
    
         
            +
             
     | 
| 
       1704 
1715 
     | 
    
         
             
            Lint/DuplicateMethods:
         
     | 
| 
       1705 
1716 
     | 
    
         
             
              Description: 'Check for duplicate method definitions.'
         
     | 
| 
       1706 
1717 
     | 
    
         
             
              Enabled: true
         
     | 
| 
         @@ -1751,8 +1762,10 @@ Lint/EmptyClass: 
     | 
|
| 
       1751 
1762 
     | 
    
         
             
            Lint/EmptyConditionalBody:
         
     | 
| 
       1752 
1763 
     | 
    
         
             
              Description: 'Checks for the presence of `if`, `elsif` and `unless` branches without a body.'
         
     | 
| 
       1753 
1764 
     | 
    
         
             
              Enabled: true
         
     | 
| 
      
 1765 
     | 
    
         
            +
              SafeAutoCorrect: false
         
     | 
| 
       1754 
1766 
     | 
    
         
             
              AllowComments: true
         
     | 
| 
       1755 
1767 
     | 
    
         
             
              VersionAdded: '0.89'
         
     | 
| 
      
 1768 
     | 
    
         
            +
              VersionChanged: '1.34'
         
     | 
| 
       1756 
1769 
     | 
    
         | 
| 
       1757 
1770 
     | 
    
         
             
            Lint/EmptyEnsure:
         
     | 
| 
       1758 
1771 
     | 
    
         
             
              Description: 'Checks for empty ensure block.'
         
     | 
| 
         @@ -1949,6 +1962,8 @@ Lint/NestedMethodDefinition: 
     | 
|
| 
       1949 
1962 
     | 
    
         
             
              Description: 'Do not use nested method definitions.'
         
     | 
| 
       1950 
1963 
     | 
    
         
             
              StyleGuide: '#no-nested-methods'
         
     | 
| 
       1951 
1964 
     | 
    
         
             
              Enabled: true
         
     | 
| 
      
 1965 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 1966 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
       1952 
1967 
     | 
    
         
             
              VersionAdded: '0.32'
         
     | 
| 
       1953 
1968 
     | 
    
         | 
| 
       1954 
1969 
     | 
    
         
             
            Lint/NestedPercentLiteral:
         
     | 
| 
         @@ -1970,6 +1985,7 @@ Lint/NoReturnInBeginEndBlocks: 
     | 
|
| 
       1970 
1985 
     | 
    
         | 
| 
       1971 
1986 
     | 
    
         
             
            Lint/NonAtomicFileOperation:
         
     | 
| 
       1972 
1987 
     | 
    
         
             
              Description: Checks for non-atomic file operations.
         
     | 
| 
      
 1988 
     | 
    
         
            +
              StyleGuide: '#atomic-file-operations'
         
     | 
| 
       1973 
1989 
     | 
    
         
             
              Enabled: pending
         
     | 
| 
       1974 
1990 
     | 
    
         
             
              VersionAdded: '1.31'
         
     | 
| 
       1975 
1991 
     | 
    
         
             
              SafeAutoCorrect: false
         
     | 
| 
         @@ -1991,7 +2007,9 @@ Lint/NumberConversion: 
     | 
|
| 
       1991 
2007 
     | 
    
         
             
              VersionAdded: '0.53'
         
     | 
| 
       1992 
2008 
     | 
    
         
             
              VersionChanged: '1.1'
         
     | 
| 
       1993 
2009 
     | 
    
         
             
              SafeAutoCorrect: false
         
     | 
| 
       1994 
     | 
    
         
            -
               
     | 
| 
      
 2010 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 2011 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 2012 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       1995 
2013 
     | 
    
         
             
              IgnoredClasses:
         
     | 
| 
       1996 
2014 
     | 
    
         
             
                - Time
         
     | 
| 
       1997 
2015 
     | 
    
         
             
                - DateTime
         
     | 
| 
         @@ -2010,7 +2028,9 @@ Lint/OrAssignmentToConstant: 
     | 
|
| 
       2010 
2028 
     | 
    
         
             
            Lint/OrderedMagicComments:
         
     | 
| 
       2011 
2029 
     | 
    
         
             
              Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
         
     | 
| 
       2012 
2030 
     | 
    
         
             
              Enabled: true
         
     | 
| 
      
 2031 
     | 
    
         
            +
              SafeAutoCorrect: false
         
     | 
| 
       2013 
2032 
     | 
    
         
             
              VersionAdded: '0.53'
         
     | 
| 
      
 2033 
     | 
    
         
            +
              VersionChanged: '1.37'
         
     | 
| 
       2014 
2034 
     | 
    
         | 
| 
       2015 
2035 
     | 
    
         
             
            Lint/OutOfRangeRegexpRef:
         
     | 
| 
       2016 
2036 
     | 
    
         
             
              Description: 'Checks for out of range reference for Regexp because it always returns nil.'
         
     | 
| 
         @@ -2443,7 +2463,9 @@ Metrics/AbcSize: 
     | 
|
| 
       2443 
2463 
     | 
    
         
             
              VersionChanged: '1.5'
         
     | 
| 
       2444 
2464 
     | 
    
         
             
              # The ABC size is a calculated magnitude, so this number can be an Integer or
         
     | 
| 
       2445 
2465 
     | 
    
         
             
              # a Float.
         
     | 
| 
       2446 
     | 
    
         
            -
               
     | 
| 
      
 2466 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 2467 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 2468 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       2447 
2469 
     | 
    
         
             
              CountRepeatedAttributes: true
         
     | 
| 
       2448 
2470 
     | 
    
         
             
              Max: 17
         
     | 
| 
       2449 
2471 
     | 
    
         | 
| 
         @@ -2456,10 +2478,12 @@ Metrics/BlockLength: 
     | 
|
| 
       2456 
2478 
     | 
    
         
             
              Max: 25
         
     | 
| 
       2457 
2479 
     | 
    
         
             
              CountAsOne: []
         
     | 
| 
       2458 
2480 
     | 
    
         
             
              ExcludedMethods: [] # deprecated, retained for backwards compatibility
         
     | 
| 
       2459 
     | 
    
         
            -
               
     | 
| 
      
 2481 
     | 
    
         
            +
              AllowedMethods:
         
     | 
| 
       2460 
2482 
     | 
    
         
             
                # By default, exclude the `#refine` method, as it tends to have larger
         
     | 
| 
       2461 
2483 
     | 
    
         
             
                # associated blocks.
         
     | 
| 
       2462 
2484 
     | 
    
         
             
                - refine
         
     | 
| 
      
 2485 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 2486 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       2463 
2487 
     | 
    
         
             
              Exclude:
         
     | 
| 
       2464 
2488 
     | 
    
         
             
                - '**/*.gemspec'
         
     | 
| 
       2465 
2489 
     | 
    
         | 
| 
         @@ -2489,7 +2513,9 @@ Metrics/CyclomaticComplexity: 
     | 
|
| 
       2489 
2513 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       2490 
2514 
     | 
    
         
             
              VersionAdded: '0.25'
         
     | 
| 
       2491 
2515 
     | 
    
         
             
              VersionChanged: '0.81'
         
     | 
| 
       2492 
     | 
    
         
            -
               
     | 
| 
      
 2516 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 2517 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 2518 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       2493 
2519 
     | 
    
         
             
              Max: 7
         
     | 
| 
       2494 
2520 
     | 
    
         | 
| 
       2495 
2521 
     | 
    
         
             
            Metrics/MethodLength:
         
     | 
| 
         @@ -2502,7 +2528,9 @@ Metrics/MethodLength: 
     | 
|
| 
       2502 
2528 
     | 
    
         
             
              Max: 10
         
     | 
| 
       2503 
2529 
     | 
    
         
             
              CountAsOne: []
         
     | 
| 
       2504 
2530 
     | 
    
         
             
              ExcludedMethods: [] # deprecated, retained for backwards compatibility
         
     | 
| 
       2505 
     | 
    
         
            -
               
     | 
| 
      
 2531 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 2532 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 2533 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       2506 
2534 
     | 
    
         | 
| 
       2507 
2535 
     | 
    
         
             
            Metrics/ModuleLength:
         
     | 
| 
       2508 
2536 
     | 
    
         
             
              Description: 'Avoid modules longer than 100 lines of code.'
         
     | 
| 
         @@ -2530,7 +2558,9 @@ Metrics/PerceivedComplexity: 
     | 
|
| 
       2530 
2558 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       2531 
2559 
     | 
    
         
             
              VersionAdded: '0.25'
         
     | 
| 
       2532 
2560 
     | 
    
         
             
              VersionChanged: '0.81'
         
     | 
| 
       2533 
     | 
    
         
            -
               
     | 
| 
      
 2561 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 2562 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 2563 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       2534 
2564 
     | 
    
         
             
              Max: 8
         
     | 
| 
       2535 
2565 
     | 
    
         | 
| 
       2536 
2566 
     | 
    
         
             
            ################## Migration #############################
         
     | 
| 
         @@ -2773,6 +2803,7 @@ Naming/MethodParameterName: 
     | 
|
| 
       2773 
2803 
     | 
    
         
             
              AllowNamesEndingInNumbers: true
         
     | 
| 
       2774 
2804 
     | 
    
         
             
              # Allowed names that will not register an offense
         
     | 
| 
       2775 
2805 
     | 
    
         
             
              AllowedNames:
         
     | 
| 
      
 2806 
     | 
    
         
            +
                - as
         
     | 
| 
       2776 
2807 
     | 
    
         
             
                - at
         
     | 
| 
       2777 
2808 
     | 
    
         
             
                - by
         
     | 
| 
       2778 
2809 
     | 
    
         
             
                - db
         
     | 
| 
         @@ -2927,6 +2958,7 @@ Style/AccessModifierDeclarations: 
     | 
|
| 
       2927 
2958 
     | 
    
         
             
                - inline
         
     | 
| 
       2928 
2959 
     | 
    
         
             
                - group
         
     | 
| 
       2929 
2960 
     | 
    
         
             
              AllowModifiersOnSymbols: true
         
     | 
| 
      
 2961 
     | 
    
         
            +
              SafeAutoCorrect: false
         
     | 
| 
       2930 
2962 
     | 
    
         | 
| 
       2931 
2963 
     | 
    
         
             
            Style/AccessorGrouping:
         
     | 
| 
       2932 
2964 
     | 
    
         
             
              Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
         
     | 
| 
         @@ -3061,7 +3093,7 @@ Style/BlockDelimiters: 
     | 
|
| 
       3061 
3093 
     | 
    
         
             
                # This looks at the usage of a block's method to determine its type (e.g. is
         
     | 
| 
       3062 
3094 
     | 
    
         
             
                # the result of a `map` assigned to a variable or passed to another
         
     | 
| 
       3063 
3095 
     | 
    
         
             
                # method) but exceptions are permitted in the `ProceduralMethods`,
         
     | 
| 
       3064 
     | 
    
         
            -
                # `FunctionalMethods` and ` 
     | 
| 
      
 3096 
     | 
    
         
            +
                # `FunctionalMethods` and `AllowedMethods` sections below.
         
     | 
| 
       3065 
3097 
     | 
    
         
             
                - semantic
         
     | 
| 
       3066 
3098 
     | 
    
         
             
                # The `braces_for_chaining` style enforces braces around single line blocks
         
     | 
| 
       3067 
3099 
     | 
    
         
             
                # and do..end around multi-line blocks, except for multi-line blocks whose
         
     | 
| 
         @@ -3102,7 +3134,7 @@ Style/BlockDelimiters: 
     | 
|
| 
       3102 
3134 
     | 
    
         
             
                - let!
         
     | 
| 
       3103 
3135 
     | 
    
         
             
                - subject
         
     | 
| 
       3104 
3136 
     | 
    
         
             
                - watch
         
     | 
| 
       3105 
     | 
    
         
            -
               
     | 
| 
      
 3137 
     | 
    
         
            +
              AllowedMethods:
         
     | 
| 
       3106 
3138 
     | 
    
         
             
                # Methods that can be either procedural or functional and cannot be
         
     | 
| 
       3107 
3139 
     | 
    
         
             
                # categorised from their usage alone, e.g.
         
     | 
| 
       3108 
3140 
     | 
    
         
             
                #
         
     | 
| 
         @@ -3119,6 +3151,8 @@ Style/BlockDelimiters: 
     | 
|
| 
       3119 
3151 
     | 
    
         
             
                - lambda
         
     | 
| 
       3120 
3152 
     | 
    
         
             
                - proc
         
     | 
| 
       3121 
3153 
     | 
    
         
             
                - it
         
     | 
| 
      
 3154 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 3155 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       3122 
3156 
     | 
    
         
             
              # The AllowBracesOnProceduralOneLiners option is ignored unless the
         
     | 
| 
       3123 
3157 
     | 
    
         
             
              # EnforcedStyle is set to `semantic`. If so:
         
     | 
| 
       3124 
3158 
     | 
    
         
             
              #
         
     | 
| 
         @@ -3163,6 +3197,15 @@ Style/CaseEquality: 
     | 
|
| 
       3163 
3197 
     | 
    
         
             
              #   # good
         
     | 
| 
       3164 
3198 
     | 
    
         
             
              #   String === "string"
         
     | 
| 
       3165 
3199 
     | 
    
         
             
              AllowOnConstant: false
         
     | 
| 
      
 3200 
     | 
    
         
            +
              # If `AllowOnSelfClass` option is enabled, the cop will ignore violations when the receiver of
         
     | 
| 
      
 3201 
     | 
    
         
            +
              # the case equality operator is `self.class`.
         
     | 
| 
      
 3202 
     | 
    
         
            +
              #
         
     | 
| 
      
 3203 
     | 
    
         
            +
              #   # bad
         
     | 
| 
      
 3204 
     | 
    
         
            +
              #   some_class === object
         
     | 
| 
      
 3205 
     | 
    
         
            +
              #
         
     | 
| 
      
 3206 
     | 
    
         
            +
              #   # good
         
     | 
| 
      
 3207 
     | 
    
         
            +
              #   self.class === object
         
     | 
| 
      
 3208 
     | 
    
         
            +
              AllowOnSelfClass: false
         
     | 
| 
       3166 
3209 
     | 
    
         | 
| 
       3167 
3210 
     | 
    
         
             
            Style/CaseLikeIf:
         
     | 
| 
       3168 
3211 
     | 
    
         
             
              Description: 'Identifies places where `if-elsif` constructions can be replaced with `case-when`.'
         
     | 
| 
         @@ -3222,10 +3265,12 @@ Style/ClassEqualityComparison: 
     | 
|
| 
       3222 
3265 
     | 
    
         
             
              StyleGuide: '#instance-of-vs-class-comparison'
         
     | 
| 
       3223 
3266 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       3224 
3267 
     | 
    
         
             
              VersionAdded: '0.93'
         
     | 
| 
       3225 
     | 
    
         
            -
               
     | 
| 
      
 3268 
     | 
    
         
            +
              AllowedMethods:
         
     | 
| 
       3226 
3269 
     | 
    
         
             
                - ==
         
     | 
| 
       3227 
3270 
     | 
    
         
             
                - equal?
         
     | 
| 
       3228 
3271 
     | 
    
         
             
                - eql?
         
     | 
| 
      
 3272 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 3273 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       3229 
3274 
     | 
    
         | 
| 
       3230 
3275 
     | 
    
         
             
            Style/ClassMethods:
         
     | 
| 
       3231 
3276 
     | 
    
         
             
              Description: 'Use self when defining module/class methods.'
         
     | 
| 
         @@ -3687,7 +3732,9 @@ Style/FormatStringToken: 
     | 
|
| 
       3687 
3732 
     | 
    
         
             
              MaxUnannotatedPlaceholdersAllowed: 1
         
     | 
| 
       3688 
3733 
     | 
    
         
             
              VersionAdded: '0.49'
         
     | 
| 
       3689 
3734 
     | 
    
         
             
              VersionChanged: '1.0'
         
     | 
| 
       3690 
     | 
    
         
            -
               
     | 
| 
      
 3735 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 3736 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 3737 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       3691 
3738 
     | 
    
         | 
| 
       3692 
3739 
     | 
    
         
             
            Style/FrozenStringLiteralComment:
         
     | 
| 
       3693 
3740 
     | 
    
         
             
              Description: >-
         
     | 
| 
         @@ -3812,6 +3859,8 @@ Style/HashSyntax: 
     | 
|
| 
       3812 
3859 
     | 
    
         
             
                - never
         
     | 
| 
       3813 
3860 
     | 
    
         
             
                # accepts both shorthand and explicit use of hash literal value.
         
     | 
| 
       3814 
3861 
     | 
    
         
             
                - either
         
     | 
| 
      
 3862 
     | 
    
         
            +
                # like "either", but will avoid mixing styles in a single hash
         
     | 
| 
      
 3863 
     | 
    
         
            +
                - consistent
         
     | 
| 
       3815 
3864 
     | 
    
         
             
              # Force hashes that have a symbol value to use hash rockets
         
     | 
| 
       3816 
3865 
     | 
    
         
             
              UseHashRocketsWithSymbolValues: false
         
     | 
| 
       3817 
3866 
     | 
    
         
             
              # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
         
     | 
| 
         @@ -3988,6 +4037,26 @@ Style/LineEndConcatenation: 
     | 
|
| 
       3988 
4037 
     | 
    
         
             
              VersionAdded: '0.18'
         
     | 
| 
       3989 
4038 
     | 
    
         
             
              VersionChanged: '0.64'
         
     | 
| 
       3990 
4039 
     | 
    
         | 
| 
      
 4040 
     | 
    
         
            +
            Style/MagicCommentFormat:
         
     | 
| 
      
 4041 
     | 
    
         
            +
              Description: 'Use a consistent style for magic comments.'
         
     | 
| 
      
 4042 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 4043 
     | 
    
         
            +
              VersionAdded: '1.35'
         
     | 
| 
      
 4044 
     | 
    
         
            +
              EnforcedStyle: snake_case
         
     | 
| 
      
 4045 
     | 
    
         
            +
              SupportedStyles:
         
     | 
| 
      
 4046 
     | 
    
         
            +
                # `snake` will enforce the magic comment is written
         
     | 
| 
      
 4047 
     | 
    
         
            +
                # in snake case (words separated by underscores).
         
     | 
| 
      
 4048 
     | 
    
         
            +
                # Eg: froze_string_literal: true
         
     | 
| 
      
 4049 
     | 
    
         
            +
                - snake_case
         
     | 
| 
      
 4050 
     | 
    
         
            +
                # `kebab` will enforce the magic comment is written
         
     | 
| 
      
 4051 
     | 
    
         
            +
                # in kebab case (words separated by hyphens).
         
     | 
| 
      
 4052 
     | 
    
         
            +
                # Eg: froze-string-literal: true
         
     | 
| 
      
 4053 
     | 
    
         
            +
                - kebab_case
         
     | 
| 
      
 4054 
     | 
    
         
            +
              DirectiveCapitalization: lowercase
         
     | 
| 
      
 4055 
     | 
    
         
            +
              ValueCapitalization: ~
         
     | 
| 
      
 4056 
     | 
    
         
            +
              SupportedCapitalizations:
         
     | 
| 
      
 4057 
     | 
    
         
            +
                - lowercase
         
     | 
| 
      
 4058 
     | 
    
         
            +
                - uppercase
         
     | 
| 
      
 4059 
     | 
    
         
            +
             
     | 
| 
       3991 
4060 
     | 
    
         
             
            Style/MapCompactWithConditionalBlock:
         
     | 
| 
       3992 
4061 
     | 
    
         
             
              Description: 'Prefer `select` or `reject` over `map { ... }.compact`.'
         
     | 
| 
       3993 
4062 
     | 
    
         
             
              Enabled: pending
         
     | 
| 
         @@ -4006,7 +4075,8 @@ Style/MethodCallWithArgsParentheses: 
     | 
|
| 
       4006 
4075 
     | 
    
         
             
              VersionAdded: '0.47'
         
     | 
| 
       4007 
4076 
     | 
    
         
             
              VersionChanged: '1.7'
         
     | 
| 
       4008 
4077 
     | 
    
         
             
              IgnoreMacros: true
         
     | 
| 
       4009 
     | 
    
         
            -
               
     | 
| 
      
 4078 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 4079 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       4010 
4080 
     | 
    
         
             
              AllowedPatterns: []
         
     | 
| 
       4011 
4081 
     | 
    
         
             
              IgnoredPatterns: [] # deprecated
         
     | 
| 
       4012 
4082 
     | 
    
         
             
              IncludedMacros: []
         
     | 
| 
         @@ -4023,7 +4093,9 @@ Style/MethodCallWithoutArgsParentheses: 
     | 
|
| 
       4023 
4093 
     | 
    
         
             
              Description: 'Do not use parentheses for method calls with no arguments.'
         
     | 
| 
       4024 
4094 
     | 
    
         
             
              StyleGuide: '#method-invocation-parens'
         
     | 
| 
       4025 
4095 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       4026 
     | 
    
         
            -
               
     | 
| 
      
 4096 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 4097 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 4098 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       4027 
4099 
     | 
    
         
             
              VersionAdded: '0.47'
         
     | 
| 
       4028 
4100 
     | 
    
         
             
              VersionChanged: '0.55'
         
     | 
| 
       4029 
4101 
     | 
    
         | 
| 
         @@ -4375,6 +4447,7 @@ Style/NumericLiterals: 
     | 
|
| 
       4375 
4447 
     | 
    
         
             
              Strict: false
         
     | 
| 
       4376 
4448 
     | 
    
         
             
              # You can specify allowed numbers. (e.g. port number 3000, 8080, and etc)
         
     | 
| 
       4377 
4449 
     | 
    
         
             
              AllowedNumbers: []
         
     | 
| 
      
 4450 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
       4378 
4451 
     | 
    
         | 
| 
       4379 
4452 
     | 
    
         
             
            Style/NumericPredicate:
         
     | 
| 
       4380 
4453 
     | 
    
         
             
              Description: >-
         
     | 
| 
         @@ -4393,7 +4466,9 @@ Style/NumericPredicate: 
     | 
|
| 
       4393 
4466 
     | 
    
         
             
              SupportedStyles:
         
     | 
| 
       4394 
4467 
     | 
    
         
             
                - predicate
         
     | 
| 
       4395 
4468 
     | 
    
         
             
                - comparison
         
     | 
| 
       4396 
     | 
    
         
            -
               
     | 
| 
      
 4469 
     | 
    
         
            +
              AllowedMethods: []
         
     | 
| 
      
 4470 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 4471 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       4397 
4472 
     | 
    
         
             
              # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
         
     | 
| 
       4398 
4473 
     | 
    
         
             
              # false positives.
         
     | 
| 
       4399 
4474 
     | 
    
         
             
              Exclude:
         
     | 
| 
         @@ -4432,6 +4507,12 @@ Style/OpenStructUse: 
     | 
|
| 
       4432 
4507 
     | 
    
         
             
              Enabled: pending
         
     | 
| 
       4433 
4508 
     | 
    
         
             
              VersionAdded: '1.23'
         
     | 
| 
       4434 
4509 
     | 
    
         | 
| 
      
 4510 
     | 
    
         
            +
            Style/OperatorMethodCall:
         
     | 
| 
      
 4511 
     | 
    
         
            +
              Description: 'Checks for redundant dot before operator method call.'
         
     | 
| 
      
 4512 
     | 
    
         
            +
              StyleGuide: '#operator-method-call'
         
     | 
| 
      
 4513 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 4514 
     | 
    
         
            +
              VersionAdded: '1.37'
         
     | 
| 
      
 4515 
     | 
    
         
            +
             
     | 
| 
       4435 
4516 
     | 
    
         
             
            Style/OptionHash:
         
     | 
| 
       4436 
4517 
     | 
    
         
             
              Description: "Don't use option hashes when you can use keyword arguments."
         
     | 
| 
       4437 
4518 
     | 
    
         
             
              Enabled: false
         
     | 
| 
         @@ -4726,6 +4807,11 @@ Style/RedundantSortBy: 
     | 
|
| 
       4726 
4807 
     | 
    
         
             
              Enabled: true
         
     | 
| 
       4727 
4808 
     | 
    
         
             
              VersionAdded: '0.36'
         
     | 
| 
       4728 
4809 
     | 
    
         | 
| 
      
 4810 
     | 
    
         
            +
            Style/RedundantStringEscape:
         
     | 
| 
      
 4811 
     | 
    
         
            +
              Description: 'Checks for redundant escapes in string literals.'
         
     | 
| 
      
 4812 
     | 
    
         
            +
              Enabled: pending
         
     | 
| 
      
 4813 
     | 
    
         
            +
              VersionAdded: '1.37'
         
     | 
| 
      
 4814 
     | 
    
         
            +
             
     | 
| 
       4729 
4815 
     | 
    
         
             
            Style/RegexpLiteral:
         
     | 
| 
       4730 
4816 
     | 
    
         
             
              Description: 'Use / or %r around regular expressions.'
         
     | 
| 
       4731 
4817 
     | 
    
         
             
              StyleGuide: '#percent-r'
         
     | 
| 
         @@ -5030,11 +5116,13 @@ Style/SymbolProc: 
     | 
|
| 
       5030 
5116 
     | 
    
         
             
              VersionAdded: '0.26'
         
     | 
| 
       5031 
5117 
     | 
    
         
             
              VersionChanged: '1.28'
         
     | 
| 
       5032 
5118 
     | 
    
         
             
              AllowMethodsWithArguments: false
         
     | 
| 
       5033 
     | 
    
         
            -
              # A list of method names to be  
     | 
| 
      
 5119 
     | 
    
         
            +
              # A list of method names to be always allowed by the check.
         
     | 
| 
       5034 
5120 
     | 
    
         
             
              # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
         
     | 
| 
       5035 
     | 
    
         
            -
               
     | 
| 
      
 5121 
     | 
    
         
            +
              AllowedMethods:
         
     | 
| 
       5036 
5122 
     | 
    
         
             
                - respond_to
         
     | 
| 
       5037 
5123 
     | 
    
         
             
                - define_method
         
     | 
| 
      
 5124 
     | 
    
         
            +
              AllowedPatterns: []
         
     | 
| 
      
 5125 
     | 
    
         
            +
              IgnoredMethods: [] # deprecated
         
     | 
| 
       5038 
5126 
     | 
    
         
             
              AllowComments: false
         
     | 
| 
       5039 
5127 
     | 
    
         | 
| 
       5040 
5128 
     | 
    
         
             
            Style/TernaryParentheses:
         
     | 
    
        data/config/obsoletion.yml
    CHANGED
    
    | 
         @@ -187,7 +187,9 @@ changed_parameters: 
     | 
|
| 
       187 
187 
     | 
    
         
             
                  - Metrics/BlockLength
         
     | 
| 
       188 
188 
     | 
    
         
             
                  - Metrics/MethodLength
         
     | 
| 
       189 
189 
     | 
    
         
             
                parameters: ExcludedMethods
         
     | 
| 
       190 
     | 
    
         
            -
                 
     | 
| 
      
 190 
     | 
    
         
            +
                alternatives:
         
     | 
| 
      
 191 
     | 
    
         
            +
                  - AllowedMethods
         
     | 
| 
      
 192 
     | 
    
         
            +
                  - AllowedPatterns
         
     | 
| 
       191 
193 
     | 
    
         
             
                severity: warning
         
     | 
| 
       192 
194 
     | 
    
         
             
              - cops: Lint/Debugger
         
     | 
| 
       193 
195 
     | 
    
         
             
                parameters: DebuggerReceivers
         
     | 
| 
         @@ -202,6 +204,26 @@ changed_parameters: 
     | 
|
| 
       202 
204 
     | 
    
         
             
                parameters: IgnoredPatterns
         
     | 
| 
       203 
205 
     | 
    
         
             
                alternative: AllowedPatterns
         
     | 
| 
       204 
206 
     | 
    
         
             
                severity: warning
         
     | 
| 
      
 207 
     | 
    
         
            +
              - cops:
         
     | 
| 
      
 208 
     | 
    
         
            +
                  - Lint/AmbiguousBlockAssociation
         
     | 
| 
      
 209 
     | 
    
         
            +
                  - Lint/NumberConversion
         
     | 
| 
      
 210 
     | 
    
         
            +
                  - Metrics/AbcSize
         
     | 
| 
      
 211 
     | 
    
         
            +
                  - Metrics/BlockLength
         
     | 
| 
      
 212 
     | 
    
         
            +
                  - Metrics/CyclomaticComplexity
         
     | 
| 
      
 213 
     | 
    
         
            +
                  - Metrics/MethodLength
         
     | 
| 
      
 214 
     | 
    
         
            +
                  - Metrics/PerceivedComplexity
         
     | 
| 
      
 215 
     | 
    
         
            +
                  - Style/BlockDelimiters
         
     | 
| 
      
 216 
     | 
    
         
            +
                  - Style/ClassEqualityComparison
         
     | 
| 
      
 217 
     | 
    
         
            +
                  - Style/FormatStringToken
         
     | 
| 
      
 218 
     | 
    
         
            +
                  - Style/MethodCallWithArgsParentheses
         
     | 
| 
      
 219 
     | 
    
         
            +
                  - Style/MethodCallWithoutArgsParentheses
         
     | 
| 
      
 220 
     | 
    
         
            +
                  - Style/NumericPredicate
         
     | 
| 
      
 221 
     | 
    
         
            +
                  - Style/SymbolLiteral
         
     | 
| 
      
 222 
     | 
    
         
            +
                parameters: IgnoredMethods
         
     | 
| 
      
 223 
     | 
    
         
            +
                alternatives:
         
     | 
| 
      
 224 
     | 
    
         
            +
                  - AllowedMethods
         
     | 
| 
      
 225 
     | 
    
         
            +
                  - AllowedPatterns
         
     | 
| 
      
 226 
     | 
    
         
            +
                severity: warning
         
     | 
| 
       205 
227 
     | 
    
         | 
| 
       206 
228 
     | 
    
         
             
            # Enforced styles that have been removed or replaced
         
     | 
| 
       207 
229 
     | 
    
         
             
            changed_enforced_styles:
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 4 
     | 
    
         
            +
              # This is a class that reads optional command line arguments to rubocop from environment variable.
         
     | 
| 
      
 5 
     | 
    
         
            +
              # @api private
         
     | 
| 
      
 6 
     | 
    
         
            +
              class ArgumentsEnv
         
     | 
| 
      
 7 
     | 
    
         
            +
                def self.read_as_arguments
         
     | 
| 
      
 8 
     | 
    
         
            +
                  if (arguments = ENV.fetch('RUBOCOP_OPTS', '')).empty?
         
     | 
| 
      
 9 
     | 
    
         
            +
                    []
         
     | 
| 
      
 10 
     | 
    
         
            +
                  else
         
     | 
| 
      
 11 
     | 
    
         
            +
                    require 'shellwords'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    Shellwords.split(arguments)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 4 
     | 
    
         
            +
              # This is a class that reads optional command line arguments to rubocop from .rubocop file.
         
     | 
| 
      
 5 
     | 
    
         
            +
              # @api private
         
     | 
| 
      
 6 
     | 
    
         
            +
              class ArgumentsFile
         
     | 
| 
      
 7 
     | 
    
         
            +
                def self.read_as_arguments
         
     | 
| 
      
 8 
     | 
    
         
            +
                  if File.exist?('.rubocop') && !File.directory?('.rubocop')
         
     | 
| 
      
 9 
     | 
    
         
            +
                    require 'shellwords'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    File.read('.rubocop').shellsplit
         
     | 
| 
      
 12 
     | 
    
         
            +
                  else
         
     | 
| 
      
 13 
     | 
    
         
            +
                    []
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 4 
     | 
    
         
            +
              # This class represents the cache config of the caching RuboCop runs.
         
     | 
| 
      
 5 
     | 
    
         
            +
              # @api private
         
     | 
| 
      
 6 
     | 
    
         
            +
              class CacheConfig
         
     | 
| 
      
 7 
     | 
    
         
            +
                def self.root_dir
         
     | 
| 
      
 8 
     | 
    
         
            +
                  root = ENV.fetch('RUBOCOP_CACHE_ROOT', nil)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  root ||= yield
         
     | 
| 
      
 10 
     | 
    
         
            +
                  root ||= if ENV.key?('XDG_CACHE_HOME')
         
     | 
| 
      
 11 
     | 
    
         
            +
                             # Include user ID in the path to make sure the user has write
         
     | 
| 
      
 12 
     | 
    
         
            +
                             # access.
         
     | 
| 
      
 13 
     | 
    
         
            +
                             File.join(ENV.fetch('XDG_CACHE_HOME'), Process.uid.to_s)
         
     | 
| 
      
 14 
     | 
    
         
            +
                           else
         
     | 
| 
      
 15 
     | 
    
         
            +
                             # On FreeBSD, the /home path is a symbolic link to /usr/home
         
     | 
| 
      
 16 
     | 
    
         
            +
                             # and the $HOME environment variable returns the /home path.
         
     | 
| 
      
 17 
     | 
    
         
            +
                             #
         
     | 
| 
      
 18 
     | 
    
         
            +
                             # As $HOME is a built-in environment variable, FreeBSD users
         
     | 
| 
      
 19 
     | 
    
         
            +
                             # always get a warning message.
         
     | 
| 
      
 20 
     | 
    
         
            +
                             #
         
     | 
| 
      
 21 
     | 
    
         
            +
                             # To avoid raising warn log messages on FreeBSD, we retrieve
         
     | 
| 
      
 22 
     | 
    
         
            +
                             # the real path of the home folder.
         
     | 
| 
      
 23 
     | 
    
         
            +
                             File.join(File.realpath(Dir.home), '.cache')
         
     | 
| 
      
 24 
     | 
    
         
            +
                           end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  File.join(root, 'rubocop_cache')
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -98,7 +98,7 @@ module RuboCop 
     | 
|
| 
       98 
98 
     | 
    
         
             
                    def add_inheritance_from_auto_generated_file(config_file)
         
     | 
| 
       99 
99 
     | 
    
         
             
                      file_string = " #{relative_path_to_todo_from_options_config}"
         
     | 
| 
       100 
100 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
                      config_file ||=  
     | 
| 
      
 101 
     | 
    
         
            +
                      config_file ||= ConfigFinder::DOTFILE
         
     | 
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
                      if File.exist?(config_file)
         
     | 
| 
       104 
104 
     | 
    
         
             
                        files = Array(ConfigLoader.load_yaml_configuration(config_file)['inherit_from'])
         
     | 
| 
         @@ -113,7 +113,7 @@ module RuboCop 
     | 
|
| 
       113 
113 
     | 
    
         
             
                      write_config_file(config_file, file_string, rubocop_yml_contents)
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
                      puts "Added inheritance from `#{relative_path_to_todo_from_options_config}` " \
         
     | 
| 
       116 
     | 
    
         
            -
                           "in `#{ 
     | 
| 
      
 116 
     | 
    
         
            +
                           "in `#{ConfigFinder::DOTFILE}`."
         
     | 
| 
       117 
117 
     | 
    
         
             
                    end
         
     | 
| 
       118 
118 
     | 
    
         | 
| 
       119 
119 
     | 
    
         
             
                    def existing_configuration(config_file)
         
     | 
| 
         @@ -41,13 +41,13 @@ module RuboCop 
     | 
|
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                    def with_redirect
         
     | 
| 
       43 
43 
     | 
    
         
             
                      if @options[:stderr]
         
     | 
| 
       44 
     | 
    
         
            -
                        orig_stdout = $stdout 
     | 
| 
       45 
     | 
    
         
            -
                         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                         
     | 
| 
      
 44 
     | 
    
         
            +
                        orig_stdout = $stdout
         
     | 
| 
      
 45 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 46 
     | 
    
         
            +
                          $stdout = $stderr
         
     | 
| 
      
 47 
     | 
    
         
            +
                          yield
         
     | 
| 
      
 48 
     | 
    
         
            +
                        ensure
         
     | 
| 
      
 49 
     | 
    
         
            +
                          $stdout = orig_stdout
         
     | 
| 
      
 50 
     | 
    
         
            +
                        end
         
     | 
| 
       51 
51 
     | 
    
         
             
                      else
         
     | 
| 
       52 
52 
     | 
    
         
             
                        yield
         
     | 
| 
       53 
53 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -17,20 +17,10 @@ module RuboCop 
     | 
|
| 
       17 
17 
     | 
    
         
             
                    def run
         
     | 
| 
       18 
18 
     | 
    
         
             
                      return if skip? || extensions.none?
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                       
     | 
| 
       21 
     | 
    
         
            -
                       
     | 
| 
       22 
     | 
    
         
            -
                           'RuboCop extension libraries might be helpful:'
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                      extensions.sort.each do |extension|
         
     | 
| 
       25 
     | 
    
         
            -
                        puts "  * #{extension} (https://rubygems.org/gems/#{extension})"
         
     | 
| 
       26 
     | 
    
         
            -
                      end
         
     | 
| 
      
 20 
     | 
    
         
            +
                      print_install_suggestions if not_installed_extensions.any?
         
     | 
| 
      
 21 
     | 
    
         
            +
                      print_load_suggestions if installed_and_not_loaded_extensions.any?
         
     | 
| 
       27 
22 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                       
     | 
| 
       29 
     | 
    
         
            -
                      puts 'You can opt out of this message by adding the following to your config ' \
         
     | 
| 
       30 
     | 
    
         
            -
                           '(see https://docs.rubocop.org/rubocop/extensions.html#extension-suggestions ' \
         
     | 
| 
       31 
     | 
    
         
            -
                           'for more options):'
         
     | 
| 
       32 
     | 
    
         
            -
                      puts '  AllCops:'
         
     | 
| 
       33 
     | 
    
         
            -
                      puts '    SuggestExtensions: false'
         
     | 
| 
      
 23 
     | 
    
         
            +
                      print_opt_out_instruction
         
     | 
| 
       34 
24 
     | 
    
         | 
| 
       35 
25 
     | 
    
         
             
                      puts if @options[:display_time]
         
     | 
| 
       36 
26 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -48,15 +38,63 @@ module RuboCop 
     | 
|
| 
       48 
38 
     | 
    
         
             
                        !INCLUDED_FORMATTERS.include?(current_formatter)
         
     | 
| 
       49 
39 
     | 
    
         
             
                    end
         
     | 
| 
       50 
40 
     | 
    
         | 
| 
      
 41 
     | 
    
         
            +
                    def print_install_suggestions
         
     | 
| 
      
 42 
     | 
    
         
            +
                      puts
         
     | 
| 
      
 43 
     | 
    
         
            +
                      puts 'Tip: Based on detected gems, the following ' \
         
     | 
| 
      
 44 
     | 
    
         
            +
                           'RuboCop extension libraries might be helpful:'
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                      not_installed_extensions.sort.each do |extension|
         
     | 
| 
      
 47 
     | 
    
         
            +
                        puts "  * #{extension} (https://rubygems.org/gems/#{extension})"
         
     | 
| 
      
 48 
     | 
    
         
            +
                      end
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    def print_load_suggestions
         
     | 
| 
      
 52 
     | 
    
         
            +
                      puts
         
     | 
| 
      
 53 
     | 
    
         
            +
                      puts 'The following RuboCop extension libraries are installed but not loaded in config:'
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                      installed_and_not_loaded_extensions.sort.each do |extension|
         
     | 
| 
      
 56 
     | 
    
         
            +
                        puts "  * #{extension}"
         
     | 
| 
      
 57 
     | 
    
         
            +
                      end
         
     | 
| 
      
 58 
     | 
    
         
            +
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    def print_opt_out_instruction
         
     | 
| 
      
 61 
     | 
    
         
            +
                      puts
         
     | 
| 
      
 62 
     | 
    
         
            +
                      puts 'You can opt out of this message by adding the following to your config ' \
         
     | 
| 
      
 63 
     | 
    
         
            +
                           '(see https://docs.rubocop.org/rubocop/extensions.html#extension-suggestions ' \
         
     | 
| 
      
 64 
     | 
    
         
            +
                           'for more options):'
         
     | 
| 
      
 65 
     | 
    
         
            +
                      puts '  AllCops:'
         
     | 
| 
      
 66 
     | 
    
         
            +
                      puts '    SuggestExtensions: false'
         
     | 
| 
      
 67 
     | 
    
         
            +
                    end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
       51 
69 
     | 
    
         
             
                    def current_formatter
         
     | 
| 
       52 
70 
     | 
    
         
             
                      @options[:format] || @config_store.for_pwd.for_all_cops['DefaultFormatter'] || 'p'
         
     | 
| 
       53 
71 
     | 
    
         
             
                    end
         
     | 
| 
       54 
72 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                    def  
     | 
| 
      
 73 
     | 
    
         
            +
                    def all_extensions
         
     | 
| 
       56 
74 
     | 
    
         
             
                      return [] unless lockfile.dependencies.any?
         
     | 
| 
       57 
75 
     | 
    
         | 
| 
       58 
76 
     | 
    
         
             
                      extensions = @config_store.for_pwd.for_all_cops['SuggestExtensions'] || {}
         
     | 
| 
       59 
     | 
    
         
            -
                      extensions.select { |_, v| (Array(v) & dependent_gems).any? }.keys 
     | 
| 
      
 77 
     | 
    
         
            +
                      extensions.select { |_, v| (Array(v) & dependent_gems).any? }.keys
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                    def extensions
         
     | 
| 
      
 81 
     | 
    
         
            +
                      not_installed_extensions + installed_and_not_loaded_extensions
         
     | 
| 
      
 82 
     | 
    
         
            +
                    end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                    def installed_extensions
         
     | 
| 
      
 85 
     | 
    
         
            +
                      all_extensions & installed_gems
         
     | 
| 
      
 86 
     | 
    
         
            +
                    end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                    def not_installed_extensions
         
     | 
| 
      
 89 
     | 
    
         
            +
                      all_extensions - installed_gems
         
     | 
| 
      
 90 
     | 
    
         
            +
                    end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                    def loaded_extensions
         
     | 
| 
      
 93 
     | 
    
         
            +
                      @config_store.for_pwd.loaded_features.to_a
         
     | 
| 
      
 94 
     | 
    
         
            +
                    end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                    def installed_and_not_loaded_extensions
         
     | 
| 
      
 97 
     | 
    
         
            +
                      installed_extensions - loaded_extensions
         
     | 
| 
       60 
98 
     | 
    
         
             
                    end
         
     | 
| 
       61 
99 
     | 
    
         | 
| 
       62 
100 
     | 
    
         
             
                    def lockfile
         
     | 
    
        data/lib/rubocop/config.rb
    CHANGED
    
    | 
         @@ -242,7 +242,7 @@ module RuboCop 
     | 
|
| 
       242 
242 
     | 
    
         
             
                  return nil unless loaded_path
         
     | 
| 
       243 
243 
     | 
    
         | 
| 
       244 
244 
     | 
    
         
             
                  base_path = base_dir_for_path_parameters
         
     | 
| 
       245 
     | 
    
         
            -
                  [' 
     | 
| 
      
 245 
     | 
    
         
            +
                  ['Gemfile.lock', 'gems.locked'].each do |file_name|
         
     | 
| 
       246 
246 
     | 
    
         
             
                    path = find_file_upwards(file_name, base_path)
         
     | 
| 
       247 
247 
     | 
    
         
             
                    return path if path
         
     | 
| 
       248 
248 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative 'file_finder'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 6 
     | 
    
         
            +
              # This class has methods related to finding configuration path.
         
     | 
| 
      
 7 
     | 
    
         
            +
              # @api private
         
     | 
| 
      
 8 
     | 
    
         
            +
              class ConfigFinder
         
     | 
| 
      
 9 
     | 
    
         
            +
                DOTFILE = '.rubocop.yml'
         
     | 
| 
      
 10 
     | 
    
         
            +
                XDG_CONFIG = 'config.yml'
         
     | 
| 
      
 11 
     | 
    
         
            +
                RUBOCOP_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..'))
         
     | 
| 
      
 12 
     | 
    
         
            +
                DEFAULT_FILE = File.join(RUBOCOP_HOME, 'config', 'default.yml')
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 15 
     | 
    
         
            +
                  include FileFinder
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  attr_writer :project_root
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def find_config_path(target_dir)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    find_project_dotfile(target_dir) || find_user_dotfile || find_user_xdg_config ||
         
     | 
| 
      
 21 
     | 
    
         
            +
                      DEFAULT_FILE
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  # Returns the path RuboCop inferred as the root of the project. No file
         
     | 
| 
      
 25 
     | 
    
         
            +
                  # searches will go past this directory.
         
     | 
| 
      
 26 
     | 
    
         
            +
                  def project_root
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @project_root ||= find_project_root
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  private
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def find_project_root
         
     | 
| 
      
 33 
     | 
    
         
            +
                    pwd = Dir.pwd
         
     | 
| 
      
 34 
     | 
    
         
            +
                    gems_file = find_last_file_upwards('Gemfile', pwd) || find_last_file_upwards('gems.rb', pwd)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    return unless gems_file
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    File.dirname(gems_file)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  def find_project_dotfile(target_dir)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    find_file_upwards(DOTFILE, target_dir, project_root)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  def find_user_dotfile
         
     | 
| 
      
 45 
     | 
    
         
            +
                    return unless ENV.key?('HOME')
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    file = File.join(Dir.home, DOTFILE)
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    return file if File.exist?(file)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  def find_user_xdg_config
         
     | 
| 
      
 53 
     | 
    
         
            +
                    xdg_config_home = expand_path(ENV.fetch('XDG_CONFIG_HOME', '~/.config'))
         
     | 
| 
      
 54 
     | 
    
         
            +
                    xdg_config = File.join(xdg_config_home, 'rubocop', XDG_CONFIG)
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                    return xdg_config if File.exist?(xdg_config)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  def expand_path(path)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    File.expand_path(path)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  rescue ArgumentError
         
     | 
| 
      
 62 
     | 
    
         
            +
                    # Could happen because HOME or ID could not be determined. Fall back on
         
     | 
| 
      
 63 
     | 
    
         
            +
                    # using the path literally in that case.
         
     | 
| 
      
 64 
     | 
    
         
            +
                    path
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     |