rubocop 1.29.0 → 1.30.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/README.md +4 -2
- data/config/default.yml +31 -17
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +19 -4
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/cli.rb +1 -0
- data/lib/rubocop/config_loader.rb +2 -1
- data/lib/rubocop/config_validator.rb +19 -2
- data/lib/rubocop/cop/autocorrect_logic.rb +4 -2
- data/lib/rubocop/cop/base.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +1 -1
- 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/ordered_gem_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -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 +1 -1
- data/lib/rubocop/cop/gemspec/date_assignment.rb +1 -1
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +77 -0
- 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 +1 -1
- 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.rb +1 -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 +1 -1
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- 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 +1 -1
- 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_arguments.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +5 -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 +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +28 -28
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
- 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 +8 -5
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
- 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_end_string_concatenation_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/redundant_line_break.rb +1 -1
- 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_before_block_braces.rb +2 -2
- data/lib/rubocop/cop/layout/space_before_comment.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 +3 -3
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +1 -1
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +8 -8
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +3 -3
- 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/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- 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 +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/lint/empty_class.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +1 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -0
- 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 +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +2 -2
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/loop.rb +1 -1
- 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/non_deterministic_require_order.rb +4 -4
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- 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/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 +1 -1
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +3 -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 +1 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -0
- 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 +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +1 -1
- 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 +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/lint/unused_block_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -2
- data/lib/rubocop/cop/lint/useless_times.rb +1 -1
- data/lib/rubocop/cop/lint/void.rb +1 -1
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +1 -1
- 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 +1 -1
- 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/mixin/hash_shorthand_syntax.rb +7 -2
- data/lib/rubocop/cop/mixin/string_help.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 +2 -2
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +18 -18
- data/lib/rubocop/cop/security/compound_hash.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +3 -3
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/and_or.rb +11 -11
- 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.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +1 -1
- data/lib/rubocop/cop/style/case_equality.rb +1 -1
- data/lib/rubocop/cop/style/case_like_if.rb +1 -1
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/class_check.rb +1 -1
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/style/class_methods.rb +1 -1
- data/lib/rubocop/cop/style/class_methods_definitions.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +1 -1
- data/lib/rubocop/cop/style/collection_compact.rb +1 -1
- data/lib/rubocop/cop/style/collection_methods.rb +1 -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 +1 -1
- 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 +3 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +1 -1
- data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +1 -1
- data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
- data/lib/rubocop/cop/style/empty_else.rb +10 -10
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/encoding.rb +1 -1
- 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 +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/fetch_env_var.rb +64 -82
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +1 -1
- data/lib/rubocop/cop/style/format_string.rb +1 -1
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +5 -2
- 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 +1 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_except.rb +1 -1
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +1 -1
- 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 +2 -2
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -2
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
- 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 +2 -2
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +136 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +5 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +1 -1
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
- data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +2 -2
- data/lib/rubocop/cop/style/multiline_when_then.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
- data/lib/rubocop/cop/style/nil_lambda.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
- data/lib/rubocop/cop/style/not.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +10 -2
- data/lib/rubocop/cop/style/object_then.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +1 -1
- 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 +1 -1
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +4 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +1 -1
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +17 -6
- data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +38 -7
- 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 +1 -1
- 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_interpolation.rb +22 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
- data/lib/rubocop/cop/style/redundant_return.rb +1 -1
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
- 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 +4 -1
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- 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_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +2 -2
- data/lib/rubocop/cop/style/slicing_with_range.rb +4 -1
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +26 -7
- 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_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 +2 -2
- data/lib/rubocop/cop/style/swap_values.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +6 -2
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +3 -3
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -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 +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +4 -1
- 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 +1 -1
- 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 +1 -1
- data/lib/rubocop/cops_documentation_generator.rb +18 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +10 -7
- data/lib/rubocop/formatter/markdown_formatter.rb +2 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +4 -2
- data/lib/rubocop/magic_comment.rb +27 -2
- data/lib/rubocop/options.rb +60 -38
- data/lib/rubocop/rake_task.rb +3 -3
- data/lib/rubocop/result_cache.rb +2 -1
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +3 -3
- data/lib/rubocop/rspec/shared_contexts.rb +24 -0
- data/lib/rubocop/runner.rb +5 -5
- data/lib/rubocop/target_ruby.rb +7 -5
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +2 -0
- metadata +9 -6
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for accessing the first element of `String#unpack`
|
7
7
|
# which can be replaced with the shorter method `unpack1`.
|
8
8
|
#
|
9
9
|
# @example
|
@@ -19,6 +19,9 @@ module RuboCop
|
|
19
19
|
#
|
20
20
|
class UnpackFirst < Base
|
21
21
|
extend AutoCorrector
|
22
|
+
extend TargetRubyVersion
|
23
|
+
|
24
|
+
minimum_target_ruby_version 2.4
|
22
25
|
|
23
26
|
MSG = 'Use `%<receiver>s.unpack1(%<format>s)` instead of '\
|
24
27
|
'`%<receiver>s.unpack(%<format>s)%<method>s`.'
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for array literals made up of word-like
|
7
7
|
# strings, that are not using the %w() syntax.
|
8
8
|
#
|
9
9
|
# Alternatively, it can check for uses of the %w() syntax, in projects
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for numeric comparisons that can be replaced
|
7
7
|
# by a predicate method, such as receiver.length == 0,
|
8
8
|
# receiver.length > 0, receiver.length != 0,
|
9
9
|
# receiver.length < 1 and receiver.size == 0 that can be
|
data/lib/rubocop/cop/team.rb
CHANGED
@@ -49,7 +49,7 @@ module RuboCop
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def autocorrect?
|
52
|
-
@options[:
|
52
|
+
@options[:autocorrect]
|
53
53
|
end
|
54
54
|
|
55
55
|
def debug?
|
@@ -68,7 +68,7 @@ module RuboCop
|
|
68
68
|
|
69
69
|
# The autocorrection process may have to be repeated multiple times
|
70
70
|
# until there are no corrections left to perform
|
71
|
-
# To speed things up, run
|
71
|
+
# To speed things up, run autocorrecting cops by themselves, and only
|
72
72
|
# run the other cops when no corrections are left
|
73
73
|
on_duty = roundup_relevant_cops(processed_source.file_path)
|
74
74
|
|
data/lib/rubocop/cop/util.rb
CHANGED
@@ -159,7 +159,7 @@ module RuboCop
|
|
159
159
|
private
|
160
160
|
|
161
161
|
def compatible_external_encoding_for?(src)
|
162
|
-
src = src.dup if RUBY_ENGINE == 'jruby'
|
162
|
+
src = src.dup if RUBY_VERSION < '2.3' || RUBY_ENGINE == 'jruby'
|
163
163
|
src.force_encoding(Encoding.default_external).valid_encoding?
|
164
164
|
end
|
165
165
|
end
|
@@ -34,17 +34,34 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def cops_body(cop, description, examples_objects, safety_objects, pars) # rubocop:disable Metrics/AbcSize
|
37
|
+
check_examples_to_have_the_default_enforced_style!(examples_objects, cop)
|
38
|
+
|
37
39
|
content = h2(cop.cop_name)
|
38
40
|
content << required_ruby_version(cop)
|
39
41
|
content << properties(cop)
|
40
42
|
content << "#{description}\n"
|
41
43
|
content << safety_object(safety_objects) if safety_objects.any? { |s| !s.text.blank? }
|
42
|
-
content << examples(examples_objects) if examples_objects.
|
44
|
+
content << examples(examples_objects) if examples_objects.any?
|
43
45
|
content << configurations(pars)
|
44
46
|
content << references(cop)
|
45
47
|
content
|
46
48
|
end
|
47
49
|
|
50
|
+
def check_examples_to_have_the_default_enforced_style!(examples_object, cop)
|
51
|
+
return if examples_object.none?
|
52
|
+
|
53
|
+
examples_describing_enforced_style = examples_object.map(&:name).grep(/EnforcedStyle:/)
|
54
|
+
return if examples_describing_enforced_style.none?
|
55
|
+
|
56
|
+
if examples_describing_enforced_style.index { |name| name.match?('default') }.nonzero?
|
57
|
+
raise "Put the example with the default EnforcedStyle on top for #{cop.cop_name}"
|
58
|
+
end
|
59
|
+
|
60
|
+
return if examples_describing_enforced_style.any? { |name| name.match?('default') }
|
61
|
+
|
62
|
+
raise "Specify the default EnforcedStyle for #{cop.cop_name}"
|
63
|
+
end
|
64
|
+
|
48
65
|
def examples(examples_object)
|
49
66
|
examples_object.each_with_object(h3('Examples').dup) do |example, content|
|
50
67
|
content << "\n" unless content.end_with?("\n\n")
|
@@ -123,10 +123,10 @@ module RuboCop
|
|
123
123
|
cop_class = Cop::Registry.global.find_by_cop_name(cop_name)
|
124
124
|
default_cfg = default_config(cop_name)
|
125
125
|
|
126
|
-
if
|
127
|
-
output_buffer.puts '# This cop supports safe
|
126
|
+
if supports_safe_autocorrect?(cop_class, default_cfg)
|
127
|
+
output_buffer.puts '# This cop supports safe autocorrection (--autocorrect).'
|
128
128
|
elsif supports_unsafe_autocorrect?(cop_class, default_cfg)
|
129
|
-
output_buffer.puts '# This cop supports unsafe
|
129
|
+
output_buffer.puts '# This cop supports unsafe autocorrection (--autocorrect-all).'
|
130
130
|
end
|
131
131
|
|
132
132
|
return unless default_cfg
|
@@ -137,13 +137,12 @@ module RuboCop
|
|
137
137
|
output_cop_param_comments(output_buffer, params, default_cfg)
|
138
138
|
end
|
139
139
|
|
140
|
-
def
|
141
|
-
cop_class&.support_autocorrect? &&
|
142
|
-
(default_cfg.nil? || default_cfg['Safe'] || default_cfg['Safe'].nil?)
|
140
|
+
def supports_safe_autocorrect?(cop_class, default_cfg)
|
141
|
+
cop_class&.support_autocorrect? && (default_cfg.nil? || safe_autocorrect?(default_cfg))
|
143
142
|
end
|
144
143
|
|
145
144
|
def supports_unsafe_autocorrect?(cop_class, default_cfg)
|
146
|
-
cop_class&.support_autocorrect? && !
|
145
|
+
cop_class&.support_autocorrect? && !safe_autocorrect?(default_cfg)
|
147
146
|
end
|
148
147
|
|
149
148
|
def cop_config_params(default_cfg, cfg)
|
@@ -242,6 +241,10 @@ module RuboCop
|
|
242
241
|
regexp = exclude_path
|
243
242
|
output_buffer.puts " - !ruby/regexp /#{regexp.source}/"
|
244
243
|
end
|
244
|
+
|
245
|
+
def safe_autocorrect?(config)
|
246
|
+
config.fetch('Safe', true) && config.fetch('SafeAutoCorrect', true)
|
247
|
+
end
|
245
248
|
end
|
246
249
|
end
|
247
250
|
end
|
@@ -61,7 +61,9 @@ module RuboCop
|
|
61
61
|
correction_count,
|
62
62
|
correctable_count,
|
63
63
|
rainbow,
|
64
|
-
|
64
|
+
# :safe_autocorrect is a derived option based on several command-line
|
65
|
+
# arguments - see Rubocop::Options#add_autocorrection_options
|
66
|
+
safe_auto_correct: @options[:safe_autocorrect])
|
65
67
|
|
66
68
|
output.puts
|
67
69
|
output.puts report.summary
|
@@ -162,7 +164,7 @@ module RuboCop
|
|
162
164
|
"#{colorize(text, :yellow)} can be corrected with `rubocop -A`"
|
163
165
|
else
|
164
166
|
text = pluralize(@correctable_count, 'offense')
|
165
|
-
"#{colorize(text, :yellow)}
|
167
|
+
"#{colorize(text, :yellow)} autocorrectable"
|
166
168
|
end
|
167
169
|
end
|
168
170
|
end
|
@@ -11,7 +11,8 @@ module RuboCop
|
|
11
11
|
KEYWORDS = {
|
12
12
|
encoding: '(?:en)?coding',
|
13
13
|
frozen_string_literal: 'frozen[_-]string[_-]literal',
|
14
|
-
shareable_constant_value: 'shareable[_-]constant[_-]value'
|
14
|
+
shareable_constant_value: 'shareable[_-]constant[_-]value',
|
15
|
+
typed: 'typed'
|
15
16
|
}.freeze
|
16
17
|
|
17
18
|
# Detect magic comment format and pass it to the appropriate wrapper.
|
@@ -33,7 +34,10 @@ module RuboCop
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def any?
|
36
|
-
frozen_string_literal_specified? ||
|
37
|
+
frozen_string_literal_specified? ||
|
38
|
+
encoding_specified? ||
|
39
|
+
shareable_constant_value_specified? ||
|
40
|
+
typed_specified?
|
37
41
|
end
|
38
42
|
|
39
43
|
def valid?
|
@@ -101,6 +105,17 @@ module RuboCop
|
|
101
105
|
specified?(encoding)
|
102
106
|
end
|
103
107
|
|
108
|
+
# Was the Sorbet `typed` sigil specified?
|
109
|
+
#
|
110
|
+
# @return [Boolean]
|
111
|
+
def typed_specified?
|
112
|
+
specified?(extract_typed)
|
113
|
+
end
|
114
|
+
|
115
|
+
def typed
|
116
|
+
extract_typed
|
117
|
+
end
|
118
|
+
|
104
119
|
private
|
105
120
|
|
106
121
|
def specified?(value)
|
@@ -187,6 +202,9 @@ module RuboCop
|
|
187
202
|
def extract_shareable_constant_value
|
188
203
|
match(KEYWORDS[:shareable_constant_value])
|
189
204
|
end
|
205
|
+
|
206
|
+
# Emacs comments cannot specify Sorbet typechecking behavior.
|
207
|
+
def extract_typed; end
|
190
208
|
end
|
191
209
|
|
192
210
|
# Wrapper for Vim style magic comments.
|
@@ -222,6 +240,9 @@ module RuboCop
|
|
222
240
|
|
223
241
|
# Vim comments cannot specify shareable constant values behavior.
|
224
242
|
def shareable_constant_value; end
|
243
|
+
|
244
|
+
# Vim comments cannot specify Sorbet typechecking behavior.
|
245
|
+
def extract_typed; end
|
225
246
|
end
|
226
247
|
|
227
248
|
# Wrapper for regular magic comments not bound to an editor.
|
@@ -268,6 +289,10 @@ module RuboCop
|
|
268
289
|
def extract_shareable_constant_value
|
269
290
|
extract(/\A\s*#\s*#{KEYWORDS[:shareable_constant_value]}:\s*(#{TOKEN})\s*\z/io)
|
270
291
|
end
|
292
|
+
|
293
|
+
def extract_typed
|
294
|
+
extract(/\A\s*#\s*#{KEYWORDS[:typed]}:\s*(#{TOKEN})\s*\z/io)
|
295
|
+
end
|
271
296
|
end
|
272
297
|
end
|
273
298
|
end
|
data/lib/rubocop/options.rb
CHANGED
@@ -80,7 +80,7 @@ module RuboCop
|
|
80
80
|
option(opts, '-x', '--fix-layout') do
|
81
81
|
@options[:only] ||= []
|
82
82
|
@options[:only] << 'Layout'
|
83
|
-
@options[:
|
83
|
+
@options[:autocorrect] = true
|
84
84
|
end
|
85
85
|
option(opts, '--safe')
|
86
86
|
add_cop_selection_csv_option('except', opts)
|
@@ -93,6 +93,7 @@ module RuboCop
|
|
93
93
|
option(opts, '--force-exclusion')
|
94
94
|
option(opts, '--only-recognized-file-types')
|
95
95
|
option(opts, '--ignore-parent-exclusion')
|
96
|
+
option(opts, '--ignore-unrecognized-cops')
|
96
97
|
option(opts, '--force-default-config')
|
97
98
|
option(opts, '-s', '--stdin FILE')
|
98
99
|
option(opts, '-P', '--[no-]parallel')
|
@@ -128,14 +129,30 @@ module RuboCop
|
|
128
129
|
end
|
129
130
|
end
|
130
131
|
|
131
|
-
|
132
|
-
|
133
|
-
|
132
|
+
# the autocorrect command-line arguments map to the autocorrect @options values like so:
|
133
|
+
# :fix_layout :autocorrect :safe_autocorrect :autocorrect_all
|
134
|
+
# -x, --fix-layout true true - -
|
135
|
+
# -a, --auto-correct - true true -
|
136
|
+
# --safe-auto-correct - true true -
|
137
|
+
# -A, --auto-correct-all - true - true
|
138
|
+
def add_autocorrection_options(opts) # rubocop:disable Metrics/MethodLength
|
139
|
+
section(opts, 'Autocorrection') do
|
140
|
+
option(opts, '-a', '--autocorrect') { @options[:safe_autocorrect] = true }
|
141
|
+
option(opts, '--auto-correct') do
|
142
|
+
handle_deprecated_option('--auto-correct', '--autocorrect')
|
143
|
+
@options[:safe_autocorrect] = true
|
144
|
+
end
|
134
145
|
option(opts, '--safe-auto-correct') do
|
135
|
-
|
136
|
-
@options[:
|
146
|
+
handle_deprecated_option('--safe-auto-correct', '--autocorrect')
|
147
|
+
@options[:safe_autocorrect] = true
|
148
|
+
end
|
149
|
+
|
150
|
+
option(opts, '-A', '--autocorrect-all') { @options[:autocorrect] = true }
|
151
|
+
option(opts, '--auto-correct-all') do
|
152
|
+
handle_deprecated_option('--auto-correct-all', '--autocorrect-all')
|
153
|
+
@options[:autocorrect] = true
|
137
154
|
end
|
138
|
-
|
155
|
+
|
139
156
|
option(opts, '--disable-uncorrectable')
|
140
157
|
end
|
141
158
|
end
|
@@ -208,6 +225,11 @@ module RuboCop
|
|
208
225
|
end
|
209
226
|
end
|
210
227
|
|
228
|
+
def handle_deprecated_option(old_option, new_option)
|
229
|
+
warn rainbow.wrap("#{old_option} is deprecated; use #{new_option} instead.").yellow
|
230
|
+
@options[long_opt_symbol([new_option])] = @options.delete(long_opt_symbol([old_option]))
|
231
|
+
end
|
232
|
+
|
211
233
|
def rainbow
|
212
234
|
@rainbow ||= begin
|
213
235
|
rainbow = Rainbow.new
|
@@ -236,7 +258,7 @@ module RuboCop
|
|
236
258
|
end
|
237
259
|
|
238
260
|
# Finds the option in `args` starting with -- and converts it to a symbol,
|
239
|
-
# e.g. [..., '--
|
261
|
+
# e.g. [..., '--autocorrect', ...] to :autocorrect.
|
240
262
|
def long_opt_symbol(args)
|
241
263
|
long_opt = args.find { |arg| arg.start_with?('--') }
|
242
264
|
long_opt[2..].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
|
@@ -309,15 +331,14 @@ module RuboCop
|
|
309
331
|
end
|
310
332
|
|
311
333
|
if display_only_fail_level_offenses_with_autocorrect?
|
312
|
-
raise OptionArgumentError, '--
|
313
|
-
'--display-only-fail-level-offenses'
|
334
|
+
raise OptionArgumentError, '--autocorrect cannot be used with ' \
|
335
|
+
'--display-only-fail-level-offenses.'
|
314
336
|
end
|
315
|
-
|
316
337
|
validate_auto_gen_config
|
317
|
-
|
338
|
+
validate_autocorrect
|
318
339
|
validate_display_only_failed
|
319
340
|
validate_display_only_failed_and_display_only_correctable
|
320
|
-
|
341
|
+
validate_display_only_correctable_and_autocorrect
|
321
342
|
disable_parallel_when_invalid_option_combo
|
322
343
|
|
323
344
|
return if incompatible_options.size <= 1
|
@@ -347,13 +368,13 @@ module RuboCop
|
|
347
368
|
format('--display-only-failed can only be used together with --format junit.')
|
348
369
|
end
|
349
370
|
|
350
|
-
def
|
351
|
-
return
|
371
|
+
def validate_display_only_correctable_and_autocorrect
|
372
|
+
return unless @options.key?(:autocorrect)
|
352
373
|
return if !@options.key?(:display_only_correctable) &&
|
353
374
|
!@options.key?(:display_only_safe_correctable)
|
354
375
|
|
355
376
|
raise OptionArgumentError,
|
356
|
-
'--
|
377
|
+
'--autocorrect cannot be used with --display-only-[safe-]correctable.'
|
357
378
|
end
|
358
379
|
|
359
380
|
def validate_display_only_failed_and_display_only_correctable
|
@@ -365,35 +386,34 @@ module RuboCop
|
|
365
386
|
format('--display-only-failed cannot be used together with other display options.')
|
366
387
|
end
|
367
388
|
|
368
|
-
def
|
369
|
-
return if @options.key?(:
|
389
|
+
def validate_autocorrect
|
390
|
+
return if @options.key?(:autocorrect)
|
370
391
|
return unless @options.key?(:disable_uncorrectable)
|
371
392
|
|
372
393
|
raise OptionArgumentError,
|
373
|
-
format('--disable-uncorrectable can only be used together with --
|
394
|
+
format('--disable-uncorrectable can only be used together with --autocorrect.')
|
374
395
|
end
|
375
396
|
|
376
397
|
def disable_parallel_when_invalid_option_combo
|
377
398
|
return unless @options.key?(:parallel)
|
378
399
|
|
379
|
-
|
380
|
-
{ name: :auto_gen_config, value: true, flag: '--auto-gen-config' },
|
381
|
-
{ name: :fail_fast, value: true, flag: '-F/--fail-fast.' },
|
382
|
-
{ name: :auto_correct, value: true, flag: '--auto-correct.' },
|
383
|
-
{ name: :cache, value: 'false', flag: '--cache false' }
|
384
|
-
]
|
385
|
-
|
386
|
-
invalid_flags = invalid_options.each_with_object([]) do |option, flags|
|
387
|
-
# `>` rather than `>=` because `@options` will also contain `parallel: true`
|
388
|
-
flags << option[:flag] if @options > { option[:name] => option[:value] }
|
389
|
-
end
|
400
|
+
invalid_flags = invalid_arguments_for_parallel
|
390
401
|
|
391
402
|
return if invalid_flags.empty?
|
392
403
|
|
393
404
|
@options.delete(:parallel)
|
394
405
|
|
395
406
|
puts '-P/--parallel is being ignored because ' \
|
396
|
-
"it is not compatible with #{invalid_flags.join(', ')}"
|
407
|
+
"it is not compatible with #{invalid_flags.join(', ')}."
|
408
|
+
end
|
409
|
+
|
410
|
+
def invalid_arguments_for_parallel
|
411
|
+
[('--auto-gen-config' if @options.key?(:auto_gen_config)),
|
412
|
+
('-F/--fail-fast' if @options.key?(:fail_fast)),
|
413
|
+
('-x/--fix-layout' if @options.key?(:fix_layout)),
|
414
|
+
('-a/--autocorrect' if @options.key?(:safe_autocorrect)),
|
415
|
+
('-A/--autocorrect-all' if @options.key?(:autocorrect_all)),
|
416
|
+
('--cache false' if @options > { cache: 'false' })].compact
|
397
417
|
end
|
398
418
|
|
399
419
|
def only_includes_redundant_disable?
|
@@ -402,8 +422,7 @@ module RuboCop
|
|
402
422
|
end
|
403
423
|
|
404
424
|
def display_only_fail_level_offenses_with_autocorrect?
|
405
|
-
@options
|
406
|
-
(@options.key?(:auto_correct) || @options.key?(:safe_auto_correct))
|
425
|
+
@options.key?(:display_only_fail_level_offenses) && @options.key?(:autocorrect)
|
407
426
|
end
|
408
427
|
|
409
428
|
def except_syntax?
|
@@ -465,7 +484,7 @@ module RuboCop
|
|
465
484
|
exclude_limit: ['Set the limit for how many files to explicitly exclude.',
|
466
485
|
'If there are more files than the limit, the cop will',
|
467
486
|
"be disabled instead. Default is #{MAX_EXCL}."],
|
468
|
-
disable_uncorrectable: ['Used with --
|
487
|
+
disable_uncorrectable: ['Used with --autocorrect to annotate any',
|
469
488
|
'offenses that do not support autocorrect',
|
470
489
|
'with `rubocop:todo` comments.'],
|
471
490
|
force_exclusion: ['Any files excluded by `Exclude` in configuration',
|
@@ -478,6 +497,7 @@ module RuboCop
|
|
478
497
|
'by a `rubocop:disable` directive.'],
|
479
498
|
ignore_parent_exclusion: ['Prevent from inheriting `AllCops/Exclude` from',
|
480
499
|
'parent folders.'],
|
500
|
+
ignore_unrecognized_cops: ['Ignore unrecognized cops or departments in the config.'],
|
481
501
|
force_default_config: ['Use default configuration even if configuration',
|
482
502
|
'files are present in the directory tree.'],
|
483
503
|
format: ['Choose an output formatter. This option',
|
@@ -534,12 +554,14 @@ module RuboCop
|
|
534
554
|
safe: 'Run only safe cops.',
|
535
555
|
stderr: ['Write all output to stderr except for the',
|
536
556
|
'autocorrected source. This is especially useful',
|
537
|
-
'when combined with --
|
557
|
+
'when combined with --autocorrect and --stdin.'],
|
538
558
|
list_target_files: 'List all files RuboCop will inspect.',
|
539
|
-
|
559
|
+
autocorrect: 'Autocorrect offenses (only when it\'s safe).',
|
560
|
+
auto_correct: '(same, deprecated)',
|
540
561
|
safe_auto_correct: '(same, deprecated)',
|
541
|
-
|
542
|
-
|
562
|
+
autocorrect_all: 'Autocorrect offenses (safe and unsafe).',
|
563
|
+
auto_correct_all: '(same, deprecated)',
|
564
|
+
fix_layout: 'Run only layout cops, with autocorrect on.',
|
543
565
|
color: 'Force color output on or off.',
|
544
566
|
version: 'Display version.',
|
545
567
|
verbose_version: 'Display verbose version.',
|
data/lib/rubocop/rake_task.rb
CHANGED
@@ -62,15 +62,15 @@ module RuboCop
|
|
62
62
|
|
63
63
|
def setup_subtasks(name, *args, &task_block)
|
64
64
|
namespace(name) do
|
65
|
-
desc '
|
65
|
+
desc 'Autocorrect RuboCop offenses'
|
66
66
|
|
67
67
|
task(:auto_correct, *args) do |_, task_args|
|
68
68
|
RakeFileUtils.verbose(verbose) do
|
69
69
|
yield(*[self, task_args].slice(0, task_block.arity)) if task_block
|
70
|
-
options = full_options.unshift('--
|
70
|
+
options = full_options.unshift('--autocorrect-all')
|
71
71
|
# `parallel` will automatically be removed from the options internally.
|
72
72
|
# This is a nice to have to suppress the warning message
|
73
|
-
# about parallel and
|
73
|
+
# about --parallel and --autocorrect not being compatible.
|
74
74
|
options.delete('--parallel')
|
75
75
|
run_cli(verbose, options)
|
76
76
|
end
|
data/lib/rubocop/result_cache.rb
CHANGED
@@ -9,7 +9,8 @@ module RuboCop
|
|
9
9
|
# Provides functionality for caching RuboCop runs.
|
10
10
|
# @api private
|
11
11
|
class ResultCache
|
12
|
-
NON_CHANGING = %i[color format formatters out debug fail_level
|
12
|
+
NON_CHANGING = %i[color format formatters out debug fail_level
|
13
|
+
fix_layout autocorrect safe_autocorrect autocorrect_all
|
13
14
|
cache fail_fast stdin parallel].freeze
|
14
15
|
|
15
16
|
# Remove old files so that the cache doesn't grow too big. When the
|
@@ -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
|
@@ -116,6 +116,30 @@ RSpec.shared_context 'mock console output' do
|
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
+
RSpec.shared_context 'ruby 2.0', :ruby20 do
|
120
|
+
let(:ruby_version) { 2.0 }
|
121
|
+
end
|
122
|
+
|
123
|
+
RSpec.shared_context 'ruby 2.1', :ruby21 do
|
124
|
+
let(:ruby_version) { 2.1 }
|
125
|
+
end
|
126
|
+
|
127
|
+
RSpec.shared_context 'ruby 2.2', :ruby22 do
|
128
|
+
let(:ruby_version) { 2.2 }
|
129
|
+
end
|
130
|
+
|
131
|
+
RSpec.shared_context 'ruby 2.3', :ruby23 do
|
132
|
+
let(:ruby_version) { 2.3 }
|
133
|
+
end
|
134
|
+
|
135
|
+
RSpec.shared_context 'ruby 2.4', :ruby24 do
|
136
|
+
let(:ruby_version) { 2.4 }
|
137
|
+
end
|
138
|
+
|
139
|
+
RSpec.shared_context 'ruby 2.5', :ruby25 do
|
140
|
+
let(:ruby_version) { 2.5 }
|
141
|
+
end
|
142
|
+
|
119
143
|
RSpec.shared_context 'ruby 2.6', :ruby26 do
|
120
144
|
let(:ruby_version) { 2.6 }
|
121
145
|
end
|
data/lib/rubocop/runner.rb
CHANGED
@@ -143,10 +143,10 @@ module RuboCop
|
|
143
143
|
|
144
144
|
if cache&.valid?
|
145
145
|
offenses = cache.load
|
146
|
-
# If we're running --
|
146
|
+
# If we're running --autocorrect and the cache says there are
|
147
147
|
# offenses, we need to actually inspect the file. If the cache shows no
|
148
148
|
# offenses, we're good.
|
149
|
-
real_run_needed = @options[:
|
149
|
+
real_run_needed = @options[:autocorrect] && offenses.any?
|
150
150
|
else
|
151
151
|
real_run_needed = true
|
152
152
|
end
|
@@ -240,7 +240,7 @@ module RuboCop
|
|
240
240
|
# error message.
|
241
241
|
offenses_by_iteration = []
|
242
242
|
|
243
|
-
# When running with --
|
243
|
+
# When running with --autocorrect, we need to inspect the file (which
|
244
244
|
# includes writing a corrected version of it) until no more corrections
|
245
245
|
# are made. This is because automatic corrections can introduce new
|
246
246
|
# offenses. In the normal case the loop is only executed once.
|
@@ -382,7 +382,7 @@ module RuboCop
|
|
382
382
|
if @options[:display_only_fail_level_offenses]
|
383
383
|
offenses.select { |o| considered_failure?(o) }
|
384
384
|
elsif @options[:display_only_safe_correctable]
|
385
|
-
offenses.select { |o|
|
385
|
+
offenses.select { |o| supports_safe_autocorrect?(o) }
|
386
386
|
elsif @options[:display_only_correctable]
|
387
387
|
offenses.select(&:correctable?)
|
388
388
|
else
|
@@ -390,7 +390,7 @@ module RuboCop
|
|
390
390
|
end
|
391
391
|
end
|
392
392
|
|
393
|
-
def
|
393
|
+
def supports_safe_autocorrect?(offense)
|
394
394
|
cop_class = Cop::Registry.global.find_by_cop_name(offense.cop_name)
|
395
395
|
default_cfg = default_config(offense.cop_name)
|
396
396
|
|
data/lib/rubocop/target_ruby.rb
CHANGED
@@ -4,8 +4,8 @@ module RuboCop
|
|
4
4
|
# The kind of Ruby that code inspected by RuboCop is written in.
|
5
5
|
# @api private
|
6
6
|
class TargetRuby
|
7
|
-
KNOWN_RUBIES = [2.6, 2.7, 3.0, 3.1, 3.2].freeze
|
8
|
-
DEFAULT_VERSION =
|
7
|
+
KNOWN_RUBIES = [2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2].freeze
|
8
|
+
DEFAULT_VERSION = 2.6
|
9
9
|
|
10
10
|
OBSOLETE_RUBIES = {
|
11
11
|
1.9 => '0.41',
|
@@ -172,7 +172,7 @@ module RuboCop
|
|
172
172
|
right_hand_side = version_from_gemspec_file(file)
|
173
173
|
return if right_hand_side.nil?
|
174
174
|
|
175
|
-
|
175
|
+
find_default_minimal_known_ruby(right_hand_side)
|
176
176
|
end
|
177
177
|
|
178
178
|
def gemspec_filename
|
@@ -206,11 +206,13 @@ module RuboCop
|
|
206
206
|
array.children.map(&:value)
|
207
207
|
end
|
208
208
|
|
209
|
-
def
|
209
|
+
def find_default_minimal_known_ruby(right_hand_side)
|
210
210
|
version = version_from_right_hand_side(right_hand_side)
|
211
211
|
requirement = Gem::Requirement.new(version)
|
212
212
|
|
213
|
-
KNOWN_RUBIES.detect
|
213
|
+
KNOWN_RUBIES.detect do |v|
|
214
|
+
v >= DEFAULT_VERSION && requirement.satisfied_by?(Gem::Version.new("#{v}.99"))
|
215
|
+
end
|
214
216
|
end
|
215
217
|
end
|
216
218
|
|