rubocop 0.80.0 → 0.84.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 +4 -4
- data/config/default.yml +171 -34
- data/lib/rubocop.rb +15 -62
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cli.rb +11 -5
- data/lib/rubocop/cli/command/show_cops.rb +2 -6
- data/lib/rubocop/config.rb +41 -13
- data/lib/rubocop/config_loader.rb +40 -36
- data/lib/rubocop/config_loader_resolver.rb +27 -4
- data/lib/rubocop/config_obsoletion.rb +2 -0
- data/lib/rubocop/config_validator.rb +18 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
- data/lib/rubocop/cop/badge.rb +5 -5
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/corrector.rb +49 -27
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -8
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
- data/lib/rubocop/cop/generator.rb +4 -3
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/array_alignment.rb +53 -10
- data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
- data/lib/rubocop/cop/layout/condition_position.rb +12 -2
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
- data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +0 -2
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -8
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +7 -4
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -4
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +129 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -6
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +40 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
- data/lib/rubocop/cop/lint/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +133 -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 +18 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
- data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/loop.rb +6 -4
- data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +31 -11
- data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
- data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +20 -25
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
- data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
- data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
- 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 +5 -0
- data/lib/rubocop/cop/migration/department_name.rb +21 -12
- data/lib/rubocop/cop/mixin/alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/array_min_size.rb +2 -6
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +4 -12
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +2 -1
- data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -3
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
- data/lib/rubocop/cop/mixin/surrounding_space.rb +1 -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/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +26 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/registry.rb +13 -10
- data/lib/rubocop/cop/severity.rb +1 -3
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
- data/lib/rubocop/cop/style/alias.rb +4 -4
- data/lib/rubocop/cop/style/and_or.rb +7 -8
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
- data/lib/rubocop/cop/style/case_equality.rb +24 -1
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/collection_methods.rb +2 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +9 -11
- data/lib/rubocop/cop/style/copyright.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
- data/lib/rubocop/cop/style/documentation.rb +43 -5
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +41 -4
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +3 -3
- 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/end_block.rb +6 -0
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
- data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
- data/lib/rubocop/cop/style/format_string.rb +2 -2
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +2 -4
- data/lib/rubocop/cop/style/guard_clause.rb +25 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -3
- data/lib/rubocop/cop/style/hash_syntax.rb +15 -10
- data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +6 -5
- data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
- data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
- data/lib/rubocop/cop/style/inverse_methods.rb +9 -5
- data/lib/rubocop/cop/style/lambda.rb +3 -2
- data/lib/rubocop/cop/style/lambda_call.rb +1 -21
- 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/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +58 -12
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +16 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +4 -4
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +4 -4
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
- data/lib/rubocop/cop/style/one_line_conditional.rb +6 -9
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_condition.rb +18 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
- data/lib/rubocop/cop/style/redundant_return.rb +5 -7
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +3 -7
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +3 -7
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -0
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +2 -6
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +0 -4
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
- data/lib/rubocop/cop/util.rb +24 -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 +2 -6
- 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/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
- data/lib/rubocop/formatter/formatter_set.rb +1 -4
- data/lib/rubocop/formatter/junit_formatter.rb +17 -6
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/formatter/tap_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +12 -9
- data/lib/rubocop/options.rb +20 -13
- data/lib/rubocop/remote_config.rb +1 -3
- data/lib/rubocop/result_cache.rb +1 -3
- data/lib/rubocop/rspec/cop_helper.rb +2 -4
- data/lib/rubocop/rspec/expect_offense.rb +4 -10
- data/lib/rubocop/rspec/shared_contexts.rb +54 -20
- data/lib/rubocop/runner.rb +15 -12
- data/lib/rubocop/target_finder.rb +5 -7
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +5 -3
- metadata +32 -77
- data/lib/rubocop/ast/builder.rb +0 -83
- data/lib/rubocop/ast/node.rb +0 -632
- 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 -57
- data/lib/rubocop/ast/node/block_node.rb +0 -117
- data/lib/rubocop/ast/node/break_node.rb +0 -17
- 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 -261
- 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 -200
- data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
- data/lib/rubocop/node_pattern.rb +0 -887
- data/lib/rubocop/processed_source.rb +0 -216
- data/lib/rubocop/string_util.rb +0 -14
- data/lib/rubocop/token.rb +0 -114
| @@ -46,7 +46,16 @@ module RuboCop | |
| 46 46 | 
             
                  end
         | 
