rubocop 0.85.1 → 0.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +16 -4
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +227 -26
- 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/init_dotfile.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/cli.rb +2 -4
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +21 -4
- data/lib/rubocop/config_loader.rb +41 -69
- data/lib/rubocop/config_loader_resolver.rb +4 -4
- 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 +39 -13
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +3 -3
- data/lib/rubocop/cop/generator.rb +1 -1
- 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 +4 -4
- data/lib/rubocop/cop/layout/empty_comment.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 +3 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +2 -3
- 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 +17 -7
- 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_after_colon.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +4 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -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 +89 -0
- 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 +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -5
- 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 +14 -13
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +14 -13
- data/lib/rubocop/cop/lint/raise_exception.rb +15 -5
- data/lib/rubocop/cop/lint/rand_one.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +43 -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 +6 -2
- 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 +37 -4
- 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 +47 -4
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -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/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -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_expression_indentation.rb +1 -1
- 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/parentheses.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +19 -5
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +27 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -27
- data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -5
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +12 -17
- 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 +4 -4
- 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 +4 -6
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -3
- 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 +11 -13
- 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 +25 -27
- 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 +15 -12
- 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 +24 -25
- 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 +12 -3
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +15 -15
- 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 +8 -10
- data/lib/rubocop/cop/style/documentation.rb +8 -10
- 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 +27 -26
- 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 +6 -10
- 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 +9 -11
- 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 +20 -42
- 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 +2 -2
- 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 +23 -33
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- 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/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_with_args_parentheses.rb +2 -1
- 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 +5 -11
- 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 +17 -8
- 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/nested_ternary_operator.rb +27 -0
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
- 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 +2 -2
- 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 +122 -0
- 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 +8 -2
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +4 -3
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +23 -32
- data/lib/rubocop/cop/style/redundant_self.rb +6 -9
- 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/sample.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- 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 +23 -2
- data/lib/rubocop/cop/style/symbol_array.rb +6 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- 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/word_array.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
- 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 +5 -15
- data/lib/rubocop/cop/utils/format_string.rb +2 -3
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +7 -5
- data/lib/rubocop/cop/variable_force.rb +0 -2
- 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 +3 -3
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +7 -3
- data/lib/rubocop/options.rb +18 -11
- data/lib/rubocop/path_util.rb +19 -19
- data/lib/rubocop/platform.rb +1 -1
- 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 +63 -22
- data/lib/rubocop/rspec/shared_contexts.rb +16 -17
- data/lib/rubocop/runner.rb +35 -34
- data/lib/rubocop/target_finder.rb +14 -11
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +2 -2
- data/lib/rubocop.rb +33 -5
- metadata +49 -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
|
@@ -24,29 +24,26 @@ module RuboCop
|
|
|
24
24
|
# def f # rubocop:disable Style/For, Metrics/AbcSize
|
|
25
25
|
# end
|
|
26
26
|
#
|
|
27
|
-
class DoubleCopDisableDirective <
|
|
27
|
+
class DoubleCopDisableDirective < Base
|
|
28
|
+
extend AutoCorrector
|
|
29
|
+
|
|
28
30
|
# rubocop:enable Style/For, Style/DoubleCopDisableDirective
|
|
29
31
|
# rubocop:enable Lint/RedundantCopDisableDirective, Metrics/AbcSize
|
|
30
32
|
MSG = 'More than one disable comment on one line.'
|
|
31
33
|
|
|
32
|
-
def
|
|
34
|
+
def on_new_investigation
|
|
33
35
|
processed_source.comments.each do |comment|
|
|
34
36
|
next unless comment.text.scan(/# rubocop:(?:disable|todo)/).size > 1
|
|
35
37
|
|
|
36
|
-
add_offense(comment)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
'# rubocop:disable'
|
|
43
|
-
else
|
|
44
|
-
'# rubocop:todo'
|
|
45
|
-
end
|
|
38
|
+
add_offense(comment) do |corrector|
|
|
39
|
+
prefix = if comment.text.start_with?('# rubocop:disable')
|
|
40
|
+
'# rubocop:disable'
|
|
41
|
+
else
|
|
42
|
+
'# rubocop:todo'
|
|
43
|
+
end
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
comment.text[/#{prefix} \S+/])
|
|
45
|
+
corrector.replace(comment, comment.text[/#{prefix} \S+/])
|
|
46
|
+
end
|
|
50
47
|
end
|
|
51
48
|
end
|
|
52
49
|
end
|
|
@@ -32,7 +32,7 @@ module RuboCop
|
|
|
32
32
|
# !!something and !something.nil? are not the same thing.
|
|
33
33
|
# As you're unlikely to write code that can accept values of any type
|
|
34
34
|
# this is rarely a problem in practice.
|
|
35
|
-
class DoubleNegation <
|
|
35
|
+
class DoubleNegation < Base
|
|
36
36
|
include ConfigurableEnforcedStyle
|
|
37
37
|
|
|
38
38
|
MSG = 'Avoid the use of double negation (`!!`).'
|
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
|
43
43
|
return unless double_negative?(node) && node.prefix_bang?
|
|
44
44
|
return if style == :allowed_in_returns && allowed_in_returns?(node)
|
|
45
45
|
|
|
46
|
-
add_offense(node
|
|
46
|
+
add_offense(node.loc.selector)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
private
|
|
@@ -22,7 +22,9 @@ module RuboCop
|
|
|
22
22
|
#
|
|
23
23
|
# # good
|
|
24
24
|
# 10.times {}
|
|
25
|
-
class EachForSimpleLoop <
|
|
25
|
+
class EachForSimpleLoop < Base
|
|
26
|
+
extend AutoCorrector
|
|
27
|
+
|
|
26
28
|
MSG = 'Use `Integer#times` for a simple loop which iterates a fixed ' \
|
|
27
29
|
'number of times.'
|
|
28
30
|
|
|
@@ -33,17 +35,12 @@ module RuboCop
|
|
|
33
35
|
|
|
34
36
|
range = send_node.receiver.source_range.join(send_node.loc.selector)
|
|
35
37
|
|
|
36
|
-
add_offense(
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def autocorrect(node)
|
|
40
|
-
lambda do |corrector|
|
|
38
|
+
add_offense(range) do |corrector|
|
|
41
39
|
range_type, min, max = offending_each_range(node)
|
|
42
40
|
|
|
43
41
|
max += 1 if range_type == :irange
|
|
44
42
|
|
|
45
|
-
corrector.replace(node.send_node,
|
|
46
|
-
"#{max - min}.times")
|
|
43
|
+
corrector.replace(node.send_node, "#{max - min}.times")
|
|
47
44
|
end
|
|
48
45
|
end
|
|
49
46
|
|
|
@@ -16,7 +16,8 @@ module RuboCop
|
|
|
16
16
|
#
|
|
17
17
|
# # good
|
|
18
18
|
# [1, 2].each_with_object({}) { |e, a| a[e] = e }
|
|
19
|
-
class EachWithObject <
|
|
19
|
+
class EachWithObject < Base
|
|
20
|
+
extend AutoCorrector
|
|
20
21
|
include RangeHelp
|
|
21
22
|
|
|
22
23
|
MSG = 'Use `each_with_object` instead of `%<method>s`.'
|
|
@@ -36,33 +37,29 @@ module RuboCop
|
|
|
36
37
|
return unless first_argument_returned?(args, return_value)
|
|
37
38
|
return if accumulator_param_assigned_to?(body, args)
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
message = format(MSG, method: method_name)
|
|
41
|
+
add_offense(method.loc.selector, message: message) do |corrector|
|
|
42
|
+
autocorrect(corrector, node, return_value)
|
|
43
|
+
end
|
|
41
44
|
end
|
|
42
45
|
end
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
def autocorrect(node)
|
|
46
|
-
lambda do |corrector|
|
|
47
|
-
corrector.replace(node.send_node.loc.selector, 'each_with_object')
|
|
47
|
+
private
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
def autocorrect(corrector, node, return_value)
|
|
50
|
+
corrector.replace(node.send_node.loc.selector, 'each_with_object')
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
corrector.replace(second_arg, first_arg.source)
|
|
52
|
+
first_arg, second_arg = *node.arguments
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
corrector.replace(first_arg, second_arg.source)
|
|
55
|
+
corrector.replace(second_arg, first_arg.source)
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
end
|
|
57
|
+
if return_value_occupies_whole_line?(return_value)
|
|
58
|
+
corrector.remove(whole_line_expression(return_value))
|
|
59
|
+
else
|
|
60
|
+
corrector.remove(return_value)
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
|
-
# rubocop:enable Metrics/AbcSize
|
|
64
|
-
|
|
65
|
-
private
|
|
66
63
|
|
|
67
64
|
def simple_method_arg?(method_arg)
|
|
68
65
|
method_arg&.basic_literal?
|
|
@@ -35,43 +35,45 @@ module RuboCop
|
|
|
35
35
|
# else
|
|
36
36
|
# puts 'more'
|
|
37
37
|
# end
|
|
38
|
-
class EmptyCaseCondition <
|
|
38
|
+
class EmptyCaseCondition < Base
|
|
39
39
|
include RangeHelp
|
|
40
|
+
extend AutoCorrector
|
|
40
41
|
|
|
41
|
-
MSG = 'Do not use empty `case` condition, instead use an `if` '
|
|
42
|
-
'expression.'
|
|
42
|
+
MSG = 'Do not use empty `case` condition, instead use an `if` expression.'
|
|
43
43
|
|
|
44
44
|
def on_case(case_node)
|
|
45
45
|
return if case_node.condition
|
|
46
|
-
return if case_node.when_branches.any? do |when_branch|
|
|
47
|
-
when_branch.each_descendant.any?(&:return_type?)
|
|
48
|
-
end
|
|
49
46
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
branch_bodies = [
|
|
48
|
+
*case_node.when_branches.map(&:body),
|
|
49
|
+
case_node.else_branch
|
|
50
|
+
].compact
|
|
51
|
+
|
|
52
|
+
return if branch_bodies.any? do |body|
|
|
53
|
+
body.return_type? ||
|
|
54
|
+
body.each_descendant.any?(&:return_type?)
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
add_offense(case_node
|
|
57
|
+
add_offense(case_node.loc.keyword) do |corrector|
|
|
58
|
+
autocorrect(corrector, case_node)
|
|
59
|
+
end
|
|
56
60
|
end
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def autocorrect(corrector, case_node)
|
|
59
65
|
when_branches = case_node.when_branches
|
|
60
66
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
correct_when_conditions(corrector, when_branches)
|
|
64
|
-
end
|
|
67
|
+
correct_case_when(corrector, case_node, when_branches)
|
|
68
|
+
correct_when_conditions(corrector, when_branches)
|
|
65
69
|
end
|
|
66
70
|
|
|
67
|
-
private
|
|
68
|
-
|
|
69
71
|
def correct_case_when(corrector, case_node, when_nodes)
|
|
70
72
|
case_range = case_node.loc.keyword.join(when_nodes.first.loc.keyword)
|
|
71
73
|
|
|
72
74
|
corrector.replace(case_range, 'if')
|
|
73
75
|
|
|
74
|
-
keep_first_when_comment(
|
|
76
|
+
keep_first_when_comment(case_range, corrector)
|
|
75
77
|
|
|
76
78
|
when_nodes[1..-1].each do |when_node|
|
|
77
79
|
corrector.replace(when_node.loc.keyword, 'elsif')
|
|
@@ -91,15 +93,14 @@ module RuboCop
|
|
|
91
93
|
end
|
|
92
94
|
end
|
|
93
95
|
|
|
94
|
-
def keep_first_when_comment(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
line = range_by_whole_lines(case_node.source_range)
|
|
96
|
+
def keep_first_when_comment(case_range, corrector)
|
|
97
|
+
indent = ' ' * case_range.column
|
|
98
|
+
comments = processed_source.each_comment_in_lines(
|
|
99
|
+
case_range.first_line...case_range.last_line
|
|
100
|
+
).map { |comment| "#{indent}#{comment.text}\n" }.join
|
|
100
101
|
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
line_beginning = case_range.adjust(begin_pos: -case_range.column)
|
|
103
|
+
corrector.insert_before(line_beginning, comments)
|
|
103
104
|
end
|
|
104
105
|
end
|
|
105
106
|
end
|
|
@@ -89,10 +89,11 @@ module RuboCop
|
|
|
89
89
|
# if condition
|
|
90
90
|
# statement
|
|
91
91
|
# end
|
|
92
|
-
class EmptyElse <
|
|
92
|
+
class EmptyElse < Base
|
|
93
93
|
include OnNormalIfUnless
|
|
94
94
|
include ConfigurableEnforcedStyle
|
|
95
95
|
include RangeHelp
|
|
96
|
+
extend AutoCorrector
|
|
96
97
|
|
|
97
98
|
MSG = 'Redundant `else`-clause.'
|
|
98
99
|
|
|
@@ -104,16 +105,6 @@ module RuboCop
|
|
|
104
105
|
check(node)
|
|
105
106
|
end
|
|
106
107
|
|
|
107
|
-
def autocorrect(node)
|
|
108
|
-
return false if autocorrect_forbidden?(node.type.to_s)
|
|
109
|
-
return false if comment_in_else?(node)
|
|
110
|
-
|
|
111
|
-
lambda do |corrector|
|
|
112
|
-
end_pos = base_node(node).loc.end.begin_pos
|
|
113
|
-
corrector.remove(range_between(node.loc.else.begin_pos, end_pos))
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
108
|
private
|
|
118
109
|
|
|
119
110
|
def check(node)
|
|
@@ -132,24 +123,31 @@ module RuboCop
|
|
|
132
123
|
def empty_check(node)
|
|
133
124
|
return unless node.else? && !node.else_branch
|
|
134
125
|
|
|
135
|
-
add_offense(node
|
|
126
|
+
add_offense(node.loc.else) do |corrector|
|
|
127
|
+
autocorrect(corrector, node)
|
|
128
|
+
end
|
|
136
129
|
end
|
|
137
130
|
|
|
138
131
|
def nil_check(node)
|
|
139
132
|
return unless node.else_branch&.nil_type?
|
|
140
133
|
|
|
141
|
-
add_offense(node
|
|
134
|
+
add_offense(node.loc.else) do |corrector|
|
|
135
|
+
autocorrect(corrector, node)
|
|
136
|
+
end
|
|
142
137
|
end
|
|
143
138
|
|
|
144
|
-
def
|
|
145
|
-
|
|
146
|
-
|
|
139
|
+
def autocorrect(corrector, node)
|
|
140
|
+
return false if autocorrect_forbidden?(node.type.to_s)
|
|
141
|
+
return false if comment_in_else?(node.loc)
|
|
142
|
+
|
|
143
|
+
end_pos = base_node(node).loc.end.begin_pos
|
|
144
|
+
corrector.remove(range_between(node.loc.else.begin_pos, end_pos))
|
|
147
145
|
end
|
|
148
146
|
|
|
149
|
-
def
|
|
150
|
-
return
|
|
147
|
+
def comment_in_else?(loc)
|
|
148
|
+
return false if loc.else.nil? || loc.end.nil?
|
|
151
149
|
|
|
152
|
-
loc.else.
|
|
150
|
+
processed_source.contains_comment?(loc.else.join(loc.end))
|
|
153
151
|
end
|
|
154
152
|
|
|
155
153
|
def base_node(node)
|
|
@@ -16,44 +16,43 @@ module RuboCop
|
|
|
16
16
|
# a = []
|
|
17
17
|
# h = {}
|
|
18
18
|
# s = ''
|
|
19
|
-
class EmptyLiteral <
|
|
19
|
+
class EmptyLiteral < Base
|
|
20
20
|
include FrozenStringLiteral
|
|
21
21
|
include RangeHelp
|
|
22
|
+
extend AutoCorrector
|
|
22
23
|
|
|
23
24
|
ARR_MSG = 'Use array literal `[]` instead of `Array.new`.'
|
|
24
25
|
HASH_MSG = 'Use hash literal `{}` instead of `Hash.new`.'
|
|
25
|
-
STR_MSG = 'Use string literal `%<prefer>s` instead of '
|
|
26
|
-
'`String.new`.'
|
|
26
|
+
STR_MSG = 'Use string literal `%<prefer>s` instead of `String.new`.'
|
|
27
27
|
|
|
28
|
-
def_node_matcher :array_node, '(send (const nil? :Array) :new)'
|
|
29
|
-
def_node_matcher :hash_node, '(send (const nil? :Hash) :new)'
|
|
30
|
-
def_node_matcher :str_node, '(send (const nil? :String) :new)'
|
|
28
|
+
def_node_matcher :array_node, '(send (const {nil? cbase} :Array) :new)'
|
|
29
|
+
def_node_matcher :hash_node, '(send (const {nil? cbase} :Hash) :new)'
|
|
30
|
+
def_node_matcher :str_node, '(send (const {nil? cbase} :String) :new)'
|
|
31
31
|
def_node_matcher :array_with_block,
|
|
32
|
-
'(block (send (const nil? :Array) :new) args _)'
|
|
32
|
+
'(block (send (const {nil? cbase} :Array) :new) args _)'
|
|
33
33
|
def_node_matcher :hash_with_block,
|
|
34
|
-
'(block (send (const nil? :Hash) :new) args _)'
|
|
34
|
+
'(block (send (const {nil? cbase} :Hash) :new) args _)'
|
|
35
35
|
|
|
36
36
|
def on_send(node)
|
|
37
|
-
|
|
38
|
-
add_offense(node, message: HASH_MSG) if offense_hash_node?(node)
|
|
37
|
+
return unless (message = offense_message(node))
|
|
39
38
|
|
|
40
|
-
|
|
41
|
-
return if frozen_string_literals_enabled?
|
|
42
|
-
|
|
43
|
-
add_offense(node,
|
|
44
|
-
message: format(STR_MSG,
|
|
45
|
-
prefer: preferred_string_literal))
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def autocorrect(node)
|
|
50
|
-
lambda do |corrector|
|
|
39
|
+
add_offense(node, message: message) do |corrector|
|
|
51
40
|
corrector.replace(replacement_range(node), correction(node))
|
|
52
41
|
end
|
|
53
42
|
end
|
|
54
43
|
|
|
55
44
|
private
|
|
56
45
|
|
|
46
|
+
def offense_message(node)
|
|
47
|
+
if offense_array_node?(node)
|
|
48
|
+
ARR_MSG
|
|
49
|
+
elsif offense_hash_node?(node)
|
|
50
|
+
HASH_MSG
|
|
51
|
+
elsif str_node(node) && !frozen_string_literals_enabled?
|
|
52
|
+
format(STR_MSG, prefer: preferred_string_literal)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
57
56
|
def preferred_string_literal
|
|
58
57
|
enforce_double_quotes? ? '""' : "''"
|
|
59
58
|
end
|
|
@@ -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
|
|
|
@@ -42,7 +38,7 @@ module RuboCop
|
|
|
42
38
|
end
|
|
43
39
|
|
|
44
40
|
def encoding_omitable?(line)
|
|
45
|
-
line
|
|
41
|
+
ENCODING_PATTERN.match?(line)
|
|
46
42
|
end
|
|
47
43
|
|
|
48
44
|
def encoding_line_number(processed_source)
|
|
@@ -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
|
|