rubocop 0.86.0 → 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 +198 -25
- data/lib/rubocop.rb +30 -5
- data/lib/rubocop/cli.rb +2 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
- 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 +3 -3
- 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 +41 -69
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -2
- data/lib/rubocop/config_store.rb +4 -0
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +14 -24
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +407 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +47 -50
- data/lib/rubocop/cop/cop.rb +85 -236
- data/lib/rubocop/cop/corrector.rb +38 -115
- 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/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +1 -1
- 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/node_type_predicate.rb +11 -14
- 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/case_indentation.rb +18 -19
- data/lib/rubocop/cop/layout/class_structure.rb +5 -44
- 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/empty_lines_around_attribute_accessor.rb +1 -8
- 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_argument_indentation.rb +4 -0
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
- 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 -6
- 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 +22 -27
- 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/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- 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 +21 -17
- 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 +21 -5
- 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 +15 -21
- 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 +84 -13
- 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 +12 -13
- 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 +3 -3
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +41 -40
- 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 +15 -11
- 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 +10 -2
- 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/syntax.rb +11 -26
- 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 +9 -4
- 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 +26 -16
- 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 +24 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +26 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +25 -2
- data/lib/rubocop/cop/metrics/module_length.rb +26 -3
- 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 +157 -0
- 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/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +26 -5
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- 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/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- 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 +4 -24
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +10 -15
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -6
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +3 -3
- 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_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -10
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- 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 +149 -0
- 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 +141 -0
- 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 +24 -7
- 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 +2 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +9 -12
- 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 +20 -21
- 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 +23 -22
- 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 +11 -3
- 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_block_chain.rb +10 -1
- 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 +27 -24
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
- 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/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +5 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +18 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +26 -7
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +11 -11
- data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/signal_exception.rb +3 -1
- 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/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -8
- data/lib/rubocop/cop/team.rb +98 -82
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +3 -13
- data/lib/rubocop/cop/utils/format_string.rb +1 -2
- 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 +2 -2
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -3
- data/lib/rubocop/options.rb +18 -11
- data/lib/rubocop/path_util.rb +17 -17
- data/lib/rubocop/rake_task.rb +7 -9
- data/lib/rubocop/result_cache.rb +12 -8
- data/lib/rubocop/rspec/cop_helper.rb +4 -4
- data/lib/rubocop/rspec/expect_offense.rb +53 -22
- data/lib/rubocop/rspec/shared_contexts.rb +16 -17
- data/lib/rubocop/runner.rb +35 -34
- data/lib/rubocop/target_finder.rb +13 -10
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +2 -2
- metadata +40 -11
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -35
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -142,11 +142,12 @@ module RuboCop
|
|
142
142
|
end
|
143
143
|
|
144
144
|
def issue_offenses(node, left, right, start_ok, end_ok)
|
145
|
-
|
145
|
+
case style
|
146
|
+
when :no_space
|
146
147
|
start_ok = next_to_comment?(node, left)
|
147
148
|
no_space_offenses(node, left, right, MSG, start_ok: start_ok,
|
148
149
|
end_ok: end_ok)
|
149
|
-
|
150
|
+
when :space
|
150
151
|
space_offenses(node, left, right, MSG, start_ok: start_ok,
|
151
152
|
end_ok: end_ok)
|
152
153
|
else
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Legacy
|
6
|
+
# Legacy support for Corrector#corrections
|
7
|
+
# See https://docs.rubocop.org/rubocop/cop_api_v1_changelog.html
|
8
|
+
class CorrectionsProxy
|
9
|
+
def initialize(corrector)
|
10
|
+
@corrector = corrector
|
11
|
+
end
|
12
|
+
|
13
|
+
def <<(callable)
|
14
|
+
suppress_clobbering do
|
15
|
+
@corrector.transaction do
|
16
|
+
callable.call(@corrector)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def empty?
|
22
|
+
@corrector.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
def concat(corrections)
|
26
|
+
if corrections.is_a?(CorrectionsProxy)
|
27
|
+
suppress_clobbering do
|
28
|
+
corrector.merge!(corrections.corrector)
|
29
|
+
end
|
30
|
+
else
|
31
|
+
corrections.each { |correction| self << correction }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
attr_reader :corrector
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def suppress_clobbering
|
42
|
+
yield
|
43
|
+
rescue ::Parser::ClobberingError
|
44
|
+
# ignore Clobbering errors
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Legacy
|
6
|
+
# Legacy Corrector for v0 API support.
|
7
|
+
# See https://docs.rubocop.org/rubocop/cop_api_v1_changelog.html
|
8
|
+
class Corrector < RuboCop::Cop::Corrector
|
9
|
+
# Support legacy second argument
|
10
|
+
def initialize(source, corr = [])
|
11
|
+
super(source)
|
12
|
+
if corr.is_a?(CorrectionsProxy)
|
13
|
+
merge!(corr.send(:corrector))
|
14
|
+
else
|
15
|
+
# warn "Corrector.new with corrections is deprecated." unless corr.empty? TODO
|
16
|
+
corr.each do |c|
|
17
|
+
corrections << c
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def corrections
|
23
|
+
# warn "#corrections is deprecated. Open an issue if you have a valid usecase." TODO
|
24
|
+
CorrectionsProxy.new(self)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -24,18 +24,21 @@ module RuboCop
|
|
24
24
|
# # good
|
25
25
|
# # Lambda arguments require no disambiguation
|
26
26
|
# foo = ->(bar) { bar.baz }
|
27
|
-
class AmbiguousBlockAssociation <
|
27
|
+
class AmbiguousBlockAssociation < Base
|
28
28
|
MSG = 'Parenthesize the param `%<param>s` to make sure that the ' \
|
29
29
|
'block will be associated with the `%<method>s` method ' \
|
30
30
|
'call.'
|
31
31
|
|
32
32
|
def on_send(node)
|
33
|
-
return
|
34
|
-
node.last_argument.lambda? || allowed_method?(node)
|
33
|
+
return unless node.arguments?
|
35
34
|
|
36
35
|
return unless ambiguous_block_association?(node)
|
36
|
+
return if node.parenthesized? ||
|
37
|
+
node.last_argument.lambda? || allowed_method?(node)
|
38
|
+
|
39
|
+
message = message(node)
|
37
40
|
|
38
|
-
add_offense(node)
|
41
|
+
add_offense(node, message: message)
|
39
42
|
end
|
40
43
|
alias on_csend on_send
|
41
44
|
|
@@ -20,8 +20,8 @@ module RuboCop
|
|
20
20
|
#
|
21
21
|
# # With parentheses, there's no ambiguity.
|
22
22
|
# do_something(*some_array)
|
23
|
-
class AmbiguousOperator <
|
24
|
-
|
23
|
+
class AmbiguousOperator < Base
|
24
|
+
extend AutoCorrector
|
25
25
|
|
26
26
|
AMBIGUITIES = {
|
27
27
|
'+' => { actual: 'positive number', possible: 'addition' },
|
@@ -38,18 +38,23 @@ module RuboCop
|
|
38
38
|
'a whitespace to the right of the `%<operator>s` if it ' \
|
39
39
|
'should be a %<possible>s.'
|
40
40
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
41
|
+
def on_new_investigation
|
42
|
+
processed_source.diagnostics.each do |diagnostic|
|
43
|
+
next unless diagnostic.reason == :ambiguous_prefix
|
44
|
+
|
45
|
+
offense_node = find_offense_node_by(diagnostic)
|
46
|
+
message = message(diagnostic)
|
47
|
+
|
48
|
+
add_offense(
|
49
|
+
diagnostic.location, message: message, severity: diagnostic.level
|
50
|
+
) do |corrector|
|
51
|
+
add_parentheses(offense_node, corrector)
|
52
|
+
end
|
44
53
|
end
|
45
54
|
end
|
46
55
|
|
47
56
|
private
|
48
57
|
|
49
|
-
def relevant_diagnostic?(diagnostic)
|
50
|
-
diagnostic.reason == :ambiguous_prefix
|
51
|
-
end
|
52
|
-
|
53
58
|
def find_offense_node_by(diagnostic)
|
54
59
|
ast = processed_source.ast
|
55
60
|
ast.each_node(:splat, :block_pass, :kwsplat) do |node|
|
@@ -68,7 +73,7 @@ module RuboCop
|
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
71
|
-
def
|
76
|
+
def message(diagnostic)
|
72
77
|
operator = diagnostic.location.source
|
73
78
|
hash = AMBIGUITIES[operator]
|
74
79
|
format(MSG_FORMAT, hash)
|
@@ -21,25 +21,27 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# # With parentheses, there's no ambiguity.
|
23
23
|
# do_something(/pattern/i)
|
24
|
-
class AmbiguousRegexpLiteral <
|
25
|
-
|
24
|
+
class AmbiguousRegexpLiteral < Base
|
25
|
+
extend AutoCorrector
|
26
26
|
|
27
27
|
MSG = 'Ambiguous regexp literal. Parenthesize the method arguments ' \
|
28
28
|
"if it's surely a regexp literal, or add a whitespace to the " \
|
29
29
|
'right of the `/` if it should be a division.'
|
30
30
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
31
|
+
def on_new_investigation
|
32
|
+
processed_source.diagnostics.each do |diagnostic|
|
33
|
+
next unless diagnostic.reason == :ambiguous_literal
|
34
|
+
|
35
|
+
offense_node = find_offense_node_by(diagnostic)
|
36
|
+
|
37
|
+
add_offense(diagnostic.location, severity: diagnostic.level) do |corrector|
|
38
|
+
add_parentheses(offense_node, corrector)
|
39
|
+
end
|
34
40
|
end
|
35
41
|
end
|
36
42
|
|
37
43
|
private
|
38
44
|
|
39
|
-
def relevant_diagnostic?(diagnostic)
|
40
|
-
diagnostic.reason == :ambiguous_literal
|
41
|
-
end
|
42
|
-
|
43
45
|
def find_offense_node_by(diagnostic)
|
44
46
|
node = processed_source.ast.each_node(:regexp).find do |regexp_node|
|
45
47
|
regexp_node.source_range.begin_pos == diagnostic.location.begin_pos
|
@@ -47,10 +49,6 @@ module RuboCop
|
|
47
49
|
|
48
50
|
node.parent
|
49
51
|
end
|
50
|
-
|
51
|
-
def alternative_message(_diagnostic)
|
52
|
-
MSG
|
53
|
-
end
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
# do_something
|
35
35
|
# end
|
36
36
|
#
|
37
|
-
class AssignmentInCondition <
|
37
|
+
class AssignmentInCondition < Base
|
38
38
|
include SafeAssignment
|
39
39
|
|
40
40
|
MSG_WITH_SAFE_ASSIGNMENT_ALLOWED =
|
@@ -53,7 +53,7 @@ module RuboCop
|
|
53
53
|
next :skip_children if skip_children?(asgn_node)
|
54
54
|
next if allowed_construct?(asgn_node)
|
55
55
|
|
56
|
-
add_offense(asgn_node
|
56
|
+
add_offense(asgn_node.loc.operator)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
alias on_while on_if
|
@@ -14,7 +14,9 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# BigDecimal(123.456, 3)
|
16
16
|
#
|
17
|
-
class BigDecimalNew <
|
17
|
+
class BigDecimalNew < Base
|
18
|
+
extend AutoCorrector
|
19
|
+
|
18
20
|
MSG = '`%<double_colon>sBigDecimal.new()` is deprecated. ' \
|
19
21
|
'Use `%<double_colon>sBigDecimal()` instead.'
|
20
22
|
|
@@ -24,18 +26,16 @@ module RuboCop
|
|
24
26
|
PATTERN
|
25
27
|
|
26
28
|
def on_send(node)
|
27
|
-
return unless
|
29
|
+
return unless node.method?(:new)
|
30
|
+
|
31
|
+
big_decimal_new(node) do |captured_value|
|
28
32
|
double_colon = captured_value ? '::' : ''
|
29
33
|
message = format(MSG, double_colon: double_colon)
|
30
34
|
|
31
|
-
add_offense(node
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def autocorrect(node)
|
36
|
-
lambda do |corrector|
|
37
|
-
corrector.remove(node.loc.selector)
|
38
|
-
corrector.remove(node.loc.dot)
|
35
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
36
|
+
corrector.remove(node.loc.selector)
|
37
|
+
corrector.remove(node.loc.dot)
|
38
|
+
end
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for places where binary operator has identical operands.
|
7
|
+
#
|
8
|
+
# It covers arithmetic operators: `+`, `-`, `*`, `/`, `%`, `**`;
|
9
|
+
# comparison operators: `==`, `===`, `=~`, `>`, `>=`, `<`, `<=`;
|
10
|
+
# bitwise operators: `|`, `^`, `&`, `<<`, `>>`;
|
11
|
+
# boolean operators: `&&`, `||`
|
12
|
+
# and "spaceship" operator - `<=>`.
|
13
|
+
#
|
14
|
+
# This cop is marked as unsafe as it does not consider side effects when calling methods
|
15
|
+
# and thus can generate false positives:
|
16
|
+
# if wr.take_char == '\0' && wr.take_char == '\0'
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# # bad
|
20
|
+
# x.top >= x.top
|
21
|
+
#
|
22
|
+
# if a.x != 0 && a.x != 0
|
23
|
+
# do_something
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# def childs?
|
27
|
+
# left_child || left_child
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
class BinaryOperatorWithIdenticalOperands < Base
|
31
|
+
MSG = 'Binary operator `%<op>s` has identical operands.'
|
32
|
+
MATH_OPERATORS = %i[+ - * / % ** << >> | ^].to_set.freeze
|
33
|
+
|
34
|
+
def on_send(node)
|
35
|
+
return unless node.binary_operation?
|
36
|
+
|
37
|
+
lhs, operation, rhs = *node
|
38
|
+
return if MATH_OPERATORS.include?(node.method_name) && rhs.basic_literal?
|
39
|
+
|
40
|
+
add_offense(node, message: format(MSG, op: operation)) if lhs == rhs
|
41
|
+
end
|
42
|
+
|
43
|
+
def on_and(node)
|
44
|
+
add_offense(node, message: format(MSG, op: node.operator)) if node.lhs == node.rhs
|
45
|
+
end
|
46
|
+
alias on_or on_and
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -21,7 +21,9 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# # good
|
23
23
|
# false
|
24
|
-
class BooleanSymbol <
|
24
|
+
class BooleanSymbol < Base
|
25
|
+
extend AutoCorrector
|
26
|
+
|
25
27
|
MSG = 'Symbol with a boolean name - ' \
|
26
28
|
'you probably meant to use `%<boolean>s`.'
|
27
29
|
|
@@ -30,19 +32,22 @@ module RuboCop
|
|
30
32
|
def on_sym(node)
|
31
33
|
return unless boolean_symbol?(node)
|
32
34
|
|
33
|
-
add_offense(node, message: format(MSG, boolean: node.value))
|
35
|
+
add_offense(node, message: format(MSG, boolean: node.value)) do |corrector|
|
36
|
+
autocorrect(corrector, node)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
corrector.replace(node, boolean_literal)
|
40
|
+
private
|
41
|
+
|
42
|
+
def autocorrect(corrector, node)
|
43
|
+
boolean_literal = node.source.delete(':')
|
44
|
+
parent = node.parent
|
45
|
+
if parent&.pair_type? && node.equal?(parent.children[0])
|
46
|
+
corrector.remove(parent.loc.operator)
|
47
|
+
boolean_literal = "#{node.source} =>"
|
45
48
|
end
|
49
|
+
|
50
|
+
corrector.replace(node, boolean_literal)
|
46
51
|
end
|
47
52
|
end
|
48
53
|
end
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
# def cook(dry_ingredients = self.dry_ingredients)
|
48
48
|
# dry_ingredients.combine
|
49
49
|
# end
|
50
|
-
class CircularArgumentReference <
|
50
|
+
class CircularArgumentReference < Base
|
51
51
|
MSG = 'Circular argument reference - `%<arg_name>s`.'
|
52
52
|
|
53
53
|
def on_kwoptarg(node)
|
@@ -32,9 +32,14 @@ module RuboCop
|
|
32
32
|
# def some_method
|
33
33
|
# do_something
|
34
34
|
# end
|
35
|
-
class Debugger <
|
35
|
+
class Debugger < Base
|
36
36
|
MSG = 'Remove debugger entry point `%<source>s`.'
|
37
37
|
|
38
|
+
DEBUGGER_METHODS = %i[
|
39
|
+
debugger byebug remote_byebug pry remote_pry pry_remote console rescue
|
40
|
+
save_and_open_page save_and_open_screenshot save_screenshot irb
|
41
|
+
].to_set.freeze
|
42
|
+
|
38
43
|
def_node_matcher :kernel?, <<~PATTERN
|
39
44
|
{
|
40
45
|
(const nil? :Kernel)
|
@@ -57,6 +62,7 @@ module RuboCop
|
|
57
62
|
PATTERN
|
58
63
|
|
59
64
|
def on_send(node)
|
65
|
+
return unless DEBUGGER_METHODS.include?(node.method_name)
|
60
66
|
return unless debugger_call?(node) || binding_irb?(node)
|
61
67
|
|
62
68
|
add_offense(node)
|
@@ -20,7 +20,9 @@ module RuboCop
|
|
20
20
|
# File.exist?(some_path)
|
21
21
|
# Dir.exist?(some_path)
|
22
22
|
# block_given?
|
23
|
-
class DeprecatedClassMethods <
|
23
|
+
class DeprecatedClassMethods < Base
|
24
|
+
extend AutoCorrector
|
25
|
+
|
24
26
|
# Inner class to DeprecatedClassMethods.
|
25
27
|
# This class exists to add abstraction and clean naming to the
|
26
28
|
# objects that are going to be operated on.
|
@@ -60,20 +62,17 @@ module RuboCop
|
|
60
62
|
replacement: :block_given?)
|
61
63
|
].freeze
|
62
64
|
|
65
|
+
DEPRECATED_METHODS = DEPRECATED_METHODS_OBJECT.map(&:deprecated_method).freeze
|
66
|
+
|
63
67
|
def on_send(node)
|
68
|
+
return unless DEPRECATED_METHODS.include?(node.method_name)
|
69
|
+
|
64
70
|
check(node) do |data|
|
65
71
|
message = format(MSG, current: deprecated_method(data),
|
66
72
|
prefer: replacement_method(data))
|
67
73
|
|
68
|
-
add_offense(node
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def autocorrect(node)
|
73
|
-
lambda do |corrector|
|
74
|
-
check(node) do |data|
|
75
|
-
corrector.replace(node.loc.selector,
|
76
|
-
data.replacement_method.to_s)
|
74
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
75
|
+
corrector.replace(node.loc.selector, data.replacement_method.to_s)
|
77
76
|
end
|
78
77
|
end
|
79
78
|
end
|