| 47 47 |  | 
| 48 48 | 
             
                  def leading_comment_lines
         | 
| 49 | 
            -
                    processed_source. | 
| 49 | 
            +
                    first_non_comment_token = processed_source.tokens.find do |token|
         | 
| 50 | 
            +
                      !token.comment?
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    if first_non_comment_token
         | 
| 54 | 
            +
                      # `line` is 1-indexed so we need to subtract 1 to get the array index
         | 
| 55 | 
            +
                      processed_source.lines[0...first_non_comment_token.line - 1]
         | 
| 56 | 
            +
                    else
         | 
| 57 | 
            +
                      processed_source.lines
         | 
| 58 | 
            +
                    end
         | 
| 50 59 | 
             
                  end
         | 
| 51 60 | 
             
                end
         | 
| 52 61 | 
             
              end
         | 
| @@ -51,7 +51,6 @@ module RuboCop | |
| 51 51 | 
             
                  end
         | 
| 52 52 |  | 
| 53 53 | 
             
                  def handle_possible_offense(node, match, match_desc)
         | 
| 54 | 
            -
                    puts node.class
         | 
| 55 54 | 
             
                    captures = extract_captures(match)
         | 
| 56 55 |  | 
| 57 56 | 
             
                    # If key didn't actually change either, this is most likely a false
         | 
| @@ -133,7 +132,14 @@ module RuboCop | |
| 133 132 | 
             
                    end
         | 
| 134 133 |  | 
| 135 134 | 
             
                    def self.from_map_to_h(node, match)
         | 
| 136 | 
            -
                      strip_trailing_chars =  | 
| 135 | 
            +
                      strip_trailing_chars = 0
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                      unless node.parent&.block_type?
         | 
| 138 | 
            +
                        map_range = node.children.first.source_range
         | 
| 139 | 
            +
                        node_range = node.source_range
         | 
| 140 | 
            +
                        strip_trailing_chars = node_range.end_pos - map_range.end_pos
         | 
| 141 | 
            +
                      end
         | 
| 142 | 
            +
             | 
| 137 143 | 
             
                      new(match, node.children.first, 0, strip_trailing_chars)
         | 
| 138 144 | 
             
                    end
         | 
| 139 145 |  | 
| @@ -162,7 +168,7 @@ module RuboCop | |
| 162 168 |  | 
| 163 169 | 
             
                    def set_new_body_expression(transforming_body_expr, corrector)
         | 
| 164 170 | 
             
                      corrector.replace(
         | 
| 165 | 
            -
                        block_node.body | 
| 171 | 
            +
                        block_node.body,
         | 
| 166 172 | 
             
                        transforming_body_expr.loc.expression.source
         | 
| 167 173 | 
             
                      )
         | 
| 168 174 | 
             
                    end
         | 
| @@ -5,15 +5,20 @@ module RuboCop | |
| 5 5 | 
             
                # This module handles measurement and reporting of complexity in methods.
         | 
| 6 6 | 
             
                module MethodComplexity
         | 
| 7 7 | 
             
                  include ConfigurableMax
         | 
| 8 | 
            +
                  include IgnoredMethods
         | 
| 8 9 | 
             
                  extend NodePattern::Macros
         | 
| 9 10 |  | 
| 10 11 | 
             
                  def on_def(node)
         | 
| 12 | 
            +
                    return if ignored_method?(node.method_name)
         | 
| 13 | 
            +
             | 
| 11 14 | 
             
                    check_complexity(node, node.method_name)
         | 
| 12 15 | 
             
                  end
         | 
| 13 16 | 
             
                  alias on_defs on_def
         | 
| 14 17 |  | 
| 15 18 | 
             
                  def on_block(node)
         | 
| 16 19 | 
             
                    define_method?(node) do |name|
         | 
| 20 | 
            +
                      return if ignored_method?(name)
         | 
| 21 | 
            +
             | 
| 17 22 | 
             
                      check_complexity(node, name)
         | 
| 18 23 | 
             
                    end
         | 
