rubocop 1.53.0 → 1.90.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/LICENSE.txt +1 -1
- data/README.md +93 -88
- data/assets/output.css.erb +159 -0
- data/assets/output.html.erb +1 -160
- data/config/default.yml +949 -185
- data/config/internal_affairs.yml +31 -0
- data/config/obsoletion.yml +43 -4
- data/exe/rubocop +2 -8
- data/lib/rubocop/cache_config.rb +29 -0
- data/lib/rubocop/cached_data.rb +28 -7
- data/lib/rubocop/cli/command/auto_generate_config.rb +63 -18
- data/lib/rubocop/cli/command/execute_runner.rb +35 -4
- data/lib/rubocop/cli/command/list_enabled_cops_for.rb +40 -0
- data/lib/rubocop/cli/command/lsp.rb +4 -4
- data/lib/rubocop/cli/command/mcp.rb +19 -0
- data/lib/rubocop/cli/command/show_cops.rb +26 -4
- data/lib/rubocop/cli/command/show_docs_url.rb +5 -9
- data/lib/rubocop/cli/command/suggest_extensions.rb +8 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +60 -16
- data/lib/rubocop/comment_config/directive_range.rb +32 -0
- data/lib/rubocop/comment_config/disable_next.rb +97 -0
- data/lib/rubocop/comment_config.rb +123 -49
- data/lib/rubocop/config.rb +180 -35
- data/lib/rubocop/config_finder.rb +15 -5
- data/lib/rubocop/config_loader.rb +83 -59
- data/lib/rubocop/config_loader_resolver.rb +65 -25
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +6 -3
- data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +56 -9
- data/lib/rubocop/config_store.rb +7 -2
- data/lib/rubocop/config_validator.rb +76 -21
- data/lib/rubocop/cop/autocorrect_logic.rb +70 -25
- data/lib/rubocop/cop/badge.rb +8 -0
- data/lib/rubocop/cop/base.rb +151 -30
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -2
- data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +6 -4
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/gem_version.rb +32 -33
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +11 -4
- data/lib/rubocop/cop/bundler.rb +19 -0
- data/lib/rubocop/cop/commissioner.rb +13 -11
- data/lib/rubocop/cop/cop.rb +30 -4
- data/lib/rubocop/cop/corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +80 -22
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +5 -9
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +13 -16
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +14 -5
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -5
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +37 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/correctors.rb +28 -0
- data/lib/rubocop/cop/documentation.rb +31 -5
- data/lib/rubocop/cop/exclude_limit.rb +32 -6
- data/lib/rubocop/cop/force.rb +12 -0
- data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/dependency_version.rb +3 -5
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -4
- data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +51 -19
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +11 -4
- data/lib/rubocop/cop/gemspec/require_mfa.rb +22 -5
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +15 -10
- data/lib/rubocop/cop/gemspec.rb +22 -0
- data/lib/rubocop/cop/generator/registration_injector.rb +188 -0
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/generator.rb +10 -0
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +51 -25
- data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/itblock_handler.rb +69 -0
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +142 -0
- data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +7 -5
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +132 -39
- 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 +130 -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_expect_offense_arguments.rb +34 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +5 -3
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +11 -2
- 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 +23 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +6 -9
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +10 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +4 -11
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +89 -17
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -2
- data/lib/rubocop/cop/layout/class_structure.rb +171 -43
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +10 -3
- data/lib/rubocop/cop/layout/condition_position.rb +13 -7
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/dot_position.rb +3 -7
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -15
- data/lib/rubocop/cop/layout/empty_comment.rb +11 -11
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +66 -15
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +75 -10
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +71 -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_attribute_accessor.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +13 -2
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +17 -3
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +12 -8
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +16 -2
- data/lib/rubocop/cop/layout/end_alignment.rb +24 -6
- data/lib/rubocop/cop/layout/extra_spacing.rb +110 -14
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +59 -11
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +20 -11
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +26 -0
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +22 -22
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +26 -26
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/hash_alignment.rb +11 -12
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +6 -5
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +38 -5
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +168 -22
- data/lib/rubocop/cop/layout/leading_comment_space.rb +111 -2
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +28 -11
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +9 -4
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +4 -2
- data/lib/rubocop/cop/layout/line_length.rb +271 -37
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +57 -57
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +8 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +3 -0
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +56 -56
- 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 +3 -2
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +252 -32
- 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 +117 -42
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +17 -9
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +3 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +12 -2
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +12 -4
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +3 -3
- data/lib/rubocop/cop/layout/space_around_operators.rb +94 -38
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
- data/lib/rubocop/cop/layout/space_before_brackets.rb +8 -41
- 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_in_lambda_literal.rb +9 -8
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +48 -36
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
- data/lib/rubocop/cop/layout/space_inside_parens.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -5
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
- data/lib/rubocop/cop/layout.rb +114 -0
- data/lib/rubocop/cop/lazy_loader.rb +41 -0
- data/lib/rubocop/cop/legacy/corrector.rb +12 -2
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +9 -17
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +73 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -10
- data/lib/rubocop/cop/lint/ambiguous_range.rb +8 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
- data/lib/rubocop/cop/lint/argument_mismatch.rb +89 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +20 -10
- data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +49 -17
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +4 -3
- data/lib/rubocop/cop/lint/constant_reassignment.rb +227 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +31 -6
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +166 -0
- data/lib/rubocop/cop/lint/data_define_override.rb +63 -0
- data/lib/rubocop/cop/lint/debugger.rb +53 -9
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -2
- data/lib/rubocop/cop/lint/deprecated_constants.rb +2 -8
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -13
- data/lib/rubocop/cop/lint/deprecated_reference.rb +194 -0
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +0 -4
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +5 -5
- data/lib/rubocop/cop/lint/duplicate_methods.rb +504 -49
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
- data/lib/rubocop/cop/lint/else_layout.rb +19 -2
- data/lib/rubocop/cop/lint/empty_block.rb +5 -5
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +33 -57
- data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
- 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_in_pattern.rb +8 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -5
- data/lib/rubocop/cop/lint/empty_when.rb +9 -4
- data/lib/rubocop/cop/lint/ensure_return.rb +20 -10
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +28 -25
- data/lib/rubocop/cop/lint/float_comparison.rb +59 -15
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -12
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
- 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 +22 -12
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -9
- data/lib/rubocop/cop/lint/inherit_exception.rb +53 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +30 -6
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
- data/lib/rubocop/cop/lint/literal_as_condition.rb +133 -12
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +95 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +61 -30
- data/lib/rubocop/cop/lint/loop.rb +6 -12
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +44 -22
- data/lib/rubocop/cop/lint/missing_super.rb +33 -3
- data/lib/rubocop/cop/lint/mixed_case_range.rb +16 -12
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/name_typo.rb +270 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -12
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +8 -25
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +22 -7
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +22 -10
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +10 -10
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +4 -4
- data/lib/rubocop/cop/lint/number_conversion.rb +28 -15
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +2 -3
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +104 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +7 -7
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +18 -6
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +9 -24
- data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
- data/lib/rubocop/cop/lint/raise_exception.rb +30 -11
- data/lib/rubocop/cop/lint/rand_one.rb +1 -5
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +126 -30
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +57 -21
- data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +15 -4
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +12 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +5 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +206 -15
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +20 -10
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -6
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +267 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +9 -3
- data/lib/rubocop/cop/lint/redundant_with_object.rb +10 -2
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +9 -2
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +9 -2
- data/lib/rubocop/cop/lint/require_parentheses.rb +13 -8
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +3 -2
- data/lib/rubocop/cop/lint/require_relative_self_path.rb +7 -5
- data/lib/rubocop/cop/lint/rescue_exception.rb +2 -9
- data/lib/rubocop/cop/lint/rescue_type.rb +6 -12
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +55 -13
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +113 -41
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +7 -3
- data/lib/rubocop/cop/lint/self_assignment.rb +103 -10
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -1
- data/lib/rubocop/cop/lint/shadowed_argument.rb +8 -7
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +40 -12
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +78 -0
- data/lib/rubocop/cop/lint/struct_new_override.rb +29 -13
- data/lib/rubocop/cop/lint/super_argument_mismatch.rb +179 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +122 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +26 -4
- data/lib/rubocop/cop/lint/syntax.rb +35 -5
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +77 -9
- data/lib/rubocop/cop/lint/to_json.rb +20 -17
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +5 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +114 -0
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +68 -15
- data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -8
- data/lib/rubocop/cop/lint/unreachable_pattern_branch.rb +113 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +28 -2
- data/lib/rubocop/cop/lint/unused_private_method.rb +234 -0
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +37 -12
- data/lib/rubocop/cop/lint/useless_assignment.rb +92 -34
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +107 -0
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +92 -0
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
- data/lib/rubocop/cop/lint/useless_or.rb +111 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +3 -4
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +14 -8
- data/lib/rubocop/cop/lint/useless_setter_call.rb +17 -29
- data/lib/rubocop/cop/lint/useless_times.rb +24 -3
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +201 -0
- data/lib/rubocop/cop/lint/void.rb +127 -29
- data/lib/rubocop/cop/lint.rb +178 -0
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
- data/lib/rubocop/cop/metrics/block_length.rb +9 -7
- data/lib/rubocop/cop/metrics/block_nesting.rb +43 -8
- data/lib/rubocop/cop/metrics/class_length.rb +23 -17
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +8 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
- data/lib/rubocop/cop/metrics/method_length.rb +17 -8
- data/lib/rubocop/cop/metrics/module_length.rb +7 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +38 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +5 -4
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +39 -12
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/metrics.rb +31 -0
- data/lib/rubocop/cop/migration/department_name.rb +11 -5
- data/lib/rubocop/cop/migration.rb +13 -0
- data/lib/rubocop/cop/mixin/alignment.rb +8 -4
- data/lib/rubocop/cop/mixin/allowed_methods.rb +12 -6
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +20 -4
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +46 -18
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +47 -0
- data/lib/rubocop/cop/mixin/code_length.rb +12 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +22 -14
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -2
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +11 -6
- 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 +32 -0
- data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +20 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -12
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +33 -15
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +49 -40
- data/lib/rubocop/cop/mixin/hash_subset.rb +210 -0
- data/lib/rubocop/cop/mixin/hash_transform_method/autocorrection.rb +63 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +32 -78
- data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
- data/lib/rubocop/cop/mixin/indexed_method_arity.rb +94 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +61 -14
- data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -12
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +120 -39
- data/lib/rubocop/cop/mixin/project_index_help.rb +188 -0
- data/lib/rubocop/cop/mixin/range_help.rb +16 -6
- data/lib/rubocop/cop/mixin/reparsed_equivalence.rb +171 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +5 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +57 -15
- data/lib/rubocop/cop/mixin/string_help.rb +5 -3
- data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +27 -10
- data/lib/rubocop/cop/mixin.rb +91 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +35 -6
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +17 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +39 -8
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +7 -9
- data/lib/rubocop/cop/naming/file_name.rb +9 -10
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
- data/lib/rubocop/cop/naming/inclusive_language.rb +21 -7
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +25 -19
- data/lib/rubocop/cop/naming/method_name.rb +190 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +330 -0
- data/lib/rubocop/cop/naming/predicate_prefix.rb +232 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +23 -17
- data/lib/rubocop/cop/naming/variable_name.rb +50 -6
- data/lib/rubocop/cop/naming/variable_number.rb +5 -4
- data/lib/rubocop/cop/naming.rb +31 -0
- data/lib/rubocop/cop/offense.rb +56 -14
- data/lib/rubocop/cop/registry.rb +225 -64
- data/lib/rubocop/cop/security/compound_hash.rb +4 -2
- data/lib/rubocop/cop/security/eval.rb +17 -3
- data/lib/rubocop/cop/security/io_methods.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +3 -2
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/security.rb +19 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +184 -33
- data/lib/rubocop/cop/style/accessor_grouping.rb +56 -11
- data/lib/rubocop/cop/style/alias.rb +26 -12
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/and_or.rb +3 -2
- data/lib/rubocop/cop/style/arguments_forwarding.rb +487 -63
- data/lib/rubocop/cop/style/array_first_last.rb +90 -0
- data/lib/rubocop/cop/style/array_intersect.rb +148 -41
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +50 -0
- data/lib/rubocop/cop/style/array_join.rb +4 -2
- data/lib/rubocop/cop/style/ascii_comments.rb +6 -3
- data/lib/rubocop/cop/style/attr.rb +5 -2
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
- data/lib/rubocop/cop/style/bare_percent_literals.rb +4 -3
- data/lib/rubocop/cop/style/begin_block.rb +3 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
- data/lib/rubocop/cop/style/bitwise_predicate.rb +106 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +89 -53
- data/lib/rubocop/cop/style/case_equality.rb +29 -15
- data/lib/rubocop/cop/style/case_like_if.rb +16 -21
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/class_and_module_children.rb +139 -22
- data/lib/rubocop/cop/style/class_check.rb +1 -0
- data/lib/rubocop/cop/style/class_equality_comparison.rb +29 -14
- data/lib/rubocop/cop/style/class_methods_definitions.rb +11 -5
- data/lib/rubocop/cop/style/class_vars.rb +3 -3
- data/lib/rubocop/cop/style/collection_compact.rb +53 -23
- data/lib/rubocop/cop/style/collection_methods.rb +4 -1
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +16 -7
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +29 -9
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +30 -4
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/comparable_clamp.rb +12 -1
- data/lib/rubocop/cop/style/concat_array_literals.rb +11 -5
- data/lib/rubocop/cop/style/conditional_assignment.rb +85 -56
- data/lib/rubocop/cop/style/constant_visibility.rb +21 -23
- data/lib/rubocop/cop/style/copyright.rb +49 -24
- data/lib/rubocop/cop/style/data_inheritance.rb +12 -1
- data/lib/rubocop/cop/style/date_time.rb +8 -7
- data/lib/rubocop/cop/style/def_with_parentheses.rb +22 -7
- data/lib/rubocop/cop/style/dig_chain.rb +94 -0
- data/lib/rubocop/cop/style/dir_empty.rb +4 -0
- data/lib/rubocop/cop/style/directive_scope.rb +171 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +77 -13
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +6 -1
- data/lib/rubocop/cop/style/documentation.rb +76 -29
- data/lib/rubocop/cop/style/documentation_method.rb +24 -0
- data/lib/rubocop/cop/style/double_negation.rb +5 -5
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +12 -16
- data/lib/rubocop/cop/style/each_with_object.rb +5 -4
- data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_case_condition.rb +16 -2
- data/lib/rubocop/cop/style/empty_class_definition.rb +126 -0
- data/lib/rubocop/cop/style/empty_else.rb +10 -7
- data/lib/rubocop/cop/style/empty_heredoc.rb +5 -14
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_literal.rb +43 -25
- data/lib/rubocop/cop/style/empty_method.rb +0 -6
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +110 -0
- data/lib/rubocop/cop/style/encoding.rb +7 -1
- data/lib/rubocop/cop/style/end_block.rb +3 -1
- data/lib/rubocop/cop/style/endless_method.rb +164 -24
- data/lib/rubocop/cop/style/env_home.rb +4 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +23 -31
- data/lib/rubocop/cop/style/even_odd.rb +11 -1
- data/lib/rubocop/cop/style/exact_regexp_match.rb +13 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +19 -6
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
- data/lib/rubocop/cop/style/fetch_env_var.rb +35 -8
- data/lib/rubocop/cop/style/file_null.rb +91 -0
- data/lib/rubocop/cop/style/file_open.rb +84 -0
- data/lib/rubocop/cop/style/file_read.rb +2 -5
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/file_write.rb +23 -21
- data/lib/rubocop/cop/style/float_division.rb +23 -5
- data/lib/rubocop/cop/style/for.rb +7 -2
- data/lib/rubocop/cop/style/format_string.rb +47 -13
- data/lib/rubocop/cop/style/format_string_token.rb +86 -16
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +6 -3
- data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
- data/lib/rubocop/cop/style/global_vars.rb +6 -5
- data/lib/rubocop/cop/style/guard_clause.rb +67 -21
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +27 -9
- data/lib/rubocop/cop/style/hash_conversion.rb +38 -13
- data/lib/rubocop/cop/style/hash_each_methods.rb +109 -12
- data/lib/rubocop/cop/style/hash_except.rb +38 -146
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_lookup_method.rb +102 -0
- data/lib/rubocop/cop/style/hash_slice.rb +96 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
- data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -9
- data/lib/rubocop/cop/style/hash_transform_values.rb +19 -9
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +62 -9
- data/lib/rubocop/cop/style/if_inside_else.rb +26 -22
- data/lib/rubocop/cop/style/if_unless_modifier.rb +72 -47
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +15 -19
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +12 -9
- data/lib/rubocop/cop/style/if_with_semicolon.rb +75 -11
- data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inline_comment.rb +5 -2
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -18
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +71 -9
- data/lib/rubocop/cop/style/ip_addresses.rb +3 -4
- 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 +71 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +20 -10
- data/lib/rubocop/cop/style/lambda.rb +16 -5
- data/lib/rubocop/cop/style/lambda_call.rb +33 -11
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/magic_comment_format.rb +4 -4
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +93 -50
- data/lib/rubocop/cop/style/map_into_array.rb +236 -0
- data/lib/rubocop/cop/style/map_join.rb +123 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +28 -10
- data/lib/rubocop/cop/style/map_to_set.rb +4 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +77 -28
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +15 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +38 -9
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +37 -15
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +8 -6
- data/lib/rubocop/cop/style/min_max_comparison.rb +17 -6
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +75 -12
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +4 -2
- data/lib/rubocop/cop/style/module_member_existence_check.rb +110 -0
- 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_if_then.rb +10 -4
- data/lib/rubocop/cop/style/multiline_memoization.rb +9 -3
- data/lib/rubocop/cop/style/multiline_method_signature.rb +18 -13
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +6 -4
- data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +63 -59
- data/lib/rubocop/cop/style/mutable_constant.rb +117 -19
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +6 -5
- data/lib/rubocop/cop/style/negative_array_index.rb +220 -0
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +8 -15
- data/lib/rubocop/cop/style/next.rb +45 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +12 -10
- data/lib/rubocop/cop/style/nil_lambda.rb +9 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +5 -11
- data/lib/rubocop/cop/style/not.rb +3 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +13 -5
- data/lib/rubocop/cop/style/object_then.rb +16 -14
- data/lib/rubocop/cop/style/one_class_per_file.rb +115 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +50 -16
- data/lib/rubocop/cop/style/open_struct_use.rb +6 -6
- data/lib/rubocop/cop/style/operator_method_call.rb +40 -8
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -0
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +69 -48
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
- data/lib/rubocop/cop/style/partition_instead_of_double_select.rb +270 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +5 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/perl_backrefs.rb +5 -3
- data/lib/rubocop/cop/style/predicate_with_kind.rb +84 -0
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +12 -12
- data/lib/rubocop/cop/style/proc.rb +5 -4
- data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
- data/lib/rubocop/cop/style/raise_args.rb +19 -14
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/reduce_to_hash.rb +200 -0
- data/lib/rubocop/cop/style/redundant_argument.rb +37 -4
- data/lib/rubocop/cop/style/redundant_array_constructor.rb +2 -2
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +21 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +53 -6
- data/lib/rubocop/cop/style/redundant_condition.rb +98 -25
- data/lib/rubocop/cop/style/redundant_conditional.rb +1 -9
- data/lib/rubocop/cop/style/redundant_constant_base.rb +42 -6
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +31 -7
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +88 -5
- data/lib/rubocop/cop/style/redundant_each.rb +11 -9
- data/lib/rubocop/cop/style/redundant_exception.rb +39 -13
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +5 -13
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +10 -1
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +23 -6
- data/lib/rubocop/cop/style/redundant_format.rb +319 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
- data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6 -1
- 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_interpolation_unfreeze.rb +62 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +92 -72
- data/lib/rubocop/cop/style/redundant_min_max_by.rb +93 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +203 -84
- data/lib/rubocop/cop/style/redundant_percent_q.rb +6 -4
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +33 -4
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +20 -24
- data/lib/rubocop/cop/style/redundant_return.rb +20 -8
- data/lib/rubocop/cop/style/redundant_self.rb +43 -22
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +19 -32
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +17 -16
- data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
- data/lib/rubocop/cop/style/redundant_string_escape.rb +4 -5
- data/lib/rubocop/cop/style/redundant_struct_keyword_init.rb +133 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +32 -3
- data/lib/rubocop/cop/style/require_order.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +20 -7
- data/lib/rubocop/cop/style/return_nil.rb +8 -4
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +67 -11
- data/lib/rubocop/cop/style/reverse_find.rb +51 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +176 -66
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/sample.rb +14 -10
- data/lib/rubocop/cop/style/select_by_kind.rb +158 -0
- data/lib/rubocop/cop/style/select_by_range.rb +197 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +62 -26
- data/lib/rubocop/cop/style/self_assignment.rb +13 -19
- data/lib/rubocop/cop/style/semicolon.rb +53 -17
- data/lib/rubocop/cop/style/send.rb +4 -4
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
- data/lib/rubocop/cop/style/single_line_block_params.rb +3 -3
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +90 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +16 -12
- data/lib/rubocop/cop/style/slicing_with_range.rb +105 -10
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +103 -91
- data/lib/rubocop/cop/style/special_global_vars.rb +8 -4
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -1
- data/lib/rubocop/cop/style/static_class.rb +21 -0
- data/lib/rubocop/cop/style/string_chars.rb +1 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +34 -17
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -0
- data/lib/rubocop/cop/style/string_literals.rb +1 -1
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/strip.rb +7 -4
- data/lib/rubocop/cop/style/struct_inheritance.rb +25 -3
- data/lib/rubocop/cop/style/super_arguments.rb +220 -0
- data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/symbol_array.rb +35 -15
- data/lib/rubocop/cop/style/symbol_proc.rb +86 -14
- data/lib/rubocop/cop/style/tally_method.rb +181 -0
- data/lib/rubocop/cop/style/ternary_parentheses.rb +37 -5
- data/lib/rubocop/cop/style/time_now.rb +41 -0
- data/lib/rubocop/cop/style/top_level_method_definition.rb +4 -3
- 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 +2 -2
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +21 -22
- data/lib/rubocop/cop/style/trivial_accessors.rb +3 -3
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/unless_logical_operators.rb +3 -3
- data/lib/rubocop/cop/style/unpack_first.rb +11 -14
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/while_until_do.rb +7 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +16 -2
- data/lib/rubocop/cop/style/word_array.rb +1 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +12 -7
- data/lib/rubocop/cop/style/yoda_expression.rb +11 -9
- data/lib/rubocop/cop/style/zero_length_predicate.rb +38 -27
- data/lib/rubocop/cop/style.rb +312 -0
- data/lib/rubocop/cop/team.rb +188 -46
- data/lib/rubocop/cop/util.rb +23 -13
- data/lib/rubocop/cop/utils/format_string.rb +20 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +35 -7
- data/lib/rubocop/cop/variable_force/branch.rb +31 -7
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +32 -10
- data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
- data/lib/rubocop/cop/variable_force.rb +43 -20
- data/lib/rubocop/cops_documentation_generator.rb +137 -63
- data/lib/rubocop/core_ext/string.rb +2 -6
- data/lib/rubocop/directive_comment.rb +135 -19
- data/lib/rubocop/ext/regexp_node.rb +17 -35
- data/lib/rubocop/ext/regexp_parser.rb +4 -21
- data/lib/rubocop/feature_loader.rb +0 -6
- data/lib/rubocop/file_finder.rb +11 -9
- data/lib/rubocop/file_patterns.rb +9 -1
- data/lib/rubocop/formatter/clang_style_formatter.rb +8 -9
- data/lib/rubocop/formatter/disabled_config_formatter.rb +62 -22
- data/lib/rubocop/formatter/emacs_style_formatter.rb +3 -1
- data/lib/rubocop/formatter/formatter_set.rb +10 -4
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +38 -17
- data/lib/rubocop/formatter/json_formatter.rb +11 -7
- data/lib/rubocop/formatter/junit_formatter.rb +94 -30
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +14 -5
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +4 -5
- data/lib/rubocop/formatter/tap_formatter.rb +11 -10
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -3
- data/lib/rubocop/formatter.rb +22 -21
- data/lib/rubocop/lockfile.rb +76 -7
- data/lib/rubocop/lsp/diagnostic.rb +170 -0
- data/lib/rubocop/lsp/disable_comment_edits.rb +135 -0
- data/lib/rubocop/lsp/logger.rb +3 -3
- data/lib/rubocop/lsp/routes.rb +163 -56
- data/lib/rubocop/lsp/runtime.rb +47 -44
- data/lib/rubocop/lsp/server.rb +18 -6
- data/lib/rubocop/lsp/severity.rb +1 -1
- data/lib/rubocop/lsp/stdin_runner.rb +96 -0
- data/lib/rubocop/lsp.rb +36 -0
- data/lib/rubocop/magic_comment.rb +44 -14
- data/lib/rubocop/mcp/server.rb +199 -0
- data/lib/rubocop/options.rb +88 -32
- data/lib/rubocop/path_util.rb +33 -11
- data/lib/rubocop/pending_cops_reporter.rb +51 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +146 -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/project_index_loader.rb +82 -0
- data/lib/rubocop/rake_task.rb +7 -5
- data/lib/rubocop/remote_config.rb +15 -9
- data/lib/rubocop/result_cache.rb +85 -61
- data/lib/rubocop/rspec/cop_helper.rb +28 -2
- data/lib/rubocop/rspec/expect_offense.rb +29 -12
- data/lib/rubocop/rspec/shared_contexts.rb +165 -24
- data/lib/rubocop/rspec/support.rb +8 -2
- data/lib/rubocop/runner.rb +273 -99
- data/lib/rubocop/server/cache.rb +76 -42
- data/lib/rubocop/server/cli.rb +2 -4
- data/lib/rubocop/server/client_command/base.rb +10 -0
- data/lib/rubocop/server/client_command/exec.rb +4 -4
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/server/core.rb +13 -0
- data/lib/rubocop/server/server_command/exec.rb +0 -1
- data/lib/rubocop/server.rb +14 -0
- data/lib/rubocop/string_interpreter.rb +3 -3
- data/lib/rubocop/target_finder.rb +111 -86
- data/lib/rubocop/target_ruby.rb +131 -89
- data/lib/rubocop/todo_audit.rb +111 -0
- data/lib/rubocop/version.rb +84 -10
- data/lib/rubocop/yaml_duplication_checker.rb +20 -26
- data/lib/rubocop.rb +33 -648
- data/lib/ruby_lsp/rubocop/addon.rb +89 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +169 -50
- data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -100
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
- /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
data/lib/rubocop/options.rb
CHANGED
|
@@ -16,7 +16,9 @@ module RuboCop
|
|
|
16
16
|
'root of the project. RuboCop will use this path to determine which ' \
|
|
17
17
|
'cops are enabled (via eg. Include/Exclude), and so that certain cops ' \
|
|
18
18
|
'like Naming/FileName can be checked.'
|
|
19
|
-
EXITING_OPTIONS = %i[
|
|
19
|
+
EXITING_OPTIONS = %i[
|
|
20
|
+
version verbose_version show_cops list_enabled_cops_for show_docs_url lsp mcp
|
|
21
|
+
].freeze
|
|
20
22
|
DEFAULT_MAXIMUM_EXCLUSION_ITEMS = 15
|
|
21
23
|
|
|
22
24
|
def initialize
|
|
@@ -49,7 +51,7 @@ module RuboCop
|
|
|
49
51
|
|
|
50
52
|
private
|
|
51
53
|
|
|
52
|
-
# rubocop:disable Metrics/AbcSize
|
|
54
|
+
# rubocop:disable-next Metrics/AbcSize
|
|
53
55
|
def define_options
|
|
54
56
|
OptionParser.new do |opts|
|
|
55
57
|
opts.banner = rainbow.wrap('Usage: rubocop [options] [file1, file2, ...]').bright
|
|
@@ -57,6 +59,7 @@ module RuboCop
|
|
|
57
59
|
add_check_options(opts)
|
|
58
60
|
add_cache_options(opts)
|
|
59
61
|
add_lsp_option(opts)
|
|
62
|
+
add_mcp_option(opts)
|
|
60
63
|
add_server_options(opts)
|
|
61
64
|
add_output_options(opts)
|
|
62
65
|
add_autocorrection_options(opts)
|
|
@@ -68,7 +71,6 @@ module RuboCop
|
|
|
68
71
|
add_profile_options(opts) if RUBY_ENGINE == 'ruby' && !Platform.windows?
|
|
69
72
|
end
|
|
70
73
|
end
|
|
71
|
-
# rubocop:enable Metrics/AbcSize
|
|
72
74
|
|
|
73
75
|
def add_check_options(opts) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
74
76
|
section(opts, 'Basic Options') do # rubocop:disable Metrics/BlockLength
|
|
@@ -88,6 +90,8 @@ module RuboCop
|
|
|
88
90
|
option(opts, '-F', '--fail-fast')
|
|
89
91
|
option(opts, '--disable-pending-cops')
|
|
90
92
|
option(opts, '--enable-pending-cops')
|
|
93
|
+
option(opts, '--disable-all-cops')
|
|
94
|
+
option(opts, '--enable-all-cops')
|
|
91
95
|
option(opts, '--ignore-disable-comments')
|
|
92
96
|
option(opts, '--force-exclusion')
|
|
93
97
|
option(opts, '--only-recognized-file-types')
|
|
@@ -95,6 +99,7 @@ module RuboCop
|
|
|
95
99
|
option(opts, '--ignore-unrecognized-cops')
|
|
96
100
|
option(opts, '--force-default-config')
|
|
97
101
|
option(opts, '-s', '--stdin FILE')
|
|
102
|
+
option(opts, '--editor-mode')
|
|
98
103
|
option(opts, '-P', '--[no-]parallel')
|
|
99
104
|
option(opts, '--raise-cop-error')
|
|
100
105
|
add_severity_option(opts)
|
|
@@ -126,6 +131,7 @@ module RuboCop
|
|
|
126
131
|
option(opts, '--display-only-fail-level-offenses')
|
|
127
132
|
option(opts, '--display-only-correctable')
|
|
128
133
|
option(opts, '--display-only-safe-correctable')
|
|
134
|
+
option(opts, '--display-suppressed')
|
|
129
135
|
end
|
|
130
136
|
end
|
|
131
137
|
|
|
@@ -167,6 +173,8 @@ module RuboCop
|
|
|
167
173
|
@options.replace(ConfigRegeneration.new.options.merge(@options))
|
|
168
174
|
end
|
|
169
175
|
|
|
176
|
+
option(opts, '--report-unused-todo-entries')
|
|
177
|
+
|
|
170
178
|
option(opts, '--exclude-limit COUNT') { @validator.validate_exclude_limit_option }
|
|
171
179
|
option(opts, '--no-exclude-limit')
|
|
172
180
|
|
|
@@ -214,6 +222,12 @@ module RuboCop
|
|
|
214
222
|
end
|
|
215
223
|
end
|
|
216
224
|
|
|
225
|
+
def add_mcp_option(opts)
|
|
226
|
+
section(opts, 'MCP Option') do
|
|
227
|
+
option(opts, '--mcp')
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
217
231
|
def add_server_options(opts)
|
|
218
232
|
section(opts, 'Server Options') do
|
|
219
233
|
option(opts, '--[no-]server')
|
|
@@ -228,6 +242,7 @@ module RuboCop
|
|
|
228
242
|
def add_additional_modes(opts)
|
|
229
243
|
section(opts, 'Additional Modes') do
|
|
230
244
|
option(opts, '-L', '--list-target-files')
|
|
245
|
+
option(opts, '--list-enabled-cops-for PATH')
|
|
231
246
|
option(opts, '--show-cops [COP1,COP2,...]') do |list|
|
|
232
247
|
@options[:show_cops] = list.nil? ? [] : list.split(',')
|
|
233
248
|
end
|
|
@@ -242,6 +257,7 @@ module RuboCop
|
|
|
242
257
|
option(opts, '--init')
|
|
243
258
|
option(opts, '-c', '--config FILE')
|
|
244
259
|
option(opts, '-d', '--debug')
|
|
260
|
+
option(opts, '--plugin FILE') { |f| plugin_feature(f) }
|
|
245
261
|
option(opts, '-r', '--require FILE') { |f| require_feature(f) }
|
|
246
262
|
option(opts, '--[no-]color')
|
|
247
263
|
option(opts, '-v', '--version')
|
|
@@ -298,11 +314,25 @@ module RuboCop
|
|
|
298
314
|
long_opt[2..].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
|
|
299
315
|
end
|
|
300
316
|
|
|
301
|
-
def
|
|
302
|
-
# If any features were added on the CLI from `--
|
|
317
|
+
def plugin_feature(file)
|
|
318
|
+
# If any features were added on the CLI from `--plugin`,
|
|
303
319
|
# add them to the config.
|
|
304
|
-
|
|
305
|
-
|
|
320
|
+
ConfigLoaderResolver.new.resolve_plugins(Config.new, file)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
def require_feature(file)
|
|
324
|
+
if Plugin.plugin_capable?(file)
|
|
325
|
+
# NOTE: Compatibility for before plugins style.
|
|
326
|
+
warn Rainbow(<<~MESSAGE).yellow
|
|
327
|
+
#{file} gem supports plugin, use `--plugin` instead of `--require`.
|
|
328
|
+
MESSAGE
|
|
329
|
+
plugin_feature(file)
|
|
330
|
+
else
|
|
331
|
+
# If any features were added on the CLI from `--require`,
|
|
332
|
+
# add them to the config.
|
|
333
|
+
require file
|
|
334
|
+
ConfigLoader.add_loaded_features(file)
|
|
335
|
+
end
|
|
306
336
|
end
|
|
307
337
|
end
|
|
308
338
|
|
|
@@ -354,7 +384,7 @@ module RuboCop
|
|
|
354
384
|
%i[only except].each { |opt| OptionsValidator.validate_cop_list(@options[opt]) }
|
|
355
385
|
end
|
|
356
386
|
|
|
357
|
-
# rubocop:disable Metrics/AbcSize
|
|
387
|
+
# rubocop:disable-next Metrics/AbcSize
|
|
358
388
|
def validate_compatibility # rubocop:disable Metrics/MethodLength
|
|
359
389
|
if only_includes_redundant_disable?
|
|
360
390
|
raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot be used with --only.'
|
|
@@ -364,22 +394,19 @@ module RuboCop
|
|
|
364
394
|
raise OptionArgumentError, '-C/--cache argument must be true or false'
|
|
365
395
|
end
|
|
366
396
|
|
|
367
|
-
if display_only_fail_level_offenses_with_autocorrect?
|
|
368
|
-
raise OptionArgumentError, '--autocorrect cannot be used with ' \
|
|
369
|
-
'--display-only-fail-level-offenses.'
|
|
370
|
-
end
|
|
371
397
|
validate_auto_gen_config
|
|
372
398
|
validate_autocorrect
|
|
373
399
|
validate_display_only_failed
|
|
374
400
|
validate_display_only_failed_and_display_only_correctable
|
|
375
401
|
validate_display_only_correctable_and_autocorrect
|
|
402
|
+
validate_lsp_and_editor_mode
|
|
403
|
+
validate_enable_all_cops_and_disable_all_cops
|
|
376
404
|
disable_parallel_when_invalid_option_combo
|
|
377
405
|
|
|
378
406
|
return if incompatible_options.size <= 1
|
|
379
407
|
|
|
380
408
|
raise OptionArgumentError, "Incompatible cli options: #{incompatible_options.inspect}"
|
|
381
409
|
end
|
|
382
|
-
# rubocop:enable Metrics/AbcSize
|
|
383
410
|
|
|
384
411
|
def validate_auto_gen_config
|
|
385
412
|
return if @options.key?(:auto_gen_config)
|
|
@@ -399,7 +426,7 @@ module RuboCop
|
|
|
399
426
|
return if @options[:format] == 'junit'
|
|
400
427
|
|
|
401
428
|
raise OptionArgumentError,
|
|
402
|
-
|
|
429
|
+
'--display-only-failed can only be used together with --format junit.'
|
|
403
430
|
end
|
|
404
431
|
|
|
405
432
|
def validate_display_only_correctable_and_autocorrect
|
|
@@ -417,7 +444,20 @@ module RuboCop
|
|
|
417
444
|
!@options.key?(:display_only_safe_correctable)
|
|
418
445
|
|
|
419
446
|
raise OptionArgumentError,
|
|
420
|
-
|
|
447
|
+
'--display-only-failed cannot be used together with other display options.'
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
def validate_lsp_and_editor_mode
|
|
451
|
+
return if !@options.key?(:lsp) || !@options.key?(:editor_mode)
|
|
452
|
+
|
|
453
|
+
raise OptionArgumentError, 'Do not specify `--editor-mode` as it is redundant in `--lsp`.'
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
def validate_enable_all_cops_and_disable_all_cops
|
|
457
|
+
return if !@options.key?(:enable_all_cops) || !@options.key?(:disable_all_cops)
|
|
458
|
+
|
|
459
|
+
raise OptionArgumentError,
|
|
460
|
+
'--enable-all-cops cannot be used together with --disable-all-cops.'
|
|
421
461
|
end
|
|
422
462
|
|
|
423
463
|
def validate_autocorrect
|
|
@@ -431,7 +471,7 @@ module RuboCop
|
|
|
431
471
|
return unless @options.key?(:disable_uncorrectable)
|
|
432
472
|
|
|
433
473
|
raise OptionArgumentError,
|
|
434
|
-
|
|
474
|
+
'--disable-uncorrectable can only be used together with --autocorrect.'
|
|
435
475
|
end
|
|
436
476
|
|
|
437
477
|
def disable_parallel_when_invalid_option_combo
|
|
@@ -448,8 +488,7 @@ module RuboCop
|
|
|
448
488
|
end
|
|
449
489
|
|
|
450
490
|
def invalid_arguments_for_parallel
|
|
451
|
-
[('
|
|
452
|
-
('-F/--fail-fast' if @options.key?(:fail_fast)),
|
|
491
|
+
[('-F/--fail-fast' if @options.key?(:fail_fast)),
|
|
453
492
|
('--profile' if @options[:profile]),
|
|
454
493
|
('--memory' if @options[:memory]),
|
|
455
494
|
('--cache false' if @options > { cache: 'false' })].compact
|
|
@@ -460,10 +499,6 @@ module RuboCop
|
|
|
460
499
|
(@options[:only] & %w[Lint/RedundantCopDisableDirective RedundantCopDisableDirective]).any?
|
|
461
500
|
end
|
|
462
501
|
|
|
463
|
-
def display_only_fail_level_offenses_with_autocorrect?
|
|
464
|
-
@options.key?(:display_only_fail_level_offenses) && @options.key?(:autocorrect)
|
|
465
|
-
end
|
|
466
|
-
|
|
467
502
|
def except_syntax?
|
|
468
503
|
@options.key?(:except) && (@options[:except] & %w[Lint/Syntax Syntax]).any?
|
|
469
504
|
end
|
|
@@ -493,7 +528,7 @@ module RuboCop
|
|
|
493
528
|
|
|
494
529
|
# This module contains help texts for command line options.
|
|
495
530
|
# @api private
|
|
496
|
-
# rubocop:disable Metrics/ModuleLength
|
|
531
|
+
# rubocop:disable-next Metrics/ModuleLength
|
|
497
532
|
module OptionsHelp
|
|
498
533
|
MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
|
|
499
534
|
FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
|
|
@@ -503,6 +538,7 @@ module RuboCop
|
|
|
503
538
|
only_guide_cops: ['Run only cops for rules that link to a',
|
|
504
539
|
'style guide.'],
|
|
505
540
|
except: 'Exclude the given cop(s).',
|
|
541
|
+
plugin: 'Load a RuboCop plugin.',
|
|
506
542
|
require: 'Require Ruby file.',
|
|
507
543
|
config: 'Specify configuration file.',
|
|
508
544
|
auto_gen_config: ['Generate a configuration file acting as a',
|
|
@@ -510,6 +546,8 @@ module RuboCop
|
|
|
510
546
|
regenerate_todo: ['Regenerate the TODO configuration file using',
|
|
511
547
|
'the last configuration. If there is no existing',
|
|
512
548
|
'TODO file, acts like --auto-gen-config.'],
|
|
549
|
+
report_unused_todo_entries: ['Also report TODO configuration file entries that',
|
|
550
|
+
'are no longer needed, and fail if any are found.'],
|
|
513
551
|
offense_counts: ['Include offense counts in configuration',
|
|
514
552
|
'file generated by --auto-gen-config.',
|
|
515
553
|
'Default is true.'],
|
|
@@ -541,8 +579,8 @@ module RuboCop
|
|
|
541
579
|
only_recognized_file_types: ['Inspect files given on the command line only if',
|
|
542
580
|
'they are listed in `AllCops/Include` parameters',
|
|
543
581
|
'of user configuration or default configuration.'],
|
|
544
|
-
ignore_disable_comments: ['
|
|
545
|
-
'
|
|
582
|
+
ignore_disable_comments: ['Report offenses even if they have been manually disabled',
|
|
583
|
+
'with a `rubocop:disable` or `rubocop:todo` directive.'],
|
|
546
584
|
ignore_parent_exclusion: ['Prevent from inheriting `AllCops/Exclude` from',
|
|
547
585
|
'parent folders.'],
|
|
548
586
|
ignore_unrecognized_cops: ['Ignore unrecognized cops or departments in the config.'],
|
|
@@ -572,13 +610,16 @@ module RuboCop
|
|
|
572
610
|
'cops. Only valid for --format junit.'],
|
|
573
611
|
display_only_fail_level_offenses:
|
|
574
612
|
['Only output offense messages at',
|
|
575
|
-
'the specified --fail-level or above'],
|
|
613
|
+
'the specified --fail-level or above.'],
|
|
576
614
|
display_only_correctable: ['Only output correctable offense messages.'],
|
|
577
615
|
display_only_safe_correctable: ['Only output safe-correctable offense messages',
|
|
578
616
|
'when combined with --display-only-correctable.'],
|
|
579
|
-
|
|
617
|
+
display_suppressed: ['Also output offenses suppressed by directive',
|
|
618
|
+
'comments. They do not affect the exit code.'],
|
|
619
|
+
show_cops: ['Show the given cops, or all cops by',
|
|
580
620
|
'default, and their configurations for the',
|
|
581
|
-
'current directory.'
|
|
621
|
+
'current directory.',
|
|
622
|
+
'You can use `*` as a wildcard.'],
|
|
582
623
|
show_docs_url: ['Display url to documentation for the given',
|
|
583
624
|
'cops, or base url by default.'],
|
|
584
625
|
fail_fast: ['Inspect files in order of modification',
|
|
@@ -595,8 +636,16 @@ module RuboCop
|
|
|
595
636
|
display_cop_names: ['Display cop names in offense messages.',
|
|
596
637
|
'Default is true.'],
|
|
597
638
|
disable_pending_cops: 'Run without pending cops.',
|
|
639
|
+
disable_all_cops: ['Run with all cops disabled by default,',
|
|
640
|
+
'except `Lint/Syntax`. Overrides',
|
|
641
|
+
'`AllCops/EnabledByDefault` and',
|
|
642
|
+
'`AllCops/DisabledByDefault` in config files.'],
|
|
598
643
|
display_style_guide: 'Display style guide URLs in offense messages.',
|
|
599
644
|
enable_pending_cops: 'Run with pending cops.',
|
|
645
|
+
enable_all_cops: ['Run with all cops enabled, including those',
|
|
646
|
+
'disabled by default. Overrides',
|
|
647
|
+
'`AllCops/EnabledByDefault` and',
|
|
648
|
+
'`AllCops/DisabledByDefault` in config files.'],
|
|
600
649
|
extra_details: 'Display extra details in offense messages.',
|
|
601
650
|
lint: 'Run only lint cops.',
|
|
602
651
|
safe: 'Run only safe cops.',
|
|
@@ -604,6 +653,8 @@ module RuboCop
|
|
|
604
653
|
'autocorrected source. This is especially useful',
|
|
605
654
|
'when combined with --autocorrect and --stdin.'],
|
|
606
655
|
list_target_files: 'List all files RuboCop will inspect.',
|
|
656
|
+
list_enabled_cops_for: ['List which cops will inspect a given file or',
|
|
657
|
+
'directory.'],
|
|
607
658
|
autocorrect: 'Autocorrect offenses (only when it\'s safe).',
|
|
608
659
|
auto_correct: '(same, deprecated)',
|
|
609
660
|
safe_auto_correct: '(same, deprecated)',
|
|
@@ -614,9 +665,13 @@ module RuboCop
|
|
|
614
665
|
version: 'Display version.',
|
|
615
666
|
verbose_version: 'Display verbose version.',
|
|
616
667
|
parallel: ['Use available CPUs to execute inspection in',
|
|
617
|
-
'parallel. Default is true.'
|
|
668
|
+
'parallel. Default is true.',
|
|
669
|
+
'You can specify the number of parallel processes using',
|
|
670
|
+
'the $PARALLEL_PROCESSOR_COUNT environment variable.'],
|
|
618
671
|
stdin: ['Pipe source from STDIN, using FILE in offense',
|
|
619
672
|
'reports. This is useful for editor integration.'],
|
|
673
|
+
editor_mode: ['Optimize real-time feedback in editors,',
|
|
674
|
+
'adjusting behaviors for editing experience.'],
|
|
620
675
|
init: 'Generate a .rubocop.yml file in the current directory.',
|
|
621
676
|
server: ['If a server process has not been started yet, start',
|
|
622
677
|
'the server process and execute inspection with server.',
|
|
@@ -630,12 +685,13 @@ module RuboCop
|
|
|
630
685
|
server_status: 'Show server status.',
|
|
631
686
|
no_detach: 'Run the server process in the foreground.',
|
|
632
687
|
lsp: 'Start a language server listening on STDIN.',
|
|
688
|
+
mcp: ['Start an MCP (Model Context Protocol) server that',
|
|
689
|
+
'communicates over stdio.'],
|
|
633
690
|
raise_cop_error: ['Raise cop-related errors with cause and location.',
|
|
634
691
|
'This is used to prevent cops from failing silently.',
|
|
635
692
|
'Default is false.'],
|
|
636
|
-
profile: 'Profile rubocop',
|
|
637
|
-
memory: 'Profile rubocop memory usage'
|
|
693
|
+
profile: 'Profile rubocop.',
|
|
694
|
+
memory: 'Profile rubocop memory usage.'
|
|
638
695
|
}.freeze
|
|
639
696
|
end
|
|
640
|
-
# rubocop:enable Metrics/ModuleLength
|
|
641
697
|
end
|
data/lib/rubocop/path_util.rb
CHANGED
|
@@ -10,7 +10,19 @@ module RuboCop
|
|
|
10
10
|
|
|
11
11
|
module_function
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
# Returns the current working directory, cached for the duration of a run.
|
|
14
|
+
# Dir.pwd is a syscall; caching it avoids repeated overhead since RuboCop
|
|
15
|
+
# never changes the working directory during a run.
|
|
16
|
+
def pwd
|
|
17
|
+
@pwd ||= Dir.pwd
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Reset the cached pwd. Only needed in tests that use Dir.chdir.
|
|
21
|
+
def reset_pwd
|
|
22
|
+
@pwd = nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def relative_path(path, base_dir = PathUtil.pwd)
|
|
14
26
|
PathUtil.relative_paths_cache[base_dir][path] ||=
|
|
15
27
|
# Optimization for the common case where path begins with the base
|
|
16
28
|
# dir. Just cut off the first part.
|
|
@@ -28,23 +40,30 @@ module RuboCop
|
|
|
28
40
|
end
|
|
29
41
|
end
|
|
30
42
|
|
|
43
|
+
def remote_file?(uri)
|
|
44
|
+
uri.start_with?('http://', 'https://')
|
|
45
|
+
end
|
|
46
|
+
|
|
31
47
|
SMART_PATH_CACHE = {} # rubocop:disable Style/MutableConstant
|
|
32
48
|
private_constant :SMART_PATH_CACHE
|
|
33
49
|
|
|
34
50
|
def smart_path(path)
|
|
35
|
-
SMART_PATH_CACHE[path] ||=
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if path.start_with? base_dir
|
|
40
|
-
relative_path(path, base_dir)
|
|
51
|
+
SMART_PATH_CACHE[path] ||=
|
|
52
|
+
if path.is_a?(RemoteConfig)
|
|
53
|
+
path.uri.to_s
|
|
41
54
|
else
|
|
42
|
-
|
|
55
|
+
# Ideally, we calculate this relative to the project root.
|
|
56
|
+
base_dir = PathUtil.pwd
|
|
57
|
+
|
|
58
|
+
if path.start_with? base_dir
|
|
59
|
+
relative_path(path, base_dir)
|
|
60
|
+
else
|
|
61
|
+
path
|
|
62
|
+
end
|
|
43
63
|
end
|
|
44
|
-
end
|
|
45
64
|
end
|
|
46
65
|
|
|
47
|
-
# rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity
|
|
66
|
+
# rubocop:disable-next Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
48
67
|
def match_path?(pattern, path)
|
|
49
68
|
case pattern
|
|
50
69
|
when String
|
|
@@ -52,6 +71,10 @@ module RuboCop
|
|
|
52
71
|
if pattern == path
|
|
53
72
|
true
|
|
54
73
|
elsif glob?(pattern)
|
|
74
|
+
# File name matching doesn't really work with relative patterns that start with "..". We
|
|
75
|
+
# get around that problem by converting the pattern to an absolute path.
|
|
76
|
+
pattern = File.expand_path(pattern) if pattern.start_with?('..')
|
|
77
|
+
|
|
55
78
|
File.fnmatch?(pattern, path, File::FNM_PATHNAME | File::FNM_EXTGLOB)
|
|
56
79
|
end
|
|
57
80
|
|
|
@@ -66,7 +89,6 @@ module RuboCop
|
|
|
66
89
|
end
|
|
67
90
|
end
|
|
68
91
|
end
|
|
69
|
-
# rubocop:enable Metrics/MethodLength, Metrics/CyclomaticComplexity
|
|
70
92
|
|
|
71
93
|
# Returns true for an absolute Unix or Windows path.
|
|
72
94
|
def absolute?(path)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
# Reports information about pending cops that are not explicitly configured.
|
|
5
|
+
#
|
|
6
|
+
# This class is responsible for displaying warnings when new cops have been added to RuboCop
|
|
7
|
+
# but have not yet been enabled or disabled in the user's configuration.
|
|
8
|
+
# It provides a centralized way to determine whether such warnings should be shown,
|
|
9
|
+
# based on global flags or configuration settings.
|
|
10
|
+
class PendingCopsReporter
|
|
11
|
+
class << self
|
|
12
|
+
PENDING_BANNER = <<~BANNER
|
|
13
|
+
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.
|
|
14
|
+
|
|
15
|
+
Please also note that you can opt-in to new cops by default by adding this to your config:
|
|
16
|
+
AllCops:
|
|
17
|
+
NewCops: enable
|
|
18
|
+
BANNER
|
|
19
|
+
|
|
20
|
+
attr_accessor :disable_pending_cops, :enable_pending_cops
|
|
21
|
+
|
|
22
|
+
def warn_if_needed(config)
|
|
23
|
+
return if disable_pending_cops || enable_pending_cops
|
|
24
|
+
|
|
25
|
+
pending_cops = pending_cops_only_qualified(config.pending_cops)
|
|
26
|
+
warn_on_pending_cops(pending_cops) unless pending_cops.empty?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def pending_cops_only_qualified(pending_cops)
|
|
32
|
+
pending_cops.select { |cop| Cop::Registry.qualified_cop?(cop.name) }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def warn_on_pending_cops(pending_cops)
|
|
36
|
+
warn Rainbow(PENDING_BANNER).yellow
|
|
37
|
+
|
|
38
|
+
pending_cops.each { |cop| warn_pending_cop cop }
|
|
39
|
+
|
|
40
|
+
warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def warn_pending_cop(cop)
|
|
44
|
+
version = cop.metadata['VersionAdded'] || 'N/A'
|
|
45
|
+
|
|
46
|
+
warn Rainbow("#{cop.name}: # new in #{version}").yellow
|
|
47
|
+
warn Rainbow(' Enabled: true').yellow
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'lint_roller/context'
|
|
4
|
+
require_relative 'not_supported_error'
|
|
5
|
+
|
|
6
|
+
module RuboCop
|
|
7
|
+
module Plugin
|
|
8
|
+
# A class for integrating plugin configurations into RuboCop.
|
|
9
|
+
# Handles configuration merging, validation, and compatibility for plugins.
|
|
10
|
+
# @api private
|
|
11
|
+
class ConfigurationIntegrator
|
|
12
|
+
class << self
|
|
13
|
+
def integrate_plugins_into_rubocop_config(rubocop_config, plugins)
|
|
14
|
+
default_config = ConfigLoader.default_configuration
|
|
15
|
+
runner_context = create_context(rubocop_config)
|
|
16
|
+
|
|
17
|
+
validate_plugins!(plugins, runner_context)
|
|
18
|
+
|
|
19
|
+
plugin_config = combine_rubocop_configs(default_config, runner_context, plugins).to_h
|
|
20
|
+
|
|
21
|
+
merge_plugin_config_into_all_cops!(default_config, plugin_config)
|
|
22
|
+
merge_plugin_config_into_default_config!(default_config, plugin_config)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def create_context(rubocop_config)
|
|
28
|
+
LintRoller::Context.new(
|
|
29
|
+
runner: :rubocop,
|
|
30
|
+
runner_version: Version.version,
|
|
31
|
+
engine: :rubocop,
|
|
32
|
+
engine_version: Version.version,
|
|
33
|
+
target_ruby_version: rubocop_config.target_ruby_version
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def validate_plugins!(plugins, runner_context)
|
|
38
|
+
unsupported_plugins = plugins.reject { |plugin| plugin.supported?(runner_context) }
|
|
39
|
+
return if unsupported_plugins.none?
|
|
40
|
+
|
|
41
|
+
raise Plugin::NotSupportedError, unsupported_plugins
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def combine_rubocop_configs(default_config, runner_context, plugins)
|
|
45
|
+
fake_out_rubocop_default_configuration(default_config) do |fake_config|
|
|
46
|
+
all_cop_keys_configured_by_plugins = []
|
|
47
|
+
|
|
48
|
+
plugins.reduce(fake_config) do |combined_config, plugin|
|
|
49
|
+
RuboCop::ConfigLoader.instance_variable_set(:@default_configuration, combined_config)
|
|
50
|
+
|
|
51
|
+
print 'Plugin ' if ConfigLoader.debug
|
|
52
|
+
|
|
53
|
+
plugin_config, plugin_config_path = load_plugin_rubocop_config(plugin, runner_context)
|
|
54
|
+
|
|
55
|
+
plugin_config['AllCops'], all_cop_keys_configured_by_plugins = merge_all_cop_settings(
|
|
56
|
+
combined_config['AllCops'], plugin_config['AllCops'],
|
|
57
|
+
all_cop_keys_configured_by_plugins
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
plugin_config.make_excludes_absolute
|
|
61
|
+
|
|
62
|
+
# `unset_nil: false` keeps `AllCops` keys declared with a nil value by a plugin
|
|
63
|
+
# (e.g. `TargetRailsVersion: ~` of rubocop-rails); `merge_all_cop_settings` above
|
|
64
|
+
# carries such keys into each subsequent plugin's config, where `unset_nil: true`
|
|
65
|
+
# would delete them from the combined configuration.
|
|
66
|
+
ConfigLoader.merge_with_default(plugin_config, plugin_config_path, unset_nil: false)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def merge_plugin_config_into_all_cops!(rubocop_config, plugin_config)
|
|
72
|
+
rubocop_config['AllCops'].merge!(plugin_config['AllCops'])
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def merge_plugin_config_into_default_config!(default_config, plugin_config)
|
|
76
|
+
plugin_config.each do |key, value|
|
|
77
|
+
default_config[key] = if default_config[key].is_a?(Hash)
|
|
78
|
+
resolver.merge(default_config[key], value)
|
|
79
|
+
else
|
|
80
|
+
value
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def fake_out_rubocop_default_configuration(default_config)
|
|
86
|
+
orig_default_config = ConfigLoader.instance_variable_get(:@default_configuration)
|
|
87
|
+
|
|
88
|
+
result = yield default_config
|
|
89
|
+
|
|
90
|
+
ConfigLoader.instance_variable_set(:@default_configuration, orig_default_config)
|
|
91
|
+
|
|
92
|
+
result
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# rubocop:disable-next Metrics/AbcSize
|
|
96
|
+
def load_plugin_rubocop_config(plugin, runner_context)
|
|
97
|
+
rules = plugin.rules(runner_context)
|
|
98
|
+
|
|
99
|
+
case rules.type
|
|
100
|
+
when :path
|
|
101
|
+
[ConfigLoader.load_file(rules.value, check: false), rules.value]
|
|
102
|
+
when :object
|
|
103
|
+
path = plugin.method(:rules).source_location[0]
|
|
104
|
+
[Config.create(rules.value, path, check: true), path]
|
|
105
|
+
when :error
|
|
106
|
+
plugin_name = plugin.about&.name || plugin.inspect
|
|
107
|
+
error_message = rules.value.respond_to?(:message) ? rules.value.message : rules.value
|
|
108
|
+
|
|
109
|
+
raise "Plugin `#{plugin_name}' failed to load with error: #{error_message}"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# This is how we ensure "first-in wins": plugins can override AllCops settings that are
|
|
114
|
+
# set by RuboCop's default configuration, but once a plugin sets an AllCop setting, they
|
|
115
|
+
# have exclusive first-in-wins rights to that setting.
|
|
116
|
+
#
|
|
117
|
+
# The one exception to this are array fields, because we don't want to
|
|
118
|
+
# overwrite the AllCops defaults but rather munge the arrays (`existing |
|
|
119
|
+
# new`) to allow plugins to add to the array, for example Include and
|
|
120
|
+
# Exclude paths and patterns.
|
|
121
|
+
def merge_all_cop_settings(existing_all_cops, new_all_cops, already_configured_keys)
|
|
122
|
+
return [existing_all_cops, already_configured_keys] unless new_all_cops.is_a?(Hash)
|
|
123
|
+
|
|
124
|
+
combined_all_cops = existing_all_cops.dup
|
|
125
|
+
combined_configured_keys = already_configured_keys.dup
|
|
126
|
+
|
|
127
|
+
new_all_cops.each do |key, value|
|
|
128
|
+
if combined_all_cops[key].is_a?(Array) && value.is_a?(Array)
|
|
129
|
+
combined_all_cops[key] |= value
|
|
130
|
+
combined_configured_keys |= [key]
|
|
131
|
+
elsif !combined_configured_keys.include?(key)
|
|
132
|
+
combined_all_cops[key] = value
|
|
133
|
+
combined_configured_keys << key
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
[combined_all_cops, combined_configured_keys]
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def resolver
|
|
141
|
+
@resolver ||= ConfigLoaderResolver.new
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Plugin
|
|
5
|
+
# An exception raised when a plugin fails to load.
|
|
6
|
+
# @api private
|
|
7
|
+
class LoadError < Error
|
|
8
|
+
def initialize(plugin_name)
|
|
9
|
+
super
|
|
10
|
+
|
|
11
|
+
@plugin_name = plugin_name
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def message
|
|
15
|
+
<<~MESSAGE
|
|
16
|
+
Failed to load plugin `#{@plugin_name}` because the corresponding plugin class could not be determined for instantiation.
|
|
17
|
+
Try upgrading it first (e.g., `bundle update #{@plugin_name}`).
|
|
18
|
+
If `#{@plugin_name}` is not yet a plugin, use `require: #{@plugin_name}` instead of `plugins: #{@plugin_name}` in your configuration.
|
|
19
|
+
|
|
20
|
+
For further assistance, check with the developer regarding the following points:
|
|
21
|
+
https://docs.rubocop.org/rubocop/plugin_migration_guide.html
|
|
22
|
+
MESSAGE
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|