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
@@ -40,8 +40,9 @@ module RuboCop
|
|
40
40
|
#
|
41
41
|
# def self.foo(bar)
|
42
42
|
# end
|
43
|
-
class EmptyMethod <
|
43
|
+
class EmptyMethod < Base
|
44
44
|
include ConfigurableEnforcedStyle
|
45
|
+
extend AutoCorrector
|
45
46
|
|
46
47
|
MSG_COMPACT = 'Put empty method definitions on a single line.'
|
47
48
|
MSG_EXPANDED = 'Put the `end` of empty method definitions on the ' \
|
@@ -51,19 +52,15 @@ module RuboCop
|
|
51
52
|
return if node.body || comment_lines?(node)
|
52
53
|
return if correct_style?(node)
|
53
54
|
|
54
|
-
add_offense(node)
|
55
|
-
end
|
56
|
-
alias on_defs on_def
|
57
|
-
|
58
|
-
def autocorrect(node)
|
59
|
-
lambda do |corrector|
|
55
|
+
add_offense(node) do |corrector|
|
60
56
|
corrector.replace(node, corrected(node))
|
61
57
|
end
|
62
58
|
end
|
59
|
+
alias on_defs on_def
|
63
60
|
|
64
61
|
private
|
65
62
|
|
66
|
-
def message(
|
63
|
+
def message(_range)
|
67
64
|
compact_style? ? MSG_COMPACT : MSG_EXPANDED
|
68
65
|
end
|
69
66
|
|
@@ -73,13 +70,13 @@ module RuboCop
|
|
73
70
|
end
|
74
71
|
|
75
72
|
def corrected(node)
|
76
|
-
if node.arguments?
|
77
|
-
arguments = node.arguments.source
|
78
|
-
extra_space = ' ' unless parentheses?(node.arguments)
|
79
|
-
end
|
80
73
|
scope = node.receiver ? "#{node.receiver.source}." : ''
|
74
|
+
arguments = if node.arguments?
|
75
|
+
args = node.arguments.map(&:source).join(', ')
|
81
76
|
|
82
|
-
|
77
|
+
parentheses?(node.arguments) ? "(#{args})" : " #{args}"
|
78
|
+
end
|
79
|
+
signature = [scope, node.method_name, arguments].join
|
83
80
|
|
84
81
|
["def #{signature}", 'end'].join(joint(node))
|
85
82
|
end
|
@@ -9,27 +9,23 @@ module RuboCop
|
|
9
9
|
# # encoding: UTF-8
|
10
10
|
# # coding: UTF-8
|
11
11
|
# # -*- coding: UTF-8 -*-
|
12
|
-
class Encoding <
|
12
|
+
class Encoding < Base
|
13
13
|
include RangeHelp
|
14
|
+
extend AutoCorrector
|
14
15
|
|
15
16
|
MSG_UNNECESSARY = 'Unnecessary utf-8 encoding comment.'
|
16
17
|
ENCODING_PATTERN = /#.*coding\s?[:=]\s?(?:UTF|utf)-8/.freeze
|
17
18
|
SHEBANG = '#!'
|
18
19
|
|
19
|
-
def
|
20
|
+
def on_new_investigation
|
20
21
|
return if processed_source.buffer.source.empty?
|
21
22
|
|
22
23
|
line_number = encoding_line_number(processed_source)
|
23
24
|
return unless (@message = offense(processed_source, line_number))
|
24
25
|
|
25
26
|
range = processed_source.buffer.line_range(line_number + 1)
|
26
|
-
add_offense(range,
|
27
|
-
|
28
|
-
|
29
|
-
def autocorrect(range)
|
30
|
-
lambda do |corrector|
|
31
|
-
corrector.remove(range_with_surrounding_space(range: range,
|
32
|
-
side: :right))
|
27
|
+
add_offense(range, message: @message) do |corrector|
|
28
|
+
corrector.remove(range_with_surrounding_space(range: range, side: :right))
|
33
29
|
end
|
34
30
|
end
|
35
31
|
|
@@ -12,16 +12,14 @@ module RuboCop
|
|
12
12
|
# # good
|
13
13
|
# at_exit { puts 'Goodbye!' }
|
14
14
|
#
|
15
|
-
class EndBlock <
|
15
|
+
class EndBlock < Base
|
16
|
+
extend AutoCorrector
|
17
|
+
|
16
18
|
MSG = 'Avoid the use of `END` blocks. ' \
|
17
19
|
'Use `Kernel#at_exit` instead.'
|
18
20
|
|
19
21
|
def on_postexe(node)
|
20
|
-
add_offense(node
|
21
|
-
end
|
22
|
-
|
23
|
-
def autocorrect(node)
|
24
|
-
lambda do |corrector|
|
22
|
+
add_offense(node.loc.keyword) do |corrector|
|
25
23
|
corrector.replace(node.loc.keyword, 'at_exit')
|
26
24
|
end
|
27
25
|
end
|
@@ -31,12 +31,14 @@ module RuboCop
|
|
31
31
|
# def do_something
|
32
32
|
# end
|
33
33
|
# RUBY
|
34
|
-
class EvalWithLocation <
|
34
|
+
class EvalWithLocation < Base
|
35
35
|
MSG = 'Pass `__FILE__` and `__LINE__` to `eval` method, ' \
|
36
36
|
'as they are used by backtraces.'
|
37
37
|
MSG_INCORRECT_LINE = 'Use `%<expected>s` instead of `%<actual>s`, ' \
|
38
38
|
'as they are used by backtraces.'
|
39
39
|
|
40
|
+
EVAL_METHODS = %i[eval class_eval module_eval instance_eval].to_set.freeze
|
41
|
+
|
40
42
|
def_node_matcher :eval_without_location?, <<~PATTERN
|
41
43
|
{
|
42
44
|
(send nil? :eval ${str dstr})
|
@@ -61,6 +63,8 @@ module RuboCop
|
|
61
63
|
PATTERN
|
62
64
|
|
63
65
|
def on_send(node)
|
66
|
+
return unless EVAL_METHODS.include?(node.method_name)
|
67
|
+
|
64
68
|
eval_without_location?(node) do |code|
|
65
69
|
if with_lineno?(node)
|
66
70
|
on_with_lineno(node, code)
|
@@ -122,23 +126,21 @@ module RuboCop
|
|
122
126
|
end
|
123
127
|
end
|
124
128
|
|
125
|
-
def add_offense_for_same_line(
|
129
|
+
def add_offense_for_same_line(_node, line_node)
|
126
130
|
return if special_line_keyword?(line_node)
|
127
131
|
|
128
132
|
add_offense(
|
129
|
-
|
130
|
-
location: line_node.loc.expression,
|
133
|
+
line_node.loc.expression,
|
131
134
|
message: message_incorrect_line(line_node, nil, 0)
|
132
135
|
)
|
133
136
|
end
|
134
137
|
|
135
|
-
def add_offense_for_different_line(
|
138
|
+
def add_offense_for_different_line(_node, line_node, line_diff)
|
136
139
|
sign = line_diff.positive? ? :+ : :-
|
137
140
|
return if line_with_offset?(line_node, sign, line_diff.abs)
|
138
141
|
|
139
142
|
add_offense(
|
140
|
-
|
141
|
-
location: line_node.loc.expression,
|
143
|
+
line_node.loc.expression,
|
142
144
|
message: message_incorrect_line(line_node, sign, line_diff.abs)
|
143
145
|
)
|
144
146
|
end
|
@@ -15,7 +15,9 @@ module RuboCop
|
|
15
15
|
# # good
|
16
16
|
# if x.even?
|
17
17
|
# end
|
18
|
-
class EvenOdd <
|
18
|
+
class EvenOdd < Base
|
19
|
+
extend AutoCorrector
|
20
|
+
|
19
21
|
MSG = 'Replace with `Integer#%<method>s?`.'
|
20
22
|
|
21
23
|
def_node_matcher :even_odd_candidate?, <<~PATTERN
|
@@ -27,18 +29,12 @@ module RuboCop
|
|
27
29
|
PATTERN
|
28
30
|
|
29
31
|
def on_send(node)
|
30
|
-
even_odd_candidate?(node) do |_base_number, method, arg|
|
31
|
-
replacement_method = replacement_method(arg, method)
|
32
|
-
add_offense(node, message: format(MSG, method: replacement_method))
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def autocorrect(node)
|
37
32
|
even_odd_candidate?(node) do |base_number, method, arg|
|
38
33
|
replacement_method = replacement_method(arg, method)
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
add_offense(node, message: format(MSG, method: replacement_method)) do |corrector|
|
35
|
+
correction = "#{base_number.source}.#{replacement_method}?"
|
36
|
+
corrector.replace(node, correction)
|
37
|
+
end
|
42
38
|
end
|
43
39
|
end
|
44
40
|
|
@@ -40,8 +40,9 @@ module RuboCop
|
|
40
40
|
# # good
|
41
41
|
# Pathname.new(__dir__).expand_path
|
42
42
|
#
|
43
|
-
class ExpandPathArguments <
|
43
|
+
class ExpandPathArguments < Base
|
44
44
|
include RangeHelp
|
45
|
+
extend AutoCorrector
|
45
46
|
|
46
47
|
MSG = 'Use `expand_path(%<new_path>s%<new_default_dir>s)` instead of ' \
|
47
48
|
'`expand_path(%<current_path>s, __FILE__)`.'
|
@@ -53,7 +54,7 @@ module RuboCop
|
|
53
54
|
|
54
55
|
def_node_matcher :file_expand_path, <<~PATTERN
|
55
56
|
(send
|
56
|
-
(const nil? :File) :expand_path
|
57
|
+
(const {nil? cbase} :File) :expand_path
|
57
58
|
$_
|
58
59
|
$_)
|
59
60
|
PATTERN
|
@@ -69,49 +70,47 @@ module RuboCop
|
|
69
70
|
(send
|
70
71
|
(send
|
71
72
|
(send
|
72
|
-
(const nil? :Pathname) :new
|
73
|
+
(const {nil? cbase} :Pathname) :new
|
73
74
|
$_) :parent) :expand_path)
|
74
75
|
PATTERN
|
75
76
|
|
76
77
|
def on_send(node)
|
77
|
-
|
78
|
-
current_path, default_dir = captured_values
|
78
|
+
return unless node.method?(:expand_path)
|
79
79
|
|
80
|
+
if (current_path, default_dir = file_expand_path(node))
|
80
81
|
inspect_offense_for_expand_path(node, current_path, default_dir)
|
81
82
|
elsif (default_dir = pathname_parent_expand_path(node))
|
82
83
|
return unless unrecommended_argument?(default_dir)
|
83
84
|
|
84
|
-
add_offense(node, message: PATHNAME_MSG)
|
85
|
+
add_offense(node, message: PATHNAME_MSG) do |corrector|
|
86
|
+
autocorrect(corrector, node)
|
87
|
+
end
|
85
88
|
elsif (default_dir = pathname_new_parent_expand_path(node))
|
86
89
|
return unless unrecommended_argument?(default_dir)
|
87
90
|
|
88
|
-
add_offense(node, message: PATHNAME_NEW_MSG)
|
91
|
+
add_offense(node, message: PATHNAME_NEW_MSG) do |corrector|
|
92
|
+
autocorrect(corrector, node)
|
93
|
+
end
|
89
94
|
end
|
90
95
|
end
|
91
96
|
|
92
|
-
|
93
|
-
lambda do |corrector|
|
94
|
-
if (captured_values = file_expand_path(node))
|
95
|
-
current_path, default_dir = captured_values
|
97
|
+
private
|
96
98
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
99
|
+
def autocorrect(corrector, node)
|
100
|
+
if (current_path, default_dir = file_expand_path(node))
|
101
|
+
autocorrect_expand_path(corrector, current_path, default_dir)
|
102
|
+
elsif (dir = pathname_parent_expand_path(node) || pathname_new_parent_expand_path(node))
|
103
|
+
corrector.replace(dir, '__dir__')
|
104
|
+
remove_parent_method(corrector, dir)
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
106
|
-
private
|
107
|
-
|
108
108
|
def unrecommended_argument?(default_dir)
|
109
109
|
default_dir.source == '__FILE__'
|
110
110
|
end
|
111
111
|
|
112
112
|
def inspect_offense_for_expand_path(node, current_path, default_dir)
|
113
|
-
return unless unrecommended_argument?(default_dir) &&
|
114
|
-
current_path.str_type?
|
113
|
+
return unless unrecommended_argument?(default_dir) && current_path.str_type?
|
115
114
|
|
116
115
|
current_path = strip_surrounded_quotes!(current_path.source)
|
117
116
|
|
@@ -127,7 +126,9 @@ module RuboCop
|
|
127
126
|
current_path: "'#{current_path}'"
|
128
127
|
)
|
129
128
|
|
130
|
-
add_offense(node
|
129
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
130
|
+
autocorrect(corrector, node)
|
131
|
+
end
|
131
132
|
end
|
132
133
|
|
133
134
|
def autocorrect_expand_path(corrector, current_path, default_dir)
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop enforces the use of explicit block argument to avoid writing
|
7
|
+
# block literal that just passes its arguments to another block.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# def with_tmp_dir
|
12
|
+
# Dir.mktmpdir do |tmp_dir|
|
13
|
+
# Dir.chdir(tmp_dir) { |dir| yield dir } # block just passes arguments
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# # bad
|
18
|
+
# def nine_times
|
19
|
+
# 9.times { yield }
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# def with_tmp_dir(&block)
|
24
|
+
# Dir.mktmpdir do |tmp_dir|
|
25
|
+
# Dir.chdir(tmp_dir, &block)
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# with_tmp_dir do |dir|
|
30
|
+
# puts "dir is accessible as a parameter and pwd is set: #{dir}"
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# # good
|
34
|
+
# def nine_times(&block)
|
35
|
+
# 9.times(&block)
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
class ExplicitBlockArgument < Base
|
39
|
+
include RangeHelp
|
40
|
+
extend AutoCorrector
|
41
|
+
|
42
|
+
MSG = 'Consider using explicit block argument in the '\
|
43
|
+
"surrounding method's signature over `yield`."
|
44
|
+
|
45
|
+
def_node_matcher :yielding_block?, <<~PATTERN
|
46
|
+
(block $_ (args $...) (yield $...))
|
47
|
+
PATTERN
|
48
|
+
|
49
|
+
def initialize(config = nil, options = nil)
|
50
|
+
super
|
51
|
+
@def_nodes = Set.new
|
52
|
+
end
|
53
|
+
|
54
|
+
def on_yield(node)
|
55
|
+
block_node = node.parent
|
56
|
+
|
57
|
+
yielding_block?(block_node) do |send_node, block_args, yield_args|
|
58
|
+
return unless yielding_arguments?(block_args, yield_args)
|
59
|
+
|
60
|
+
add_offense(block_node) do |corrector|
|
61
|
+
corrector.remove(block_body_range(block_node, send_node))
|
62
|
+
|
63
|
+
add_block_argument(send_node, corrector)
|
64
|
+
|
65
|
+
def_node = block_node.each_ancestor(:def, :defs).first
|
66
|
+
add_block_argument(def_node, corrector) if @def_nodes.add?(def_node)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def yielding_arguments?(block_args, yield_args)
|
74
|
+
yield_args.zip(block_args).all? do |yield_arg, block_arg|
|
75
|
+
block_arg && yield_arg.children.first == block_arg.children.first
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def add_block_argument(node, corrector)
|
80
|
+
if node.arguments?
|
81
|
+
last_arg = node.arguments.last
|
82
|
+
arg_range = range_with_surrounding_comma(last_arg.source_range, :right)
|
83
|
+
replacement = ' &block'
|
84
|
+
replacement = ",#{replacement}" unless arg_range.source.end_with?(',')
|
85
|
+
corrector.insert_after(arg_range, replacement) unless last_arg.blockarg_type?
|
86
|
+
elsif node.send_type?
|
87
|
+
corrector.insert_after(node, '(&block)')
|
88
|
+
else
|
89
|
+
corrector.insert_after(node.loc.name, '(&block)')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def block_body_range(block_node, send_node)
|
94
|
+
range_between(
|
95
|
+
send_node.loc.expression.end_pos,
|
96
|
+
block_node.loc.end.end_pos
|
97
|
+
)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -58,8 +58,13 @@ module RuboCop
|
|
58
58
|
# 1e4
|
59
59
|
# 12e5
|
60
60
|
#
|
61
|
-
class ExponentialNotation <
|
61
|
+
class ExponentialNotation < Base
|
62
62
|
include ConfigurableEnforcedStyle
|
63
|
+
MESSAGES = {
|
64
|
+
scientific: 'Use a mantissa in [1, 10[.',
|
65
|
+
engineering: 'Use an exponent divisible by 3 and a mantissa in [0.1, 1000[.',
|
66
|
+
integral: 'Use an integer as mantissa, without trailing zero.'
|
67
|
+
}.freeze
|
63
68
|
|
64
69
|
def on_float(node)
|
65
70
|
add_offense(node) if offense?(node)
|
@@ -104,14 +109,7 @@ module RuboCop
|
|
104
109
|
end
|
105
110
|
|
106
111
|
def message(_node)
|
107
|
-
|
108
|
-
when :scientific
|
109
|
-
'Use a mantissa in [1, 10[.'
|
110
|
-
when :engineering
|
111
|
-
'Use an exponent divisible by 3 and a mantissa in [0.1, 1000[.'
|
112
|
-
when :integral
|
113
|
-
'Use an integer as mantissa, without trailing zero.'
|
114
|
-
end
|
112
|
+
MESSAGES[style]
|
115
113
|
end
|
116
114
|
end
|
117
115
|
end
|
@@ -39,8 +39,14 @@ module RuboCop
|
|
39
39
|
#
|
40
40
|
# # good
|
41
41
|
# a.fdiv(b)
|
42
|
-
class FloatDivision <
|
42
|
+
class FloatDivision < Base
|
43
43
|
include ConfigurableEnforcedStyle
|
44
|
+
MESSAGES = {
|
45
|
+
left_coerce: 'Prefer using `.to_f` on the left side.',
|
46
|
+
right_coerce: 'Prefer using `.to_f` on the right side.',
|
47
|
+
single_coerce: 'Prefer using `.to_f` on one side only.',
|
48
|
+
fdiv: 'Prefer using `fdiv` for float divisions.'
|
49
|
+
}.freeze
|
44
50
|
|
45
51
|
def_node_matcher :right_coerce?, <<~PATTERN
|
46
52
|
(send _ :/ (send _ :to_f))
|
@@ -77,16 +83,7 @@ module RuboCop
|
|
77
83
|
end
|
78
84
|
|
79
85
|
def message(_node)
|
80
|
-
|
81
|
-
when :left_coerce
|
82
|
-
'Prefer using `.to_f` on the left side.'
|
83
|
-
when :right_coerce
|
84
|
-
'Prefer using `.to_f` on the right side.'
|
85
|
-
when :single_coerce
|
86
|
-
'Prefer using `.to_f` on one side only.'
|
87
|
-
when :fdiv
|
88
|
-
'Prefer using `fdiv` for float divisions.'
|
89
|
-
end
|
86
|
+
MESSAGES[style]
|
90
87
|
end
|
91
88
|
end
|
92
89
|
end
|