| 19 24 | 
             
                  end
         | 
| @@ -67,9 +67,7 @@ module RuboCop | |
| 67 67 | 
             
                      styles << :consistent
         | 
| 68 68 | 
             
                      styles << :special_inside_parentheses unless left_parenthesis
         | 
| 69 69 | 
             
                    end
         | 
| 70 | 
            -
                    if left_parenthesis && column == left_parenthesis.column + 1
         | 
| 71 | 
            -
                      styles << :special_inside_parentheses
         | 
| 72 | 
            -
                    end
         | 
| 70 | 
            +
                    styles << :special_inside_parentheses if left_parenthesis && column == left_parenthesis.column + 1
         | 
| 73 71 | 
             
                    styles << brace_alignment_style if column == left_brace.column
         | 
| 74 72 | 
             
                    styles
         | 
| 75 73 | 
             
                  end
         | 
| @@ -4,6 +4,8 @@ module RuboCop | |
| 4 4 | 
             
              module Cop
         | 
| 5 5 | 
             
                # Common functionality for modifier cops.
         | 
| 6 6 | 
             
                module StatementModifier
         | 
| 7 | 
            +
                  include LineLengthHelp
         | 
| 8 | 
            +
             | 
| 7 9 | 
             
                  private
         | 
| 8 10 |  | 
| 9 11 | 
             
                  def single_line_as_modifier?(node)
         | 
| @@ -34,21 +36,14 @@ module RuboCop | |
| 34 36 | 
             
                  def modifier_fits_on_single_line?(node)
         | 
| 35 37 | 
             
                    return true unless max_line_length
         | 
| 36 38 |  | 
| 37 | 
            -
                     | 
| 38 | 
            -
                                                              node.body.source_length)
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                    modifier_length <= max_line_length
         | 
| 39 | 
            +
                    length_in_modifier_form(node, node.condition) <= max_line_length
         | 
| 41 40 | 
             
                  end
         | 
