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
@@ -17,18 +17,16 @@ module RuboCop
|
|
17
17
|
# def to_json(*_args)
|
18
18
|
# end
|
19
19
|
#
|
20
|
-
class ToJSON <
|
20
|
+
class ToJSON < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = ' `#to_json` requires an optional argument to be parsable ' \
|
22
24
|
'via JSON.generate(obj).'
|
23
25
|
|
24
26
|
def on_def(node)
|
25
27
|
return unless node.method?(:to_json) && node.arguments.empty?
|
26
28
|
|
27
|
-
add_offense(node)
|
28
|
-
end
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
29
|
+
add_offense(node) do |corrector|
|
32
30
|
# The following used `*_args` because `to_json(*args)` has
|
33
31
|
# an offense of `Lint/UnusedMethodArgument` cop if `*args`
|
34
32
|
# is not used.
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for top level return with arguments. If there is a
|
7
|
+
# top-level return statement with an argument, then the argument is
|
8
|
+
# always ignored. This is detected automatically since Ruby 2.7.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
#
|
12
|
+
# # Detected since Ruby 2.7
|
13
|
+
# return 1 # 1 is always ignored.
|
14
|
+
class TopLevelReturnWithArgument < Cop
|
15
|
+
# This cop works by validating the ancestors of the return node. A
|
16
|
+
# top-level return node's ancestors should not be of block, def, or
|
17
|
+
# defs type.
|
18
|
+
|
19
|
+
MSG = 'Top level return with argument detected.'
|
20
|
+
|
21
|
+
def on_return(return_node)
|
22
|
+
add_offense(return_node) if return_node.arguments? && ancestors_valid?(return_node)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def ancestors_valid?(return_node)
|
28
|
+
prohibited_ancestors = return_node.each_ancestor(:block, :def, :defs)
|
29
|
+
prohibited_ancestors.none?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -40,11 +40,11 @@ module RuboCop
|
|
40
40
|
# {_id: _id, profit: revenue - cost}
|
41
41
|
# end
|
42
42
|
#
|
43
|
-
class UnderscorePrefixedVariableName <
|
43
|
+
class UnderscorePrefixedVariableName < Base
|
44
44
|
MSG = 'Do not use prefix `_` for a variable that is used.'
|
45
45
|
|
46
|
-
def
|
47
|
-
|
46
|
+
def self.joining_forces
|
47
|
+
VariableForce
|
48
48
|
end
|
49
49
|
|
50
50
|
def after_leaving_scope(scope, _variable_table)
|
@@ -66,7 +66,7 @@ module RuboCop
|
|
66
66
|
node.loc.name
|
67
67
|
end
|
68
68
|
|
69
|
-
add_offense(
|
69
|
+
add_offense(location)
|
70
70
|
end
|
71
71
|
|
72
72
|
private
|
@@ -17,7 +17,9 @@ module RuboCop
|
|
17
17
|
# # good
|
18
18
|
#
|
19
19
|
# 1.is_a?(Integer)
|
20
|
-
class UnifiedInteger <
|
20
|
+
class UnifiedInteger < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = 'Use `Integer` instead of `%<klass>s`.'
|
22
24
|
|
23
25
|
def_node_matcher :fixnum_or_bignum_const, <<~PATTERN
|
@@ -29,11 +31,7 @@ module RuboCop
|
|
29
31
|
|
30
32
|
return unless klass
|
31
33
|
|
32
|
-
add_offense(node, message: format(MSG, klass: klass))
|
33
|
-
end
|
34
|
-
|
35
|
-
def autocorrect(node)
|
36
|
-
lambda do |corrector|
|
34
|
+
add_offense(node, message: format(MSG, klass: klass)) do |corrector|
|
37
35
|
corrector.replace(node.loc.name, 'Integer')
|
38
36
|
end
|
39
37
|
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for loops that will have at most one iteration.
|
7
|
+
#
|
8
|
+
# A loop that can never reach the second iteration is a possible error in the code.
|
9
|
+
# In rare cases where only one iteration (or at most one iteration) is intended behavior,
|
10
|
+
# the code should be refactored to use `if` conditionals.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# # bad
|
14
|
+
# while node
|
15
|
+
# do_something(node)
|
16
|
+
# node = node.parent
|
17
|
+
# break
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# while node
|
22
|
+
# do_something(node)
|
23
|
+
# node = node.parent
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# def verify_list(head)
|
28
|
+
# item = head
|
29
|
+
# begin
|
30
|
+
# if verify(item)
|
31
|
+
# return true
|
32
|
+
# else
|
33
|
+
# return false
|
34
|
+
# end
|
35
|
+
# end while(item)
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# # good
|
39
|
+
# def verify_list(head)
|
40
|
+
# item = head
|
41
|
+
# begin
|
42
|
+
# if verify(item)
|
43
|
+
# item = item.next
|
44
|
+
# else
|
45
|
+
# return false
|
46
|
+
# end
|
47
|
+
# end while(item)
|
48
|
+
#
|
49
|
+
# true
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# # bad
|
53
|
+
# def find_something(items)
|
54
|
+
# items.each do |item|
|
55
|
+
# if something?(item)
|
56
|
+
# return item
|
57
|
+
# else
|
58
|
+
# raise NotFoundError
|
59
|
+
# end
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# # good
|
64
|
+
# def find_something(items)
|
65
|
+
# items.each do |item|
|
66
|
+
# if something?(item)
|
67
|
+
# return item
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
# raise NotFoundError
|
71
|
+
# end
|
72
|
+
#
|
73
|
+
class UnreachableLoop < Base
|
74
|
+
MSG = 'This loop will have at most one iteration.'
|
75
|
+
|
76
|
+
def on_while(node)
|
77
|
+
check(node)
|
78
|
+
end
|
79
|
+
alias on_until on_while
|
80
|
+
alias on_while_post on_while
|
81
|
+
alias on_until_post on_while
|
82
|
+
alias on_for on_while
|
83
|
+
|
84
|
+
def on_block(node)
|
85
|
+
check(node) if loop_method?(node)
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def loop_method?(node)
|
91
|
+
return false unless node.block_type?
|
92
|
+
|
93
|
+
send_node = node.send_node
|
94
|
+
send_node.enumerable_method? || send_node.enumerator_method? || send_node.method?(:loop)
|
95
|
+
end
|
96
|
+
|
97
|
+
def check(node)
|
98
|
+
statements = statements(node)
|
99
|
+
break_statement = statements.find { |statement| break_statement?(statement) }
|
100
|
+
return unless break_statement
|
101
|
+
|
102
|
+
add_offense(node) unless preceded_by_continue_statement?(break_statement)
|
103
|
+
end
|
104
|
+
|
105
|
+
def statements(node)
|
106
|
+
body = node.body
|
107
|
+
|
108
|
+
if body.nil?
|
109
|
+
[]
|
110
|
+
elsif body.begin_type?
|
111
|
+
body.children
|
112
|
+
else
|
113
|
+
[body]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def_node_matcher :break_command?, <<~PATTERN
|
118
|
+
{
|
119
|
+
return break
|
120
|
+
(send
|
121
|
+
{nil? (const {nil? cbase} :Kernel)}
|
122
|
+
{:raise :fail :throw :exit :exit! :abort}
|
123
|
+
...)
|
124
|
+
}
|
125
|
+
PATTERN
|
126
|
+
|
127
|
+
def break_statement?(node)
|
128
|
+
return true if break_command?(node)
|
129
|
+
|
130
|
+
case node.type
|
131
|
+
when :begin, :kwbegin
|
132
|
+
statements = *node
|
133
|
+
statements.any? { |statement| break_statement?(statement) }
|
134
|
+
when :if
|
135
|
+
check_if(node)
|
136
|
+
when :case
|
137
|
+
check_case(node)
|
138
|
+
else
|
139
|
+
false
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def check_if(node)
|
144
|
+
if_branch = node.if_branch
|
145
|
+
else_branch = node.else_branch
|
146
|
+
if_branch && else_branch &&
|
147
|
+
break_statement?(if_branch) && break_statement?(else_branch)
|
148
|
+
end
|
149
|
+
|
150
|
+
def check_case(node)
|
151
|
+
else_branch = node.else_branch
|
152
|
+
return false unless else_branch
|
153
|
+
return false unless break_statement?(else_branch)
|
154
|
+
|
155
|
+
node.when_branches.all? do |branch|
|
156
|
+
branch.body && break_statement?(branch.body)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def preceded_by_continue_statement?(break_statement)
|
161
|
+
left_siblings_of(break_statement).any? do |sibling|
|
162
|
+
next if sibling.loop_keyword? || loop_method?(sibling)
|
163
|
+
|
164
|
+
sibling.each_descendant(:next, :redo).any?
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def left_siblings_of(node)
|
169
|
+
node.parent.children[0, node.sibling_index]
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -52,15 +52,20 @@ module RuboCop
|
|
52
52
|
# foo
|
53
53
|
# end
|
54
54
|
#
|
55
|
-
class UnusedBlockArgument <
|
55
|
+
class UnusedBlockArgument < Base
|
56
56
|
include UnusedArgument
|
57
|
+
extend AutoCorrector
|
57
58
|
|
58
|
-
def
|
59
|
-
|
59
|
+
def self.joining_forces
|
60
|
+
VariableForce
|
60
61
|
end
|
61
62
|
|
62
63
|
private
|
63
64
|
|
65
|
+
def autocorrect(corrector, node)
|
66
|
+
UnusedArgCorrector.correct(corrector, processed_source, node)
|
67
|
+
end
|
68
|
+
|
64
69
|
def check_argument(variable)
|
65
70
|
return if allowed_block?(variable) ||
|
66
71
|
allowed_keyword_argument?(variable)
|
@@ -58,20 +58,25 @@ module RuboCop
|
|
58
58
|
# fail "TODO"
|
59
59
|
# end
|
60
60
|
#
|
61
|
-
class UnusedMethodArgument <
|
61
|
+
class UnusedMethodArgument < Base
|
62
62
|
include UnusedArgument
|
63
|
+
extend AutoCorrector
|
63
64
|
|
64
65
|
def_node_matcher :not_implemented?, <<~PATTERN
|
65
66
|
{(send nil? :raise (const {nil? cbase} :NotImplementedError))
|
66
67
|
(send nil? :fail ...)}
|
67
68
|
PATTERN
|
68
69
|
|
69
|
-
def
|
70
|
-
|
70
|
+
def self.joining_forces
|
71
|
+
VariableForce
|
71
72
|
end
|
72
73
|
|
73
74
|
private
|
74
75
|
|
76
|
+
def autocorrect(corrector, node)
|
77
|
+
UnusedArgCorrector.correct(corrector, processed_source, node)
|
78
|
+
end
|
79
|
+
|
75
80
|
def check_argument(variable)
|
76
81
|
return unless variable.method_argument?
|
77
82
|
return if variable.keyword_argument? &&
|
@@ -29,7 +29,7 @@ module RuboCop
|
|
29
29
|
# CGI.unescape(enc_uri)
|
30
30
|
# URI.decode_www_form(enc_uri)
|
31
31
|
# URI.decode_www_form_component(enc_uri)
|
32
|
-
class UriEscapeUnescape <
|
32
|
+
class UriEscapeUnescape < Base
|
33
33
|
ALTERNATE_METHODS_OF_URI_ESCAPE = %w[
|
34
34
|
CGI.escape
|
35
35
|
URI.encode_www_form
|
@@ -13,60 +13,24 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# URI::DEFAULT_PARSER.make_regexp('http://example.com')
|
15
15
|
#
|
16
|
-
class UriRegexp <
|
17
|
-
|
18
|
-
'be used. Instead, use `%<top_level>sURI::DEFAULT_PARSER.' \
|
19
|
-
'make_regexp%<arg>s`.'
|
16
|
+
class UriRegexp < Base
|
17
|
+
extend AutoCorrector
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
(const ${nil? cbase} :URI) :regexp
|
24
|
-
${(str _) (array ...)})
|
25
|
-
PATTERN
|
26
|
-
|
27
|
-
def_node_matcher :uri_regexp_without_argument?, <<~PATTERN
|
28
|
-
(send
|
29
|
-
(const ${nil? cbase} :URI) :regexp)
|
30
|
-
PATTERN
|
19
|
+
MSG = '`%<current>s` is obsolete and should not be used. Instead, use `%<preferred>s`.'
|
20
|
+
URI_CONSTANTS = ['URI', '::URI'].freeze
|
31
21
|
|
32
22
|
def on_send(node)
|
33
|
-
|
34
|
-
|
35
|
-
node, top_level: double_colon ? '::' : '', arg: "(#{arg.source})"
|
36
|
-
)
|
37
|
-
end
|
38
|
-
|
39
|
-
uri_regexp_without_argument?(node) do |double_colon|
|
40
|
-
register_offense(node, top_level: double_colon ? '::' : '')
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def autocorrect(node)
|
45
|
-
lambda do |corrector|
|
46
|
-
if (captured_values = uri_regexp_with_argument?(node))
|
47
|
-
else
|
48
|
-
captured_values = uri_regexp_without_argument?(node)
|
49
|
-
end
|
23
|
+
return unless node.method?(:regexp) && node.receiver
|
24
|
+
return unless URI_CONSTANTS.include?(node.receiver.source)
|
50
25
|
|
51
|
-
|
26
|
+
argument = node.first_argument ? "(#{node.first_argument.source})" : ''
|
27
|
+
preferred_method = "#{node.receiver.source}::DEFAULT_PARSER.make_regexp#{argument}"
|
28
|
+
message = format(MSG, current: node.source, preferred: preferred_method)
|
52
29
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
corrector.replace(
|
57
|
-
node,
|
58
|
-
"#{top_level}URI::DEFAULT_PARSER.make_regexp#{argument}"
|
59
|
-
)
|
30
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
31
|
+
corrector.replace(node, preferred_method)
|
60
32
|
end
|
61
33
|
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
def register_offense(node, top_level: '', arg: '')
|
66
|
-
format = format(MSG, top_level: top_level, arg: arg)
|
67
|
-
|
68
|
-
add_offense(node, location: :selector, message: format)
|
69
|
-
end
|
70
34
|
end
|
71
35
|
end
|
72
36
|
end
|
@@ -124,8 +124,9 @@ module RuboCop
|
|
124
124
|
#
|
125
125
|
# delegate :method_a, to: :method_b
|
126
126
|
# end
|
127
|
-
class UselessAccessModifier <
|
127
|
+
class UselessAccessModifier < Base
|
128
128
|
include RangeHelp
|
129
|
+
extend AutoCorrector
|
129
130
|
|
130
131
|
MSG = 'Useless `%<current>s` access modifier.'
|
131
132
|
|
@@ -147,17 +148,13 @@ module RuboCop
|
|
147
148
|
check_node(node.children[1]) # singleton class body
|
148
149
|
end
|
149
150
|
|
150
|
-
|
151
|
-
lambda do |corrector|
|
152
|
-
range = range_by_whole_lines(
|
153
|
-
node.source_range, include_final_newline: true
|
154
|
-
)
|
151
|
+
private
|
155
152
|
|
156
|
-
|
157
|
-
|
158
|
-
end
|
153
|
+
def autocorrect(corrector, node)
|
154
|
+
range = range_by_whole_lines(node.source_range, include_final_newline: true)
|
159
155
|
|
160
|
-
|
156
|
+
corrector.remove(range)
|
157
|
+
end
|
161
158
|
|
162
159
|
def_node_matcher :static_method_definition?, <<~PATTERN
|
163
160
|
{def (send nil? {:attr :attr_reader :attr_writer :attr_accessor} ...)}
|
@@ -181,7 +178,9 @@ module RuboCop
|
|
181
178
|
if node.begin_type?
|
182
179
|
check_scope(node)
|
183
180
|
elsif node.send_type? && node.bare_access_modifier?
|
184
|
-
add_offense(node, message: format(MSG, current: node.method_name))
|
181
|
+
add_offense(node, message: format(MSG, current: node.method_name)) do |corrector|
|
182
|
+
autocorrect(corrector, node)
|
183
|
+
end
|
185
184
|
end
|
186
185
|
end
|
187
186
|
|
@@ -192,8 +191,11 @@ module RuboCop
|
|
192
191
|
|
193
192
|
def check_scope(node)
|
194
193
|
cur_vis, unused = check_child_nodes(node, nil, :public)
|
194
|
+
return unless unused
|
195
195
|
|
196
|
-
add_offense(unused, message: format(MSG, current: cur_vis))
|
196
|
+
add_offense(unused, message: format(MSG, current: cur_vis)) do |corrector|
|
197
|
+
autocorrect(corrector, unused)
|
198
|
+
end
|
197
199
|
end
|
198
200
|
|
199
201
|
def check_child_nodes(node, unused, cur_vis)
|
@@ -216,7 +218,9 @@ module RuboCop
|
|
216
218
|
if node.bare_access_modifier?
|
217
219
|
check_new_visibility(node, unused, node.method_name, cur_vis)
|
218
220
|
elsif node.method?(:private_class_method) && !node.arguments?
|
219
|
-
add_offense(node, message: format(MSG, current: node.method_name))
|
221
|
+
add_offense(node, message: format(MSG, current: node.method_name)) do |corrector|
|
222
|
+
autocorrect(corrector, node)
|
223
|
+
end
|
220
224
|
[cur_vis, unused]
|
221
225
|
end
|
222
226
|
end
|
@@ -224,10 +228,16 @@ module RuboCop
|
|
224
228
|
def check_new_visibility(node, unused, new_vis, cur_vis)
|
225
229
|
# does this modifier just repeat the existing visibility?
|
226
230
|
if new_vis == cur_vis
|
227
|
-
add_offense(node, message: format(MSG, current: cur_vis))
|
231
|
+
add_offense(node, message: format(MSG, current: cur_vis)) do |corrector|
|
232
|
+
autocorrect(corrector, node)
|
233
|
+
end
|
228
234
|
else
|
229
235
|
# was the previous modifier never applied to any defs?
|
230
|
-
|
236
|
+
if unused
|
237
|
+
add_offense(unused, message: format(MSG, current: cur_vis)) do |corrector|
|
238
|
+
autocorrect(corrector, unused)
|
239
|
+
end
|
240
|
+
end
|
231
241
|
# once we have already warned about a certain modifier, don't
|
232
242
|
# warn again even if it is never applied to any method defs
|
233
243
|
unused = node
|