rubocop 1.67.0 → 1.81.6
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/LICENSE.txt +1 -1
- data/README.md +23 -19
- data/config/default.yml +384 -72
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +8 -3
- data/exe/rubocop +1 -8
- data/lib/rubocop/cached_data.rb +12 -4
- data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
- data/lib/rubocop/cli/command/execute_runner.rb +4 -4
- data/lib/rubocop/cli/command/show_cops.rb +24 -2
- data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +19 -4
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +52 -10
- data/lib/rubocop/config_loader.rb +56 -48
- data/lib/rubocop/config_loader_resolver.rb +36 -10
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +46 -2
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/config_validator.rb +25 -14
- data/lib/rubocop/cop/autocorrect_logic.rb +53 -28
- data/lib/rubocop/cop/base.rb +7 -1
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +8 -16
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +37 -15
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
- data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +5 -5
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +233 -0
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +13 -2
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +7 -16
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -9
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/class_structure.rb +45 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +3 -3
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +34 -20
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -5
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -9
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +8 -11
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +8 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +57 -2
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +11 -2
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/line_length.rb +158 -10
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +11 -8
- data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
- data/lib/rubocop/cop/layout/redundant_line_break.rb +19 -46
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +14 -7
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +31 -21
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
- data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +7 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -1
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
- data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
- data/lib/rubocop/cop/lint/debugger.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -3
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -23
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +14 -64
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +0 -6
- data/lib/rubocop/cop/lint/float_comparison.rb +51 -18
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -4
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +125 -10
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +24 -6
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -2
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_case_range.rb +5 -8
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -6
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -2
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -5
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +113 -9
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +3 -0
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +2 -5
- data/lib/rubocop/cop/lint/rescue_type.rb +4 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -1
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +5 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +39 -15
- data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -1
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +4 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +52 -2
- data/lib/rubocop/cop/lint/unreachable_loop.rb +6 -6
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +34 -8
- data/lib/rubocop/cop/lint/useless_assignment.rb +3 -1
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -0
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +3 -1
- data/lib/rubocop/cop/lint/useless_or.rb +98 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +23 -12
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +1 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +9 -9
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
- data/lib/rubocop/cop/metrics/method_length.rb +9 -1
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +3 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +3 -3
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/comments_help.rb +8 -3
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
- data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +4 -3
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +22 -22
- data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
- data/lib/rubocop/cop/mixin/line_length_help.rb +27 -10
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -9
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
- data/lib/rubocop/cop/mixin/range_help.rb +15 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +8 -3
- data/lib/rubocop/cop/mixin/string_help.rb +2 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +21 -5
- data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +20 -16
- data/lib/rubocop/cop/naming/constant_name.rb +6 -7
- data/lib/rubocop/cop/naming/file_name.rb +2 -4
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +12 -13
- data/lib/rubocop/cop/naming/method_name.rb +185 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
- data/lib/rubocop/cop/naming/{predicate_name.rb → predicate_prefix.rb} +48 -4
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +6 -14
- data/lib/rubocop/cop/naming/variable_name.rb +50 -6
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/offense.rb +2 -3
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/compound_hash.rb +2 -0
- data/lib/rubocop/cop/security/eval.rb +2 -1
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +114 -34
- data/lib/rubocop/cop/style/accessor_grouping.rb +32 -6
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/and_or.rb +1 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +57 -44
- data/lib/rubocop/cop/style/array_first_last.rb +18 -2
- data/lib/rubocop/cop/style/array_intersect.rb +115 -39
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +44 -26
- data/lib/rubocop/cop/style/case_like_if.rb +9 -12
- data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/style/collection_methods.rb +2 -1
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +20 -3
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +49 -31
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/data_inheritance.rb +7 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -5
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +5 -5
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +4 -7
- data/lib/rubocop/cop/style/each_with_object.rb +2 -3
- data/lib/rubocop/cop/style/empty_else.rb +4 -2
- data/lib/rubocop/cop/style/empty_literal.rb +5 -1
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
- data/lib/rubocop/cop/style/endless_method.rb +163 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +4 -4
- data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -3
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +17 -4
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
- data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
- data/lib/rubocop/cop/style/file_null.rb +89 -0
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/float_division.rb +8 -4
- data/lib/rubocop/cop/style/for.rb +1 -1
- data/lib/rubocop/cop/style/format_string_token.rb +38 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +3 -0
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +17 -3
- data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
- data/lib/rubocop/cop/style/hash_each_methods.rb +6 -8
- data/lib/rubocop/cop/style/hash_except.rb +35 -147
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_slice.rb +80 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +9 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +25 -6
- data/lib/rubocop/cop/style/if_inside_else.rb +10 -14
- data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +3 -4
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -9
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +16 -13
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
- data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
- data/lib/rubocop/cop/style/it_assignment.rb +93 -0
- data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
- data/lib/rubocop/cop/style/lambda.rb +1 -0
- data/lib/rubocop/cop/style/lambda_call.rb +10 -4
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/map_into_array.rb +11 -3
- data/lib/rubocop/cop/style/map_to_hash.rb +13 -4
- data/lib/rubocop/cop/style/map_to_set.rb +4 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +28 -20
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +18 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -11
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/missing_else.rb +2 -0
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
- data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +52 -51
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/next.rb +44 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +15 -15
- data/lib/rubocop/cop/style/one_line_conditional.rb +42 -13
- data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
- data/lib/rubocop/cop/style/operator_method_call.rb +5 -6
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +41 -38
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +2 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +15 -13
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +3 -1
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +36 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +95 -23
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +16 -5
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
- data/lib/rubocop/cop/style/redundant_each.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -9
- data/lib/rubocop/cop/style/redundant_format.rb +283 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
- data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +55 -19
- data/lib/rubocop/cop/style/redundant_parentheses.rb +105 -36
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +8 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -1
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +15 -18
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +3 -3
- data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
- data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +5 -3
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +75 -16
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +5 -2
- data/lib/rubocop/cop/style/self_assignment.rb +11 -17
- data/lib/rubocop/cop/style/semicolon.rb +21 -6
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +15 -4
- data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
- data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +68 -102
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +21 -17
- data/lib/rubocop/cop/style/string_literals.rb +1 -1
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/super_arguments.rb +66 -19
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +3 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +25 -4
- data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +56 -2
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
- data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/util.rb +12 -5
- data/lib/rubocop/cop/utils/format_string.rb +20 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +24 -5
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +14 -3
- data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
- data/lib/rubocop/cop/variable_force.rb +30 -19
- data/lib/rubocop/cops_documentation_generator.rb +54 -28
- data/lib/rubocop/directive_comment.rb +45 -11
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +20 -6
- data/lib/rubocop/formatter/formatter_set.rb +1 -1
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/lsp/diagnostic.rb +190 -0
- data/lib/rubocop/lsp/logger.rb +2 -2
- data/lib/rubocop/lsp/routes.rb +66 -26
- data/lib/rubocop/lsp/runtime.rb +18 -50
- data/lib/rubocop/lsp/server.rb +2 -4
- data/lib/rubocop/lsp/stdin_runner.rb +69 -0
- data/lib/rubocop/magic_comment.rb +11 -3
- data/lib/rubocop/options.rb +28 -12
- data/lib/rubocop/path_util.rb +15 -8
- data/lib/rubocop/pending_cops_reporter.rb +56 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
- data/lib/rubocop/plugin/load_error.rb +26 -0
- data/lib/rubocop/plugin/loader.rb +100 -0
- data/lib/rubocop/plugin/not_supported_error.rb +29 -0
- data/lib/rubocop/plugin.rb +46 -0
- data/lib/rubocop/rake_task.rb +4 -1
- data/lib/rubocop/result_cache.rb +27 -25
- data/lib/rubocop/rspec/cop_helper.rb +13 -1
- data/lib/rubocop/rspec/expect_offense.rb +15 -5
- data/lib/rubocop/rspec/shared_contexts.rb +38 -1
- data/lib/rubocop/rspec/support.rb +4 -2
- data/lib/rubocop/runner.rb +31 -18
- data/lib/rubocop/server/cache.rb +51 -13
- data/lib/rubocop/server/cli.rb +2 -2
- data/lib/rubocop/server/client_command/base.rb +10 -0
- data/lib/rubocop/server/client_command/exec.rb +2 -1
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/target_finder.rb +14 -9
- data/lib/rubocop/target_ruby.rb +27 -3
- data/lib/rubocop/version.rb +53 -12
- data/lib/rubocop.rb +44 -2
- data/lib/ruby_lsp/rubocop/addon.rb +90 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +91 -21
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
data/config/internal_affairs.yml
CHANGED
|
@@ -6,6 +6,26 @@ InternalAffairs/CopDescription:
|
|
|
6
6
|
Include:
|
|
7
7
|
- 'lib/rubocop/cop/**/*.rb'
|
|
8
8
|
|
|
9
|
+
InternalAffairs/ExampleHeredocDelimiter:
|
|
10
|
+
Include:
|
|
11
|
+
- 'spec/rubocop/cop/**/*.rb'
|
|
12
|
+
|
|
13
|
+
InternalAffairs/ExampleDescription:
|
|
14
|
+
Include:
|
|
15
|
+
- 'spec/rubocop/cop/**/*.rb'
|
|
16
|
+
|
|
17
|
+
InternalAffairs/NodeTypeGroup:
|
|
18
|
+
Include:
|
|
19
|
+
- 'lib/rubocop/cop/**/*.rb'
|
|
20
|
+
|
|
21
|
+
InternalAffairs/OnSendWithoutOnCSend:
|
|
22
|
+
Include:
|
|
23
|
+
- 'lib/rubocop/cop/**/*.rb'
|
|
24
|
+
|
|
25
|
+
InternalAffairs/UndefinedConfig:
|
|
26
|
+
Include:
|
|
27
|
+
- 'lib/rubocop/cop/**/*.rb'
|
|
28
|
+
|
|
9
29
|
InternalAffairs/UselessMessageAssertion:
|
|
10
30
|
Include:
|
|
11
31
|
- '**/*_spec.rb'
|
data/config/obsoletion.yml
CHANGED
|
@@ -31,6 +31,9 @@ renamed:
|
|
|
31
31
|
Lint/UnneededRequireStatement: Lint/RedundantRequireStatement
|
|
32
32
|
Lint/UnneededSplatExpansion: Lint/RedundantSplatExpansion
|
|
33
33
|
Metrics/LineLength: Layout/LineLength
|
|
34
|
+
Naming/PredicateName:
|
|
35
|
+
new_name: Naming/PredicatePrefix
|
|
36
|
+
severity: warning
|
|
34
37
|
Naming/UncommunicativeBlockParamName: Naming/BlockParameterName
|
|
35
38
|
Naming/UncommunicativeMethodParamName: Naming/MethodParameterName
|
|
36
39
|
Style/AccessorMethodName: Naming/AccessorMethodName
|
|
@@ -43,7 +46,9 @@ renamed:
|
|
|
43
46
|
Style/MethodCallParentheses: Style/MethodCallWithoutArgsParentheses
|
|
44
47
|
Style/MethodName: Naming/MethodName
|
|
45
48
|
Style/OpMethod: Naming/BinaryOperatorParameterName
|
|
46
|
-
Style/PredicateName:
|
|
49
|
+
Style/PredicateName:
|
|
50
|
+
new_name: Naming/PredicatePrefix
|
|
51
|
+
severity: warning
|
|
47
52
|
Style/SingleSpaceBeforeFirstArg: Layout/SpaceBeforeFirstArg
|
|
48
53
|
Style/UnneededCapitalW: Style/RedundantCapitalW
|
|
49
54
|
Style/UnneededCondition: Style/RedundantCondition
|
|
@@ -177,10 +182,10 @@ changed_parameters:
|
|
|
177
182
|
- cops: Naming/HeredocDelimiterNaming
|
|
178
183
|
parameters: Blacklist
|
|
179
184
|
alternative: ForbiddenDelimiters
|
|
180
|
-
- cops: Naming/
|
|
185
|
+
- cops: Naming/PredicatePrefix
|
|
181
186
|
parameters: NamePrefixBlacklist
|
|
182
187
|
alternative: ForbiddenPrefixes
|
|
183
|
-
- cops: Naming/
|
|
188
|
+
- cops: Naming/PredicatePrefix
|
|
184
189
|
parameters: NameWhitelist
|
|
185
190
|
alternative: AllowedMethods
|
|
186
191
|
- cops:
|
data/exe/rubocop
CHANGED
|
@@ -12,13 +12,6 @@ if RuboCop::Server.running?
|
|
|
12
12
|
exit_status = RuboCop::Server::ClientCommand::Exec.new.run
|
|
13
13
|
else
|
|
14
14
|
require 'rubocop'
|
|
15
|
-
|
|
16
|
-
cli = RuboCop::CLI.new
|
|
17
|
-
|
|
18
|
-
time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
19
|
-
exit_status = cli.run
|
|
20
|
-
elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
|
|
21
|
-
|
|
22
|
-
puts "Finished in #{elapsed_time} seconds" if cli.options[:debug] || cli.options[:display_time]
|
|
15
|
+
exit_status = RuboCop::CLI.new.run
|
|
23
16
|
end
|
|
24
17
|
exit exit_status
|
data/lib/rubocop/cached_data.rb
CHANGED
|
@@ -45,15 +45,13 @@ module RuboCop
|
|
|
45
45
|
|
|
46
46
|
# Restore an offense object loaded from a JSON file.
|
|
47
47
|
def deserialize_offenses(offenses)
|
|
48
|
-
source_buffer = Parser::Source::Buffer.new(@filename)
|
|
49
|
-
source_buffer.source = File.read(@filename, encoding: Encoding::UTF_8)
|
|
50
48
|
offenses.map! do |o|
|
|
51
|
-
location = location_from_source_buffer(o
|
|
49
|
+
location = location_from_source_buffer(o)
|
|
52
50
|
Cop::Offense.new(o['severity'], location, o['message'], o['cop_name'], o['status'].to_sym)
|
|
53
51
|
end
|
|
54
52
|
end
|
|
55
53
|
|
|
56
|
-
def location_from_source_buffer(offense
|
|
54
|
+
def location_from_source_buffer(offense)
|
|
57
55
|
begin_pos = offense['location']['begin_pos']
|
|
58
56
|
end_pos = offense['location']['end_pos']
|
|
59
57
|
if begin_pos.zero? && end_pos.zero?
|
|
@@ -62,5 +60,15 @@ module RuboCop
|
|
|
62
60
|
Parser::Source::Range.new(source_buffer, begin_pos, end_pos)
|
|
63
61
|
end
|
|
64
62
|
end
|
|
63
|
+
|
|
64
|
+
# Delay creation until needed. Some type of offenses will have no buffer associated with them
|
|
65
|
+
# and be global only. For these, trying to create the buffer will likely fail, for example
|
|
66
|
+
# because of unknown encoding comments.
|
|
67
|
+
def source_buffer
|
|
68
|
+
@source_buffer ||= begin
|
|
69
|
+
source = File.read(@filename, encoding: Encoding::UTF_8)
|
|
70
|
+
Parser::Source::Buffer.new(@filename, source: source)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
65
73
|
end
|
|
66
74
|
end
|
|
@@ -83,7 +83,7 @@ module RuboCop
|
|
|
83
83
|
execute_runner
|
|
84
84
|
@options.delete(:only)
|
|
85
85
|
@config_store = ConfigStore.new
|
|
86
|
-
@config_store.
|
|
86
|
+
@config_store.apply_options!(@options)
|
|
87
87
|
# Save the todo configuration of the LineLength cop.
|
|
88
88
|
File.read(AUTO_GENERATED_FILE).lines.drop_while { |line| line.start_with?('#') }.join
|
|
89
89
|
end
|
|
@@ -99,7 +99,7 @@ module RuboCop
|
|
|
99
99
|
|
|
100
100
|
def reset_config_and_auto_gen_file
|
|
101
101
|
@config_store = ConfigStore.new
|
|
102
|
-
@config_store.
|
|
102
|
+
@config_store.apply_options!(@options)
|
|
103
103
|
File.open(AUTO_GENERATED_FILE, 'w') {} # create or truncate if exists
|
|
104
104
|
add_inheritance_from_auto_generated_file(@options[:config])
|
|
105
105
|
end
|
|
@@ -71,14 +71,14 @@ module RuboCop
|
|
|
71
71
|
|
|
72
72
|
warn Rainbow("\n#{pluralize(errors.size, 'error')} occurred:").red
|
|
73
73
|
|
|
74
|
-
errors.each { |error| warn error }
|
|
74
|
+
errors.each { |error| warn Rainbow(error).red }
|
|
75
75
|
|
|
76
|
-
warn <<~WARNING
|
|
76
|
+
warn Rainbow(<<~WARNING.strip).yellow
|
|
77
77
|
Errors are usually caused by RuboCop bugs.
|
|
78
|
-
Please,
|
|
78
|
+
Please, update to the latest RuboCop version if not already in use, and report a bug if the issue still occurs on this version.
|
|
79
79
|
#{bug_tracker_uri}
|
|
80
80
|
Mention the following information in the issue report:
|
|
81
|
-
#{RuboCop::Version.
|
|
81
|
+
#{RuboCop::Version.verbose}
|
|
82
82
|
WARNING
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -9,11 +9,31 @@ module RuboCop
|
|
|
9
9
|
class ShowCops < Base
|
|
10
10
|
self.command_name = :show_cops
|
|
11
11
|
|
|
12
|
+
ExactMatcher = Struct.new(:pattern) do
|
|
13
|
+
def match?(name)
|
|
14
|
+
name == pattern
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
WildcardMatcher = Struct.new(:pattern) do
|
|
19
|
+
def match?(name)
|
|
20
|
+
File.fnmatch(pattern, name, File::FNM_PATHNAME)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
12
24
|
def initialize(env)
|
|
13
25
|
super
|
|
14
26
|
|
|
15
27
|
# Load the configs so the require()s are done for custom cops
|
|
16
28
|
@config = @config_store.for(Dir.pwd)
|
|
29
|
+
|
|
30
|
+
@cop_matchers = @options[:show_cops].map do |pattern|
|
|
31
|
+
if pattern.include?('*')
|
|
32
|
+
WildcardMatcher.new(pattern)
|
|
33
|
+
else
|
|
34
|
+
ExactMatcher.new(pattern)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
17
37
|
end
|
|
18
38
|
|
|
19
39
|
def run
|
|
@@ -24,7 +44,7 @@ module RuboCop
|
|
|
24
44
|
|
|
25
45
|
def print_available_cops
|
|
26
46
|
registry = Cop::Registry.global
|
|
27
|
-
show_all = @
|
|
47
|
+
show_all = @cop_matchers.empty?
|
|
28
48
|
|
|
29
49
|
puts "# Available cops (#{registry.length}) + config for #{Dir.pwd}: " if show_all
|
|
30
50
|
|
|
@@ -56,7 +76,9 @@ module RuboCop
|
|
|
56
76
|
|
|
57
77
|
def selected_cops_of_department(cops, department)
|
|
58
78
|
cops_of_department(cops, department).select do |cop|
|
|
59
|
-
@
|
|
79
|
+
@cop_matchers.any? do |matcher|
|
|
80
|
+
matcher.match?(cop.cop_name)
|
|
81
|
+
end
|
|
60
82
|
end
|
|
61
83
|
end
|
|
62
84
|
|
|
@@ -97,7 +97,13 @@ module RuboCop
|
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
def loaded_extensions
|
|
100
|
-
@config_store.for_pwd
|
|
100
|
+
rubocop_config = @config_store.for_pwd
|
|
101
|
+
|
|
102
|
+
plugin_names = rubocop_config.loaded_plugins.map do |plugin|
|
|
103
|
+
plugin.about.name
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
plugin_names + rubocop_config.loaded_features.to_a
|
|
101
107
|
end
|
|
102
108
|
|
|
103
109
|
def installed_and_not_loaded_extensions
|
|
@@ -9,8 +9,8 @@ module RuboCop
|
|
|
9
9
|
self.command_name = :version
|
|
10
10
|
|
|
11
11
|
def run
|
|
12
|
-
puts RuboCop::Version
|
|
13
|
-
puts RuboCop::Version.
|
|
12
|
+
puts RuboCop::Version::STRING if @options[:version]
|
|
13
|
+
puts RuboCop::Version.verbose(env: env) if @options[:verbose_version]
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
data/lib/rubocop/cli.rb
CHANGED
|
@@ -12,7 +12,7 @@ module RuboCop
|
|
|
12
12
|
STATUS_INTERRUPTED = Signal.list['INT'] + 128
|
|
13
13
|
DEFAULT_PARALLEL_OPTIONS = %i[
|
|
14
14
|
color config debug display_style_guide display_time display_only_fail_level_offenses
|
|
15
|
-
display_only_failed editor_mode except extra_details fail_level fix_layout format
|
|
15
|
+
display_only_failed editor_mode except extra_details fail_level fix_layout format formatters
|
|
16
16
|
ignore_disable_comments lint only only_guide_cops require safe
|
|
17
17
|
autocorrect safe_autocorrect autocorrect_all
|
|
18
18
|
].freeze
|
|
@@ -37,6 +37,8 @@ module RuboCop
|
|
|
37
37
|
#
|
|
38
38
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
39
39
|
def run(args = ARGV)
|
|
40
|
+
time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
41
|
+
|
|
40
42
|
@options, paths = Options.new.parse(args)
|
|
41
43
|
@env = Environment.new(@options, @config_store, paths)
|
|
42
44
|
|
|
@@ -48,11 +50,12 @@ module RuboCop
|
|
|
48
50
|
validate_options_vs_config
|
|
49
51
|
parallel_by_default!
|
|
50
52
|
apply_default_formatter
|
|
53
|
+
report_pending_cops
|
|
51
54
|
execute_runners
|
|
52
55
|
end
|
|
53
56
|
end
|
|
54
57
|
rescue ConfigNotFoundError, IncorrectCopNameError, OptionArgumentError => e
|
|
55
|
-
warn e.message
|
|
58
|
+
warn Rainbow(e.message).red
|
|
56
59
|
STATUS_ERROR
|
|
57
60
|
rescue RuboCop::Error => e
|
|
58
61
|
warn Rainbow("Error: #{e.message}").red
|
|
@@ -71,6 +74,9 @@ module RuboCop
|
|
|
71
74
|
warn e.message
|
|
72
75
|
warn e.backtrace
|
|
73
76
|
STATUS_ERROR
|
|
77
|
+
ensure
|
|
78
|
+
elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
|
|
79
|
+
puts "Finished in #{elapsed_time} seconds" if @options[:debug] || @options[:display_time]
|
|
74
80
|
end
|
|
75
81
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
76
82
|
|
|
@@ -155,10 +161,10 @@ module RuboCop
|
|
|
155
161
|
|
|
156
162
|
def act_on_options
|
|
157
163
|
set_options_to_config_loader
|
|
164
|
+
set_options_to_pending_cops_reporter
|
|
158
165
|
handle_editor_mode
|
|
159
166
|
|
|
160
|
-
@config_store.
|
|
161
|
-
@config_store.force_default_config! if @options[:force_default_config]
|
|
167
|
+
@config_store.apply_options!(@options)
|
|
162
168
|
|
|
163
169
|
handle_exiting_options
|
|
164
170
|
|
|
@@ -179,6 +185,11 @@ module RuboCop
|
|
|
179
185
|
ConfigLoader.ignore_unrecognized_cops = @options[:ignore_unrecognized_cops]
|
|
180
186
|
end
|
|
181
187
|
|
|
188
|
+
def set_options_to_pending_cops_reporter
|
|
189
|
+
PendingCopsReporter.disable_pending_cops = @options[:disable_pending_cops]
|
|
190
|
+
PendingCopsReporter.enable_pending_cops = @options[:enable_pending_cops]
|
|
191
|
+
end
|
|
192
|
+
|
|
182
193
|
def handle_editor_mode
|
|
183
194
|
RuboCop::LSP.enable if @options[:editor_mode]
|
|
184
195
|
end
|
|
@@ -208,5 +219,9 @@ module RuboCop
|
|
|
208
219
|
[[formatter, @options[:output_path]]]
|
|
209
220
|
end
|
|
210
221
|
end
|
|
222
|
+
|
|
223
|
+
def report_pending_cops
|
|
224
|
+
PendingCopsReporter.warn_if_needed(@config_store.for_pwd)
|
|
225
|
+
end
|
|
211
226
|
end
|
|
212
227
|
end
|
|
@@ -87,7 +87,7 @@ module RuboCop
|
|
|
87
87
|
next unless directive.enabled?
|
|
88
88
|
next if directive.all_cops?
|
|
89
89
|
|
|
90
|
-
cops.merge(directive.
|
|
90
|
+
cops.merge(directive.raw_cop_names)
|
|
91
91
|
end
|
|
92
92
|
cops
|
|
93
93
|
end
|
|
@@ -205,7 +205,7 @@ module RuboCop
|
|
|
205
205
|
directive.cop_names.each do |name|
|
|
206
206
|
if directive.disabled?
|
|
207
207
|
names[name] += 1
|
|
208
|
-
elsif
|
|
208
|
+
elsif names[name].positive?
|
|
209
209
|
names[name] -= 1
|
|
210
210
|
else
|
|
211
211
|
extras[directive.comment] << name
|
data/lib/rubocop/config.rb
CHANGED
|
@@ -16,6 +16,7 @@ module RuboCop
|
|
|
16
16
|
|
|
17
17
|
CopConfig = Struct.new(:name, :metadata)
|
|
18
18
|
|
|
19
|
+
EMPTY_CONFIG = {}.freeze
|
|
19
20
|
DEFAULT_RAILS_VERSION = 5.0
|
|
20
21
|
attr_reader :loaded_path
|
|
21
22
|
|
|
@@ -26,14 +27,43 @@ module RuboCop
|
|
|
26
27
|
config
|
|
27
28
|
end
|
|
28
29
|
|
|
29
|
-
# rubocop:disable Metrics/AbcSize
|
|
30
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
30
31
|
def initialize(hash = RuboCop::ConfigLoader.default_configuration, loaded_path = nil)
|
|
31
32
|
@loaded_path = loaded_path
|
|
32
33
|
@for_cop = Hash.new do |h, cop|
|
|
33
34
|
cop_name = cop.respond_to?(:cop_name) ? cop.cop_name : cop
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
|
|
36
|
+
if ConfigObsoletion.deprecated_cop_name?(cop)
|
|
37
|
+
# Since a deprecated cop will no longer have a qualified name (as the badge is no
|
|
38
|
+
# longer valid), and since we do not want to automatically enable the cop, we just
|
|
39
|
+
# set the configuration to an empty hash if it is unset.
|
|
40
|
+
# This is necessary to allow a renamed cop have its old configuration merged in
|
|
41
|
+
# before being used (which is necessary to allow it to be disabled via config).
|
|
42
|
+
cop_options = self[cop_name].dup || {}
|
|
43
|
+
else
|
|
44
|
+
qualified_cop_name = Cop::Registry.qualified_cop_name(cop_name, loaded_path, warn: false)
|
|
45
|
+
cop_options = self[qualified_cop_name].dup || {}
|
|
46
|
+
cop_options['Enabled'] = enable_cop?(qualified_cop_name, cop_options)
|
|
47
|
+
|
|
48
|
+
# If the cop has deprecated names (ie. it has been renamed), it is possible that
|
|
49
|
+
# users will still have old configuration for the cop's old name. In this case,
|
|
50
|
+
# if `ConfigObsoletion` is configured to warn rather than error (and therefore
|
|
51
|
+
# RuboCop runs), we want to respect the old configuration, so merge it in.
|
|
52
|
+
#
|
|
53
|
+
# NOTE: If there is configuration for both the cop and a deprecated names, the old
|
|
54
|
+
# configuration will be merged on top of the new configuration!
|
|
55
|
+
ConfigObsoletion.deprecated_names_for(cop).each do |deprecated_cop_name|
|
|
56
|
+
deprecated_config = @for_cop[deprecated_cop_name]
|
|
57
|
+
next if deprecated_config.empty?
|
|
58
|
+
|
|
59
|
+
warn Rainbow(<<~WARNING).yellow
|
|
60
|
+
Warning: Using `#{deprecated_cop_name}` configuration in #{loaded_path} for `#{cop}`.
|
|
61
|
+
WARNING
|
|
62
|
+
|
|
63
|
+
cop_options.merge!(@for_cop[deprecated_cop_name])
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
37
67
|
h[cop] = h[cop_name] = cop_options
|
|
38
68
|
end
|
|
39
69
|
@hash = hash
|
|
@@ -42,7 +72,11 @@ module RuboCop
|
|
|
42
72
|
@badge_config_cache = {}.compare_by_identity
|
|
43
73
|
@clusivity_config_exists_cache = {}
|
|
44
74
|
end
|
|
45
|
-
# rubocop:enable Metrics/AbcSize
|
|
75
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
76
|
+
|
|
77
|
+
def loaded_plugins
|
|
78
|
+
@loaded_plugins ||= ConfigLoader.loaded_plugins
|
|
79
|
+
end
|
|
46
80
|
|
|
47
81
|
def loaded_features
|
|
48
82
|
@loaded_features ||= ConfigLoader.loaded_features
|
|
@@ -80,10 +114,7 @@ module RuboCop
|
|
|
80
114
|
|
|
81
115
|
def make_excludes_absolute
|
|
82
116
|
each_key do |key|
|
|
83
|
-
|
|
84
|
-
next unless self[key]['Exclude']
|
|
85
|
-
|
|
86
|
-
self[key]['Exclude'].map! do |exclude_elem|
|
|
117
|
+
dig(key, 'Exclude')&.map! do |exclude_elem|
|
|
87
118
|
if exclude_elem.is_a?(String) && !absolute?(exclude_elem)
|
|
88
119
|
File.expand_path(File.join(base_dir_for_path_parameters, exclude_elem))
|
|
89
120
|
else
|
|
@@ -123,6 +154,13 @@ module RuboCop
|
|
|
123
154
|
@for_cop[cop]
|
|
124
155
|
end
|
|
125
156
|
|
|
157
|
+
# @return [Config, Hash] for the given cop / cop name.
|
|
158
|
+
# If the given cop is enabled, returns its configuration hash.
|
|
159
|
+
# Otherwise, returns an empty hash.
|
|
160
|
+
def for_enabled_cop(cop)
|
|
161
|
+
cop_enabled?(cop) ? for_cop(cop) : EMPTY_CONFIG
|
|
162
|
+
end
|
|
163
|
+
|
|
126
164
|
# @return [Config] for the given cop merged with that of its department (if any)
|
|
127
165
|
# Note: the 'Enabled' attribute is same as that returned by `for_cop`
|
|
128
166
|
def for_badge(badge)
|
|
@@ -159,6 +197,10 @@ module RuboCop
|
|
|
159
197
|
@for_all_cops ||= self['AllCops'] || {}
|
|
160
198
|
end
|
|
161
199
|
|
|
200
|
+
def cop_enabled?(name)
|
|
201
|
+
!!for_cop(name)['Enabled']
|
|
202
|
+
end
|
|
203
|
+
|
|
162
204
|
def disabled_new_cops?
|
|
163
205
|
for_all_cops['NewCops'] == 'disable'
|
|
164
206
|
end
|
|
@@ -249,7 +291,7 @@ module RuboCop
|
|
|
249
291
|
end
|
|
250
292
|
|
|
251
293
|
def parser_engine
|
|
252
|
-
@parser_engine ||= for_all_cops.fetch('ParserEngine', :
|
|
294
|
+
@parser_engine ||= for_all_cops.fetch('ParserEngine', :default).to_sym
|
|
253
295
|
end
|
|
254
296
|
|
|
255
297
|
def target_rails_version
|
|
@@ -22,37 +22,39 @@ module RuboCop
|
|
|
22
22
|
class << self
|
|
23
23
|
include FileFinder
|
|
24
24
|
|
|
25
|
-
PENDING_BANNER = <<~BANNER
|
|
26
|
-
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.
|
|
27
|
-
|
|
28
|
-
Please also note that you can opt-in to new cops by default by adding this to your config:
|
|
29
|
-
AllCops:
|
|
30
|
-
NewCops: enable
|
|
31
|
-
BANNER
|
|
32
|
-
|
|
33
25
|
attr_accessor :debug, :ignore_parent_exclusion, :disable_pending_cops, :enable_pending_cops,
|
|
34
26
|
:ignore_unrecognized_cops
|
|
35
27
|
attr_writer :default_configuration
|
|
36
|
-
attr_reader :loaded_features
|
|
28
|
+
attr_reader :loaded_plugins, :loaded_features
|
|
37
29
|
|
|
38
30
|
alias debug? debug
|
|
39
31
|
alias ignore_parent_exclusion? ignore_parent_exclusion
|
|
40
32
|
|
|
41
33
|
def clear_options
|
|
42
34
|
@debug = nil
|
|
35
|
+
@loaded_plugins = Set.new
|
|
43
36
|
@loaded_features = Set.new
|
|
37
|
+
@disable_pending_cops = nil
|
|
38
|
+
@enable_pending_cops = nil
|
|
39
|
+
@ignore_parent_exclusion = nil
|
|
40
|
+
@ignore_unrecognized_cops = nil
|
|
44
41
|
FileFinder.root_level = nil
|
|
45
42
|
end
|
|
46
43
|
|
|
44
|
+
# rubocop:disable Metrics/AbcSize
|
|
47
45
|
def load_file(file, check: true)
|
|
48
46
|
path = file_path(file)
|
|
49
47
|
|
|
50
48
|
hash = load_yaml_configuration(path)
|
|
51
49
|
|
|
50
|
+
rubocop_config = Config.create(hash, path, check: false)
|
|
51
|
+
plugins = hash.delete('plugins')
|
|
52
|
+
loaded_plugins = resolver.resolve_plugins(rubocop_config, plugins)
|
|
53
|
+
add_loaded_plugins(loaded_plugins)
|
|
54
|
+
|
|
52
55
|
loaded_features = resolver.resolve_requires(path, hash)
|
|
53
56
|
add_loaded_features(loaded_features)
|
|
54
57
|
|
|
55
|
-
resolver.override_department_setting_for_cops({}, hash)
|
|
56
58
|
resolver.resolve_inheritance_from_gems(hash)
|
|
57
59
|
resolver.resolve_inheritance(path, hash, file, debug?)
|
|
58
60
|
hash.delete('inherit_from')
|
|
@@ -63,6 +65,7 @@ module RuboCop
|
|
|
63
65
|
|
|
64
66
|
Config.create(hash, path, check: check)
|
|
65
67
|
end
|
|
68
|
+
# rubocop:enable Metrics/AbcSize
|
|
66
69
|
|
|
67
70
|
def load_yaml_configuration(absolute_path)
|
|
68
71
|
file_contents = read_file(absolute_path)
|
|
@@ -72,7 +75,9 @@ module RuboCop
|
|
|
72
75
|
|
|
73
76
|
puts "configuration from #{absolute_path}" if debug?
|
|
74
77
|
|
|
75
|
-
|
|
78
|
+
unless hash.is_a?(Hash)
|
|
79
|
+
raise(ValidationError, "Malformed configuration in #{absolute_path}")
|
|
80
|
+
end
|
|
76
81
|
|
|
77
82
|
hash
|
|
78
83
|
end
|
|
@@ -80,8 +85,12 @@ module RuboCop
|
|
|
80
85
|
def add_missing_namespaces(path, hash)
|
|
81
86
|
# Using `hash.each_key` will cause the
|
|
82
87
|
# `can't add a new key into hash during iteration` error
|
|
88
|
+
obsoletion = ConfigObsoletion.new(hash)
|
|
89
|
+
|
|
83
90
|
hash_keys = hash.keys
|
|
84
91
|
hash_keys.each do |key|
|
|
92
|
+
next if obsoletion.deprecated_cop_name?(key)
|
|
93
|
+
|
|
85
94
|
q = Cop::Registry.qualified_cop_name(key, path)
|
|
86
95
|
next if q == key
|
|
87
96
|
|
|
@@ -117,21 +126,7 @@ module RuboCop
|
|
|
117
126
|
add_excludes_from_files(config, config_file)
|
|
118
127
|
end
|
|
119
128
|
|
|
120
|
-
merge_with_default(config, config_file)
|
|
121
|
-
unless possible_new_cops?(merged_config)
|
|
122
|
-
pending_cops = pending_cops_only_qualified(merged_config.pending_cops)
|
|
123
|
-
warn_on_pending_cops(pending_cops) unless pending_cops.empty?
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def pending_cops_only_qualified(pending_cops)
|
|
129
|
-
pending_cops.select { |cop| Cop::Registry.qualified_cop?(cop.name) }
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def possible_new_cops?(config)
|
|
133
|
-
disable_pending_cops || enable_pending_cops ||
|
|
134
|
-
config.disabled_new_cops? || config.enabled_new_cops?
|
|
129
|
+
merge_with_default(config, config_file)
|
|
135
130
|
end
|
|
136
131
|
|
|
137
132
|
def add_excludes_from_files(config, config_file)
|
|
@@ -151,14 +146,35 @@ module RuboCop
|
|
|
151
146
|
end
|
|
152
147
|
end
|
|
153
148
|
|
|
154
|
-
#
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
149
|
+
# This API is primarily intended for testing and documenting plugins.
|
|
150
|
+
# When testing a plugin using `rubocop/rspec/support`, the plugin is loaded automatically,
|
|
151
|
+
# so this API is usually not needed. It is intended to be used only when implementing tests
|
|
152
|
+
# that do not use `rubocop/rspec/support`.
|
|
153
|
+
# rubocop:disable Metrics/MethodLength
|
|
154
|
+
def inject_defaults!(config_yml_path)
|
|
155
|
+
if Pathname(config_yml_path).directory?
|
|
156
|
+
# TODO: Since the warning noise is expected to be high until some time after the release,
|
|
157
|
+
# warnings will only be issued when `RUBYOPT=-w` is specified.
|
|
158
|
+
# To proceed step by step, the next step is to remove `$VERBOSE` and always issue warning.
|
|
159
|
+
# Eventually, `project_root` will no longer be accepted.
|
|
160
|
+
if $VERBOSE
|
|
161
|
+
warn Rainbow(<<~MESSAGE).yellow, uplevel: 1
|
|
162
|
+
Use config YAML file path instead of project root directory.
|
|
163
|
+
e.g., `path/to/config/default.yml`
|
|
164
|
+
MESSAGE
|
|
165
|
+
end
|
|
166
|
+
# NOTE: For compatibility.
|
|
167
|
+
project_root = config_yml_path
|
|
168
|
+
path = File.join(project_root, 'config', 'default.yml')
|
|
169
|
+
config = load_file(path)
|
|
170
|
+
else
|
|
171
|
+
hash = ConfigLoader.load_yaml_configuration(config_yml_path.to_s)
|
|
172
|
+
config = Config.new(hash, config_yml_path).tap(&:make_excludes_absolute)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
@default_configuration = ConfigLoader.merge_with_default(config, path)
|
|
161
176
|
end
|
|
177
|
+
# rubocop:enable Metrics/MethodLength
|
|
162
178
|
|
|
163
179
|
# Returns the path RuboCop inferred as the root of the project. No file
|
|
164
180
|
# searches will go past this directory.
|
|
@@ -172,26 +188,18 @@ module RuboCop
|
|
|
172
188
|
ConfigFinder.project_root
|
|
173
189
|
end
|
|
174
190
|
|
|
175
|
-
def warn_on_pending_cops(pending_cops)
|
|
176
|
-
warn Rainbow(PENDING_BANNER).yellow
|
|
177
|
-
|
|
178
|
-
pending_cops.each { |cop| warn_pending_cop cop }
|
|
179
|
-
|
|
180
|
-
warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
def warn_pending_cop(cop)
|
|
184
|
-
version = cop.metadata['VersionAdded'] || 'N/A'
|
|
185
|
-
|
|
186
|
-
warn Rainbow("#{cop.name}: # new in #{version}").yellow
|
|
187
|
-
warn Rainbow(' Enabled: true').yellow
|
|
188
|
-
end
|
|
189
|
-
|
|
190
191
|
# Merges the given configuration with the default one.
|
|
191
192
|
def merge_with_default(config, config_file, unset_nil: true)
|
|
192
193
|
resolver.merge_with_default(config, config_file, unset_nil: unset_nil)
|
|
193
194
|
end
|
|
194
195
|
|
|
196
|
+
# @api private
|
|
197
|
+
# Used to add plugins that were required inside a config or from
|
|
198
|
+
# the CLI using `--plugin`.
|
|
199
|
+
def add_loaded_plugins(loaded_plugins)
|
|
200
|
+
@loaded_plugins.merge(Array(loaded_plugins))
|
|
201
|
+
end
|
|
202
|
+
|
|
195
203
|
# @api private
|
|
196
204
|
# Used to add features that were required inside a config or from
|
|
197
205
|
# the CLI using `--require`.
|