rubocop 1.26.0 → 1.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +7 -5
- data/config/default.yml +254 -47
- data/config/obsoletion.yml +35 -2
- data/exe/rubocop +15 -7
- data/lib/rubocop/cache_config.rb +29 -0
- data/lib/rubocop/cli/command/{auto_genenerate_config.rb → auto_generate_config.rb} +20 -5
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/cli/command/suggest_extensions.rb +54 -16
- data/lib/rubocop/cli.rb +2 -0
- data/lib/rubocop/config.rb +6 -2
- data/lib/rubocop/config_finder.rb +68 -0
- data/lib/rubocop/config_loader.rb +15 -41
- data/lib/rubocop/config_loader_resolver.rb +2 -6
- data/lib/rubocop/config_obsoletion/changed_parameter.rb +5 -0
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +3 -1
- data/lib/rubocop/config_obsoletion/parameter_rule.rb +4 -0
- data/lib/rubocop/config_obsoletion.rb +7 -2
- data/lib/rubocop/config_validator.rb +21 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +8 -2
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +6 -2
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -7
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +5 -5
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -2
- data/lib/rubocop/cop/cop.rb +1 -1
- data/lib/rubocop/cop/corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +4 -2
- data/lib/rubocop/cop/correctors/if_then_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +7 -1
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +59 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/dependency_version.rb +156 -0
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +92 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +5 -12
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +21 -21
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator/require_file_injector.rb +2 -2
- data/lib/rubocop/cop/generator.rb +5 -1
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +96 -0
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +80 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -5
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +69 -0
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +62 -0
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +60 -0
- data/lib/rubocop/cop/internal_affairs.rb +5 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +22 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +17 -13
- data/lib/rubocop/cop/layout/block_end_newline.rb +36 -6
- data/lib/rubocop/cop/layout/case_indentation.rb +17 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/comment_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/condition_position.rb +1 -1
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_comment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +5 -2
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +25 -4
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +7 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +10 -10
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +10 -10
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/end_of_line.rb +5 -5
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +34 -29
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +21 -14
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +52 -13
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +2 -0
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +16 -10
- data/lib/rubocop/cop/layout/initial_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +1 -1
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +112 -0
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +130 -0
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/line_length.rb +11 -6
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +2 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +4 -2
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -2
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +45 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/redundant_line_break.rb +5 -6
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
- data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +5 -3
- data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +10 -10
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +33 -15
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +1 -1
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +9 -9
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +3 -3
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +1 -1
- data/lib/rubocop/cop/legacy/corrector.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +28 -7
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +7 -7
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -5
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +51 -0
- data/lib/rubocop/cop/lint/debugger.rb +27 -17
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +15 -9
- data/lib/rubocop/cop/lint/deprecated_constants.rb +1 -1
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_require.rb +11 -2
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +3 -3
- data/lib/rubocop/cop/lint/empty_block.rb +2 -2
- data/lib/rubocop/cop/lint/empty_class.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +99 -3
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
- data/lib/rubocop/cop/lint/empty_file.rb +1 -1
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +4 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +4 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +10 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +11 -4
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +2 -2
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +10 -3
- data/lib/rubocop/cop/lint/literal_as_condition.rb +6 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +5 -1
- data/lib/rubocop/cop/lint/loop.rb +2 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/missing_super.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +25 -6
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +157 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +17 -5
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +32 -10
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +2 -2
- data/lib/rubocop/cop/lint/percent_string_array.rb +1 -1
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
- data/lib/rubocop/cop/lint/raise_exception.rb +2 -2
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +6 -6
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +16 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +14 -11
- data/lib/rubocop/cop/lint/redundant_with_object.rb +13 -12
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +51 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +3 -3
- data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +57 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/return_in_void_context.rb +6 -18
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +38 -1
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +1 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +16 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +32 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +3 -3
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +4 -3
- data/lib/rubocop/cop/lint/syntax.rb +2 -3
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/to_json.rb +1 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +2 -2
- data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +3 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +13 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +1 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +9 -7
- data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +2 -3
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2 -2
- data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -2
- data/lib/rubocop/cop/lint/useless_times.rb +2 -2
- data/lib/rubocop/cop/lint/void.rb +3 -1
- data/lib/rubocop/cop/metrics/abc_size.rb +4 -2
- data/lib/rubocop/cop/metrics/block_length.rb +7 -7
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +1 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +9 -8
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -3
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +22 -3
- data/lib/rubocop/cop/mixin/allowed_methods.rb +20 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +56 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +5 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +28 -2
- data/lib/rubocop/cop/mixin/def_node.rb +2 -7
- data/lib/rubocop/cop/mixin/duplication.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -1
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +83 -4
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +10 -6
- data/lib/rubocop/cop/mixin/line_length_help.rb +17 -6
- data/lib/rubocop/cop/mixin/method_complexity.rb +8 -13
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +34 -12
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +4 -3
- data/lib/rubocop/cop/mixin/percent_array.rb +60 -1
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +2 -2
- data/lib/rubocop/cop/mixin/range_help.rb +10 -7
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -1
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +4 -4
- data/lib/rubocop/cop/naming/block_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +3 -3
- data/lib/rubocop/cop/naming/file_name.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
- data/lib/rubocop/cop/naming/inclusive_language.rb +3 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +6 -6
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +32 -3
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_name.rb +10 -1
- data/lib/rubocop/cop/naming/variable_number.rb +28 -18
- data/lib/rubocop/cop/offense.rb +1 -1
- data/lib/rubocop/cop/security/compound_hash.rb +105 -0
- data/lib/rubocop/cop/security/eval.rb +1 -1
- data/lib/rubocop/cop/security/json_load.rb +1 -1
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -1
- data/lib/rubocop/cop/security/yaml_load.rb +2 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +77 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +4 -4
- data/lib/rubocop/cop/style/alias.rb +4 -4
- data/lib/rubocop/cop/style/and_or.rb +12 -12
- data/lib/rubocop/cop/style/arguments_forwarding.rb +3 -3
- data/lib/rubocop/cop/style/array_coercion.rb +1 -1
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +1 -1
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
- data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +35 -9
- data/lib/rubocop/cop/style/case_equality.rb +41 -11
- data/lib/rubocop/cop/style/case_like_if.rb +2 -2
- data/lib/rubocop/cop/style/character_literal.rb +1 -1
- data/lib/rubocop/cop/style/class_and_module_children.rb +5 -5
- data/lib/rubocop/cop/style/class_check.rb +1 -1
- data/lib/rubocop/cop/style/class_equality_comparison.rb +51 -4
- data/lib/rubocop/cop/style/class_methods.rb +1 -1
- data/lib/rubocop/cop/style/class_methods_definitions.rb +3 -2
- data/lib/rubocop/cop/style/class_vars.rb +1 -1
- data/lib/rubocop/cop/style/collection_compact.rb +4 -4
- data/lib/rubocop/cop/style/collection_methods.rb +3 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/combinable_loops.rb +4 -2
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +4 -4
- data/lib/rubocop/cop/style/conditional_assignment.rb +2 -1
- data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
- data/lib/rubocop/cop/style/date_time.rb +2 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +4 -1
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +62 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +42 -7
- data/lib/rubocop/cop/style/each_with_object.rb +40 -9
- data/lib/rubocop/cop/style/empty_block_parameter.rb +2 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +3 -4
- data/lib/rubocop/cop/style/empty_else.rb +40 -3
- data/lib/rubocop/cop/style/empty_heredoc.rb +73 -0
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +2 -2
- data/lib/rubocop/cop/style/empty_method.rb +17 -2
- data/lib/rubocop/cop/style/encoding.rb +2 -2
- data/lib/rubocop/cop/style/end_block.rb +1 -1
- data/lib/rubocop/cop/style/endless_method.rb +1 -1
- data/lib/rubocop/cop/style/env_home.rb +56 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
- data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -2
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/fetch_env_var.rb +132 -0
- data/lib/rubocop/cop/style/file_write.rb +12 -0
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +3 -1
- data/lib/rubocop/cop/style/format_string.rb +1 -1
- data/lib/rubocop/cop/style/format_string_token.rb +73 -23
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +6 -3
- data/lib/rubocop/cop/style/global_std_stream.rb +1 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -1
- data/lib/rubocop/cop/style/guard_clause.rb +62 -4
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +1 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +4 -2
- data/lib/rubocop/cop/style/hash_except.rb +85 -9
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +20 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -1
- data/lib/rubocop/cop/style/hash_transform_values.rb +4 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +4 -4
- data/lib/rubocop/cop/style/if_unless_modifier.rb +6 -5
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +4 -2
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +3 -3
- data/lib/rubocop/cop/style/in_pattern_then.rb +1 -1
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +10 -8
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +1 -1
- data/lib/rubocop/cop/style/lambda_call.rb +1 -1
- data/lib/rubocop/cop/style/line_end_concatenation.rb +2 -2
- data/lib/rubocop/cop/style/magic_comment_format.rb +307 -0
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +136 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +3 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +4 -4
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +6 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +12 -12
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +20 -3
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +5 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/min_max.rb +1 -1
- data/lib/rubocop/cop/style/missing_else.rb +24 -24
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
- data/lib/rubocop/cop/style/mixin_grouping.rb +2 -2
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +3 -3
- data/lib/rubocop/cop/style/multiline_block_chain.rb +4 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -2
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +3 -5
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +37 -11
- data/lib/rubocop/cop/style/multiline_when_then.rb +2 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -1
- data/lib/rubocop/cop/style/nested_file_dirname.rb +1 -1
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -2
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +20 -8
- data/lib/rubocop/cop/style/next.rb +4 -6
- data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
- data/lib/rubocop/cop/style/nil_lambda.rb +3 -3
- data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
- data/lib/rubocop/cop/style/not.rb +2 -2
- data/lib/rubocop/cop/style/numbered_parameters.rb +1 -1
- data/lib/rubocop/cop/style/numbered_parameters_limit.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +16 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +53 -11
- data/lib/rubocop/cop/style/object_then.rb +71 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -1
- data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -2
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +2 -2
- data/lib/rubocop/cop/style/or_assignment.rb +1 -1
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/perl_backrefs.rb +23 -2
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +5 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +10 -4
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -2
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +19 -6
- data/lib/rubocop/cop/style/redundant_capital_w.rb +2 -3
- data/lib/rubocop/cop/style/redundant_condition.rb +129 -13
- data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -2
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_initialize.rb +154 -0
- data/lib/rubocop/cop/style/redundant_interpolation.rb +22 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +22 -24
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +8 -3
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +2 -2
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +3 -1
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +3 -4
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +22 -7
- data/lib/rubocop/cop/style/redundant_sort_by.rb +25 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/rescue_standard_error.rb +13 -13
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +21 -11
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/select_by_regexp.rb +7 -2
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +28 -4
- data/lib/rubocop/cop/style/send.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +1 -1
- data/lib/rubocop/cop/style/single_argument_dig.rb +5 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +2 -2
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +96 -30
- data/lib/rubocop/cop/style/special_global_vars.rb +66 -8
- data/lib/rubocop/cop/style/static_class.rb +1 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_chars.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +6 -7
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/strip.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +4 -4
- data/lib/rubocop/cop/style/swap_values.rb +2 -2
- data/lib/rubocop/cop/style/symbol_array.rb +9 -6
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +70 -12
- data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -16
- data/lib/rubocop/cop/style/top_level_method_definition.rb +3 -1
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -1
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -2
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +11 -9
- data/lib/rubocop/cop/style/unless_else.rb +5 -1
- data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +5 -2
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +4 -5
- data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
- data/lib/rubocop/cop/team.rb +2 -2
- data/lib/rubocop/cop/util.rb +3 -3
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cops_documentation_generator.rb +19 -2
- data/lib/rubocop/ext/range.rb +15 -0
- data/lib/rubocop/feature_loader.rb +94 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +11 -8
- data/lib/rubocop/formatter/formatter_set.rb +20 -18
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +15 -2
- data/lib/rubocop/formatter/html_formatter.rb +5 -13
- data/lib/rubocop/formatter/markdown_formatter.rb +78 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +8 -2
- data/lib/rubocop/formatter/simple_text_formatter.rb +9 -8
- data/lib/rubocop/formatter/tap_formatter.rb +1 -1
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -2
- data/lib/rubocop/formatter.rb +31 -0
- data/lib/rubocop/magic_comment.rb +31 -5
- data/lib/rubocop/options.rb +103 -34
- data/lib/rubocop/rake_task.rb +34 -9
- data/lib/rubocop/result_cache.rb +24 -13
- data/lib/rubocop/rspec/cop_helper.rb +2 -2
- data/lib/rubocop/rspec/expect_offense.rb +3 -3
- data/lib/rubocop/rspec/parallel_formatter.rb +1 -1
- data/lib/rubocop/rspec/shared_contexts.rb +31 -11
- data/lib/rubocop/rspec/support.rb +14 -0
- data/lib/rubocop/runner.rb +41 -7
- data/lib/rubocop/server/cache.rb +144 -0
- data/lib/rubocop/server/cli.rb +121 -0
- data/lib/rubocop/server/client_command/base.rb +44 -0
- data/lib/rubocop/server/client_command/exec.rb +59 -0
- data/lib/rubocop/server/client_command/restart.rb +25 -0
- data/lib/rubocop/server/client_command/start.rb +43 -0
- data/lib/rubocop/server/client_command/status.rb +28 -0
- data/lib/rubocop/server/client_command/stop.rb +31 -0
- data/lib/rubocop/server/client_command.rb +26 -0
- data/lib/rubocop/server/core.rb +79 -0
- data/lib/rubocop/server/errors.rb +23 -0
- data/lib/rubocop/server/helper.rb +34 -0
- data/lib/rubocop/server/server_command/base.rb +50 -0
- data/lib/rubocop/server/server_command/exec.rb +34 -0
- data/lib/rubocop/server/server_command/stop.rb +24 -0
- data/lib/rubocop/server/server_command.rb +21 -0
- data/lib/rubocop/server/socket_reader.rb +65 -0
- data/lib/rubocop/server.rb +53 -0
- data/lib/rubocop/string_interpreter.rb +4 -4
- data/lib/rubocop/target_ruby.rb +14 -6
- data/lib/rubocop/version.rb +17 -9
- data/lib/rubocop.rb +25 -30
- metadata +78 -14
- data/lib/rubocop/cop/gemspec/date_assignment.rb +0 -49
- data/lib/rubocop/cop/mixin/ignored_methods.rb +0 -52
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +0 -29
data/lib/rubocop/options.rb
CHANGED
@@ -63,6 +63,7 @@ module RuboCop
|
|
63
63
|
|
64
64
|
add_check_options(opts)
|
65
65
|
add_cache_options(opts)
|
66
|
+
add_server_options(opts)
|
66
67
|
add_output_options(opts)
|
67
68
|
add_autocorrection_options(opts)
|
68
69
|
add_config_generation_options(opts)
|
@@ -80,7 +81,7 @@ module RuboCop
|
|
80
81
|
option(opts, '-x', '--fix-layout') do
|
81
82
|
@options[:only] ||= []
|
82
83
|
@options[:only] << 'Layout'
|
83
|
-
@options[:
|
84
|
+
@options[:autocorrect] = true
|
84
85
|
end
|
85
86
|
option(opts, '--safe')
|
86
87
|
add_cop_selection_csv_option('except', opts)
|
@@ -93,6 +94,7 @@ module RuboCop
|
|
93
94
|
option(opts, '--force-exclusion')
|
94
95
|
option(opts, '--only-recognized-file-types')
|
95
96
|
option(opts, '--ignore-parent-exclusion')
|
97
|
+
option(opts, '--ignore-unrecognized-cops')
|
96
98
|
option(opts, '--force-default-config')
|
97
99
|
option(opts, '-s', '--stdin FILE')
|
98
100
|
option(opts, '-P', '--[no-]parallel')
|
@@ -123,20 +125,40 @@ module RuboCop
|
|
123
125
|
option(opts, '--display-time')
|
124
126
|
option(opts, '--display-only-failed')
|
125
127
|
option(opts, '--display-only-fail-level-offenses')
|
128
|
+
option(opts, '--display-only-correctable')
|
129
|
+
option(opts, '--display-only-safe-correctable')
|
126
130
|
end
|
127
131
|
end
|
128
132
|
|
129
|
-
|
130
|
-
|
131
|
-
|
133
|
+
# rubocop:todo Naming/InclusiveLanguage
|
134
|
+
# the autocorrect command-line arguments map to the autocorrect @options values like so:
|
135
|
+
# :fix_layout :autocorrect :safe_autocorrect :autocorrect_all
|
136
|
+
# -x, --fix-layout true true - -
|
137
|
+
# -a, --auto-correct - true true -
|
138
|
+
# --safe-auto-correct - true true -
|
139
|
+
# -A, --auto-correct-all - true - true
|
140
|
+
def add_autocorrection_options(opts) # rubocop:disable Metrics/MethodLength
|
141
|
+
section(opts, 'Autocorrection') do
|
142
|
+
option(opts, '-a', '--autocorrect') { @options[:safe_autocorrect] = true }
|
143
|
+
option(opts, '--auto-correct') do
|
144
|
+
handle_deprecated_option('--auto-correct', '--autocorrect')
|
145
|
+
@options[:safe_autocorrect] = true
|
146
|
+
end
|
132
147
|
option(opts, '--safe-auto-correct') do
|
133
|
-
|
134
|
-
@options[:
|
148
|
+
handle_deprecated_option('--safe-auto-correct', '--autocorrect')
|
149
|
+
@options[:safe_autocorrect] = true
|
150
|
+
end
|
151
|
+
|
152
|
+
option(opts, '-A', '--autocorrect-all') { @options[:autocorrect] = true }
|
153
|
+
option(opts, '--auto-correct-all') do
|
154
|
+
handle_deprecated_option('--auto-correct-all', '--autocorrect-all')
|
155
|
+
@options[:autocorrect] = true
|
135
156
|
end
|
136
|
-
|
157
|
+
|
137
158
|
option(opts, '--disable-uncorrectable')
|
138
159
|
end
|
139
160
|
end
|
161
|
+
# rubocop:enable Naming/InclusiveLanguage
|
140
162
|
|
141
163
|
def add_config_generation_options(opts)
|
142
164
|
section(opts, 'Config Generation') do
|
@@ -182,6 +204,16 @@ module RuboCop
|
|
182
204
|
end
|
183
205
|
end
|
184
206
|
|
207
|
+
def add_server_options(opts)
|
208
|
+
section(opts, 'Server Options') do
|
209
|
+
option(opts, '--[no-]server')
|
210
|
+
option(opts, '--restart-server')
|
211
|
+
option(opts, '--start-server')
|
212
|
+
option(opts, '--stop-server')
|
213
|
+
option(opts, '--server-status')
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
185
217
|
def add_additional_modes(opts)
|
186
218
|
section(opts, 'Additional Modes') do
|
187
219
|
option(opts, '-L', '--list-target-files')
|
@@ -206,6 +238,11 @@ module RuboCop
|
|
206
238
|
end
|
207
239
|
end
|
208
240
|
|
241
|
+
def handle_deprecated_option(old_option, new_option)
|
242
|
+
warn rainbow.wrap("#{old_option} is deprecated; use #{new_option} instead.").yellow
|
243
|
+
@options[long_opt_symbol([new_option])] = @options.delete(long_opt_symbol([old_option]))
|
244
|
+
end
|
245
|
+
|
209
246
|
def rainbow
|
210
247
|
@rainbow ||= begin
|
211
248
|
rainbow = Rainbow.new
|
@@ -234,10 +271,10 @@ module RuboCop
|
|
234
271
|
end
|
235
272
|
|
236
273
|
# Finds the option in `args` starting with -- and converts it to a symbol,
|
237
|
-
# e.g. [..., '--
|
274
|
+
# e.g. [..., '--autocorrect', ...] to :autocorrect.
|
238
275
|
def long_opt_symbol(args)
|
239
276
|
long_opt = args.find { |arg| arg.start_with?('--') }
|
240
|
-
long_opt[2
|
277
|
+
long_opt[2..].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
|
241
278
|
end
|
242
279
|
|
243
280
|
def require_feature(file)
|
@@ -308,11 +345,13 @@ module RuboCop
|
|
308
345
|
|
309
346
|
if display_only_fail_level_offenses_with_autocorrect?
|
310
347
|
raise OptionArgumentError, '--autocorrect cannot be used with ' \
|
311
|
-
'--display-only-fail-level-offenses'
|
348
|
+
'--display-only-fail-level-offenses.'
|
312
349
|
end
|
313
350
|
validate_auto_gen_config
|
314
|
-
|
351
|
+
validate_autocorrect
|
315
352
|
validate_display_only_failed
|
353
|
+
validate_display_only_failed_and_display_only_correctable
|
354
|
+
validate_display_only_correctable_and_autocorrect
|
316
355
|
disable_parallel_when_invalid_option_combo
|
317
356
|
|
318
357
|
return if incompatible_options.size <= 1
|
@@ -342,35 +381,49 @@ module RuboCop
|
|
342
381
|
format('--display-only-failed can only be used together with --format junit.')
|
343
382
|
end
|
344
383
|
|
345
|
-
def
|
346
|
-
return
|
384
|
+
def validate_display_only_correctable_and_autocorrect
|
385
|
+
return unless @options.key?(:autocorrect)
|
386
|
+
return if !@options.key?(:display_only_correctable) &&
|
387
|
+
!@options.key?(:display_only_safe_correctable)
|
388
|
+
|
389
|
+
raise OptionArgumentError,
|
390
|
+
'--autocorrect cannot be used with --display-only-[safe-]correctable.'
|
391
|
+
end
|
392
|
+
|
393
|
+
def validate_display_only_failed_and_display_only_correctable
|
394
|
+
return unless @options.key?(:display_only_failed)
|
395
|
+
return if !@options.key?(:display_only_correctable) &&
|
396
|
+
!@options.key?(:display_only_safe_correctable)
|
397
|
+
|
398
|
+
raise OptionArgumentError,
|
399
|
+
format('--display-only-failed cannot be used together with other display options.')
|
400
|
+
end
|
401
|
+
|
402
|
+
def validate_autocorrect
|
403
|
+
return if @options.key?(:autocorrect)
|
347
404
|
return unless @options.key?(:disable_uncorrectable)
|
348
405
|
|
349
406
|
raise OptionArgumentError,
|
350
|
-
format('--disable-uncorrectable can only be used together with --
|
407
|
+
format('--disable-uncorrectable can only be used together with --autocorrect.')
|
351
408
|
end
|
352
409
|
|
353
410
|
def disable_parallel_when_invalid_option_combo
|
354
411
|
return unless @options.key?(:parallel)
|
355
412
|
|
356
|
-
|
357
|
-
{ name: :auto_gen_config, value: true, flag: '--auto-gen-config' },
|
358
|
-
{ name: :fail_fast, value: true, flag: '-F/--fail-fast.' },
|
359
|
-
{ name: :auto_correct, value: true, flag: '--auto-correct.' },
|
360
|
-
{ name: :cache, value: 'false', flag: '--cache false' }
|
361
|
-
]
|
362
|
-
|
363
|
-
invalid_flags = invalid_options.each_with_object([]) do |option, flags|
|
364
|
-
# `>` rather than `>=` because `@options` will also contain `parallel: true`
|
365
|
-
flags << option[:flag] if @options > { option[:name] => option[:value] }
|
366
|
-
end
|
413
|
+
invalid_flags = invalid_arguments_for_parallel
|
367
414
|
|
368
415
|
return if invalid_flags.empty?
|
369
416
|
|
370
417
|
@options.delete(:parallel)
|
371
418
|
|
372
419
|
puts '-P/--parallel is being ignored because ' \
|
373
|
-
"it is not compatible with #{invalid_flags.join(', ')}"
|
420
|
+
"it is not compatible with #{invalid_flags.join(', ')}."
|
421
|
+
end
|
422
|
+
|
423
|
+
def invalid_arguments_for_parallel
|
424
|
+
[('--auto-gen-config' if @options.key?(:auto_gen_config)),
|
425
|
+
('-F/--fail-fast' if @options.key?(:fail_fast)),
|
426
|
+
('--cache false' if @options > { cache: 'false' })].compact
|
374
427
|
end
|
375
428
|
|
376
429
|
def only_includes_redundant_disable?
|
@@ -379,7 +432,7 @@ module RuboCop
|
|
379
432
|
end
|
380
433
|
|
381
434
|
def display_only_fail_level_offenses_with_autocorrect?
|
382
|
-
@options
|
435
|
+
@options.key?(:display_only_fail_level_offenses) && @options.key?(:autocorrect)
|
383
436
|
end
|
384
437
|
|
385
438
|
def except_syntax?
|
@@ -405,7 +458,7 @@ module RuboCop
|
|
405
458
|
def validate_cache_enabled_for_cache_root
|
406
459
|
return unless @options[:cache] == 'false'
|
407
460
|
|
408
|
-
raise OptionArgumentError, '--cache-root
|
461
|
+
raise OptionArgumentError, '--cache-root cannot be used with --cache false'
|
409
462
|
end
|
410
463
|
end
|
411
464
|
|
@@ -441,7 +494,7 @@ module RuboCop
|
|
441
494
|
exclude_limit: ['Set the limit for how many files to explicitly exclude.',
|
442
495
|
'If there are more files than the limit, the cop will',
|
443
496
|
"be disabled instead. Default is #{MAX_EXCL}."],
|
444
|
-
disable_uncorrectable: ['Used with --
|
497
|
+
disable_uncorrectable: ['Used with --autocorrect to annotate any',
|
445
498
|
'offenses that do not support autocorrect',
|
446
499
|
'with `rubocop:todo` comments.'],
|
447
500
|
force_exclusion: ['Any files excluded by `Exclude` in configuration',
|
@@ -454,6 +507,7 @@ module RuboCop
|
|
454
507
|
'by a `rubocop:disable` directive.'],
|
455
508
|
ignore_parent_exclusion: ['Prevent from inheriting `AllCops/Exclude` from',
|
456
509
|
'parent folders.'],
|
510
|
+
ignore_unrecognized_cops: ['Ignore unrecognized cops or departments in the config.'],
|
457
511
|
force_default_config: ['Use default configuration even if configuration',
|
458
512
|
'files are present in the directory tree.'],
|
459
513
|
format: ['Choose an output formatter. This option',
|
@@ -481,6 +535,9 @@ module RuboCop
|
|
481
535
|
display_only_fail_level_offenses:
|
482
536
|
['Only output offense messages at',
|
483
537
|
'the specified --fail-level or above'],
|
538
|
+
display_only_correctable: ['Only output correctable offense messages.'],
|
539
|
+
display_only_safe_correctable: ['Only output safe-correctable offense messages',
|
540
|
+
'when combined with --display-only-correctable.'],
|
484
541
|
show_cops: ['Shows the given cops, or all cops by',
|
485
542
|
'default, and their configurations for the',
|
486
543
|
'current directory.'],
|
@@ -507,12 +564,14 @@ module RuboCop
|
|
507
564
|
safe: 'Run only safe cops.',
|
508
565
|
stderr: ['Write all output to stderr except for the',
|
509
566
|
'autocorrected source. This is especially useful',
|
510
|
-
'when combined with --
|
567
|
+
'when combined with --autocorrect and --stdin.'],
|
511
568
|
list_target_files: 'List all files RuboCop will inspect.',
|
512
|
-
|
569
|
+
autocorrect: 'Autocorrect offenses (only when it\'s safe).',
|
570
|
+
auto_correct: '(same, deprecated)',
|
513
571
|
safe_auto_correct: '(same, deprecated)',
|
514
|
-
|
515
|
-
|
572
|
+
autocorrect_all: 'Autocorrect offenses (safe and unsafe).',
|
573
|
+
auto_correct_all: '(same, deprecated)',
|
574
|
+
fix_layout: 'Run only layout cops, with autocorrect on.',
|
516
575
|
color: 'Force color output on or off.',
|
517
576
|
version: 'Display version.',
|
518
577
|
verbose_version: 'Display verbose version.',
|
@@ -520,7 +579,17 @@ module RuboCop
|
|
520
579
|
'parallel. Default is true.'],
|
521
580
|
stdin: ['Pipe source from STDIN, using FILE in offense',
|
522
581
|
'reports. This is useful for editor integration.'],
|
523
|
-
init: 'Generate a .rubocop.yml file in the current directory.'
|
582
|
+
init: 'Generate a .rubocop.yml file in the current directory.',
|
583
|
+
server: ['If a server process has not been started yet, start',
|
584
|
+
'the server process and execute inspection with server.',
|
585
|
+
'Default is false.',
|
586
|
+
'You can specify the server host and port with the',
|
587
|
+
'$RUBOCOP_SERVER_HOST and the $RUBOCOP_SERVER_PORT',
|
588
|
+
'environment variables.'],
|
589
|
+
restart_server: 'Restart server process.',
|
590
|
+
start_server: 'Start server process.',
|
591
|
+
stop_server: 'Stop server process.',
|
592
|
+
server_status: 'Show server status.'
|
524
593
|
}.freeze
|
525
594
|
end
|
526
595
|
end
|
data/lib/rubocop/rake_task.rb
CHANGED
@@ -32,6 +32,15 @@ module RuboCop
|
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
+
def perform(option)
|
36
|
+
options = full_options.unshift(option)
|
37
|
+
# `parallel` will automatically be removed from the options internally.
|
38
|
+
# This is a nice to have to suppress the warning message
|
39
|
+
# about --parallel and --autocorrect not being compatible.
|
40
|
+
options.delete('--parallel')
|
41
|
+
run_cli(verbose, options)
|
42
|
+
end
|
43
|
+
|
35
44
|
def run_cli(verbose, options)
|
36
45
|
# We lazy-load RuboCop so that the task doesn't dramatically impact the
|
37
46
|
# load time of your Rakefile.
|
@@ -60,19 +69,35 @@ module RuboCop
|
|
60
69
|
@formatters = []
|
61
70
|
end
|
62
71
|
|
63
|
-
def setup_subtasks(name, *args, &task_block)
|
72
|
+
def setup_subtasks(name, *args, &task_block) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
64
73
|
namespace(name) do
|
65
|
-
|
74
|
+
# rubocop:todo Naming/InclusiveLanguage
|
75
|
+
task(:auto_correct, *args) do
|
76
|
+
require 'rainbow'
|
77
|
+
warn Rainbow(
|
78
|
+
'rubocop:auto_correct task is deprecated; ' \
|
79
|
+
'use rubocop:autocorrect task or rubocop:autocorrect_all task instead.'
|
80
|
+
).yellow
|
81
|
+
RakeFileUtils.verbose(verbose) do
|
82
|
+
yield(*[self, task_args].slice(0, task_block.arity)) if task_block
|
83
|
+
perform('--autocorrect')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
# rubocop:enable Naming/InclusiveLanguage
|
87
|
+
|
88
|
+
desc "Autocorrect RuboCop offenses (only when it's safe)."
|
89
|
+
task(:autocorrect, *args) do |_, task_args|
|
90
|
+
RakeFileUtils.verbose(verbose) do
|
91
|
+
yield(*[self, task_args].slice(0, task_block.arity)) if task_block
|
92
|
+
perform('--autocorrect')
|
93
|
+
end
|
94
|
+
end
|
66
95
|
|
67
|
-
|
96
|
+
desc 'Autocorrect RuboCop offenses (safe and unsafe).'
|
97
|
+
task(:autocorrect_all, *args) do |_, task_args|
|
68
98
|
RakeFileUtils.verbose(verbose) do
|
69
99
|
yield(*[self, task_args].slice(0, task_block.arity)) if task_block
|
70
|
-
|
71
|
-
# `parallel` will automatically be removed from the options internally.
|
72
|
-
# This is a nice to have to suppress the warning message
|
73
|
-
# about parallel and auto-correct not being compatible.
|
74
|
-
options.delete('--parallel')
|
75
|
-
run_cli(verbose, options)
|
100
|
+
perform('--autocorrect-all')
|
76
101
|
end
|
77
102
|
end
|
78
103
|
end
|
data/lib/rubocop/result_cache.rb
CHANGED
@@ -4,14 +4,22 @@ require 'digest/sha1'
|
|
4
4
|
require 'find'
|
5
5
|
require 'etc'
|
6
6
|
require 'zlib'
|
7
|
+
require_relative 'cache_config'
|
7
8
|
|
8
9
|
module RuboCop
|
9
10
|
# Provides functionality for caching RuboCop runs.
|
10
11
|
# @api private
|
11
12
|
class ResultCache
|
12
|
-
NON_CHANGING = %i[color format formatters out debug fail_level
|
13
|
+
NON_CHANGING = %i[color format formatters out debug fail_level
|
14
|
+
fix_layout autocorrect safe_autocorrect autocorrect_all
|
13
15
|
cache fail_fast stdin parallel].freeze
|
14
16
|
|
17
|
+
DL_EXTENSIONS = ::RbConfig::CONFIG
|
18
|
+
.values_at('DLEXT', 'DLEXT2')
|
19
|
+
.reject { |ext| !ext || ext.empty? }
|
20
|
+
.map { |ext| ".#{ext}" }
|
21
|
+
.freeze
|
22
|
+
|
15
23
|
# Remove old files so that the cache doesn't grow too big. When the
|
16
24
|
# threshold MaxFilesInCache has been exceeded, the oldest 50% of all the
|
17
25
|
# files in the cache are removed. The reason for removing so much is that
|
@@ -66,16 +74,9 @@ module RuboCop
|
|
66
74
|
end
|
67
75
|
|
68
76
|
def self.cache_root(config_store)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
# Include user ID in the path to make sure the user has write
|
73
|
-
# access.
|
74
|
-
File.join(ENV['XDG_CACHE_HOME'], Process.uid.to_s)
|
75
|
-
else
|
76
|
-
File.join(ENV['HOME'], '.cache')
|
77
|
-
end
|
78
|
-
File.join(root, 'rubocop_cache')
|
77
|
+
CacheConfig.root_dir do
|
78
|
+
config_store.for_pwd.for_all_cops['CacheRootDirectory']
|
79
|
+
end
|
79
80
|
end
|
80
81
|
|
81
82
|
def self.allow_symlinks_in_cache_location?(config_store)
|
@@ -179,14 +180,24 @@ module RuboCop
|
|
179
180
|
.select { |path| File.file?(path) }
|
180
181
|
.sort!
|
181
182
|
.each do |path|
|
182
|
-
|
183
|
-
digest << Zlib.crc32(content).to_s # mtime not reliable
|
183
|
+
digest << digest(path)
|
184
184
|
end
|
185
185
|
digest << RuboCop::Version::STRING << RuboCop::AST::Version::STRING
|
186
186
|
digest.hexdigest
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
+
def digest(path)
|
191
|
+
content = if path.end_with?(*DL_EXTENSIONS)
|
192
|
+
# Shared libraries often contain timestamps of when
|
193
|
+
# they were compiled and other non-stable data.
|
194
|
+
File.basename(path)
|
195
|
+
else
|
196
|
+
File.binread(path) # mtime not reliable
|
197
|
+
end
|
198
|
+
Zlib.crc32(content).to_s
|
199
|
+
end
|
200
|
+
|
190
201
|
def rubocop_extra_features
|
191
202
|
lib_root = File.join(File.dirname(__FILE__), '..')
|
192
203
|
exe_root = File.join(lib_root, '..', 'exe')
|
@@ -6,7 +6,7 @@ require 'tempfile'
|
|
6
6
|
module CopHelper
|
7
7
|
extend RSpec::SharedContext
|
8
8
|
|
9
|
-
let(:ruby_version) { 2.
|
9
|
+
let(:ruby_version) { 2.6 }
|
10
10
|
let(:rails_version) { false }
|
11
11
|
|
12
12
|
def inspect_source(source, file = nil)
|
@@ -38,7 +38,7 @@ module CopHelper
|
|
38
38
|
def autocorrect_source(source, file = nil)
|
39
39
|
RuboCop::Formatter::DisabledConfigFormatter.config_to_allow_offenses = {}
|
40
40
|
RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
|
41
|
-
cop.instance_variable_get(:@options)[:
|
41
|
+
cop.instance_variable_get(:@options)[:autocorrect] = true
|
42
42
|
processed_source = parse_source(source, file)
|
43
43
|
_investigate(cop, processed_source)
|
44
44
|
|
@@ -38,7 +38,7 @@ module RuboCop
|
|
38
38
|
# 'Avoid chaining a method call on a do...end block.'
|
39
39
|
# )
|
40
40
|
#
|
41
|
-
#
|
41
|
+
# Autocorrection can be tested using `expect_correction` after
|
42
42
|
# `expect_offense`.
|
43
43
|
#
|
44
44
|
# @example `expect_offense` and `expect_correction`
|
@@ -58,7 +58,7 @@ module RuboCop
|
|
58
58
|
# that there were no offenses. The `expect_offense` method has
|
59
59
|
# to do more work by parsing out lines that contain carets.
|
60
60
|
#
|
61
|
-
# If the code produces an offense that could not be
|
61
|
+
# If the code produces an offense that could not be autocorrected, you can
|
62
62
|
# use `expect_no_corrections` after `expect_offense`.
|
63
63
|
#
|
64
64
|
# @example `expect_offense` and `expect_no_corrections`
|
@@ -205,7 +205,7 @@ module RuboCop
|
|
205
205
|
def set_formatter_options
|
206
206
|
RuboCop::Formatter::DisabledConfigFormatter.config_to_allow_offenses = {}
|
207
207
|
RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
|
208
|
-
cop.instance_variable_get(:@options)[:
|
208
|
+
cop.instance_variable_get(:@options)[:autocorrect] = true
|
209
209
|
end
|
210
210
|
|
211
211
|
# Parsed representation of code annotated with the `^^^ Message` style
|
@@ -65,7 +65,7 @@ module RuboCop
|
|
65
65
|
# removed!
|
66
66
|
def output_rerun_commands(summary)
|
67
67
|
output.puts '# RERUN BEGIN'
|
68
|
-
output.puts summary.colorized_rerun_commands.lines[3
|
68
|
+
output.puts summary.colorized_rerun_commands.lines[3..].join
|
69
69
|
output.puts '# RERUN END'
|
70
70
|
end
|
71
71
|
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'tmpdir'
|
4
4
|
|
5
|
-
RSpec.shared_context 'isolated environment'
|
5
|
+
RSpec.shared_context 'isolated environment' do
|
6
6
|
around do |example|
|
7
7
|
Dir.mktmpdir do |tmpdir|
|
8
|
-
original_home =
|
9
|
-
original_xdg_config_home = ENV
|
8
|
+
original_home = Dir.home
|
9
|
+
original_xdg_config_home = ENV.fetch('XDG_CONFIG_HOME', nil)
|
10
10
|
|
11
11
|
# Make sure to expand all symlinks in the path first. Otherwise we may
|
12
12
|
# get mismatched pathnames when loading config files later on.
|
@@ -38,7 +38,7 @@ RSpec.shared_context 'isolated environment', :isolated_environment do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
RSpec.shared_context 'maintain registry'
|
41
|
+
RSpec.shared_context 'maintain registry' do
|
42
42
|
around(:each) { |example| RuboCop::Cop::Registry.with_temporary_global { example.run } }
|
43
43
|
|
44
44
|
def stub_cop_class(name, inherit: RuboCop::Cop::Base, &block)
|
@@ -49,7 +49,7 @@ RSpec.shared_context 'maintain registry', :restore_registry do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
# This context assumes nothing and defines `cop`, among others.
|
52
|
-
RSpec.shared_context 'config'
|
52
|
+
RSpec.shared_context 'config' do # rubocop:disable Metrics/BlockLength
|
53
53
|
### Meant to be overridden at will
|
54
54
|
|
55
55
|
let(:cop_class) do
|
@@ -116,26 +116,46 @@ RSpec.shared_context 'mock console output' do
|
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
-
RSpec.shared_context 'ruby 2.
|
119
|
+
RSpec.shared_context 'ruby 2.0' do
|
120
|
+
let(:ruby_version) { 2.0 }
|
121
|
+
end
|
122
|
+
|
123
|
+
RSpec.shared_context 'ruby 2.1' do
|
124
|
+
let(:ruby_version) { 2.1 }
|
125
|
+
end
|
126
|
+
|
127
|
+
RSpec.shared_context 'ruby 2.2' do
|
128
|
+
let(:ruby_version) { 2.2 }
|
129
|
+
end
|
130
|
+
|
131
|
+
RSpec.shared_context 'ruby 2.3' do
|
132
|
+
let(:ruby_version) { 2.3 }
|
133
|
+
end
|
134
|
+
|
135
|
+
RSpec.shared_context 'ruby 2.4' do
|
136
|
+
let(:ruby_version) { 2.4 }
|
137
|
+
end
|
138
|
+
|
139
|
+
RSpec.shared_context 'ruby 2.5' do
|
120
140
|
let(:ruby_version) { 2.5 }
|
121
141
|
end
|
122
142
|
|
123
|
-
RSpec.shared_context 'ruby 2.6'
|
143
|
+
RSpec.shared_context 'ruby 2.6' do
|
124
144
|
let(:ruby_version) { 2.6 }
|
125
145
|
end
|
126
146
|
|
127
|
-
RSpec.shared_context 'ruby 2.7'
|
147
|
+
RSpec.shared_context 'ruby 2.7' do
|
128
148
|
let(:ruby_version) { 2.7 }
|
129
149
|
end
|
130
150
|
|
131
|
-
RSpec.shared_context 'ruby 3.0'
|
151
|
+
RSpec.shared_context 'ruby 3.0' do
|
132
152
|
let(:ruby_version) { 3.0 }
|
133
153
|
end
|
134
154
|
|
135
|
-
RSpec.shared_context 'ruby 3.1'
|
155
|
+
RSpec.shared_context 'ruby 3.1' do
|
136
156
|
let(:ruby_version) { 3.1 }
|
137
157
|
end
|
138
158
|
|
139
|
-
RSpec.shared_context 'ruby 3.2'
|
159
|
+
RSpec.shared_context 'ruby 3.2' do
|
140
160
|
let(:ruby_version) { 3.2 }
|
141
161
|
end
|
@@ -11,4 +11,18 @@ require_relative 'parallel_formatter'
|
|
11
11
|
RSpec.configure do |config|
|
12
12
|
config.include CopHelper
|
13
13
|
config.include HostEnvironmentSimulatorHelper
|
14
|
+
config.include_context 'config', :config
|
15
|
+
config.include_context 'isolated environment', :isolated_environment
|
16
|
+
config.include_context 'maintain registry', :restore_registry
|
17
|
+
config.include_context 'ruby 2.0', :ruby20
|
18
|
+
config.include_context 'ruby 2.1', :ruby21
|
19
|
+
config.include_context 'ruby 2.2', :ruby22
|
20
|
+
config.include_context 'ruby 2.3', :ruby23
|
21
|
+
config.include_context 'ruby 2.4', :ruby24
|
22
|
+
config.include_context 'ruby 2.5', :ruby25
|
23
|
+
config.include_context 'ruby 2.6', :ruby26
|
24
|
+
config.include_context 'ruby 2.7', :ruby27
|
25
|
+
config.include_context 'ruby 3.0', :ruby30
|
26
|
+
config.include_context 'ruby 3.1', :ruby31
|
27
|
+
config.include_context 'ruby 3.2', :ruby32
|
14
28
|
end
|
data/lib/rubocop/runner.rb
CHANGED
@@ -13,7 +13,7 @@ module RuboCop
|
|
13
13
|
|
14
14
|
def initialize(path, offenses_by_iteration, loop_start: -1)
|
15
15
|
@offenses = offenses_by_iteration.flatten.uniq
|
16
|
-
root_cause = offenses_by_iteration[loop_start
|
16
|
+
root_cause = offenses_by_iteration[loop_start..]
|
17
17
|
.map { |x| x.map(&:cop_name).uniq.join(', ') }
|
18
18
|
.join(' -> ')
|
19
19
|
|
@@ -63,8 +63,16 @@ module RuboCop
|
|
63
63
|
# Warms up the RuboCop cache by forking a suitable number of RuboCop
|
64
64
|
# instances that each inspects its allotted group of files.
|
65
65
|
def warm_cache(target_files)
|
66
|
+
saved_options = @options.dup
|
67
|
+
if target_files.length <= 1
|
68
|
+
puts 'Skipping parallel inspection: only a single file needs inspection' if @options[:debug]
|
69
|
+
return
|
70
|
+
end
|
66
71
|
puts 'Running parallel inspection' if @options[:debug]
|
72
|
+
%i[autocorrect safe_autocorrect].each { |opt| @options[opt] = false }
|
67
73
|
Parallel.each(target_files) { |target_file| file_offenses(target_file) }
|
74
|
+
ensure
|
75
|
+
@options = saved_options
|
68
76
|
end
|
69
77
|
|
70
78
|
def find_target_files(paths)
|
@@ -143,10 +151,10 @@ module RuboCop
|
|
143
151
|
|
144
152
|
if cache&.valid?
|
145
153
|
offenses = cache.load
|
146
|
-
# If we're running --
|
154
|
+
# If we're running --autocorrect and the cache says there are
|
147
155
|
# offenses, we need to actually inspect the file. If the cache shows no
|
148
156
|
# offenses, we're good.
|
149
|
-
real_run_needed = @options[:
|
157
|
+
real_run_needed = @options[:autocorrect] && offenses.any?
|
150
158
|
else
|
151
159
|
real_run_needed = true
|
152
160
|
end
|
@@ -207,9 +215,7 @@ module RuboCop
|
|
207
215
|
end
|
208
216
|
|
209
217
|
def file_finished(file, offenses)
|
210
|
-
|
211
|
-
offenses = offenses.select { |o| considered_failure?(o) }
|
212
|
-
end
|
218
|
+
offenses = offenses_to_report(offenses)
|
213
219
|
formatter_set.file_finished(file, offenses)
|
214
220
|
end
|
215
221
|
|
@@ -242,7 +248,7 @@ module RuboCop
|
|
242
248
|
# error message.
|
243
249
|
offenses_by_iteration = []
|
244
250
|
|
245
|
-
# When running with --
|
251
|
+
# When running with --autocorrect, we need to inspect the file (which
|
246
252
|
# includes writing a corrected version of it) until no more corrections
|
247
253
|
# are made. This is because automatic corrections can introduce new
|
248
254
|
# offenses. In the normal case the loop is only executed once.
|
@@ -380,6 +386,34 @@ module RuboCop
|
|
380
386
|
!offense.corrected? && offense.severity >= minimum_severity_to_fail
|
381
387
|
end
|
382
388
|
|
389
|
+
def offenses_to_report(offenses)
|
390
|
+
if @options[:display_only_fail_level_offenses]
|
391
|
+
offenses.select { |o| considered_failure?(o) }
|
392
|
+
elsif @options[:display_only_safe_correctable]
|
393
|
+
offenses.select { |o| supports_safe_autocorrect?(o) }
|
394
|
+
elsif @options[:display_only_correctable]
|
395
|
+
offenses.select(&:correctable?)
|
396
|
+
else
|
397
|
+
offenses
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
def supports_safe_autocorrect?(offense)
|
402
|
+
cop_class = Cop::Registry.global.find_by_cop_name(offense.cop_name)
|
403
|
+
default_cfg = default_config(offense.cop_name)
|
404
|
+
|
405
|
+
offense.correctable? &&
|
406
|
+
cop_class&.support_autocorrect? && mark_as_safe_by_config?(default_cfg)
|
407
|
+
end
|
408
|
+
|
409
|
+
def mark_as_safe_by_config?(config)
|
410
|
+
config.nil? || (config.fetch('Safe', true) && config.fetch('SafeAutoCorrect', true))
|
411
|
+
end
|
412
|
+
|
413
|
+
def default_config(cop_name)
|
414
|
+
RuboCop::ConfigLoader.default_configuration[cop_name]
|
415
|
+
end
|
416
|
+
|
383
417
|
def minimum_severity_to_fail
|
384
418
|
@minimum_severity_to_fail ||= begin
|
385
419
|
# Unless given explicitly as `fail_level`, `:info` severity offenses do not fail
|