| 42 41 |  | 
| 43 | 
            -
                  def length_in_modifier_form(node, cond | 
| 42 | 
            +
                  def length_in_modifier_form(node, cond)
         | 
| 44 43 | 
             
                    keyword = node.loc.keyword
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                    indentation  | 
| 47 | 
            -
             | 
| 48 | 
            -
                    cond_length = cond.source_range.size
         | 
| 49 | 
            -
                    space = 1
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                    indentation + body_length + space + kw_length + space + cond_length
         | 
| 44 | 
            +
                    indentation = keyword.source_line[/^\s*/]
         | 
| 45 | 
            +
                    line_length("#{indentation}#{node.body.source} #{keyword.source} " \
         | 
| 46 | 
            +
                                "#{cond.source}")
         | 
| 52 47 | 
             
                  end
         | 
| 53 48 |  | 
| 54 49 | 
             
                  def max_line_length
         | 
| @@ -56,16 +51,6 @@ module RuboCop | |
| 56 51 |  | 
| 57 52 | 
             
                    config.for_cop('Layout/LineLength')['Max']
         | 
| 58 53 | 
             
                  end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                  def indentation_multiplier
         | 
| 61 | 
            -
                    return 1 if config.for_cop('Layout/Tab')['Enabled']
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                    default_configuration = RuboCop::ConfigLoader.default_configuration
         | 
| 64 | 
            -
                    config.for_cop('Layout/Tab')['IndentationWidth'] ||
         | 
| 65 | 
            -
                      config.for_cop('Layout/IndentationWidth')['Width'] ||
         | 
| 66 | 
            -
                      default_configuration.for_cop('Layout/Tab')['IndentationWidth'] ||
         | 
| 67 | 
            -
                      default_configuration.for_cop('Layout/IndentationWidth')['Width']
         | 
| 68 | 
            -
                  end
         | 
| 69 54 | 
             
                end
         | 
| 70 55 | 
             
              end
         | 
| 71 56 | 
             
            end
         | 
| @@ -107,9 +107,7 @@ module RuboCop | |
| 107 107 |  | 
| 108 108 | 
             
                  def empty_offenses(node, left, right, message)
         | 
| 109 109 | 
             
                    range = range_between(left.begin_pos, right.end_pos)
         | 
| 110 | 
            -
                    if offending_empty_space?(empty_config, left, right)
         | 
| 111 | 
            -
                      empty_offense(node, range, message, 'Use one')
         | 
| 112 | 
            -
                    end
         | 
| 110 | 
            +
                    empty_offense(node, range, message, 'Use one') if offending_empty_space?(empty_config, left, right)
         | 
| 113 111 | 
             
                    return unless offending_empty_no_space?(empty_config, left, right)
         | 
| 114 112 |  | 
| 115 113 | 
             
                    empty_offense(node, range, message, 'Do not use')
         | 
| @@ -4,12 +4,16 @@ module RuboCop | |
| 4 4 | 
             
              module Cop
         | 
| 5 5 | 
             
                # Common functionality for checking target ruby version.
         | 
| 6 6 | 
             
                module TargetRubyVersion
         | 
| 7 | 
            +
                  def required_minimum_ruby_version
         | 
| 8 | 
            +
                    @minimum_target_ruby_version
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 7 11 | 
             
                  def minimum_target_ruby_version(version)
         | 
| 8 12 | 
             
                    @minimum_target_ruby_version = version
         | 
| 9 13 | 
             
                  end
         | 
| 10 14 |  | 
| 11 15 | 
             
                  def support_target_ruby_version?(version)
         | 
| 12 | 
            -
                     | 
| 16 | 
            +
                    required_minimum_ruby_version <= version
         | 
| 13 17 | 
             
                  end
         | 
| 14 18 | 
             
                end
         | 
| 15 19 | 
             
              end
         | 
| @@ -135,7 +135,7 @@ module RuboCop | |
| 135 135 |  | 
| 136 136 | 
             
                  def avoid_comma(kind, comma_begin_pos, extra_info)
         | 
| 137 137 | 
             
                    range = range_between(comma_begin_pos, comma_begin_pos + 1)
         | 
| 138 | 
            -
                    article =  | 
| 138 | 
            +
                    article = /array/.match?(kind) ? 'an' : 'a'
         | 
| 139 139 | 
             
                    msg = format(
         | 
| 140 140 | 
             
                      MSG,
         | 
| 141 141 | 
             
                      command: 'Avoid',
         | 
| @@ -184,9 +184,7 @@ module RuboCop | |
| 184 184 | 
             
                    #       ...
         | 
| 185 185 | 
             
                    #     SOURCE
         | 
| 186 186 | 
             
                    #   })
         | 
| 187 | 
            -
                    if node.pair_type? || node.hash_type?
         | 
| 188 | 
            -
                      return heredoc?(node.children.last)
         | 
| 189 | 
            -
                    end
         | 
| 187 | 
            +
                    return heredoc?(node.children.last) if node.pair_type? || node.hash_type?
         | 
| 190 188 |  | 
| 191 189 | 
             
                    false
         | 
| 192 190 | 
             
                  end
         | 
| @@ -45,8 +45,9 @@ module RuboCop | |
| 45 45 | 
             
                      # SomeClass = Class.new(...)
         | 
| 46 46 | 
             
                      # SomeClass = Struct.new(...)
         | 
| 47 47 | 
             
                      return if allowed_assignment?(value)
         | 
| 48 | 
            +
                      return if SNAKE_CASE.match?(const_name)
         | 
| 48 49 |  | 
| 49 | 
            -
                      add_offense(node, location: :name) | 
| 50 | 
            +
                      add_offense(node, location: :name)
         | 
| 50 51 | 
             
                    end
         | 
| 51 52 |  | 
| 52 53 | 
             
                    private
         | 
| @@ -153,9 +153,7 @@ module RuboCop | |
| 153 153 |  | 
| 154 154 | 
             
                          namespace, name = *namespace
         | 
| 155 155 |  | 
| 156 | 
            -
                          if name == expected.last || match_acronym?(expected.last, name)
         | 
| 157 | 
            -
                            expected.pop
         | 
| 158 | 
            -
                          end
         | 
| 156 | 
            +
                          expected.pop if name == expected.last || match_acronym?(expected.last, name)
         | 
| 159 157 | 
             
                        end
         | 
| 160 158 |  | 
| 161 159 | 
             
                        false
         | 
| @@ -39,7 +39,7 @@ module RuboCop | |
| 39 39 | 
             
                    def meaningful_delimiters?(node)
         | 
| 40 40 | 
             
                      delimiters = delimiter_string(node)
         | 
| 41 41 |  | 
| 42 | 
            -
                      return false unless  | 
| 42 | 
            +
                      return false unless /\w/.match?(delimiters)
         | 
| 43 43 |  | 
| 44 44 | 
             
                      forbidden_delimiters.none? do |forbidden_delimiter|
         | 
| 45 45 | 
             
                        delimiters =~ Regexp.new(forbidden_delimiter)
         | 
| @@ -31,9 +31,24 @@ module RuboCop | |
| 31 31 | 
             
                  class MethodName < Cop
         | 
| 32 32 | 
             
                    include ConfigurableNaming
         | 
| 33 33 | 
             
                    include IgnoredPattern
         | 
| 34 | 
            +
                    include RangeHelp
         | 
| 34 35 |  | 
| 35 36 | 
             
                    MSG = 'Use %<style>s for method names.'
         | 
| 36 37 |  | 
| 38 | 
            +
                    def_node_matcher :sym_name, '(sym $_name)'
         | 
| 39 | 
            +
                    def_node_matcher :str_name, '(str $_name)'
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    def on_send(node)
         | 
| 42 | 
            +
                      return unless (attrs = node.attribute_accessor?)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                      attrs.last.each do |name_item|
         | 
| 45 | 
            +
                        name = attr_name(name_item)
         | 
| 46 | 
            +
                        next if !name || matches_ignored_pattern?(name)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                        check_name(node, name, range_position(node))
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 37 52 | 
             
                    def on_def(node)
         | 
| 38 53 | 
             
                      return if node.operator_method? ||
         | 
| 39 54 | 
             
                                matches_ignored_pattern?(node.method_name)
         | 
| @@ -44,6 +59,17 @@ module RuboCop | |
| 44 59 |  | 
| 45 60 | 
             
                    private
         | 
| 46 61 |  | 
| 62 | 
            +
                    def attr_name(name_item)
         | 
| 63 | 
            +
                      sym_name(name_item) || str_name(name_item)
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    def range_position(node)
         | 
| 67 | 
            +
                      selector_end_pos = node.loc.selector.end_pos + 1
         | 
| 68 | 
            +
                      expr_end_pos = node.loc.expression.end_pos
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                      range_between(selector_end_pos, expr_end_pos)
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
             | 
| 47 73 | 
             
                    def message(style)
         | 
| 48 74 | 
             
                      format(MSG, style: style)
         | 
| 49 75 | 
             
                    end
         | 
    
        data/lib/rubocop/cop/registry.rb
    CHANGED
    
    | @@ -22,12 +22,13 @@ module RuboCop | |
| 22 22 |  | 
| 23 23 | 
             
                # Registry that tracks all cops by their badge and department.
         | 
| 24 24 | 
             
                class Registry
         | 
| 25 | 
            -
                  def initialize(cops = [])
         | 
| 25 | 
            +
                  def initialize(cops = [], options = {})
         | 
| 26 26 | 
             
                    @registry = {}
         | 
| 27 27 | 
             
                    @departments = {}
         | 
| 28 28 | 
             
                    @cops_by_cop_name = Hash.new { |hash, key| hash[key] = [] }
         | 
| 29 29 |  | 
| 30 30 | 
             
                    cops.each { |cop| enlist(cop) }
         | 
| 31 | 
            +
                    @options = options
         | 
| 31 32 | 
             
                  end
         | 
| 32 33 |  | 
| 33 34 | 
             
                  def enlist(cop)
         | 
| @@ -93,9 +94,7 @@ module RuboCop | |
| 93 94 | 
             
                  # @return [String] Qualified cop name
         | 
| 94 95 | 
             
                  def qualified_cop_name(name, path, shall_warn = true)
         | 
| 95 96 | 
             
                    badge = Badge.parse(name)
         | 
| 96 | 
            -
                    if shall_warn && department_missing?(badge, name)
         | 
| 97 | 
            -
                      print_warning(name, path)
         | 
| 98 | 
            -
                    end
         | 
| 97 | 
            +
                    print_warning(name, path) if shall_warn && department_missing?(badge, name)
         | 
| 99 98 | 
             
                    return name if registered?(badge)
         | 
| 100 99 |  | 
| 101 100 | 
             
                    potential_badges = qualify_badge(badge)
         | 
| @@ -113,9 +112,7 @@ module RuboCop | |
| 113 112 |  | 
| 114 113 | 
             
                  def print_warning(name, path)
         | 
| 115 114 | 
             
                    message = "#{path}: Warning: no department given for #{name}."
         | 
| 116 | 
            -
                    if path.end_with?('.rb')
         | 
| 117 | 
            -
                      message += ' Run `rubocop -a --only Migration/DepartmentName` to fix.'
         | 
| 118 | 
            -
                    end
         | 
| 115 | 
            +
                    message += ' Run `rubocop -a --only Migration/DepartmentName` to fix.' if path.end_with?('.rb')
         | 
| 119 116 | 
             
                    warn message
         | 
| 120 117 | 
             
                  end
         | 
| 121 118 |  | 
| @@ -147,9 +144,8 @@ module RuboCop | |
| 147 144 | 
             
                  def enabled?(cop, config, only_safe)
         | 
| 148 145 | 
             
                    cfg = config.for_cop(cop)
         | 
| 149 146 |  | 
| 150 | 
            -
                     | 
| 151 | 
            -
             | 
| 152 | 
            -
                    cop_enabled = cfg.fetch('Enabled') == true
         | 
| 147 | 
            +
                    cop_enabled = cfg.fetch('Enabled') == true ||
         | 
| 148 | 
            +
                                  enabled_pending_cop?(cfg, config)
         | 
| 153 149 |  | 
| 154 150 | 
             
                    if only_safe
         | 
| 155 151 | 
             
                      cop_enabled && cfg.fetch('Safe', true)
         | 
| @@ -158,6 +154,13 @@ module RuboCop | |
| 158 154 | 
             
                    end
         | 
| 159 155 | 
             
                  end
         | 
| 160 156 |  | 
| 157 | 
            +
                  def enabled_pending_cop?(cop_cfg, config)
         | 
| 158 | 
            +
                    return false if @options[:disable_pending_cops]
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                    cop_cfg.fetch('Enabled') == 'pending' &&
         | 
| 161 | 
            +
                      (@options[:enable_pending_cops] || config.enabled_new_cops?)
         | 
| 162 | 
            +
                  end
         | 
| 163 | 
            +
             | 
| 161 164 | 
             
                  def names
         | 
| 162 165 | 
             
                    cops.map(&:cop_name)
         | 
| 163 166 | 
             
                  end
         | 
    
        data/lib/rubocop/cop/severity.rb
    CHANGED
    
    | @@ -31,9 +31,7 @@ module RuboCop | |
| 31 31 | 
             
                  # @api private
         | 
| 32 32 | 
             
                  def initialize(name_or_code)
         | 
| 33 33 | 
             
                    name = Severity.name_from_code(name_or_code)
         | 
| 34 | 
            -
                    unless NAMES.include?(name)
         | 
| 35 | 
            -
                      raise ArgumentError, "Unknown severity: #{name}"
         | 
| 36 | 
            -
                    end
         | 
| 34 | 
            +
                    raise ArgumentError, "Unknown severity: #{name}" unless NAMES.include?(name)
         | 
| 37 35 |  | 
| 38 36 | 
             
                    @name = name.freeze
         | 
| 39 37 | 
             
                    freeze
         | 
| @@ -5,11 +5,12 @@ module RuboCop | |
| 5 5 | 
             
                module Style
         | 
| 6 6 | 
             
                  # Access modifiers should be declared to apply to a group of methods
         | 
| 7 7 | 
             
                  # or inline before each method, depending on configuration.
         | 
| 8 | 
            +
                  # EnforcedStyle config covers only method definitions.
         | 
| 9 | 
            +
                  # Applications of visibility methods to symbols can be controlled
         | 
| 10 | 
            +
                  # using AllowModifiersOnSymbols config.
         | 
| 8 11 | 
             
                  #
         | 
| 9 12 | 
             
                  # @example EnforcedStyle: group (default)
         | 
| 10 | 
            -
                  #
         | 
| 11 13 | 
             
                  #   # bad
         | 
| 12 | 
            -
                  #
         | 
| 13 14 | 
             
                  #   class Foo
         | 
| 14 15 | 
             
                  #
         | 
| 15 16 | 
             
                  #     private def bar; end
         | 
| @@ -18,7 +19,6 @@ module RuboCop | |
| 18 19 | 
             
                  #   end
         | 
| 19 20 | 
             
                  #
         | 
| 20 21 | 
             
                  #   # good
         | 
| 21 | 
            -
                  #
         | 
| 22 22 | 
             
                  #   class Foo
         | 
| 23 23 | 
             
                  #
         | 
| 24 24 | 
             
                  #     private
         | 
| @@ -27,10 +27,9 @@ module RuboCop | |
| 27 27 | 
             
                  #     def baz; end
         | 
| 28 28 | 
             
                  #
         | 
| 29 29 | 
             
                  #   end
         | 
| 30 | 
            -
                  # @example EnforcedStyle: inline
         | 
| 31 30 | 
             
                  #
         | 
| 31 | 
            +
                  # @example EnforcedStyle: inline
         | 
| 32 32 | 
             
                  #   # bad
         | 
| 33 | 
            -
                  #
         | 
| 34 33 | 
             
                  #   class Foo
         | 
| 35 34 | 
             
                  #
         | 
| 36 35 | 
             
                  #     private
         | 
| @@ -41,13 +40,28 @@ module RuboCop | |
| 41 40 | 
             
                  #   end
         | 
| 42 41 | 
             
                  #
         | 
| 43 42 | 
             
                  #   # good
         | 
| 44 | 
            -
                  #
         | 
| 45 43 | 
             
                  #   class Foo
         | 
| 46 44 | 
             
                  #
         | 
| 47 45 | 
             
                  #     private def bar; end
         | 
| 48 46 | 
             
                  #     private def baz; end
         | 
| 49 47 | 
             
                  #
         | 
| 50 48 | 
             
                  #   end
         | 
| 49 | 
            +
                  #
         | 
| 50 | 
            +
                  # @example AllowModifiersOnSymbols: true
         | 
| 51 | 
            +
                  #   # good
         | 
| 52 | 
            +
                  #   class Foo
         | 
| 53 | 
            +
                  #
         | 
| 54 | 
            +
                  #     private :bar, :baz
         | 
| 55 | 
            +
                  #
         | 
| 56 | 
            +
                  #   end
         | 
| 57 | 
            +
                  #
         | 
| 58 | 
            +
                  # @example AllowModifiersOnSymbols: false
         | 
| 59 | 
            +
                  #   # bad
         | 
| 60 | 
            +
                  #   class Foo
         | 
| 61 | 
            +
                  #
         | 
| 62 | 
            +
                  #     private :bar, :baz
         | 
| 63 | 
            +
                  #
         | 
| 64 | 
            +
                  #   end
         | 
| 51 65 | 
             
                  class AccessModifierDeclarations < Cop
         | 
| 52 66 | 
             
                    include ConfigurableEnforcedStyle
         | 
| 53 67 |  | 
| @@ -61,9 +75,15 @@ module RuboCop | |
| 61 75 | 
             
                      'inlined in method definitions.'
         | 
| 62 76 | 
             
                    ].join(' ')
         | 
| 63 77 |  | 
| 78 | 
            +
                    def_node_matcher :access_modifier_with_symbol?, <<~PATTERN
         | 
| 79 | 
            +
                      (send nil? {:private :protected :public} (sym _))
         | 
| 80 | 
            +
                    PATTERN
         | 
| 81 | 
            +
             | 
| 64 82 | 
             
                    def on_send(node)
         | 
| 65 83 | 
             
                      return unless node.access_modifier?
         | 
| 66 84 | 
             
                      return if node.parent.pair_type?
         | 
| 85 | 
            +
                      return if cop_config['AllowModifiersOnSymbols'] &&
         | 
| 86 | 
            +
                                access_modifier_with_symbol?(node)
         | 
| 67 87 |  | 
| 68 88 | 
             
                      if offense?(node)
         | 
| 69 89 | 
             
                        add_offense(node, location: :selector) do
         |