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
@@ -59,9 +59,10 @@ module RuboCop
|
|
59
59
|
# ERB.new(str, nil, '-', '@output_buffer')
|
60
60
|
# end
|
61
61
|
#
|
62
|
-
class ErbNewArguments <
|
63
|
-
extend TargetRubyVersion
|
62
|
+
class ErbNewArguments < Base
|
64
63
|
include RangeHelp
|
64
|
+
extend TargetRubyVersion
|
65
|
+
extend AutoCorrector
|
65
66
|
|
66
67
|
minimum_target_ruby_version 2.6
|
67
68
|
|
@@ -92,13 +93,17 @@ module RuboCop
|
|
92
93
|
message = format(MESSAGES[i], arg_value: argument.source)
|
93
94
|
|
94
95
|
add_offense(
|
95
|
-
|
96
|
-
)
|
96
|
+
argument.source_range, message: message
|
97
|
+
) do |corrector|
|
98
|
+
autocorrect(corrector, node)
|
99
|
+
end
|
97
100
|
end
|
98
101
|
end
|
99
102
|
end
|
100
103
|
|
101
|
-
|
104
|
+
private
|
105
|
+
|
106
|
+
def autocorrect(corrector, node)
|
102
107
|
str_arg = node.arguments[0].source
|
103
108
|
|
104
109
|
kwargs = build_kwargs(node)
|
@@ -108,13 +113,9 @@ module RuboCop
|
|
108
113
|
str_arg, overridden_kwargs
|
109
114
|
].flatten.compact.join(', ')
|
110
115
|
|
111
|
-
|
112
|
-
corrector.replace(arguments_range(node), good_arguments)
|
113
|
-
end
|
116
|
+
corrector.replace(arguments_range(node), good_arguments)
|
114
117
|
end
|
115
118
|
|
116
|
-
private
|
117
|
-
|
118
119
|
def correct_arguments?(arguments)
|
119
120
|
arguments.size == 1 ||
|
120
121
|
arguments.size == 2 && arguments[1].hash_type?
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for the presence of precise comparison of floating point numbers.
|
7
|
+
#
|
8
|
+
# Floating point values are inherently inaccurate, and comparing them for exact equality
|
9
|
+
# is almost never the desired semantics. Comparison via the `==/!=` operators checks
|
10
|
+
# floating-point value representation to be exactly the same, which is very unlikely
|
11
|
+
# if you perform any arithmetic operations involving precision loss.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# # bad
|
15
|
+
# x == 0.1
|
16
|
+
# x != 0.1
|
17
|
+
#
|
18
|
+
# # good - using BigDecimal
|
19
|
+
# x.to_d == 0.1.to_d
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# (x - 0.1).abs < Float::EPSILON
|
23
|
+
#
|
24
|
+
# # good
|
25
|
+
# tolerance = 0.0001
|
26
|
+
# (x - 0.1).abs < tolerance
|
27
|
+
#
|
28
|
+
# # Or some other epsilon based type of comparison:
|
29
|
+
# # https://www.embeddeduse.com/2019/08/26/qt-compare-two-floats/
|
30
|
+
#
|
31
|
+
class FloatComparison < Base
|
32
|
+
MSG = 'Avoid (in)equality comparisons of floats as they are unreliable.'
|
33
|
+
|
34
|
+
EQUALITY_METHODS = %i[== != eql? equal?].freeze
|
35
|
+
FLOAT_RETURNING_METHODS = %i[to_f Float fdiv].freeze
|
36
|
+
FLOAT_INSTANCE_METHODS = %i[@- abs magnitude modulo next_float prev_float quo].to_set.freeze
|
37
|
+
|
38
|
+
def on_send(node)
|
39
|
+
return unless EQUALITY_METHODS.include?(node.method_name)
|
40
|
+
|
41
|
+
lhs, _method, rhs = *node
|
42
|
+
add_offense(node) if float?(lhs) || float?(rhs)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def float?(node)
|
48
|
+
return false unless node
|
49
|
+
|
50
|
+
case node.type
|
51
|
+
when :float
|
52
|
+
true
|
53
|
+
when :send
|
54
|
+
check_send(node)
|
55
|
+
when :begin
|
56
|
+
float?(node.children.first)
|
57
|
+
else
|
58
|
+
false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
63
|
+
def check_send(node)
|
64
|
+
if node.arithmetic_operation?
|
65
|
+
lhs, _operation, rhs = *node
|
66
|
+
float?(lhs) || float?(rhs)
|
67
|
+
elsif FLOAT_RETURNING_METHODS.include?(node.method_name)
|
68
|
+
true
|
69
|
+
elsif node.receiver&.float_type?
|
70
|
+
if FLOAT_INSTANCE_METHODS.include?(node.method_name)
|
71
|
+
true
|
72
|
+
else
|
73
|
+
check_numeric_returning_method(node)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
78
|
+
|
79
|
+
def check_numeric_returning_method(node)
|
80
|
+
return false unless node.receiver
|
81
|
+
|
82
|
+
case node.method_name
|
83
|
+
when :angle, :arg, :phase
|
84
|
+
Float(node.receiver.source).negative?
|
85
|
+
when :ceil, :floor, :round, :truncate
|
86
|
+
precision = node.first_argument
|
87
|
+
precision&.int_type? && Integer(precision.source).positive?
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
# # good
|
35
35
|
#
|
36
36
|
# format('Numbered format: %1$s and numbered %2$s', a_value, another)
|
37
|
-
class FormatParameterMismatch <
|
37
|
+
class FormatParameterMismatch < Base
|
38
38
|
# http://rubular.com/r/CvpbxkcTzy
|
39
39
|
MSG = "Number of arguments (%<arg_num>i) to `%<method>s` doesn't " \
|
40
40
|
'match the number of fields (%<field_num>i).'
|
@@ -44,18 +44,19 @@ module RuboCop
|
|
44
44
|
KERNEL = 'Kernel'
|
45
45
|
SHOVEL = '<<'
|
46
46
|
STRING_TYPES = %i[str dstr].freeze
|
47
|
+
FORMAT_METHODS = %i[format sprintf %].freeze
|
47
48
|
|
48
49
|
def on_send(node)
|
49
|
-
return unless format_string?(node)
|
50
|
+
return unless FORMAT_METHODS.include?(node.method_name) && format_string?(node)
|
50
51
|
|
51
52
|
if invalid_format_string?(node)
|
52
|
-
add_offense(node
|
53
|
+
add_offense(node.loc.selector, message: MSG_INVALID)
|
53
54
|
return
|
54
55
|
end
|
55
56
|
|
56
57
|
return unless offending_node?(node)
|
57
58
|
|
58
|
-
add_offense(node,
|
59
|
+
add_offense(node.loc.selector, message: message(node))
|
59
60
|
end
|
60
61
|
|
61
62
|
private
|
@@ -30,8 +30,9 @@ module RuboCop
|
|
30
30
|
# bar
|
31
31
|
# SQL
|
32
32
|
#
|
33
|
-
class HeredocMethodCallPosition <
|
33
|
+
class HeredocMethodCallPosition < Base
|
34
34
|
include RangeHelp
|
35
|
+
extend AutoCorrector
|
35
36
|
|
36
37
|
MSG = 'Put a method call with a HEREDOC receiver on the ' \
|
37
38
|
'same line as the HEREDOC opening.'
|
@@ -41,25 +42,23 @@ module RuboCop
|
|
41
42
|
return unless heredoc
|
42
43
|
return if correctly_positioned?(node, heredoc)
|
43
44
|
|
44
|
-
add_offense(
|
45
|
+
add_offense(call_after_heredoc_range(heredoc)) do |corrector|
|
46
|
+
autocorrect(corrector, node, heredoc)
|
47
|
+
end
|
45
48
|
end
|
46
49
|
alias on_csend on_send
|
47
50
|
|
48
|
-
|
49
|
-
heredoc = heredoc_node_descendent_receiver(node)
|
51
|
+
private
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
def autocorrect(corrector, node, heredoc)
|
54
|
+
call_range = call_range_to_safely_reposition(node, heredoc)
|
55
|
+
return if call_range.nil?
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
57
|
+
call_source = call_range.source.strip
|
58
|
+
corrector.remove(call_range)
|
59
|
+
corrector.insert_after(heredoc_begin_line_range(node), call_source)
|
59
60
|
end
|
60
61
|
|
61
|
-
private
|
62
|
-
|
63
62
|
def heredoc_node_descendent_receiver(node)
|
64
63
|
while send_node?(node)
|
65
64
|
return node.receiver if heredoc_node?(node.receiver)
|
@@ -148,7 +147,7 @@ module RuboCop
|
|
148
147
|
end
|
149
148
|
|
150
149
|
def trailing_comma?(call_source, call_line_source)
|
151
|
-
call_source
|
150
|
+
"#{call_source}," == call_line_source
|
152
151
|
end
|
153
152
|
end
|
154
153
|
end
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
# 'Item 1' \
|
23
23
|
# 'Item 2'
|
24
24
|
# ]
|
25
|
-
class ImplicitStringConcatenation <
|
25
|
+
class ImplicitStringConcatenation < Base
|
26
26
|
MSG = 'Combine %<string1>s and %<string2>s into a single string ' \
|
27
27
|
'literal, rather than using implicit string concatenation.'
|
28
28
|
FOR_ARRAY = ' Or, if they were intended to be separate array ' \
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
41
41
|
elsif node.parent&.send_type?
|
42
42
|
message << FOR_METHOD
|
43
43
|
end
|
44
|
-
add_offense(
|
44
|
+
add_offense(range, message: message)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -64,9 +64,10 @@ module RuboCop
|
|
64
64
|
|
65
65
|
def ending_delimiter(str)
|
66
66
|
# implicit string concatenation does not work with %{}, etc.
|
67
|
-
|
67
|
+
case str.source[0]
|
68
|
+
when "'"
|
68
69
|
"'"
|
69
|
-
|
70
|
+
when '"'
|
70
71
|
'"'
|
71
72
|
end
|
72
73
|
end
|
@@ -45,7 +45,7 @@ module RuboCop
|
|
45
45
|
# end
|
46
46
|
# end
|
47
47
|
# end
|
48
|
-
class IneffectiveAccessModifier <
|
48
|
+
class IneffectiveAccessModifier < Base
|
49
49
|
MSG = '`%<modifier>s` (on line %<line>d) does not make singleton ' \
|
50
50
|
'methods %<modifier>s. Use %<alternative>s instead.'
|
51
51
|
ALTERNATIVE_PRIVATE = '`private_class_method` or `private` inside a ' \
|
@@ -70,12 +70,8 @@ module RuboCop
|
|
70
70
|
def check_node(node)
|
71
71
|
return unless node&.begin_type?
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
ineffective_modifier(node, ignored_methods) do |defs_node, modifier|
|
76
|
-
add_offense(defs_node,
|
77
|
-
location: :keyword,
|
78
|
-
message: format_message(modifier))
|
73
|
+
ineffective_modifier(node) do |defs_node, modifier|
|
74
|
+
add_offense(defs_node.loc.keyword, message: format_message(modifier))
|
79
75
|
end
|
80
76
|
end
|
81
77
|
|
@@ -97,20 +93,24 @@ module RuboCop
|
|
97
93
|
alternative: alternative)
|
98
94
|
end
|
99
95
|
|
100
|
-
|
96
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
97
|
+
def ineffective_modifier(node, ignored_methods = nil, modifier = nil, &block)
|
101
98
|
node.each_child_node do |child|
|
102
99
|
case child.type
|
103
100
|
when :send
|
104
101
|
modifier = child if access_modifier?(child)
|
105
102
|
when :defs
|
103
|
+
ignored_methods ||= private_class_method_names(node)
|
106
104
|
next if correct_visibility?(child, modifier, ignored_methods)
|
107
105
|
|
108
106
|
yield child, modifier
|
109
107
|
when :kwbegin
|
108
|
+
ignored_methods ||= private_class_method_names(node)
|
110
109
|
ineffective_modifier(child, ignored_methods, modifier, &block)
|
111
110
|
end
|
112
111
|
end
|
113
112
|
end
|
113
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
114
114
|
|
115
115
|
def access_modifier?(node)
|
116
116
|
node.bare_access_modifier? && !node.method?(:module_function)
|
@@ -33,8 +33,9 @@ module RuboCop
|
|
33
33
|
# class C < StandardError; end
|
34
34
|
#
|
35
35
|
# C = Class.new(StandardError)
|
36
|
-
class InheritException <
|
36
|
+
class InheritException < Base
|
37
37
|
include ConfigurableEnforcedStyle
|
38
|
+
extend AutoCorrector
|
38
39
|
|
39
40
|
MSG = 'Inherit from `%<prefer>s` instead of `%<current>s`.'
|
40
41
|
PREFERRED_BASE_CLASS = {
|
@@ -65,19 +66,23 @@ module RuboCop
|
|
65
66
|
return unless node.parent_class &&
|
66
67
|
illegal_class_name?(node.parent_class)
|
67
68
|
|
68
|
-
|
69
|
+
message = message(node.parent_class)
|
70
|
+
|
71
|
+
add_offense(node.parent_class, message: message) do |corrector|
|
72
|
+
corrector.replace(node.parent_class, preferred_base_class)
|
73
|
+
end
|
69
74
|
end
|
70
75
|
|
71
76
|
def on_send(node)
|
77
|
+
return unless node.method?(:new)
|
78
|
+
|
72
79
|
constant = class_new_call?(node)
|
73
80
|
return unless constant && illegal_class_name?(constant)
|
74
81
|
|
75
|
-
|
76
|
-
end
|
82
|
+
message = message(constant)
|
77
83
|
|
78
|
-
|
79
|
-
|
80
|
-
corrector.replace(node, preferred_base_class)
|
84
|
+
add_offense(constant, message: message) do |corrector|
|
85
|
+
corrector.replace(constant, preferred_base_class)
|
81
86
|
end
|
82
87
|
end
|
83
88
|
|
@@ -16,18 +16,34 @@ module RuboCop
|
|
16
16
|
# # good
|
17
17
|
#
|
18
18
|
# foo = "something with #{interpolation} inside"
|
19
|
-
class InterpolationCheck <
|
19
|
+
class InterpolationCheck < Base
|
20
|
+
extend AutoCorrector
|
21
|
+
|
20
22
|
MSG = 'Interpolation in single quoted string detected. '\
|
21
23
|
'Use double quoted strings if you need interpolation.'
|
22
24
|
|
23
25
|
def on_str(node)
|
24
|
-
return if heredoc?(node)
|
25
|
-
|
26
26
|
parent = node.parent
|
27
27
|
return if parent && (parent.dstr_type? || parent.regexp_type?)
|
28
|
-
return unless /(?<!\\)#\{.*\}/.match?(node.source
|
28
|
+
return unless /(?<!\\)#\{.*\}/.match?(node.source)
|
29
|
+
return if heredoc?(node)
|
30
|
+
|
31
|
+
add_offense(node) do |corrector|
|
32
|
+
autocorrect(corrector, node)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def autocorrect(corrector, node)
|
39
|
+
starting_token, ending_token = if node.source.include?('"')
|
40
|
+
['%{', '}']
|
41
|
+
else
|
42
|
+
['"', '"']
|
43
|
+
end
|
29
44
|
|
30
|
-
|
45
|
+
corrector.replace(node.loc.begin, starting_token)
|
46
|
+
corrector.replace(node.loc.end, ending_token)
|
31
47
|
end
|
32
48
|
|
33
49
|
def heredoc?(node)
|
@@ -29,7 +29,9 @@ module RuboCop
|
|
29
29
|
# while true
|
30
30
|
# break if condition
|
31
31
|
# end
|
32
|
-
class LiteralAsCondition <
|
32
|
+
class LiteralAsCondition < Base
|
33
|
+
include RangeHelp
|
34
|
+
|
33
35
|
MSG = 'Literal `%<literal>s` appeared as a condition.'
|
34
36
|
|
35
37
|
def on_if(node)
|
@@ -57,7 +59,10 @@ module RuboCop
|
|
57
59
|
case_node.each_when do |when_node|
|
58
60
|
next unless when_node.conditions.all?(&:literal?)
|
59
61
|
|
60
|
-
|
62
|
+
range = when_conditions_range(when_node)
|
63
|
+
message = message(range)
|
64
|
+
|
65
|
+
add_offense(range, message: message)
|
61
66
|
end
|
62
67
|
end
|
63
68
|
end
|
@@ -129,6 +134,13 @@ module RuboCop
|
|
129
134
|
node.condition
|
130
135
|
end
|
131
136
|
end
|
137
|
+
|
138
|
+
def when_conditions_range(when_node)
|
139
|
+
range_between(
|
140
|
+
when_node.conditions.first.source_range.begin_pos,
|
141
|
+
when_node.conditions.last.source_range.end_pos
|
142
|
+
)
|
143
|
+
end
|
132
144
|
end
|
133
145
|
end
|
134
146
|
end
|