rubocop 1.71.1 → 1.92.1
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 +886 -168
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +47 -4
- data/exe/rubocop +2 -9
- data/lib/rubocop/cache_config.rb +29 -0
- data/lib/rubocop/cached_data.rb +50 -5
- data/lib/rubocop/changed_files.rb +134 -0
- data/lib/rubocop/cli/command/auto_generate_config.rb +36 -4
- data/lib/rubocop/cli/command/cop_names.rb +57 -0
- data/lib/rubocop/cli/command/execute_runner.rb +54 -3
- data/lib/rubocop/cli/command/explain.rb +34 -0
- data/lib/rubocop/cli/command/list_enabled_cops_for.rb +40 -0
- data/lib/rubocop/cli/command/lsp.rb +1 -1
- data/lib/rubocop/cli/command/mcp.rb +19 -0
- data/lib/rubocop/cli/command/show_cops.rb +8 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +8 -10
- data/lib/rubocop/cli/command/suggest_extensions.rb +8 -2
- data/lib/rubocop/cli.rb +59 -17
- data/lib/rubocop/comment_config/directive_range.rb +34 -0
- data/lib/rubocop/comment_config/disable_next.rb +143 -0
- data/lib/rubocop/comment_config/push_pop.rb +55 -0
- data/lib/rubocop/comment_config.rb +98 -45
- data/lib/rubocop/config.rb +137 -19
- data/lib/rubocop/config_finder.rb +1 -1
- data/lib/rubocop/config_loader.rb +75 -49
- data/lib/rubocop/config_loader_resolver.rb +124 -33
- data/lib/rubocop/config_obsoletion/cop_rule.rb +2 -1
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +6 -3
- data/lib/rubocop/config_obsoletion/removed_cop.rb +9 -1
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +47 -3
- data/lib/rubocop/config_store.rb +7 -2
- data/lib/rubocop/config_validator.rb +75 -12
- data/lib/rubocop/cop/autocorrect_logic.rb +43 -17
- data/lib/rubocop/cop/badge.rb +10 -2
- data/lib/rubocop/cop/base.rb +128 -35
- data/lib/rubocop/cop/bundler/gem_comment.rb +5 -4
- data/lib/rubocop/cop/bundler/gem_version.rb +28 -28
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -11
- data/lib/rubocop/cop/bundler.rb +19 -0
- data/lib/rubocop/cop/commissioner.rb +13 -11
- data/lib/rubocop/cop/cop_documentation.rb +81 -0
- data/lib/rubocop/cop/cop_explanation.rb +140 -0
- data/lib/rubocop/cop/corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +92 -11
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +37 -7
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -2
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +31 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +35 -5
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +73 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors.rb +28 -0
- data/lib/rubocop/cop/documentation.rb +3 -4
- data/lib/rubocop/cop/exclude_limit.rb +31 -5
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/dependency_version.rb +0 -6
- data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +49 -17
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -9
- data/lib/rubocop/cop/gemspec/require_mfa.rb +22 -5
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +12 -7
- data/lib/rubocop/cop/gemspec.rb +22 -0
- data/lib/rubocop/cop/generator/registration_injector.rb +188 -0
- data/lib/rubocop/cop/generator.rb +5 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
- 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_line_equality_comparison.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +16 -20
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +6 -2
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
- data/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb +1 -7
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +5 -3
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -7
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +13 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +4 -4
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +3 -16
- data/lib/rubocop/cop/layout/argument_alignment.rb +9 -3
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +86 -4
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +28 -10
- data/lib/rubocop/cop/layout/class_structure.rb +191 -41
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +17 -7
- data/lib/rubocop/cop/layout/condition_position.rb +13 -3
- data/lib/rubocop/cop/layout/def_end_alignment.rb +5 -1
- data/lib/rubocop/cop/layout/dot_position.rb +27 -17
- data/lib/rubocop/cop/layout/else_alignment.rb +3 -15
- data/lib/rubocop/cop/layout/empty_comment.rb +8 -10
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +27 -9
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +63 -5
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +21 -8
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +46 -21
- data/lib/rubocop/cop/layout/empty_lines.rb +5 -2
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +34 -4
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +2 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +22 -5
- 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 +23 -1
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +22 -2
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +16 -2
- data/lib/rubocop/cop/layout/end_alignment.rb +23 -15
- data/lib/rubocop/cop/layout/extra_spacing.rb +109 -3
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +82 -3
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +18 -5
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +41 -0
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +36 -23
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +25 -25
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +6 -0
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +4 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +11 -0
- data/lib/rubocop/cop/layout/hash_alignment.rb +20 -18
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +9 -5
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +48 -3
- data/lib/rubocop/cop/layout/indentation_consistency.rb +22 -5
- data/lib/rubocop/cop/layout/indentation_style.rb +5 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +159 -12
- data/lib/rubocop/cop/layout/leading_comment_space.rb +40 -1
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +10 -4
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +25 -9
- data/lib/rubocop/cop/layout/line_length.rb +300 -31
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +69 -57
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +8 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +11 -1
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +65 -56
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +7 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +270 -40
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +4 -0
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +9 -5
- data/lib/rubocop/cop/layout/parameter_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/redundant_line_break.rb +111 -7
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +29 -9
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +10 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -10
- data/lib/rubocop/cop/layout/space_after_not.rb +5 -0
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +10 -4
- data/lib/rubocop/cop/layout/space_around_keyword.rb +20 -3
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +30 -4
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +5 -1
- data/lib/rubocop/cop/layout/space_before_brackets.rb +6 -39
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -8
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +55 -36
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +32 -8
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +3 -0
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -12
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/layout.rb +114 -0
- data/lib/rubocop/cop/lazy_loader.rb +41 -0
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +9 -17
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +72 -1
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +3 -11
- data/lib/rubocop/cop/lint/ambiguous_range.rb +6 -2
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +6 -1
- data/lib/rubocop/cop/lint/argument_mismatch.rb +99 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +2 -3
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +15 -1
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +47 -8
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +4 -3
- data/lib/rubocop/cop/lint/constant_reassignment.rb +94 -15
- data/lib/rubocop/cop/lint/constant_resolution.rb +31 -6
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +240 -0
- data/lib/rubocop/cop/lint/data_define_override.rb +63 -0
- data/lib/rubocop/cop/lint/debugger.rb +13 -4
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_constants.rb +2 -8
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +5 -2
- data/lib/rubocop/cop/lint/deprecated_reference.rb +194 -0
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +4 -4
- data/lib/rubocop/cop/lint/duplicate_methods.rb +506 -41
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +5 -42
- data/lib/rubocop/cop/lint/else_layout.rb +19 -0
- data/lib/rubocop/cop/lint/empty_block.rb +4 -4
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +22 -65
- data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +8 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
- data/lib/rubocop/cop/lint/empty_when.rb +8 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +19 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -8
- data/lib/rubocop/cop/lint/float_comparison.rb +33 -10
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -1
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +4 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -2
- data/lib/rubocop/cop/lint/inherit_exception.rb +53 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +25 -6
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
- data/lib/rubocop/cop/lint/literal_as_condition.rb +152 -11
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +11 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +75 -37
- data/lib/rubocop/cop/lint/loop.rb +24 -2
- data/lib/rubocop/cop/lint/misplaced_magic_comment.rb +245 -0
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +60 -23
- data/lib/rubocop/cop/lint/missing_super.rb +31 -1
- data/lib/rubocop/cop/lint/mixed_case_range.rb +2 -2
- 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 +2 -2
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -0
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +20 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +4 -2
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +4 -4
- data/lib/rubocop/cop/lint/number_conversion.rb +22 -11
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +11 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -1
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +7 -7
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +15 -4
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +20 -14
- data/lib/rubocop/cop/lint/raise_exception.rb +30 -11
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +160 -39
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +53 -19
- data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +28 -6
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +5 -25
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +134 -12
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -4
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +267 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +5 -3
- data/lib/rubocop/cop/lint/redundant_with_object.rb +8 -0
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +8 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +9 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +13 -4
- 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 +1 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +2 -2
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +28 -4
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +56 -6
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +5 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +63 -6
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -1
- 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 +27 -1
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +14 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +17 -1
- data/lib/rubocop/cop/lint/super_argument_mismatch.rb +179 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +122 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +22 -4
- data/lib/rubocop/cop/lint/syntax.rb +25 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +73 -5
- 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 +54 -11
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +2 -0
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +2 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +16 -9
- data/lib/rubocop/cop/lint/unreachable_loop.rb +5 -5
- data/lib/rubocop/cop/lint/unreachable_pattern_branch.rb +113 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +10 -0
- 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/useless_access_modifier.rb +31 -6
- data/lib/rubocop/cop/lint/useless_assignment.rb +63 -27
- 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_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +11 -10
- data/lib/rubocop/cop/lint/useless_or.rb +111 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +2 -3
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +13 -7
- data/lib/rubocop/cop/lint/useless_setter_call.rb +11 -5
- data/lib/rubocop/cop/lint/useless_times.rb +22 -1
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +201 -0
- data/lib/rubocop/cop/lint/void.rb +68 -22
- data/lib/rubocop/cop/lint.rb +179 -0
- 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 +2 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +23 -0
- data/lib/rubocop/cop/metrics/class_length.rb +4 -2
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +1 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +0 -4
- data/lib/rubocop/cop/metrics/method_length.rb +3 -2
- data/lib/rubocop/cop/metrics/module_length.rb +4 -2
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +37 -7
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -3
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +2 -2
- 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 +7 -3
- data/lib/rubocop/cop/mixin/allowed_methods.rb +5 -5
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +9 -5
- data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +50 -28
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +13 -9
- data/lib/rubocop/cop/mixin/code_length.rb +10 -2
- data/lib/rubocop/cop/mixin/comments_help.rb +2 -3
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -2
- data/lib/rubocop/cop/mixin/configurable_max.rb +6 -5
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +13 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/endless_method_body_help.rb +105 -0
- data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +13 -5
- 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 +1 -2
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +68 -21
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +52 -25
- data/lib/rubocop/cop/mixin/hash_subset.rb +28 -6
- 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/indexed_method_arity.rb +94 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +52 -11
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/min_branches_count.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +11 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +10 -1
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +2 -2
- data/lib/rubocop/cop/mixin/pattern_matching_help.rb +35 -0
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +79 -8
- data/lib/rubocop/cop/mixin/project_index_help.rb +203 -0
- data/lib/rubocop/cop/mixin/range_help.rb +16 -5
- data/lib/rubocop/cop/mixin/reparsed_equivalence.rb +181 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +5 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +69 -12
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +1 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +23 -6
- data/lib/rubocop/cop/mixin/visibility_help.rb +2 -1
- data/lib/rubocop/cop/mixin.rb +93 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +8 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +17 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +7 -4
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +6 -5
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +9 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +5 -3
- data/lib/rubocop/cop/naming/inclusive_language.rb +8 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +13 -6
- 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_name.rb → predicate_prefix.rb} +65 -8
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -7
- data/lib/rubocop/cop/naming/variable_name.rb +51 -6
- data/lib/rubocop/cop/naming/variable_number.rb +3 -1
- data/lib/rubocop/cop/naming.rb +31 -0
- data/lib/rubocop/cop/offense.rb +108 -9
- data/lib/rubocop/cop/registry.rb +234 -65
- 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 +45 -11
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security.rb +19 -0
- data/lib/rubocop/cop/severity.rb +12 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +83 -14
- data/lib/rubocop/cop/style/accessor_grouping.rb +47 -10
- data/lib/rubocop/cop/style/alias.rb +33 -8
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +4 -3
- data/lib/rubocop/cop/style/and_or.rb +8 -3
- data/lib/rubocop/cop/style/arguments_forwarding.rb +80 -39
- data/lib/rubocop/cop/style/array_first_last.rb +13 -3
- data/lib/rubocop/cop/style/array_intersect.rb +136 -38
- 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 +8 -6
- 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/bitwise_predicate.rb +13 -5
- data/lib/rubocop/cop/style/block_delimiters.rb +77 -40
- data/lib/rubocop/cop/style/case_equality.rb +29 -15
- data/lib/rubocop/cop/style/case_like_if.rb +12 -11
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/class_and_module_children.rb +181 -27
- data/lib/rubocop/cop/style/class_equality_comparison.rb +22 -14
- data/lib/rubocop/cop/style/class_methods_definitions.rb +26 -5
- data/lib/rubocop/cop/style/collection_compact.rb +37 -17
- data/lib/rubocop/cop/style/collection_methods.rb +1 -0
- data/lib/rubocop/cop/style/collection_querying.rb +200 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +16 -7
- data/lib/rubocop/cop/style/combinable_loops.rb +92 -9
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +12 -5
- 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 +65 -9
- data/lib/rubocop/cop/style/conditional_assignment.rb +58 -24
- data/lib/rubocop/cop/style/constant_visibility.rb +23 -12
- data/lib/rubocop/cop/style/copyright.rb +27 -12
- data/lib/rubocop/cop/style/data_inheritance.rb +25 -0
- data/lib/rubocop/cop/style/date_time.rb +4 -4
- data/lib/rubocop/cop/style/def_with_parentheses.rb +22 -5
- data/lib/rubocop/cop/style/dig_chain.rb +6 -1
- data/lib/rubocop/cop/style/dir_empty.rb +4 -0
- data/lib/rubocop/cop/style/directive_scope.rb +304 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +184 -20
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +6 -1
- data/lib/rubocop/cop/style/documentation.rb +53 -6
- data/lib/rubocop/cop/style/documentation_method.rb +8 -12
- data/lib/rubocop/cop/style/double_negation.rb +14 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +4 -3
- data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_case_condition.rb +13 -4
- data/lib/rubocop/cop/style/empty_class_definition.rb +126 -0
- data/lib/rubocop/cop/style/empty_heredoc.rb +4 -0
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_literal.rb +12 -3
- data/lib/rubocop/cop/style/empty_method.rb +15 -9
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +152 -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 +256 -19
- data/lib/rubocop/cop/style/env_home.rb +4 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +3 -3
- data/lib/rubocop/cop/style/even_odd.rb +11 -1
- data/lib/rubocop/cop/style/exact_regexp_match.rb +52 -8
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +62 -9
- data/lib/rubocop/cop/style/exponential_notation.rb +5 -4
- data/lib/rubocop/cop/style/fetch_env_var.rb +33 -7
- data/lib/rubocop/cop/style/file_null.rb +6 -4
- data/lib/rubocop/cop/style/file_open.rb +84 -0
- data/lib/rubocop/cop/style/file_write.rb +21 -16
- data/lib/rubocop/cop/style/float_division.rb +43 -15
- data/lib/rubocop/cop/style/for.rb +61 -1
- data/lib/rubocop/cop/style/format_string.rb +44 -9
- data/lib/rubocop/cop/style/format_string_token.rb +86 -16
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +5 -3
- data/lib/rubocop/cop/style/global_std_stream.rb +3 -0
- data/lib/rubocop/cop/style/global_vars.rb +5 -2
- data/lib/rubocop/cop/style/guard_clause.rb +58 -40
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +31 -9
- data/lib/rubocop/cop/style/hash_conversion.rb +52 -16
- data/lib/rubocop/cop/style/hash_each_methods.rb +4 -4
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_lookup_method.rb +128 -0
- data/lib/rubocop/cop/style/hash_slice.rb +16 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +23 -6
- 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 +39 -11
- data/lib/rubocop/cop/style/if_inside_else.rb +46 -21
- data/lib/rubocop/cop/style/if_unless_modifier.rb +101 -70
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +19 -19
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +5 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +61 -8
- 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 +34 -8
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +27 -7
- data/lib/rubocop/cop/style/ip_addresses.rb +3 -4
- data/lib/rubocop/cop/style/it_assignment.rb +69 -12
- data/lib/rubocop/cop/style/it_block_parameter.rb +211 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +4 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +23 -11
- data/lib/rubocop/cop/style/lambda.rb +46 -2
- data/lib/rubocop/cop/style/lambda_call.rb +31 -10
- 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 +11 -0
- data/lib/rubocop/cop/style/map_into_array.rb +6 -4
- data/lib/rubocop/cop/style/map_join.rb +123 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +13 -5
- data/lib/rubocop/cop/style/map_to_set.rb +1 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +110 -27
- 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 +58 -6
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +36 -8
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +36 -8
- data/lib/rubocop/cop/style/min_max_comparison.rb +17 -6
- data/lib/rubocop/cop/style/missing_else.rb +7 -1
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +40 -7
- data/lib/rubocop/cop/style/mixin_grouping.rb +12 -3
- 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 +2 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +47 -5
- data/lib/rubocop/cop/style/multiline_if_then.rb +10 -4
- data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +7 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +7 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +15 -22
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +7 -3
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +33 -22
- data/lib/rubocop/cop/style/mutable_constant.rb +158 -14
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +3 -3
- data/lib/rubocop/cop/style/negative_array_index.rb +228 -0
- data/lib/rubocop/cop/style/nested_modifier.rb +36 -12
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +26 -8
- data/lib/rubocop/cop/style/next.rb +68 -10
- data/lib/rubocop/cop/style/nil_comparison.rb +53 -13
- data/lib/rubocop/cop/style/nil_lambda.rb +9 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +21 -11
- data/lib/rubocop/cop/style/not.rb +12 -3
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +11 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +22 -6
- data/lib/rubocop/cop/style/object_then.rb +1 -0
- data/lib/rubocop/cop/style/one_class_per_file.rb +115 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +35 -15
- data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
- data/lib/rubocop/cop/style/operator_method_call.rb +10 -2
- 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/parallel_assignment.rb +58 -27
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +7 -2
- data/lib/rubocop/cop/style/partition_instead_of_double_select.rb +270 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +18 -3
- 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 +4 -2
- data/lib/rubocop/cop/style/raise_args.rb +28 -18
- data/lib/rubocop/cop/style/reduce_to_hash.rb +216 -0
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -0
- 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 +12 -2
- data/lib/rubocop/cop/style/redundant_begin.rb +60 -7
- data/lib/rubocop/cop/style/redundant_condition.rb +93 -18
- data/lib/rubocop/cop/style/redundant_constant_base.rb +42 -6
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +26 -4
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +17 -3
- data/lib/rubocop/cop/style/redundant_each.rb +4 -5
- data/lib/rubocop/cop/style/redundant_exception.rb +22 -4
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +11 -11
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -0
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +1 -1
- data/lib/rubocop/cop/style/redundant_format.rb +319 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +13 -5
- data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6 -1
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +49 -10
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +83 -119
- data/lib/rubocop/cop/style/redundant_min_max_by.rb +93 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +176 -83
- data/lib/rubocop/cop/style/redundant_percent_q.rb +5 -3
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +15 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -5
- data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +27 -7
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +16 -0
- data/lib/rubocop/cop/style/redundant_return.rb +4 -3
- data/lib/rubocop/cop/style/redundant_self.rb +20 -7
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -3
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +27 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +45 -11
- data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
- data/lib/rubocop/cop/style/redundant_string_escape.rb +1 -2
- data/lib/rubocop/cop/style/redundant_struct_keyword_init.rb +133 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +107 -29
- data/lib/rubocop/cop/style/require_order.rb +25 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +16 -12
- data/lib/rubocop/cop/style/return_nil.rb +19 -4
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +11 -1
- data/lib/rubocop/cop/style/reverse_find.rb +51 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +76 -20
- data/lib/rubocop/cop/style/sample.rb +19 -13
- 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 +54 -22
- data/lib/rubocop/cop/style/self_assignment.rb +13 -16
- data/lib/rubocop/cop/style/semicolon.rb +56 -14
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +4 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +22 -8
- data/lib/rubocop/cop/style/single_line_methods.rb +33 -11
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +96 -104
- data/lib/rubocop/cop/style/special_global_vars.rb +7 -2
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +32 -6
- data/lib/rubocop/cop/style/static_class.rb +21 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +38 -16
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +44 -2
- data/lib/rubocop/cop/style/super_arguments.rb +7 -6
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +35 -15
- data/lib/rubocop/cop/style/tally_method.rb +181 -0
- data/lib/rubocop/cop/style/ternary_parentheses.rb +34 -1
- data/lib/rubocop/cop/style/time_now.rb +41 -0
- data/lib/rubocop/cop/style/top_level_method_definition.rb +3 -2
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +52 -1
- 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 +35 -32
- data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
- 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/while_until_do.rb +7 -0
- data/lib/rubocop/cop/style/while_until_modifier.rb +16 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +26 -12
- data/lib/rubocop/cop/style/yoda_expression.rb +11 -2
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -3
- data/lib/rubocop/cop/style.rb +311 -0
- data/lib/rubocop/cop/team.rb +172 -49
- data/lib/rubocop/cop/util.rb +7 -10
- data/lib/rubocop/cop/utils/format_string.rb +20 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +8 -4
- data/lib/rubocop/cop/variable_force/branch.rb +30 -6
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +42 -11
- data/lib/rubocop/cop/variable_force.rb +26 -9
- data/lib/rubocop/cops_documentation_generator.rb +49 -15
- data/lib/rubocop/directive_comment.rb +147 -5
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/feature_loader.rb +0 -6
- data/lib/rubocop/file_patterns.rb +9 -1
- data/lib/rubocop/formatter/base_formatter.rb +22 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +57 -14
- data/lib/rubocop/formatter/emacs_style_formatter.rb +3 -1
- data/lib/rubocop/formatter/formatter_set.rb +7 -2
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/github_actions_formatter.rb +6 -5
- data/lib/rubocop/formatter/html_formatter.rb +3 -5
- data/lib/rubocop/formatter/json_formatter.rb +82 -7
- data/lib/rubocop/formatter/junit_formatter.rb +27 -10
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +5 -4
- data/lib/rubocop/formatter/pacman_formatter.rb +5 -2
- data/lib/rubocop/formatter/sarif_formatter.rb +186 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +4 -5
- data/lib/rubocop/formatter/tap_formatter.rb +8 -3
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +5 -4
- data/lib/rubocop/formatter.rb +23 -21
- data/lib/rubocop/lockfile.rb +18 -0
- data/lib/rubocop/lsp/diagnostic.rb +22 -41
- data/lib/rubocop/lsp/disable_comment_edits.rb +135 -0
- data/lib/rubocop/lsp/routes.rb +158 -55
- data/lib/rubocop/lsp/runtime.rb +66 -15
- data/lib/rubocop/lsp/server.rb +4 -2
- data/lib/rubocop/lsp/stdin_runner.rb +38 -19
- data/lib/rubocop/lsp.rb +5 -2
- data/lib/rubocop/magic_comment.rb +55 -0
- data/lib/rubocop/mcp/autocorrection_request.rb +52 -0
- data/lib/rubocop/mcp/explain_tool.rb +68 -0
- data/lib/rubocop/mcp/scope.rb +65 -0
- data/lib/rubocop/mcp/server.rb +307 -0
- data/lib/rubocop/mcp/source_files.rb +35 -0
- data/lib/rubocop/offense_limit.rb +30 -0
- data/lib/rubocop/options.rb +166 -23
- data/lib/rubocop/path_util.rb +20 -5
- data/lib/rubocop/pending_cops_reporter.rb +51 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +153 -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 +6 -4
- data/lib/rubocop/remote_config.rb +18 -13
- data/lib/rubocop/result_cache.rb +110 -65
- data/lib/rubocop/rspec/cop_helper.rb +21 -1
- data/lib/rubocop/rspec/expect_offense.rb +11 -7
- data/lib/rubocop/rspec/shared_contexts.rb +85 -3
- data/lib/rubocop/rspec/support.rb +4 -0
- data/lib/rubocop/runner.rb +368 -106
- data/lib/rubocop/server/cache.rb +67 -48
- 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 +2 -1
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/server/core.rb +8 -0
- data/lib/rubocop/server.rb +14 -0
- data/lib/rubocop/target_finder.rb +25 -11
- data/lib/rubocop/target_ruby.rb +52 -23
- data/lib/rubocop/todo_audit.rb +111 -0
- data/lib/rubocop/unified_diff.rb +257 -0
- data/lib/rubocop/util.rb +69 -0
- data/lib/rubocop/version.rb +48 -10
- data/lib/rubocop.rb +35 -682
- data/lib/ruby_lsp/rubocop/addon.rb +28 -17
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +129 -21
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +0 -46
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/ruby_lsp/rubocop/wraps_built_in_lsp_runtime.rb +0 -50
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 explain lsp mcp
|
|
21
|
+
].freeze
|
|
20
22
|
DEFAULT_MAXIMUM_EXCLUSION_ITEMS = 15
|
|
21
23
|
|
|
22
24
|
def initialize
|
|
@@ -31,6 +33,9 @@ module RuboCop
|
|
|
31
33
|
|
|
32
34
|
define_options.parse!(args)
|
|
33
35
|
|
|
36
|
+
return_path_given_to_changed(args)
|
|
37
|
+
imply_autocorrect_for_diff
|
|
38
|
+
|
|
34
39
|
@validator.validate_compatibility
|
|
35
40
|
|
|
36
41
|
if @options[:stdin]
|
|
@@ -49,7 +54,22 @@ module RuboCop
|
|
|
49
54
|
|
|
50
55
|
private
|
|
51
56
|
|
|
52
|
-
#
|
|
57
|
+
# `--changed lib` hands the path to `--changed` as its optional argument,
|
|
58
|
+
# so it goes back among the paths to inspect.
|
|
59
|
+
def return_path_given_to_changed(args)
|
|
60
|
+
args.unshift(@path_given_to_changed) if @path_given_to_changed
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# `--diff` is a dry run of autocorrection, so it turns autocorrection on
|
|
64
|
+
# unless the user already picked a mode with `-a`, `-A` or `-x`.
|
|
65
|
+
def imply_autocorrect_for_diff
|
|
66
|
+
return unless @options[:diff] && !@options[:autocorrect]
|
|
67
|
+
|
|
68
|
+
@options[:safe_autocorrect] = true
|
|
69
|
+
@options[:autocorrect] = true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# rubocop:disable-next Metrics/AbcSize
|
|
53
73
|
def define_options
|
|
54
74
|
OptionParser.new do |opts|
|
|
55
75
|
opts.banner = rainbow.wrap('Usage: rubocop [options] [file1, file2, ...]').bright
|
|
@@ -57,6 +77,7 @@ module RuboCop
|
|
|
57
77
|
add_check_options(opts)
|
|
58
78
|
add_cache_options(opts)
|
|
59
79
|
add_lsp_option(opts)
|
|
80
|
+
add_mcp_option(opts)
|
|
60
81
|
add_server_options(opts)
|
|
61
82
|
add_output_options(opts)
|
|
62
83
|
add_autocorrection_options(opts)
|
|
@@ -68,7 +89,6 @@ module RuboCop
|
|
|
68
89
|
add_profile_options(opts) if RUBY_ENGINE == 'ruby' && !Platform.windows?
|
|
69
90
|
end
|
|
70
91
|
end
|
|
71
|
-
# rubocop:enable Metrics/AbcSize
|
|
72
92
|
|
|
73
93
|
def add_check_options(opts) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
74
94
|
section(opts, 'Basic Options') do # rubocop:disable Metrics/BlockLength
|
|
@@ -88,12 +108,22 @@ module RuboCop
|
|
|
88
108
|
option(opts, '-F', '--fail-fast')
|
|
89
109
|
option(opts, '--disable-pending-cops')
|
|
90
110
|
option(opts, '--enable-pending-cops')
|
|
111
|
+
option(opts, '--disable-all-cops')
|
|
112
|
+
option(opts, '--enable-all-cops')
|
|
113
|
+
option(opts, '--[no-]preview')
|
|
91
114
|
option(opts, '--ignore-disable-comments')
|
|
92
115
|
option(opts, '--force-exclusion')
|
|
93
116
|
option(opts, '--only-recognized-file-types')
|
|
94
117
|
option(opts, '--ignore-parent-exclusion')
|
|
95
118
|
option(opts, '--ignore-unrecognized-cops')
|
|
96
119
|
option(opts, '--force-default-config')
|
|
120
|
+
option(opts, '--changed [REVISION]') do |revision|
|
|
121
|
+
if @validator.path_given_to_changed?(revision)
|
|
122
|
+
@path_given_to_changed = revision
|
|
123
|
+
revision = nil
|
|
124
|
+
end
|
|
125
|
+
@options[:changed] = revision || ChangedFiles::DEFAULT_REVISION
|
|
126
|
+
end
|
|
97
127
|
option(opts, '-s', '--stdin FILE')
|
|
98
128
|
option(opts, '--editor-mode')
|
|
99
129
|
option(opts, '-P', '--[no-]parallel')
|
|
@@ -127,10 +157,14 @@ module RuboCop
|
|
|
127
157
|
option(opts, '--display-only-fail-level-offenses')
|
|
128
158
|
option(opts, '--display-only-correctable')
|
|
129
159
|
option(opts, '--display-only-safe-correctable')
|
|
160
|
+
option(opts, '--display-suppressed')
|
|
161
|
+
option(opts, '--max-offenses-per-cop COUNT') do
|
|
162
|
+
@validator.validate_max_offenses_per_cop_option
|
|
163
|
+
end
|
|
130
164
|
end
|
|
131
165
|
end
|
|
132
166
|
|
|
133
|
-
# rubocop:todo Naming/InclusiveLanguage
|
|
167
|
+
# rubocop:todo Naming/InclusiveLanguage -- `--auto-correct` is the deprecated flag name
|
|
134
168
|
# the autocorrect command-line arguments map to the autocorrect @options values like so:
|
|
135
169
|
# :fix_layout :autocorrect :safe_autocorrect :autocorrect_all
|
|
136
170
|
# -x, --fix-layout true true - -
|
|
@@ -156,6 +190,8 @@ module RuboCop
|
|
|
156
190
|
end
|
|
157
191
|
|
|
158
192
|
option(opts, '--disable-uncorrectable')
|
|
193
|
+
|
|
194
|
+
option(opts, '--diff')
|
|
159
195
|
end
|
|
160
196
|
end
|
|
161
197
|
# rubocop:enable Naming/InclusiveLanguage
|
|
@@ -168,6 +204,8 @@ module RuboCop
|
|
|
168
204
|
@options.replace(ConfigRegeneration.new.options.merge(@options))
|
|
169
205
|
end
|
|
170
206
|
|
|
207
|
+
option(opts, '--report-unused-todo-entries')
|
|
208
|
+
|
|
171
209
|
option(opts, '--exclude-limit COUNT') { @validator.validate_exclude_limit_option }
|
|
172
210
|
option(opts, '--no-exclude-limit')
|
|
173
211
|
|
|
@@ -215,6 +253,12 @@ module RuboCop
|
|
|
215
253
|
end
|
|
216
254
|
end
|
|
217
255
|
|
|
256
|
+
def add_mcp_option(opts)
|
|
257
|
+
section(opts, 'MCP Option') do
|
|
258
|
+
option(opts, '--mcp')
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
|
|
218
262
|
def add_server_options(opts)
|
|
219
263
|
section(opts, 'Server Options') do
|
|
220
264
|
option(opts, '--[no-]server')
|
|
@@ -229,12 +273,16 @@ module RuboCop
|
|
|
229
273
|
def add_additional_modes(opts)
|
|
230
274
|
section(opts, 'Additional Modes') do
|
|
231
275
|
option(opts, '-L', '--list-target-files')
|
|
276
|
+
option(opts, '--list-enabled-cops-for PATH')
|
|
232
277
|
option(opts, '--show-cops [COP1,COP2,...]') do |list|
|
|
233
278
|
@options[:show_cops] = list.nil? ? [] : list.split(',')
|
|
234
279
|
end
|
|
235
280
|
option(opts, '--show-docs-url [COP1,COP2,...]') do |list|
|
|
236
281
|
@options[:show_docs_url] = list.nil? ? [] : list.split(',')
|
|
237
282
|
end
|
|
283
|
+
option(opts, '--explain COP1,COP2,...') do |list|
|
|
284
|
+
@options[:explain] = list.split(',')
|
|
285
|
+
end
|
|
238
286
|
end
|
|
239
287
|
end
|
|
240
288
|
|
|
@@ -243,6 +291,7 @@ module RuboCop
|
|
|
243
291
|
option(opts, '--init')
|
|
244
292
|
option(opts, '-c', '--config FILE')
|
|
245
293
|
option(opts, '-d', '--debug')
|
|
294
|
+
option(opts, '--plugin FILE') { |f| plugin_feature(f) }
|
|
246
295
|
option(opts, '-r', '--require FILE') { |f| require_feature(f) }
|
|
247
296
|
option(opts, '--[no-]color')
|
|
248
297
|
option(opts, '-v', '--version')
|
|
@@ -299,11 +348,25 @@ module RuboCop
|
|
|
299
348
|
long_opt[2..].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
|
|
300
349
|
end
|
|
301
350
|
|
|
302
|
-
def
|
|
303
|
-
# If any features were added on the CLI from `--
|
|
351
|
+
def plugin_feature(file)
|
|
352
|
+
# If any features were added on the CLI from `--plugin`,
|
|
304
353
|
# add them to the config.
|
|
305
|
-
|
|
306
|
-
|
|
354
|
+
ConfigLoaderResolver.new.resolve_plugins(Config.new, file)
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
def require_feature(file)
|
|
358
|
+
if Plugin.plugin_capable?(file)
|
|
359
|
+
# NOTE: Compatibility for before plugins style.
|
|
360
|
+
warn Rainbow(<<~MESSAGE).yellow
|
|
361
|
+
#{file} gem supports plugin, use `--plugin` instead of `--require`.
|
|
362
|
+
MESSAGE
|
|
363
|
+
plugin_feature(file)
|
|
364
|
+
else
|
|
365
|
+
# If any features were added on the CLI from `--require`,
|
|
366
|
+
# add them to the config.
|
|
367
|
+
require file
|
|
368
|
+
ConfigLoader.add_loaded_features(file)
|
|
369
|
+
end
|
|
307
370
|
end
|
|
308
371
|
end
|
|
309
372
|
|
|
@@ -355,7 +418,7 @@ module RuboCop
|
|
|
355
418
|
%i[only except].each { |opt| OptionsValidator.validate_cop_list(@options[opt]) }
|
|
356
419
|
end
|
|
357
420
|
|
|
358
|
-
# rubocop:disable Metrics/AbcSize
|
|
421
|
+
# rubocop:disable-next Metrics/AbcSize
|
|
359
422
|
def validate_compatibility # rubocop:disable Metrics/MethodLength
|
|
360
423
|
if only_includes_redundant_disable?
|
|
361
424
|
raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot be used with --only.'
|
|
@@ -371,13 +434,15 @@ module RuboCop
|
|
|
371
434
|
validate_display_only_failed_and_display_only_correctable
|
|
372
435
|
validate_display_only_correctable_and_autocorrect
|
|
373
436
|
validate_lsp_and_editor_mode
|
|
437
|
+
validate_diff
|
|
438
|
+
validate_changed_and_stdin
|
|
439
|
+
validate_enable_all_cops_and_disable_all_cops
|
|
374
440
|
disable_parallel_when_invalid_option_combo
|
|
375
441
|
|
|
376
442
|
return if incompatible_options.size <= 1
|
|
377
443
|
|
|
378
444
|
raise OptionArgumentError, "Incompatible cli options: #{incompatible_options.inspect}"
|
|
379
445
|
end
|
|
380
|
-
# rubocop:enable Metrics/AbcSize
|
|
381
446
|
|
|
382
447
|
def validate_auto_gen_config
|
|
383
448
|
return if @options.key?(:auto_gen_config)
|
|
@@ -397,7 +462,7 @@ module RuboCop
|
|
|
397
462
|
return if @options[:format] == 'junit'
|
|
398
463
|
|
|
399
464
|
raise OptionArgumentError,
|
|
400
|
-
|
|
465
|
+
'--display-only-failed can only be used together with --format junit.'
|
|
401
466
|
end
|
|
402
467
|
|
|
403
468
|
def validate_display_only_correctable_and_autocorrect
|
|
@@ -415,14 +480,34 @@ module RuboCop
|
|
|
415
480
|
!@options.key?(:display_only_safe_correctable)
|
|
416
481
|
|
|
417
482
|
raise OptionArgumentError,
|
|
418
|
-
|
|
483
|
+
'--display-only-failed cannot be used together with other display options.'
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
# `--diff` promises not to write anything, and `--auto-gen-config` exists to
|
|
487
|
+
# write a file.
|
|
488
|
+
def validate_diff
|
|
489
|
+
return unless @options.key?(:diff) && @options.key?(:auto_gen_config)
|
|
490
|
+
|
|
491
|
+
raise OptionArgumentError, '--diff cannot be used with --auto-gen-config.'
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
def validate_changed_and_stdin
|
|
495
|
+
return unless @options.key?(:changed) && @options.key?(:stdin)
|
|
496
|
+
|
|
497
|
+
raise OptionArgumentError, '--changed cannot be used with --stdin.'
|
|
419
498
|
end
|
|
420
499
|
|
|
421
500
|
def validate_lsp_and_editor_mode
|
|
422
501
|
return if !@options.key?(:lsp) || !@options.key?(:editor_mode)
|
|
423
502
|
|
|
503
|
+
raise OptionArgumentError, 'Do not specify `--editor-mode` as it is redundant in `--lsp`.'
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
def validate_enable_all_cops_and_disable_all_cops
|
|
507
|
+
return if !@options.key?(:enable_all_cops) || !@options.key?(:disable_all_cops)
|
|
508
|
+
|
|
424
509
|
raise OptionArgumentError,
|
|
425
|
-
|
|
510
|
+
'--enable-all-cops cannot be used together with --disable-all-cops.'
|
|
426
511
|
end
|
|
427
512
|
|
|
428
513
|
def validate_autocorrect
|
|
@@ -436,11 +521,11 @@ module RuboCop
|
|
|
436
521
|
return unless @options.key?(:disable_uncorrectable)
|
|
437
522
|
|
|
438
523
|
raise OptionArgumentError,
|
|
439
|
-
|
|
524
|
+
'--disable-uncorrectable can only be used together with --autocorrect.'
|
|
440
525
|
end
|
|
441
526
|
|
|
442
527
|
def disable_parallel_when_invalid_option_combo
|
|
443
|
-
return unless @options
|
|
528
|
+
return unless @options[:parallel]
|
|
444
529
|
|
|
445
530
|
invalid_flags = invalid_arguments_for_parallel
|
|
446
531
|
|
|
@@ -448,13 +533,14 @@ module RuboCop
|
|
|
448
533
|
|
|
449
534
|
@options.delete(:parallel)
|
|
450
535
|
|
|
451
|
-
|
|
536
|
+
# On stderr, so that it can't end up in the middle of a formatter's
|
|
537
|
+
# output, such as `--format json`.
|
|
538
|
+
warn '-P/--parallel is being ignored because ' \
|
|
452
539
|
"it is not compatible with #{invalid_flags.join(', ')}."
|
|
453
540
|
end
|
|
454
541
|
|
|
455
542
|
def invalid_arguments_for_parallel
|
|
456
|
-
[('
|
|
457
|
-
('-F/--fail-fast' if @options.key?(:fail_fast)),
|
|
543
|
+
[('-F/--fail-fast' if @options.key?(:fail_fast)),
|
|
458
544
|
('--profile' if @options[:profile]),
|
|
459
545
|
('--memory' if @options[:memory]),
|
|
460
546
|
('--cache false' if @options > { cache: 'false' })].compact
|
|
@@ -477,6 +563,25 @@ module RuboCop
|
|
|
477
563
|
@incompatible_options ||= @options.keys & Options::EXITING_OPTIONS
|
|
478
564
|
end
|
|
479
565
|
|
|
566
|
+
# OptionParser hands `--changed lib/` the path as the revision, which is a
|
|
567
|
+
# natural thing to type, so an argument that names an existing path is
|
|
568
|
+
# taken as one. When it also names a revision there is no telling which
|
|
569
|
+
# was meant, and git itself refuses such an argument as ambiguous.
|
|
570
|
+
def path_given_to_changed?(revision)
|
|
571
|
+
return false unless revision && File.exist?(revision)
|
|
572
|
+
return true unless ChangedFiles.revision?(revision)
|
|
573
|
+
|
|
574
|
+
raise OptionArgumentError,
|
|
575
|
+
"--changed got `#{revision}`, which is both a path and a git revision. Write " \
|
|
576
|
+
"`./#{revision}` for the path, or `--changed=#{revision}^0` for the revision."
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
def validate_max_offenses_per_cop_option
|
|
580
|
+
return if /^[1-9]\d*$/.match?(@options[:max_offenses_per_cop])
|
|
581
|
+
|
|
582
|
+
raise OptionParser::InvalidArgument, '--max-offenses-per-cop must be a positive integer'
|
|
583
|
+
end
|
|
584
|
+
|
|
480
585
|
def validate_exclude_limit_option
|
|
481
586
|
return if /^\d+$/.match?(@options[:exclude_limit])
|
|
482
587
|
|
|
@@ -494,7 +599,7 @@ module RuboCop
|
|
|
494
599
|
|
|
495
600
|
# This module contains help texts for command line options.
|
|
496
601
|
# @api private
|
|
497
|
-
# rubocop:disable Metrics/ModuleLength
|
|
602
|
+
# rubocop:disable-next Metrics/ModuleLength
|
|
498
603
|
module OptionsHelp
|
|
499
604
|
MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
|
|
500
605
|
FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
|
|
@@ -504,6 +609,7 @@ module RuboCop
|
|
|
504
609
|
only_guide_cops: ['Run only cops for rules that link to a',
|
|
505
610
|
'style guide.'],
|
|
506
611
|
except: 'Exclude the given cop(s).',
|
|
612
|
+
plugin: 'Load a RuboCop plugin.',
|
|
507
613
|
require: 'Require Ruby file.',
|
|
508
614
|
config: 'Specify configuration file.',
|
|
509
615
|
auto_gen_config: ['Generate a configuration file acting as a',
|
|
@@ -511,6 +617,8 @@ module RuboCop
|
|
|
511
617
|
regenerate_todo: ['Regenerate the TODO configuration file using',
|
|
512
618
|
'the last configuration. If there is no existing',
|
|
513
619
|
'TODO file, acts like --auto-gen-config.'],
|
|
620
|
+
report_unused_todo_entries: ['Also report TODO configuration file entries that',
|
|
621
|
+
'are no longer needed, and fail if any are found.'],
|
|
514
622
|
offense_counts: ['Include offense counts in configuration',
|
|
515
623
|
'file generated by --auto-gen-config.',
|
|
516
624
|
'Default is true.'],
|
|
@@ -529,12 +637,21 @@ module RuboCop
|
|
|
529
637
|
'when running --auto-gen-config, except if the',
|
|
530
638
|
'number of files with offenses is bigger than',
|
|
531
639
|
'exclude-limit. Default is false.'],
|
|
640
|
+
max_offenses_per_cop: ['Report at most COUNT offenses per cop across the',
|
|
641
|
+
'whole run, so a single noisy cop cannot bury the',
|
|
642
|
+
'rest. Offenses beyond the limit are not reported',
|
|
643
|
+
'and do not count towards the totals, the same way',
|
|
644
|
+
'the other display filters work.'],
|
|
532
645
|
exclude_limit: ['Set the limit for how many files to explicitly exclude.',
|
|
533
646
|
'If there are more files than the limit, the cop will',
|
|
534
647
|
"be disabled instead. Default is #{MAX_EXCL}."],
|
|
535
648
|
disable_uncorrectable: ['Used with --autocorrect to annotate any',
|
|
536
649
|
'offenses that do not support autocorrect',
|
|
537
650
|
'with `rubocop:todo` comments.'],
|
|
651
|
+
diff: ['Print a unified diff of what autocorrection',
|
|
652
|
+
'would change, without writing any files.',
|
|
653
|
+
'Turns on safe autocorrection unless a mode',
|
|
654
|
+
'was already given with -a, -A or -x.'],
|
|
538
655
|
no_exclude_limit: ['Do not set the limit for how many files to exclude.'],
|
|
539
656
|
force_exclusion: ['Any files excluded by `Exclude` in configuration',
|
|
540
657
|
'files will be excluded, even if given explicitly',
|
|
@@ -542,11 +659,15 @@ module RuboCop
|
|
|
542
659
|
only_recognized_file_types: ['Inspect files given on the command line only if',
|
|
543
660
|
'they are listed in `AllCops/Include` parameters',
|
|
544
661
|
'of user configuration or default configuration.'],
|
|
545
|
-
ignore_disable_comments: ['
|
|
546
|
-
'
|
|
662
|
+
ignore_disable_comments: ['Report offenses even if they have been manually disabled',
|
|
663
|
+
'with a `rubocop:disable` or `rubocop:todo` directive.'],
|
|
547
664
|
ignore_parent_exclusion: ['Prevent from inheriting `AllCops/Exclude` from',
|
|
548
665
|
'parent folders.'],
|
|
549
666
|
ignore_unrecognized_cops: ['Ignore unrecognized cops or departments in the config.'],
|
|
667
|
+
changed: ['Inspect only the files that differ from a git',
|
|
668
|
+
'revision, defaulting to HEAD. Untracked files',
|
|
669
|
+
'count as changed. Pass a revision with',
|
|
670
|
+
'`--changed=REVISION`.'],
|
|
550
671
|
force_default_config: ['Use default configuration even if configuration',
|
|
551
672
|
'files are present in the directory tree.'],
|
|
552
673
|
format: ['Choose an output formatter. This option',
|
|
@@ -561,6 +682,7 @@ module RuboCop
|
|
|
561
682
|
'specified --format, or the default format',
|
|
562
683
|
'if no format is specified.'],
|
|
563
684
|
fail_level: ['Minimum severity for exit with error code.',
|
|
685
|
+
'Overrides `AllCops: FailLevel` in the configuration.',
|
|
564
686
|
' [A] autocorrect',
|
|
565
687
|
' [I] info',
|
|
566
688
|
' [R] refactor',
|
|
@@ -577,10 +699,16 @@ module RuboCop
|
|
|
577
699
|
display_only_correctable: ['Only output correctable offense messages.'],
|
|
578
700
|
display_only_safe_correctable: ['Only output safe-correctable offense messages',
|
|
579
701
|
'when combined with --display-only-correctable.'],
|
|
580
|
-
|
|
702
|
+
display_suppressed: ['Also output offenses suppressed by directive',
|
|
703
|
+
'comments. They do not affect the exit code.'],
|
|
704
|
+
show_cops: ['Show the given cops, or all cops by',
|
|
581
705
|
'default, and their configurations for the',
|
|
582
706
|
'current directory.',
|
|
583
707
|
'You can use `*` as a wildcard.'],
|
|
708
|
+
explain: ['Explain what the given cops do: their',
|
|
709
|
+
'description, configuration, whether they',
|
|
710
|
+
'correct, and the examples from their own',
|
|
711
|
+
'documentation.'],
|
|
584
712
|
show_docs_url: ['Display url to documentation for the given',
|
|
585
713
|
'cops, or base url by default.'],
|
|
586
714
|
fail_fast: ['Inspect files in order of modification',
|
|
@@ -597,8 +725,20 @@ module RuboCop
|
|
|
597
725
|
display_cop_names: ['Display cop names in offense messages.',
|
|
598
726
|
'Default is true.'],
|
|
599
727
|
disable_pending_cops: 'Run without pending cops.',
|
|
728
|
+
disable_all_cops: ['Run with all cops disabled by default,',
|
|
729
|
+
'except `Lint/Syntax`. Overrides',
|
|
730
|
+
'`AllCops/EnabledByDefault` and',
|
|
731
|
+
'`AllCops/DisabledByDefault` in config files.'],
|
|
600
732
|
display_style_guide: 'Display style guide URLs in offense messages.',
|
|
601
733
|
enable_pending_cops: 'Run with pending cops.',
|
|
734
|
+
preview: ['Opt in to unstable behavior: cops that are',
|
|
735
|
+
'`Enabled: preview`, and changes to existing',
|
|
736
|
+
'cops that are not the default yet.',
|
|
737
|
+
'Overrides `AllCops: Preview`.'],
|
|
738
|
+
enable_all_cops: ['Run with all cops enabled, including those',
|
|
739
|
+
'disabled by default. Overrides',
|
|
740
|
+
'`AllCops/EnabledByDefault` and',
|
|
741
|
+
'`AllCops/DisabledByDefault` in config files.'],
|
|
602
742
|
extra_details: 'Display extra details in offense messages.',
|
|
603
743
|
lint: 'Run only lint cops.',
|
|
604
744
|
safe: 'Run only safe cops.',
|
|
@@ -606,6 +746,8 @@ module RuboCop
|
|
|
606
746
|
'autocorrected source. This is especially useful',
|
|
607
747
|
'when combined with --autocorrect and --stdin.'],
|
|
608
748
|
list_target_files: 'List all files RuboCop will inspect.',
|
|
749
|
+
list_enabled_cops_for: ['List which cops will inspect a given file or',
|
|
750
|
+
'directory.'],
|
|
609
751
|
autocorrect: 'Autocorrect offenses (only when it\'s safe).',
|
|
610
752
|
auto_correct: '(same, deprecated)',
|
|
611
753
|
safe_auto_correct: '(same, deprecated)',
|
|
@@ -636,6 +778,8 @@ module RuboCop
|
|
|
636
778
|
server_status: 'Show server status.',
|
|
637
779
|
no_detach: 'Run the server process in the foreground.',
|
|
638
780
|
lsp: 'Start a language server listening on STDIN.',
|
|
781
|
+
mcp: ['Start an MCP (Model Context Protocol) server that',
|
|
782
|
+
'communicates over stdio.'],
|
|
639
783
|
raise_cop_error: ['Raise cop-related errors with cause and location.',
|
|
640
784
|
'This is used to prevent cops from failing silently.',
|
|
641
785
|
'Default is false.'],
|
|
@@ -643,5 +787,4 @@ module RuboCop
|
|
|
643
787
|
memory: 'Profile rubocop memory usage.'
|
|
644
788
|
}.freeze
|
|
645
789
|
end
|
|
646
|
-
# rubocop:enable Metrics/ModuleLength
|
|
647
790
|
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,7 +40,11 @@ module RuboCop
|
|
|
28
40
|
end
|
|
29
41
|
end
|
|
30
42
|
|
|
31
|
-
|
|
43
|
+
def remote_file?(uri)
|
|
44
|
+
uri.start_with?('http://', 'https://')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
SMART_PATH_CACHE = {} # rubocop:disable Style/MutableConstant -- a cache, written to at runtime
|
|
32
48
|
private_constant :SMART_PATH_CACHE
|
|
33
49
|
|
|
34
50
|
def smart_path(path)
|
|
@@ -37,7 +53,7 @@ module RuboCop
|
|
|
37
53
|
path.uri.to_s
|
|
38
54
|
else
|
|
39
55
|
# Ideally, we calculate this relative to the project root.
|
|
40
|
-
base_dir =
|
|
56
|
+
base_dir = PathUtil.pwd
|
|
41
57
|
|
|
42
58
|
if path.start_with? base_dir
|
|
43
59
|
relative_path(path, base_dir)
|
|
@@ -47,7 +63,7 @@ module RuboCop
|
|
|
47
63
|
end
|
|
48
64
|
end
|
|
49
65
|
|
|
50
|
-
# rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
66
|
+
# rubocop:disable-next Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
51
67
|
def match_path?(pattern, path)
|
|
52
68
|
case pattern
|
|
53
69
|
when String
|
|
@@ -73,7 +89,6 @@ module RuboCop
|
|
|
73
89
|
end
|
|
74
90
|
end
|
|
75
91
|
end
|
|
76
|
-
# rubocop:enable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
77
92
|
|
|
78
93
|
# Returns true for an absolute Unix or Windows path.
|
|
79
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
|