rubocop 1.81.7 → 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 +2 -2
- data/config/default.yml +626 -111
- data/config/obsoletion.yml +39 -1
- data/exe/rubocop +1 -1
- 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 +34 -2
- 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 +1 -1
- data/lib/rubocop/cli.rb +41 -14
- 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 +97 -44
- data/lib/rubocop/config.rb +100 -15
- data/lib/rubocop/config_finder.rb +1 -1
- data/lib/rubocop/config_loader.rb +49 -27
- data/lib/rubocop/config_loader_resolver.rb +95 -20
- data/lib/rubocop/config_obsoletion/cop_rule.rb +2 -1
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -2
- data/lib/rubocop/config_obsoletion/removed_cop.rb +9 -1
- data/lib/rubocop/config_obsoletion.rb +1 -1
- data/lib/rubocop/config_store.rb +2 -2
- data/lib/rubocop/config_validator.rb +69 -7
- data/lib/rubocop/cop/autocorrect_logic.rb +24 -6
- 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 +1 -10
- 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 +87 -9
- 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/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 +70 -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/dependency_version.rb +0 -6
- data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +14 -4
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -8
- data/lib/rubocop/cop/gemspec/require_mfa.rb +9 -6
- 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_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 +28 -2
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +12 -16
- 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_type_group.rb +0 -7
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb +1 -7
- 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/useless_message_assertion.rb +4 -4
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- 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 +84 -4
- data/lib/rubocop/cop/layout/case_indentation.rb +28 -10
- data/lib/rubocop/cop/layout/class_structure.rb +156 -41
- 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 +4 -0
- data/lib/rubocop/cop/layout/dot_position.rb +26 -16
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -14
- data/lib/rubocop/cop/layout/empty_comment.rb +8 -10
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +25 -7
- 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 +15 -2
- data/lib/rubocop/cop/layout/empty_lines.rb +5 -2
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +2 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +21 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +16 -2
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +23 -1
- 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 +81 -2
- 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 +16 -11
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +8 -4
- 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 +158 -12
- data/lib/rubocop/cop/layout/leading_comment_space.rb +27 -0
- 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 +265 -29
- 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 +10 -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 +268 -38
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +4 -0
- data/lib/rubocop/cop/layout/parameter_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/redundant_line_break.rb +102 -2
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +19 -5
- 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 +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +10 -4
- data/lib/rubocop/cop/layout/space_around_keyword.rb +14 -2
- data/lib/rubocop/cop/layout/space_around_operators.rb +18 -3
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +4 -1
- data/lib/rubocop/cop/layout/space_before_brackets.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 +44 -34
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +31 -8
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -12
- 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 +1 -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/assignment_in_condition.rb +15 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +45 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
- 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 +165 -15
- data/lib/rubocop/cop/lint/data_define_override.rb +63 -0
- data/lib/rubocop/cop/lint/debugger.rb +13 -2
- data/lib/rubocop/cop/lint/deprecated_constants.rb +2 -8
- 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 +405 -28
- 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 +9 -2
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +8 -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 -2
- data/lib/rubocop/cop/lint/float_comparison.rb +2 -1
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +4 -0
- 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 +36 -9
- 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 +46 -18
- data/lib/rubocop/cop/lint/missing_super.rb +31 -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 +1 -1
- 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 +1 -1
- 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 +10 -0
- 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 +1 -1
- 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_require_statement.rb +5 -4
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +37 -14
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -4
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +11 -5
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -3
- data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -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 +2 -1
- data/lib/rubocop/cop/lint/require_relative_self_path.rb +7 -5
- data/lib/rubocop/cop/lint/rescue_type.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +24 -0
- 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 +33 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +14 -0
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +3 -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_in_number_conversion.rb +13 -2
- 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 +72 -4
- 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/unmodified_reduce_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +15 -9
- 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/useless_access_modifier.rb +1 -2
- data/lib/rubocop/cop/lint/useless_assignment.rb +61 -27
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +40 -4
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +2 -0
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +10 -10
- data/lib/rubocop/cop/lint/useless_or.rb +15 -2
- data/lib/rubocop/cop/lint/useless_rescue.rb +1 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +10 -4
- 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 +94 -14
- data/lib/rubocop/cop/lint/void.rb +59 -22
- data/lib/rubocop/cop/lint.rb +179 -0
- data/lib/rubocop/cop/metrics/block_length.rb +1 -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 +2 -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 +1 -1
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +1 -1
- 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 +5 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +5 -5
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +5 -1
- data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +47 -25
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +12 -8
- data/lib/rubocop/cop/mixin/code_length.rb +10 -2
- data/lib/rubocop/cop/mixin/comments_help.rb +1 -2
- 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/empty_lines_around_body.rb +12 -1
- 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 +2 -2
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +5 -1
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +58 -12
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +37 -10
- data/lib/rubocop/cop/mixin/hash_subset.rb +9 -2
- data/lib/rubocop/cop/mixin/hash_transform_method/autocorrection.rb +63 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +14 -60
- data/lib/rubocop/cop/mixin/indexed_method_arity.rb +94 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +28 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -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 +1 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +10 -1
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/pattern_matching_help.rb +35 -0
- 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 +1 -2
- 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/trailing_comma.rb +7 -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 +4 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +4 -3
- 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 +12 -5
- data/lib/rubocop/cop/naming/method_name.rb +6 -3
- data/lib/rubocop/cop/naming/predicate_method.rb +13 -2
- data/lib/rubocop/cop/naming/predicate_prefix.rb +30 -17
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -7
- 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 +232 -66
- data/lib/rubocop/cop/security/eval.rb +15 -2
- data/lib/rubocop/cop/security/io_methods.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +16 -4
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- 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 +55 -8
- data/lib/rubocop/cop/style/accessor_grouping.rb +16 -5
- 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 +61 -17
- data/lib/rubocop/cop/style/array_first_last.rb +13 -3
- data/lib/rubocop/cop/style/array_intersect.rb +28 -5
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +3 -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 +7 -6
- data/lib/rubocop/cop/style/block_delimiters.rb +74 -38
- data/lib/rubocop/cop/style/case_equality.rb +29 -15
- data/lib/rubocop/cop/style/case_like_if.rb +11 -10
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/class_and_module_children.rb +151 -35
- data/lib/rubocop/cop/style/class_equality_comparison.rb +21 -13
- 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_querying.rb +79 -46
- data/lib/rubocop/cop/style/colon_method_call.rb +16 -7
- data/lib/rubocop/cop/style/combinable_loops.rb +91 -9
- 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 +34 -18
- data/lib/rubocop/cop/style/constant_visibility.rb +13 -7
- data/lib/rubocop/cop/style/copyright.rb +27 -12
- data/lib/rubocop/cop/style/data_inheritance.rb +18 -0
- data/lib/rubocop/cop/style/date_time.rb +4 -4
- data/lib/rubocop/cop/style/def_with_parentheses.rb +6 -2
- data/lib/rubocop/cop/style/dig_chain.rb +5 -0
- 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 +11 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +2 -0
- 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 +8 -3
- data/lib/rubocop/cop/style/empty_method.rb +15 -9
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +74 -22
- 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 +100 -21
- data/lib/rubocop/cop/style/env_home.rb +4 -0
- 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/explicit_block_argument.rb +50 -10
- data/lib/rubocop/cop/style/fetch_env_var.rb +1 -1
- 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 +28 -14
- data/lib/rubocop/cop/style/for.rb +60 -1
- data/lib/rubocop/cop/style/format_string.rb +44 -9
- data/lib/rubocop/cop/style/format_string_token.rb +50 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +2 -1
- data/lib/rubocop/cop/style/global_vars.rb +5 -2
- data/lib/rubocop/cop/style/guard_clause.rb +57 -40
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +31 -9
- data/lib/rubocop/cop/style/hash_conversion.rb +39 -11
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -2
- 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 +19 -5
- data/lib/rubocop/cop/style/hash_transform_keys.rb +17 -7
- data/lib/rubocop/cop/style/hash_transform_values.rb +17 -7
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +38 -10
- data/lib/rubocop/cop/style/if_inside_else.rb +36 -8
- data/lib/rubocop/cop/style/if_unless_modifier.rb +80 -76
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +17 -14
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +4 -1
- data/lib/rubocop/cop/style/if_with_semicolon.rb +61 -8
- data/lib/rubocop/cop/style/inline_comment.rb +5 -2
- data/lib/rubocop/cop/style/inverse_methods.rb +24 -2
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +25 -5
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/it_block_parameter.rb +94 -4
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +4 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +10 -4
- data/lib/rubocop/cop/style/lambda.rb +45 -2
- data/lib/rubocop/cop/style/lambda_call.rb +24 -8
- 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 +2 -3
- data/lib/rubocop/cop/style/map_join.rb +123 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +1 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +102 -20
- 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 +42 -6
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +36 -8
- data/lib/rubocop/cop/style/method_def_parentheses.rb +36 -8
- data/lib/rubocop/cop/style/min_max_comparison.rb +4 -1
- 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_if_modifier.rb +45 -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 +14 -13
- 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 +24 -10
- data/lib/rubocop/cop/style/nil_comparison.rb +50 -12
- 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/one_class_per_file.rb +115 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +18 -6
- 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 +26 -7
- 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/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 +3 -2
- data/lib/rubocop/cop/style/raise_args.rb +20 -10
- 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_assignment.rb +12 -2
- data/lib/rubocop/cop/style/redundant_begin.rb +25 -7
- data/lib/rubocop/cop/style/redundant_condition.rb +41 -23
- data/lib/rubocop/cop/style/redundant_constant_base.rb +42 -6
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +13 -1
- 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 +21 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +10 -2
- 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 +43 -7
- data/lib/rubocop/cop/style/redundant_freeze.rb +11 -3
- data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6 -1
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +49 -10
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +82 -115
- data/lib/rubocop/cop/style/redundant_min_max_by.rb +93 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +105 -83
- data/lib/rubocop/cop/style/redundant_percent_q.rb +5 -3
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +13 -2
- 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 +12 -4
- data/lib/rubocop/cop/style/redundant_return.rb +4 -3
- data/lib/rubocop/cop/style/redundant_self.rb +11 -2
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -2
- 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_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 +106 -28
- data/lib/rubocop/cop/style/require_order.rb +25 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +15 -14
- data/lib/rubocop/cop/style/return_nil.rb +17 -2
- 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 +18 -9
- 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 +52 -23
- data/lib/rubocop/cop/style/self_assignment.rb +13 -16
- data/lib/rubocop/cop/style/semicolon.rb +39 -13
- 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 +19 -7
- data/lib/rubocop/cop/style/single_line_methods.rb +24 -5
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +25 -7
- data/lib/rubocop/cop/style/special_global_vars.rb +7 -2
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +31 -5
- data/lib/rubocop/cop/style/static_class.rb +21 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +25 -6
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +36 -1
- data/lib/rubocop/cop/style/super_arguments.rb +6 -4
- data/lib/rubocop/cop/style/symbol_proc.rb +32 -14
- 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 +2 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- 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 +1 -1
- 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 -0
- 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 +171 -48
- data/lib/rubocop/cop/util.rb +5 -8
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -1
- data/lib/rubocop/cop/variable_force/branch.rb +30 -6
- data/lib/rubocop/cop/variable_force/variable.rb +33 -9
- data/lib/rubocop/cops_documentation_generator.rb +27 -9
- data/lib/rubocop/directive_comment.rb +116 -7
- 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 +39 -10
- data/lib/rubocop/formatter/emacs_style_formatter.rb +3 -1
- data/lib/rubocop/formatter/formatter_set.rb +7 -2
- data/lib/rubocop/formatter/github_actions_formatter.rb +6 -5
- data/lib/rubocop/formatter/html_formatter.rb +2 -4
- data/lib/rubocop/formatter/json_formatter.rb +82 -7
- data/lib/rubocop/formatter/junit_formatter.rb +27 -10
- data/lib/rubocop/formatter/offense_count_formatter.rb +4 -3
- data/lib/rubocop/formatter/pacman_formatter.rb +3 -1
- 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 -42
- data/lib/rubocop/lsp/disable_comment_edits.rb +135 -0
- data/lib/rubocop/lsp/routes.rb +130 -83
- data/lib/rubocop/lsp/runtime.rb +64 -15
- data/lib/rubocop/lsp/server.rb +6 -2
- data/lib/rubocop/lsp/stdin_runner.rb +35 -2
- data/lib/rubocop/lsp.rb +5 -2
- data/lib/rubocop/magic_comment.rb +47 -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 +141 -13
- data/lib/rubocop/path_util.rb +16 -5
- data/lib/rubocop/pending_cops_reporter.rb +1 -6
- data/lib/rubocop/plugin/configuration_integrator.rb +13 -3
- data/lib/rubocop/plugin/loader.rb +2 -2
- data/lib/rubocop/project_index_loader.rb +82 -0
- data/lib/rubocop/rake_task.rb +2 -3
- data/lib/rubocop/remote_config.rb +18 -13
- data/lib/rubocop/result_cache.rb +102 -59
- data/lib/rubocop/rspec/cop_helper.rb +8 -0
- data/lib/rubocop/rspec/expect_offense.rb +2 -4
- data/lib/rubocop/rspec/shared_contexts.rb +53 -5
- data/lib/rubocop/rspec/support.rb +2 -1
- data/lib/rubocop/runner.rb +362 -106
- data/lib/rubocop/server/cache.rb +21 -40
- data/lib/rubocop/server/cli.rb +2 -4
- data/lib/rubocop/server/core.rb +8 -0
- data/lib/rubocop/server.rb +14 -0
- data/lib/rubocop/target_finder.rb +18 -8
- data/lib/rubocop/target_ruby.rb +42 -22
- 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 +23 -7
- data/lib/rubocop.rb +34 -701
- data/lib/ruby_lsp/rubocop/addon.rb +1 -2
- metadata +80 -14
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +0 -46
data/lib/rubocop/cop/team.rb
CHANGED
|
@@ -9,8 +9,11 @@ module RuboCop
|
|
|
9
9
|
# For performance reasons, Team will first dispatch cops & forces in two groups,
|
|
10
10
|
# first the ones needed for autocorrection (if any), then the rest
|
|
11
11
|
# (unless autocorrections happened).
|
|
12
|
-
# rubocop:disable Metrics/ClassLength
|
|
12
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
13
13
|
class Team
|
|
14
|
+
InvestigationResult = Struct.new(:report, :corrector)
|
|
15
|
+
private_constant :InvestigationResult
|
|
16
|
+
|
|
14
17
|
# @return [Team]
|
|
15
18
|
def self.new(cop_or_classes, config, options = {})
|
|
16
19
|
# Support v0 api:
|
|
@@ -26,8 +29,17 @@ module RuboCop
|
|
|
26
29
|
|
|
27
30
|
# @return [Team] with cops assembled from the given `cop_classes`
|
|
28
31
|
def self.mobilize(cop_classes, config, options = {})
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
if cop_classes.is_a?(Registry)
|
|
33
|
+
# Instantiate only the enabled cops so that disabled lazy-loaded cops are not loaded.
|
|
34
|
+
# The registry is kept on standby to mobilize a disabled cop when a comment directive
|
|
35
|
+
# opts it back in.
|
|
36
|
+
cops = cop_classes.enabled(config).map { |cop_class| cop_class.new(config, options) }
|
|
37
|
+
team = new(cops, config, options)
|
|
38
|
+
team.standby_registry = cop_classes
|
|
39
|
+
team
|
|
40
|
+
else
|
|
41
|
+
new(mobilize_cops(cop_classes, config, options), config, options)
|
|
42
|
+
end
|
|
31
43
|
end
|
|
32
44
|
|
|
33
45
|
# @return [Array<Cop::Base>]
|
|
@@ -56,12 +68,30 @@ module RuboCop
|
|
|
56
68
|
|
|
57
69
|
attr_reader :errors, :warnings, :updated_source_file, :cops
|
|
58
70
|
|
|
71
|
+
# When set to true, the corrected source is not written back to the
|
|
72
|
+
# inspected file; it is exposed through `#updated_source` instead.
|
|
73
|
+
# @api private
|
|
74
|
+
attr_accessor :defer_corrections
|
|
75
|
+
|
|
76
|
+
# The corrected source of the last investigation, if corrections were
|
|
77
|
+
# made with `#defer_corrections` enabled.
|
|
78
|
+
# @api private
|
|
79
|
+
attr_reader :updated_source
|
|
80
|
+
|
|
81
|
+
# Registry used to mobilize cops that were not instantiated because they are disabled in
|
|
82
|
+
# the config, when a comment directive opts them back in for a file.
|
|
83
|
+
#
|
|
84
|
+
# @api private
|
|
85
|
+
attr_writer :standby_registry
|
|
86
|
+
|
|
59
87
|
alias updated_source_file? updated_source_file
|
|
60
88
|
|
|
61
89
|
def initialize(cops, config = nil, options = {})
|
|
62
90
|
@cops = cops
|
|
63
91
|
@config = config
|
|
64
92
|
@options = options
|
|
93
|
+
@standby_registry = nil
|
|
94
|
+
@standby_cops = {}
|
|
65
95
|
reset
|
|
66
96
|
@ready = true
|
|
67
97
|
@registry = Registry.new(cops, options.dup)
|
|
@@ -89,31 +119,25 @@ module RuboCop
|
|
|
89
119
|
|
|
90
120
|
# @return [Commissioner::InvestigationReport]
|
|
91
121
|
def investigate(processed_source, offset: 0, original: processed_source)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
# To speed things up, run autocorrecting cops by themselves, and only
|
|
97
|
-
# run the other cops when no corrections are left
|
|
98
|
-
on_duty = roundup_relevant_cops(processed_source)
|
|
122
|
+
result = investigate_with_corrector(processed_source, offset: offset, original: original)
|
|
123
|
+
autocorrect(processed_source, result.corrector)
|
|
124
|
+
result.report
|
|
125
|
+
end
|
|
99
126
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
127
|
+
# @return [Array<Offense>]
|
|
128
|
+
def investigate_fragments(fragments, original:)
|
|
129
|
+
@updated_source_file = false
|
|
103
130
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
report = report.merge(investigate_partial(other_cops, processed_source,
|
|
109
|
-
offset: offset, original: original))
|
|
110
|
-
end
|
|
131
|
+
offenses, errors, warnings, corrector =
|
|
132
|
+
fragments.each_with_object([[], [], [], nil]) do |fragment, data|
|
|
133
|
+
investigate_fragment(fragment, original, data)
|
|
134
|
+
end
|
|
111
135
|
|
|
112
|
-
|
|
136
|
+
autocorrect(original, corrector)
|
|
137
|
+
@errors = errors
|
|
138
|
+
@warnings = warnings
|
|
113
139
|
|
|
114
|
-
|
|
115
|
-
ensure
|
|
116
|
-
@ready = false
|
|
140
|
+
offenses
|
|
117
141
|
end
|
|
118
142
|
|
|
119
143
|
# @deprecated
|
|
@@ -136,23 +160,26 @@ module RuboCop
|
|
|
136
160
|
|
|
137
161
|
private
|
|
138
162
|
|
|
139
|
-
def autocorrect(processed_source,
|
|
163
|
+
def autocorrect(processed_source, corrector)
|
|
140
164
|
@updated_source_file = false
|
|
165
|
+
@updated_source = nil
|
|
141
166
|
return unless autocorrect?
|
|
142
|
-
return
|
|
167
|
+
return unless corrector
|
|
168
|
+
return if corrector.empty?
|
|
143
169
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
170
|
+
apply_correction(processed_source, corrector.rewrite)
|
|
171
|
+
@updated_source_file = true
|
|
172
|
+
end
|
|
147
173
|
|
|
174
|
+
def apply_correction(processed_source, new_source)
|
|
148
175
|
if @options[:stdin]
|
|
149
176
|
# holds source read in from stdin, when --stdin option is used
|
|
150
177
|
@options[:stdin] = new_source
|
|
178
|
+
elsif defer_corrections
|
|
179
|
+
@updated_source = new_source
|
|
151
180
|
else
|
|
152
|
-
|
|
153
|
-
File.write(filename, new_source)
|
|
181
|
+
RuboCop::Util.replace_file_contents(processed_source.file_path, new_source)
|
|
154
182
|
end
|
|
155
|
-
@updated_source_file = true
|
|
156
183
|
end
|
|
157
184
|
|
|
158
185
|
def be_ready
|
|
@@ -160,6 +187,7 @@ module RuboCop
|
|
|
160
187
|
|
|
161
188
|
reset
|
|
162
189
|
@cops.map!(&:ready)
|
|
190
|
+
@standby_cops.transform_values! { |cop| cop&.ready }
|
|
163
191
|
@ready = true
|
|
164
192
|
end
|
|
165
193
|
|
|
@@ -174,17 +202,101 @@ module RuboCop
|
|
|
174
202
|
commissioner.investigate(processed_source, offset: offset, original: original)
|
|
175
203
|
end
|
|
176
204
|
|
|
205
|
+
def investigate_with_corrector(processed_source, offset:, original:)
|
|
206
|
+
be_ready
|
|
207
|
+
|
|
208
|
+
# The autocorrection process may have to be repeated multiple times
|
|
209
|
+
# until there are no corrections left to perform
|
|
210
|
+
# To speed things up, run autocorrecting cops by themselves, and only
|
|
211
|
+
# run the other cops when no corrections are left
|
|
212
|
+
on_duty = roundup_relevant_cops(processed_source)
|
|
213
|
+
|
|
214
|
+
autocorrect_cops, other_cops = partition_by_correcting(on_duty)
|
|
215
|
+
report = investigate_partial(autocorrect_cops, processed_source,
|
|
216
|
+
offset: offset, original: original)
|
|
217
|
+
|
|
218
|
+
corrector = collated_corrector(report, offset: offset, original: original)
|
|
219
|
+
|
|
220
|
+
unless corrector
|
|
221
|
+
# If we corrected some errors, another round of inspection will be
|
|
222
|
+
# done, and any other offenses will be caught then, so only need
|
|
223
|
+
# to check other_cops if no correction was done
|
|
224
|
+
report = report.merge(investigate_partial(other_cops, processed_source,
|
|
225
|
+
offset: offset, original: original))
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
process_errors(processed_source.path, report.errors)
|
|
229
|
+
|
|
230
|
+
InvestigationResult.new(report, corrector)
|
|
231
|
+
ensure
|
|
232
|
+
@ready = false
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def investigate_fragment(fragment, original, data)
|
|
236
|
+
offenses, errors, warnings, corrector = data
|
|
237
|
+
result = investigate_with_corrector(
|
|
238
|
+
fragment[:processed_source],
|
|
239
|
+
offset: fragment[:offset],
|
|
240
|
+
original: original
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
offenses.concat(result.report.offenses)
|
|
244
|
+
if result.corrector
|
|
245
|
+
corrector ||= Corrector.new(original)
|
|
246
|
+
merge_corrector!(corrector, result.corrector, offset: 0)
|
|
247
|
+
data[3] = corrector
|
|
248
|
+
end
|
|
249
|
+
errors.concat(@errors)
|
|
250
|
+
warnings.concat(@warnings)
|
|
251
|
+
end
|
|
252
|
+
|
|
177
253
|
# @return [Array<cop>]
|
|
254
|
+
# A cop whose unsafe correction is skipped still inserts todo comments
|
|
255
|
+
# under `--disable-uncorrectable`, so it must run with the correcting
|
|
256
|
+
# cops - correctors of the later `other_cops` round are never applied.
|
|
257
|
+
def partition_by_correcting(cops)
|
|
258
|
+
cops.partition do |cop|
|
|
259
|
+
cop.autocorrect? || cop.skipped_unsafe_correction_with_disable_uncorrectable?
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
178
263
|
def roundup_relevant_cops(processed_source)
|
|
179
|
-
cops.select do |cop|
|
|
180
|
-
next true if processed_source.comment_config.cop_opted_in?(cop)
|
|
264
|
+
(cops + opted_in_standby_cops(processed_source)).select do |cop|
|
|
181
265
|
next false if cop.excluded_file?(processed_source.file_path)
|
|
266
|
+
next true if processed_source.comment_config.cop_opted_in?(cop)
|
|
182
267
|
next false unless @registry.enabled?(cop, @config)
|
|
183
268
|
|
|
184
269
|
support_target_ruby_version?(cop) && support_target_rails_version?(cop)
|
|
185
270
|
end
|
|
186
271
|
end
|
|
187
272
|
|
|
273
|
+
# Cops that were not mobilized because they are disabled in the config,
|
|
274
|
+
# but are opted back in for the given file by an `enable` comment directive.
|
|
275
|
+
# Their classes are loaded on demand.
|
|
276
|
+
#
|
|
277
|
+
# @return [Array<cop>]
|
|
278
|
+
def opted_in_standby_cops(processed_source)
|
|
279
|
+
return [] unless @standby_registry
|
|
280
|
+
|
|
281
|
+
opted_in_names = processed_source.comment_config.opt_in_cops
|
|
282
|
+
return [] if opted_in_names.empty?
|
|
283
|
+
|
|
284
|
+
@mobilized_cop_names ||= Set.new(cops.map(&:cop_name))
|
|
285
|
+
opted_in_names.filter_map do |cop_name|
|
|
286
|
+
next if @mobilized_cop_names.include?(cop_name)
|
|
287
|
+
|
|
288
|
+
standby_cop(cop_name)
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def standby_cop(cop_name)
|
|
293
|
+
return @standby_cops[cop_name] if @standby_cops.key?(cop_name)
|
|
294
|
+
|
|
295
|
+
cop_class = @standby_registry.find_by_cop_name(cop_name)
|
|
296
|
+
|
|
297
|
+
@standby_cops[cop_name] = cop_class&.new(@config, @options)
|
|
298
|
+
end
|
|
299
|
+
|
|
188
300
|
def support_target_ruby_version?(cop)
|
|
189
301
|
return true unless cop.class.respond_to?(:support_target_ruby_version?)
|
|
190
302
|
|
|
@@ -200,43 +312,55 @@ module RuboCop
|
|
|
200
312
|
cop.class.support_target_rails_version?(cop.target_rails_version)
|
|
201
313
|
end
|
|
202
314
|
|
|
203
|
-
def
|
|
315
|
+
def collated_corrector(report, offset:, original:)
|
|
316
|
+
return unless autocorrect?
|
|
317
|
+
return if report.processed_source.parser_error
|
|
318
|
+
|
|
204
319
|
corrector = collate_corrections(report, offset: offset, original: original)
|
|
205
320
|
|
|
206
|
-
corrector
|
|
321
|
+
corrector unless corrector.empty?
|
|
207
322
|
end
|
|
208
323
|
|
|
209
324
|
def collate_corrections(report, offset:, original:)
|
|
210
325
|
corrector = Corrector.new(original)
|
|
211
326
|
|
|
212
327
|
each_corrector(report) do |to_merge|
|
|
213
|
-
|
|
214
|
-
if offset.positive?
|
|
215
|
-
corrector.import!(to_merge, offset: offset)
|
|
216
|
-
else
|
|
217
|
-
corrector.merge!(to_merge)
|
|
218
|
-
end
|
|
219
|
-
end
|
|
328
|
+
merge_corrector!(corrector, to_merge, offset: offset)
|
|
220
329
|
end
|
|
221
330
|
|
|
222
331
|
corrector
|
|
223
332
|
end
|
|
224
333
|
|
|
334
|
+
def merge_corrector!(corrector, to_merge, offset:)
|
|
335
|
+
suppress_clobbering do
|
|
336
|
+
if corrector.source_buffer == to_merge.source_buffer
|
|
337
|
+
corrector.merge!(to_merge)
|
|
338
|
+
else
|
|
339
|
+
corrector.import!(to_merge, offset: offset)
|
|
340
|
+
end
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
225
344
|
def each_corrector(report)
|
|
226
|
-
|
|
345
|
+
applied = []
|
|
227
346
|
report.cop_reports.each do |cop_report|
|
|
228
|
-
|
|
347
|
+
cop_class = cop_report.cop.class
|
|
229
348
|
corrector = cop_report.corrector
|
|
230
349
|
|
|
231
350
|
next if corrector.nil? || corrector.empty?
|
|
232
|
-
next if
|
|
351
|
+
next if applied.any? { |other| autocorrect_incompatible?(cop_class, other) }
|
|
233
352
|
|
|
234
353
|
yield corrector
|
|
235
354
|
|
|
236
|
-
|
|
355
|
+
applied << cop_class
|
|
237
356
|
end
|
|
238
357
|
end
|
|
239
358
|
|
|
359
|
+
def autocorrect_incompatible?(cop_class, other)
|
|
360
|
+
cop_class.autocorrect_incompatible_with.include?(other) ||
|
|
361
|
+
other.autocorrect_incompatible_with.include?(cop_class)
|
|
362
|
+
end
|
|
363
|
+
|
|
240
364
|
def suppress_clobbering
|
|
241
365
|
yield
|
|
242
366
|
rescue ::Parser::ClobberingError
|
|
@@ -285,6 +409,5 @@ module RuboCop
|
|
|
285
409
|
end
|
|
286
410
|
end
|
|
287
411
|
end
|
|
288
|
-
# rubocop:enable Metrics/ClassLength
|
|
289
412
|
end
|
|
290
413
|
end
|
data/lib/rubocop/cop/util.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
# This module contains a collection of useful utility methods.
|
|
6
|
-
# rubocop:disable Metrics/ModuleLength
|
|
6
|
+
# rubocop:disable-next Metrics/ModuleLength
|
|
7
7
|
module Util
|
|
8
8
|
include PathUtil
|
|
9
9
|
|
|
@@ -35,7 +35,7 @@ module RuboCop
|
|
|
35
35
|
node.loc_is?(:end, ')')
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
38
|
+
# rubocop:disable-next Metrics/AbcSize, Metrics/MethodLength
|
|
39
39
|
def add_parentheses(node, corrector)
|
|
40
40
|
if node.args_type?
|
|
41
41
|
arguments_range = node.source_range
|
|
@@ -55,7 +55,6 @@ module RuboCop
|
|
|
55
55
|
corrector.insert_after(args_end(node), ')')
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
59
58
|
|
|
60
59
|
def any_descendant?(node, *types)
|
|
61
60
|
if block_given?
|
|
@@ -64,7 +63,7 @@ module RuboCop
|
|
|
64
63
|
end
|
|
65
64
|
else
|
|
66
65
|
# Use a block version to avoid allocating enumerators.
|
|
67
|
-
node.each_descendant do # rubocop:disable Lint/UnreachableLoop
|
|
66
|
+
node.each_descendant do # rubocop:disable Lint/UnreachableLoop -- the block form avoids allocating an enumerator
|
|
68
67
|
return true
|
|
69
68
|
end
|
|
70
69
|
end
|
|
@@ -117,10 +116,9 @@ module RuboCop
|
|
|
117
116
|
# with calls chained to the end of it.
|
|
118
117
|
def first_part_of_call_chain(node)
|
|
119
118
|
while node
|
|
120
|
-
|
|
121
|
-
when :send
|
|
119
|
+
if node.call_type?
|
|
122
120
|
node = node.receiver
|
|
123
|
-
|
|
121
|
+
elsif node.any_block_type?
|
|
124
122
|
node = node.send_node
|
|
125
123
|
else
|
|
126
124
|
break
|
|
@@ -211,6 +209,5 @@ module RuboCop
|
|
|
211
209
|
source == target || (source.is_a?(Array) && source.include?(target))
|
|
212
210
|
end
|
|
213
211
|
end
|
|
214
|
-
# rubocop:enable Metrics/ModuleLength
|
|
215
212
|
end
|
|
216
213
|
end
|
|
@@ -254,8 +254,8 @@ module RuboCop
|
|
|
254
254
|
end
|
|
255
255
|
end
|
|
256
256
|
|
|
257
|
-
# Mix-in module for
|
|
258
|
-
module
|
|
257
|
+
# Mix-in module for operator control structures.
|
|
258
|
+
module Operator
|
|
259
259
|
def always_run?
|
|
260
260
|
left_body?
|
|
261
261
|
end
|
|
@@ -263,7 +263,15 @@ module RuboCop
|
|
|
263
263
|
|
|
264
264
|
# left_body && right_body
|
|
265
265
|
class And < Base
|
|
266
|
-
include
|
|
266
|
+
include Operator
|
|
267
|
+
|
|
268
|
+
define_predicate :left_body?, child_index: 0
|
|
269
|
+
define_predicate :right_body?, child_index: 1
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# left_body &&= right_body
|
|
273
|
+
class AndAsgn < Base
|
|
274
|
+
include Operator
|
|
267
275
|
|
|
268
276
|
define_predicate :left_body?, child_index: 0
|
|
269
277
|
define_predicate :right_body?, child_index: 1
|
|
@@ -271,7 +279,23 @@ module RuboCop
|
|
|
271
279
|
|
|
272
280
|
# left_body || right_body
|
|
273
281
|
class Or < Base
|
|
274
|
-
include
|
|
282
|
+
include Operator
|
|
283
|
+
|
|
284
|
+
define_predicate :left_body?, child_index: 0
|
|
285
|
+
define_predicate :right_body?, child_index: 1
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
# left_body ||= right_body
|
|
289
|
+
class OrAsgn < Base
|
|
290
|
+
include Operator
|
|
291
|
+
|
|
292
|
+
define_predicate :left_body?, child_index: 0
|
|
293
|
+
define_predicate :right_body?, child_index: 1
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# e.g. left_body += right_body
|
|
297
|
+
class OpAsgn < Base
|
|
298
|
+
include Operator
|
|
275
299
|
|
|
276
300
|
define_predicate :left_body?, child_index: 0
|
|
277
301
|
define_predicate :right_body?, child_index: 1
|
|
@@ -322,8 +346,8 @@ module RuboCop
|
|
|
322
346
|
end
|
|
323
347
|
end
|
|
324
348
|
|
|
325
|
-
CLASSES_BY_TYPE = Base.classes.
|
|
326
|
-
|
|
349
|
+
CLASSES_BY_TYPE = Base.classes.to_h do |klass|
|
|
350
|
+
[klass.type, klass]
|
|
327
351
|
end
|
|
328
352
|
end
|
|
329
353
|
end
|
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
|
47
47
|
!@references.empty?
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
50
|
+
# rubocop:disable-next Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
51
51
|
def reference!(node)
|
|
52
52
|
reference = Reference.new(node, @scope)
|
|
53
53
|
@references << reference
|
|
@@ -63,23 +63,47 @@ module RuboCop
|
|
|
63
63
|
# if/unless keyword. A preceding assignment is needed to put the
|
|
64
64
|
# variable in scope. For this reason we skip to the next assignment
|
|
65
65
|
# here.
|
|
66
|
-
next if in_modifier_conditional?(assignment)
|
|
66
|
+
next if in_modifier_conditional?(assignment, node)
|
|
67
67
|
|
|
68
68
|
break if !assignment.branch || assignment.branch == reference.branch
|
|
69
69
|
|
|
70
|
-
unless assignment.branch.may_run_incompletely?
|
|
70
|
+
unless assignment.branch.may_run_incompletely? ||
|
|
71
|
+
exception_may_reach?(assignment.branch, node)
|
|
71
72
|
(consumed_branches ||= Set.new) << assignment.branch
|
|
72
73
|
end
|
|
73
74
|
end
|
|
74
75
|
end
|
|
75
|
-
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
76
76
|
|
|
77
|
-
def in_modifier_conditional?(assignment)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return false if parent.nil?
|
|
77
|
+
def in_modifier_conditional?(assignment, reference_node)
|
|
78
|
+
conditional = modifier_conditional_of(assignment.node)
|
|
79
|
+
return false unless conditional
|
|
81
80
|
|
|
82
|
-
|
|
81
|
+
# The out-of-scope problem only affects a reference in the modifier body (to the
|
|
82
|
+
# left of the keyword); a reference after the modifier is put in scope by the
|
|
83
|
+
# condition's assignment, so an earlier assignment there is genuinely useless.
|
|
84
|
+
covers?(conditional, reference_node) && !covers?(conditional.condition, reference_node)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# A branch nested in the main body of `begin` can be cut short by an exception
|
|
88
|
+
# too. An earlier assignment in it is visible to a reference in the `rescue` or
|
|
89
|
+
# `ensure` clause, or after a `rescue` that handles the exception.
|
|
90
|
+
def exception_may_reach?(branch, reference_node)
|
|
91
|
+
branch.each_ancestor.any? do |ancestor|
|
|
92
|
+
next false unless ancestor.may_run_incompletely?
|
|
93
|
+
next false if covers?(ancestor.child_node, reference_node)
|
|
94
|
+
|
|
95
|
+
ancestor.control_node.rescue_type? || covers?(ancestor.control_node, reference_node)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def modifier_conditional_of(node)
|
|
100
|
+
node.each_ancestor(:if, :while, :until).find do |conditional|
|
|
101
|
+
conditional.modifier_form? && covers?(conditional.condition, node)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def covers?(container, node)
|
|
106
|
+
container.equal?(node) || container.source_range.contains?(node.source_range)
|
|
83
107
|
end
|
|
84
108
|
|
|
85
109
|
def capture_with_block!
|
|
@@ -6,7 +6,7 @@ require 'yard'
|
|
|
6
6
|
# Class for generating documentation of all cops departments
|
|
7
7
|
# @api private
|
|
8
8
|
class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
9
|
-
include
|
|
9
|
+
include RuboCop::Cop::Documentation
|
|
10
10
|
|
|
11
11
|
CopData = Struct.new(
|
|
12
12
|
:cop, :description, :example_objects, :safety_objects, :see_objects, :config, keyword_init: true
|
|
@@ -20,6 +20,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
20
20
|
safety: ->(data) { safety_object(data.safety_objects, data.cop) },
|
|
21
21
|
examples: ->(data) { examples(data.example_objects, data.cop) },
|
|
22
22
|
configuration: ->(data) { configurations(data.cop.department, data.cop, data.config) },
|
|
23
|
+
preview: ->(data) { preview_defaults(data.cop) },
|
|
23
24
|
references: ->(data) { references(data.cop, data.see_objects) }
|
|
24
25
|
}.freeze
|
|
25
26
|
|
|
@@ -137,7 +138,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
137
138
|
"NOTE: Requires Ruby version #{requirement}\n\n"
|
|
138
139
|
end
|
|
139
140
|
|
|
140
|
-
# rubocop:disable Metrics/MethodLength
|
|
141
|
+
# rubocop:disable-next Metrics/MethodLength
|
|
141
142
|
def properties(cop)
|
|
142
143
|
header = [
|
|
143
144
|
'Enabled by default', 'Safe', 'Supports autocorrection', 'Version Added',
|
|
@@ -160,7 +161,6 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
160
161
|
]]
|
|
161
162
|
"#{to_table(header, content)}\n"
|
|
162
163
|
end
|
|
163
|
-
# rubocop:enable Metrics/MethodLength
|
|
164
164
|
|
|
165
165
|
def cop_header(cop)
|
|
166
166
|
content = +"\n"
|
|
@@ -195,7 +195,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
195
195
|
def configurations(department, cop, cop_config)
|
|
196
196
|
header = ['Name', 'Default value', 'Configurable values']
|
|
197
197
|
configs = cop_config.each_key.reject do |key|
|
|
198
|
-
key == 'AllowMultipleStyles' ||
|
|
198
|
+
key == 'AllowMultipleStyles' || key == 'Preview' ||
|
|
199
199
|
(key != 'SupportedTypes' && key.start_with?('Supported'))
|
|
200
200
|
end
|
|
201
201
|
return '' if configs.empty?
|
|
@@ -210,6 +210,22 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
210
210
|
cop_subsection('Configurable attributes', cop) + to_table(header, content)
|
|
211
211
|
end
|
|
212
212
|
|
|
213
|
+
def preview_defaults(cop)
|
|
214
|
+
cop_config = config.for_cop(cop)
|
|
215
|
+
preview = cop_config['Preview']
|
|
216
|
+
return '' unless preview.is_a?(Hash)
|
|
217
|
+
|
|
218
|
+
header = ['Name', 'Current default', 'Preview default']
|
|
219
|
+
content = preview.map do |name, value|
|
|
220
|
+
[name, format_table_value(cop_config[name]), format_table_value(value)]
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
cop_subsection('Preview defaults', cop) +
|
|
224
|
+
'These defaults apply under xref:versioning.adoc#preview[Preview] and are ' \
|
|
225
|
+
"expected to become the regular defaults in the next major release.\n\n" +
|
|
226
|
+
to_table(header, content)
|
|
227
|
+
end
|
|
228
|
+
|
|
213
229
|
def configuration_name(department, name)
|
|
214
230
|
return name unless name == 'AllowMultilineFinalElement'
|
|
215
231
|
|
|
@@ -217,7 +233,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
217
233
|
"xref:#{filename}#allowmultilinefinalelement[AllowMultilineFinalElement]"
|
|
218
234
|
end
|
|
219
235
|
|
|
220
|
-
# rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength
|
|
236
|
+
# rubocop:disable-next Metrics/CyclomaticComplexity,Metrics/MethodLength
|
|
221
237
|
def configurable_values(cop_config, name)
|
|
222
238
|
case name
|
|
223
239
|
when /^Enforced/
|
|
@@ -244,7 +260,6 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
244
260
|
end
|
|
245
261
|
end
|
|
246
262
|
end
|
|
247
|
-
# rubocop:enable Metrics/CyclomaticComplexity,Metrics/MethodLength
|
|
248
263
|
|
|
249
264
|
def to_table(header, content)
|
|
250
265
|
table = ['|===', "| #{header.join(' | ')}\n\n"].join("\n")
|
|
@@ -303,7 +318,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
303
318
|
"\ninclude::../partials/#{filename}[]\n"
|
|
304
319
|
end
|
|
305
320
|
|
|
306
|
-
# rubocop:disable Metrics/MethodLength
|
|
321
|
+
# rubocop:disable-next Metrics/MethodLength
|
|
307
322
|
def print_cops_of_department(department)
|
|
308
323
|
selected_cops = cops_of_department(department)
|
|
309
324
|
content = +<<~HEADER
|
|
@@ -323,7 +338,6 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
323
338
|
file.write("#{content.strip}\n")
|
|
324
339
|
end
|
|
325
340
|
end
|
|
326
|
-
# rubocop:enable Metrics/MethodLength
|
|
327
341
|
|
|
328
342
|
def print_cop_with_doc(cop) # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
|
|
329
343
|
cop_config = config.for_cop(cop)
|
|
@@ -392,7 +406,11 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
|
392
406
|
def cop_status(status)
|
|
393
407
|
return 'Disabled' unless status
|
|
394
408
|
|
|
395
|
-
status
|
|
409
|
+
case status
|
|
410
|
+
when 'pending' then 'Pending'
|
|
411
|
+
when 'preview' then 'Preview'
|
|
412
|
+
else 'Enabled'
|
|
413
|
+
end
|
|
396
414
|
end
|
|
397
415
|
|
|
398
416
|
# HTML anchor are somewhat limited in what characters they can contain, just
|