rubocop 0.87.1 → 0.89.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 +1 -1
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +153 -22
- data/lib/rubocop.rb +22 -4
- data/lib/rubocop/cli.rb +2 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +3 -3
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +2 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +22 -9
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_store.rb +4 -0
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +14 -6
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/cop.rb +1 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +38 -12
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +3 -7
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +16 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +14 -20
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +82 -11
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +16 -19
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +25 -15
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +14 -16
- data/lib/rubocop/cop/mixin/alignment.rb +2 -1
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +3 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
- data/lib/rubocop/cop/style/accessor_grouping.rb +29 -20
- data/lib/rubocop/cop/style/alias.rb +41 -36
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_coercion.rb +63 -0
- data/lib/rubocop/cop/style/array_join.rb +6 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +11 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
- data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +14 -18
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +220 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +6 -10
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/command_literal.rb +23 -24
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +13 -4
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +12 -12
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +7 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +6 -8
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -19
- data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +15 -16
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +5 -9
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +21 -20
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +7 -9
- data/lib/rubocop/cop/style/float_division.rb +8 -11
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +21 -19
- data/lib/rubocop/cop/style/format_string_token.rb +10 -12
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +11 -21
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
- data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
- data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +3 -13
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +7 -5
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/file_finder.rb +12 -12
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/options.rb +3 -3
- data/lib/rubocop/path_util.rb +17 -17
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/result_cache.rb +12 -8
- data/lib/rubocop/rspec/expect_offense.rb +31 -5
- data/lib/rubocop/rspec/shared_contexts.rb +13 -14
- data/lib/rubocop/runner.rb +6 -7
- data/lib/rubocop/target_finder.rb +13 -10
- data/lib/rubocop/version.rb +2 -2
- metadata +28 -8
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -26,7 +26,7 @@ module RuboCop
|
|
26
26
|
# public_constant :BAZ
|
27
27
|
# end
|
28
28
|
#
|
29
|
-
class ConstantVisibility <
|
29
|
+
class ConstantVisibility < Base
|
30
30
|
MSG = 'Explicitly make `%<constant_name>s` public or private using ' \
|
31
31
|
'either `#public_constant` or `#private_constant`.'
|
32
32
|
|
@@ -34,7 +34,8 @@ module RuboCop
|
|
34
34
|
return unless class_or_module_scope?(node)
|
35
35
|
return if visibility_declaration?(node)
|
36
36
|
|
37
|
-
|
37
|
+
message = message(node)
|
38
|
+
add_offense(node, message: message)
|
38
39
|
end
|
39
40
|
|
40
41
|
private
|
@@ -15,28 +15,24 @@ module RuboCop
|
|
15
15
|
# that RuboCop scans, a comment that matches this regex must be found or
|
16
16
|
# an offense is reported.
|
17
17
|
#
|
18
|
-
class Copyright <
|
18
|
+
class Copyright < Base
|
19
19
|
include RangeHelp
|
20
|
+
extend AutoCorrector
|
20
21
|
|
21
22
|
MSG = 'Include a copyright notice matching /%<notice>s/ before ' \
|
22
23
|
'any code.'
|
23
24
|
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in ' \
|
24
25
|
'your RuboCop config'
|
25
26
|
|
26
|
-
def
|
27
|
-
return if notice.empty?
|
28
|
-
return if notice_found?(processed_source)
|
27
|
+
def on_new_investigation
|
28
|
+
return if notice.empty? || notice_found?(processed_source)
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
location: range, message: format(MSG, notice: notice))
|
33
|
-
end
|
34
|
-
|
35
|
-
def autocorrect(token)
|
36
|
-
verify_autocorrect_notice!
|
30
|
+
add_offense(offense_range, message: format(MSG, notice: notice)) do |corrector|
|
31
|
+
verify_autocorrect_notice!
|
37
32
|
|
38
|
-
|
33
|
+
token = insert_notice_before(processed_source)
|
39
34
|
range = token.nil? ? range_between(0, 0) : token.pos
|
35
|
+
|
40
36
|
corrector.insert_before(range, "#{autocorrect_notice}\n")
|
41
37
|
end
|
42
38
|
end
|
@@ -51,6 +47,10 @@ module RuboCop
|
|
51
47
|
cop_config['AutocorrectNotice']
|
52
48
|
end
|
53
49
|
|
50
|
+
def offense_range
|
51
|
+
source_range(processed_source.buffer, 1, 0)
|
52
|
+
end
|
53
|
+
|
54
54
|
def verify_autocorrect_notice!
|
55
55
|
raise Warning, AUTOCORRECT_EMPTY_WARNING if autocorrect_notice.empty?
|
56
56
|
|
@@ -33,24 +33,22 @@ module RuboCop
|
|
33
33
|
# def Baz.foo
|
34
34
|
# # does a thing
|
35
35
|
# end
|
36
|
-
class DefWithParentheses <
|
36
|
+
class DefWithParentheses < Base
|
37
|
+
extend AutoCorrector
|
38
|
+
|
37
39
|
MSG = "Omit the parentheses in defs when the method doesn't accept " \
|
38
40
|
'any arguments.'
|
39
41
|
|
40
42
|
def on_def(node)
|
41
43
|
return if node.single_line?
|
42
|
-
return unless !node.arguments? && node.arguments.loc.begin
|
44
|
+
return unless !node.arguments? && (node_arguments_loc_begin = node.arguments.loc.begin)
|
43
45
|
|
44
|
-
add_offense(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
def autocorrect(node)
|
49
|
-
lambda do |corrector|
|
50
|
-
corrector.remove(node.loc.begin)
|
51
|
-
corrector.remove(node.loc.end)
|
46
|
+
add_offense(node_arguments_loc_begin) do |corrector|
|
47
|
+
corrector.remove(node_arguments_loc_begin)
|
48
|
+
corrector.remove(node.arguments.loc.end)
|
52
49
|
end
|
53
50
|
end
|
51
|
+
alias on_defs on_def
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|
@@ -16,9 +16,10 @@ module RuboCop
|
|
16
16
|
#
|
17
17
|
# # good
|
18
18
|
# path = __dir__
|
19
|
-
class Dir <
|
20
|
-
|
21
|
-
|
19
|
+
class Dir < Base
|
20
|
+
extend AutoCorrector
|
21
|
+
|
22
|
+
MSG = "Use `__dir__` to get an absolute path to the current file's directory."
|
22
23
|
|
23
24
|
def_node_matcher :dir_replacement?, <<~PATTERN
|
24
25
|
{(send (const {nil? cbase} :File) :expand_path (send (const {nil? cbase} :File) :dirname #file_keyword?))
|
@@ -27,13 +28,9 @@ module RuboCop
|
|
27
28
|
|
28
29
|
def on_send(node)
|
29
30
|
dir_replacement?(node) do
|
30
|
-
add_offense(node)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
def autocorrect(node)
|
35
|
-
lambda do |corrector|
|
36
|
-
corrector.replace(node, '__dir__')
|
31
|
+
add_offense(node) do |corrector|
|
32
|
+
corrector.replace(node, '__dir__')
|
33
|
+
end
|
37
34
|
end
|
38
35
|
end
|
39
36
|
|
@@ -20,21 +20,19 @@ module RuboCop
|
|
20
20
|
# def fixed_method_name_and_no_rubocop_comments
|
21
21
|
# end
|
22
22
|
#
|
23
|
-
class DisableCopsWithinSourceCodeDirective <
|
23
|
+
class DisableCopsWithinSourceCodeDirective < Base
|
24
|
+
extend AutoCorrector
|
25
|
+
|
24
26
|
# rubocop:enable Lint/RedundantCopDisableDirective
|
25
27
|
MSG = 'Comment to disable/enable RuboCop.'
|
26
28
|
|
27
|
-
def
|
29
|
+
def on_new_investigation
|
28
30
|
processed_source.comments.each do |comment|
|
29
31
|
next unless rubocop_directive_comment?(comment)
|
30
32
|
|
31
|
-
add_offense(comment)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def autocorrect(comment)
|
36
|
-
lambda do |corrector|
|
37
|
-
corrector.replace(comment, '')
|
33
|
+
add_offense(comment) do |corrector|
|
34
|
+
corrector.replace(comment, '')
|
35
|
+
end
|
38
36
|
end
|
39
37
|
end
|
40
38
|
|
@@ -55,7 +55,7 @@ module RuboCop
|
|
55
55
|
# Public = Class.new
|
56
56
|
# end
|
57
57
|
#
|
58
|
-
class Documentation <
|
58
|
+
class Documentation < Base
|
59
59
|
include DocumentationComment
|
60
60
|
|
61
61
|
MSG = 'Missing top-level %<type>s documentation comment.'
|
@@ -84,9 +84,7 @@ module RuboCop
|
|
84
84
|
return if compact_namespace?(node) &&
|
85
85
|
nodoc_comment?(outer_module(node).first)
|
86
86
|
|
87
|
-
add_offense(node,
|
88
|
-
location: :keyword,
|
89
|
-
message: format(MSG, type: type))
|
87
|
+
add_offense(node.loc.keyword, message: format(MSG, type: type))
|
90
88
|
end
|
91
89
|
|
92
90
|
def namespace?(node)
|
@@ -112,17 +110,17 @@ module RuboCop
|
|
112
110
|
# proceeds to check its ancestors for :nodoc: all.
|
113
111
|
# Note: How end-of-line comments are associated with code changed in
|
114
112
|
# parser-2.2.0.4.
|
115
|
-
def nodoc_comment?(node, require_all
|
113
|
+
def nodoc_comment?(node, require_all: false)
|
116
114
|
return false unless node&.children&.first
|
117
115
|
|
118
116
|
nodoc = nodoc(node)
|
119
117
|
|
120
|
-
return true if same_line?(nodoc, node) && nodoc?(nodoc, require_all)
|
118
|
+
return true if same_line?(nodoc, node) && nodoc?(nodoc, require_all: require_all)
|
121
119
|
|
122
|
-
nodoc_comment?(node.parent, true)
|
120
|
+
nodoc_comment?(node.parent, require_all: true)
|
123
121
|
end
|
124
122
|
|
125
|
-
def nodoc?(comment, require_all
|
123
|
+
def nodoc?(comment, require_all: false)
|
126
124
|
/^#\s*:nodoc:#{"\s+all\s*$" if require_all}/.match?(comment.text)
|
127
125
|
end
|
128
126
|
|
@@ -24,29 +24,26 @@ module RuboCop
|
|
24
24
|
# def f # rubocop:disable Style/For, Metrics/AbcSize
|
25
25
|
# end
|
26
26
|
#
|
27
|
-
class DoubleCopDisableDirective <
|
27
|
+
class DoubleCopDisableDirective < Base
|
28
|
+
extend AutoCorrector
|
29
|
+
|
28
30
|
# rubocop:enable Style/For, Style/DoubleCopDisableDirective
|
29
31
|
# rubocop:enable Lint/RedundantCopDisableDirective, Metrics/AbcSize
|
30
32
|
MSG = 'More than one disable comment on one line.'
|
31
33
|
|
32
|
-
def
|
34
|
+
def on_new_investigation
|
33
35
|
processed_source.comments.each do |comment|
|
34
36
|
next unless comment.text.scan(/# rubocop:(?:disable|todo)/).size > 1
|
35
37
|
|
36
|
-
add_offense(comment)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
'# rubocop:disable'
|
43
|
-
else
|
44
|
-
'# rubocop:todo'
|
45
|
-
end
|
38
|
+
add_offense(comment) do |corrector|
|
39
|
+
prefix = if comment.text.start_with?('# rubocop:disable')
|
40
|
+
'# rubocop:disable'
|
41
|
+
else
|
42
|
+
'# rubocop:todo'
|
43
|
+
end
|
46
44
|
|
47
|
-
|
48
|
-
|
49
|
-
comment.text[/#{prefix} \S+/])
|
45
|
+
corrector.replace(comment, comment.text[/#{prefix} \S+/])
|
46
|
+
end
|
50
47
|
end
|
51
48
|
end
|
52
49
|
end
|
@@ -32,7 +32,7 @@ module RuboCop
|
|
32
32
|
# !!something and !something.nil? are not the same thing.
|
33
33
|
# As you're unlikely to write code that can accept values of any type
|
34
34
|
# this is rarely a problem in practice.
|
35
|
-
class DoubleNegation <
|
35
|
+
class DoubleNegation < Base
|
36
36
|
include ConfigurableEnforcedStyle
|
37
37
|
|
38
38
|
MSG = 'Avoid the use of double negation (`!!`).'
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
43
43
|
return unless double_negative?(node) && node.prefix_bang?
|
44
44
|
return if style == :allowed_in_returns && allowed_in_returns?(node)
|
45
45
|
|
46
|
-
add_offense(node
|
46
|
+
add_offense(node.loc.selector)
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
@@ -22,7 +22,9 @@ module RuboCop
|
|
22
22
|
#
|
23
23
|
# # good
|
24
24
|
# 10.times {}
|
25
|
-
class EachForSimpleLoop <
|
25
|
+
class EachForSimpleLoop < Base
|
26
|
+
extend AutoCorrector
|
27
|
+
|
26
28
|
MSG = 'Use `Integer#times` for a simple loop which iterates a fixed ' \
|
27
29
|
'number of times.'
|
28
30
|
|
@@ -33,17 +35,12 @@ module RuboCop
|
|
33
35
|
|
34
36
|
range = send_node.receiver.source_range.join(send_node.loc.selector)
|
35
37
|
|
36
|
-
add_offense(
|
37
|
-
end
|
38
|
-
|
39
|
-
def autocorrect(node)
|
40
|
-
lambda do |corrector|
|
38
|
+
add_offense(range) do |corrector|
|
41
39
|
range_type, min, max = offending_each_range(node)
|
42
40
|
|
43
41
|
max += 1 if range_type == :irange
|
44
42
|
|
45
|
-
corrector.replace(node.send_node,
|
46
|
-
"#{max - min}.times")
|
43
|
+
corrector.replace(node.send_node, "#{max - min}.times")
|
47
44
|
end
|
48
45
|
end
|
49
46
|
|
@@ -16,7 +16,8 @@ module RuboCop
|
|
16
16
|
#
|
17
17
|
# # good
|
18
18
|
# [1, 2].each_with_object({}) { |e, a| a[e] = e }
|
19
|
-
class EachWithObject <
|
19
|
+
class EachWithObject < Base
|
20
|
+
extend AutoCorrector
|
20
21
|
include RangeHelp
|
21
22
|
|
22
23
|
MSG = 'Use `each_with_object` instead of `%<method>s`.'
|
@@ -36,33 +37,29 @@ module RuboCop
|
|
36
37
|
return unless first_argument_returned?(args, return_value)
|
37
38
|
return if accumulator_param_assigned_to?(body, args)
|
38
39
|
|
39
|
-
|
40
|
-
|
40
|
+
message = format(MSG, method: method_name)
|
41
|
+
add_offense(method.loc.selector, message: message) do |corrector|
|
42
|
+
autocorrect(corrector, node, return_value)
|
43
|
+
end
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
|
-
|
45
|
-
def autocorrect(node)
|
46
|
-
lambda do |corrector|
|
47
|
-
corrector.replace(node.send_node.loc.selector, 'each_with_object')
|
47
|
+
private
|
48
48
|
|
49
|
-
|
49
|
+
def autocorrect(corrector, node, return_value)
|
50
|
+
corrector.replace(node.send_node.loc.selector, 'each_with_object')
|
50
51
|
|
51
|
-
|
52
|
-
corrector.replace(second_arg, first_arg.source)
|
52
|
+
first_arg, second_arg = *node.arguments
|
53
53
|
|
54
|
-
|
54
|
+
corrector.replace(first_arg, second_arg.source)
|
55
|
+
corrector.replace(second_arg, first_arg.source)
|
55
56
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
57
|
+
if return_value_occupies_whole_line?(return_value)
|
58
|
+
corrector.remove(whole_line_expression(return_value))
|
59
|
+
else
|
60
|
+
corrector.remove(return_value)
|
61
61
|
end
|
62
62
|
end
|
63
|
-
# rubocop:enable Metrics/AbcSize
|
64
|
-
|
65
|
-
private
|
66
63
|
|
67
64
|
def simple_method_arg?(method_arg)
|
68
65
|
method_arg&.basic_literal?
|
@@ -35,11 +35,11 @@ module RuboCop
|
|
35
35
|
# else
|
36
36
|
# puts 'more'
|
37
37
|
# end
|
38
|
-
class EmptyCaseCondition <
|
38
|
+
class EmptyCaseCondition < Base
|
39
39
|
include RangeHelp
|
40
|
+
extend AutoCorrector
|
40
41
|
|
41
|
-
MSG = 'Do not use empty `case` condition, instead use an `if` '
|
42
|
-
'expression.'
|
42
|
+
MSG = 'Do not use empty `case` condition, instead use an `if` expression.'
|
43
43
|
|
44
44
|
def on_case(case_node)
|
45
45
|
return if case_node.condition
|
@@ -54,26 +54,26 @@ module RuboCop
|
|
54
54
|
body.each_descendant.any?(&:return_type?)
|
55
55
|
end
|
56
56
|
|
57
|
-
add_offense(case_node
|
57
|
+
add_offense(case_node.loc.keyword) do |corrector|
|
58
|
+
autocorrect(corrector, case_node)
|
59
|
+
end
|
58
60
|
end
|
59
61
|
|
60
|
-
|
62
|
+
private
|
63
|
+
|
64
|
+
def autocorrect(corrector, case_node)
|
61
65
|
when_branches = case_node.when_branches
|
62
66
|
|
63
|
-
|
64
|
-
|
65
|
-
correct_when_conditions(corrector, when_branches)
|
66
|
-
end
|
67
|
+
correct_case_when(corrector, case_node, when_branches)
|
68
|
+
correct_when_conditions(corrector, when_branches)
|
67
69
|
end
|
68
70
|
|
69
|
-
private
|
70
|
-
|
71
71
|
def correct_case_when(corrector, case_node, when_nodes)
|
72
72
|
case_range = case_node.loc.keyword.join(when_nodes.first.loc.keyword)
|
73
73
|
|
74
74
|
corrector.replace(case_range, 'if')
|
75
75
|
|
76
|
-
keep_first_when_comment(
|
76
|
+
keep_first_when_comment(case_range, corrector)
|
77
77
|
|
78
78
|
when_nodes[1..-1].each do |when_node|
|
79
79
|
corrector.replace(when_node.loc.keyword, 'elsif')
|
@@ -93,15 +93,14 @@ module RuboCop
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
def keep_first_when_comment(
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
line = range_by_whole_lines(case_node.source_range)
|
96
|
+
def keep_first_when_comment(case_range, corrector)
|
97
|
+
indent = ' ' * case_range.column
|
98
|
+
comments = processed_source.each_comment_in_lines(
|
99
|
+
case_range.first_line...case_range.last_line
|
100
|
+
).map { |comment| "#{indent}#{comment.text}\n" }.join
|
102
101
|
|
103
|
-
|
104
|
-
|
102
|
+
line_beginning = case_range.adjust(begin_pos: -case_range.column)
|
103
|
+
corrector.insert_before(line_beginning, comments)
|
105
104
|
end
|
106
105
|
end
|
107
106
|
end
|
@@ -89,10 +89,11 @@ module RuboCop
|
|
89
89
|
# if condition
|
90
90
|
# statement
|
91
91
|
# end
|
92
|
-
class EmptyElse <
|
92
|
+
class EmptyElse < Base
|
93
93
|
include OnNormalIfUnless
|
94
94
|
include ConfigurableEnforcedStyle
|
95
95
|
include RangeHelp
|
96
|
+
extend AutoCorrector
|
96
97
|
|
97
98
|
MSG = 'Redundant `else`-clause.'
|
98
99
|
|
@@ -104,16 +105,6 @@ module RuboCop
|
|
104
105
|
check(node)
|
105
106
|
end
|
106
107
|
|
107
|
-
def autocorrect(node)
|
108
|
-
return false if autocorrect_forbidden?(node.type.to_s)
|
109
|
-
return false if comment_in_else?(node)
|
110
|
-
|
111
|
-
lambda do |corrector|
|
112
|
-
end_pos = base_node(node).loc.end.begin_pos
|
113
|
-
corrector.remove(range_between(node.loc.else.begin_pos, end_pos))
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
108
|
private
|
118
109
|
|
119
110
|
def check(node)
|
@@ -132,24 +123,31 @@ module RuboCop
|
|
132
123
|
def empty_check(node)
|
133
124
|
return unless node.else? && !node.else_branch
|
134
125
|
|
135
|
-
add_offense(node
|
126
|
+
add_offense(node.loc.else) do |corrector|
|
127
|
+
autocorrect(corrector, node)
|
128
|
+
end
|
136
129
|
end
|
137
130
|
|
138
131
|
def nil_check(node)
|
139
132
|
return unless node.else_branch&.nil_type?
|
140
133
|
|
141
|
-
add_offense(node
|
134
|
+
add_offense(node.loc.else) do |corrector|
|
135
|
+
autocorrect(corrector, node)
|
136
|
+
end
|
142
137
|
end
|
143
138
|
|
144
|
-
def
|
145
|
-
|
146
|
-
|
139
|
+
def autocorrect(corrector, node)
|
140
|
+
return false if autocorrect_forbidden?(node.type.to_s)
|
141
|
+
return false if comment_in_else?(node.loc)
|
142
|
+
|
143
|
+
end_pos = base_node(node).loc.end.begin_pos
|
144
|
+
corrector.remove(range_between(node.loc.else.begin_pos, end_pos))
|
147
145
|
end
|
148
146
|
|
149
|
-
def
|
150
|
-
return
|
147
|
+
def comment_in_else?(loc)
|
148
|
+
return false if loc.else.nil? || loc.end.nil?
|
151
149
|
|
152
|
-
loc.else.
|
150
|
+
processed_source.contains_comment?(loc.else.join(loc.end))
|
153
151
|
end
|
154
152
|
|
155
153
|
def base_node(node)
|