rubocop 0.89.0 → 0.92.0
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 +2 -2
- data/config/default.yml +128 -14
- data/lib/rubocop.rb +30 -4
- data/lib/rubocop/cached_data.rb +1 -0
- data/lib/rubocop/cli/command.rb +1 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +9 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
- data/lib/rubocop/cli/command/show_cops.rb +2 -1
- data/lib/rubocop/cli/command/version.rb +1 -0
- data/lib/rubocop/cli/environment.rb +1 -0
- data/lib/rubocop/comment_config.rb +17 -10
- data/lib/rubocop/config.rb +1 -1
- data/lib/rubocop/config_loader.rb +21 -10
- data/lib/rubocop/config_loader_resolver.rb +1 -0
- data/lib/rubocop/config_obsoletion.rb +1 -0
- data/lib/rubocop/config_regeneration.rb +33 -0
- data/lib/rubocop/config_store.rb +3 -3
- data/lib/rubocop/config_validator.rb +4 -1
- data/lib/rubocop/cop/base.rb +23 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
- data/lib/rubocop/cop/bundler/gem_comment.rb +8 -3
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
- data/lib/rubocop/cop/commissioner.rb +47 -7
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +5 -10
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
- data/lib/rubocop/cop/documentation.rb +22 -0
- data/lib/rubocop/cop/generator.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -0
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/class_structure.rb +14 -17
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +13 -15
- data/lib/rubocop/cop/layout/def_end_alignment.rb +8 -5
- data/lib/rubocop/cop/layout/dot_position.rb +21 -17
- data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +21 -18
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
- data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +18 -14
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +4 -7
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -7
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +11 -17
- data/lib/rubocop/cop/layout/extra_spacing.rb +14 -21
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
- data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +12 -10
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +41 -22
- data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +22 -17
- data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
- data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
- data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +20 -23
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +19 -37
- data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -24
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -1
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +2 -3
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -4
- data/lib/rubocop/cop/lint/duplicate_require.rb +46 -0
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +2 -15
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/empty_file.rb +50 -0
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -0
- data/lib/rubocop/cop/lint/float_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
- data/lib/rubocop/cop/lint/missing_super.rb +11 -11
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
- data/lib/rubocop/cop/lint/multiple_comparison.rb +3 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -0
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +33 -15
- data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -0
- data/lib/rubocop/cop/lint/rand_one.rb +2 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +36 -29
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
- data/lib/rubocop/cop/lint/to_json.rb +16 -5
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
- data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -6
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +10 -25
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +3 -9
- data/lib/rubocop/cop/lint/useless_method_definition.rb +70 -0
- data/lib/rubocop/cop/lint/useless_times.rb +106 -0
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +27 -16
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
- data/lib/rubocop/cop/migration/department_name.rb +2 -2
- data/lib/rubocop/cop/mixin/alignment.rb +5 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +17 -8
- data/lib/rubocop/cop/mixin/comments_help.rb +48 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +12 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +0 -2
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +31 -12
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +13 -12
- data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +16 -9
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
- data/lib/rubocop/cop/mixin/rescue_node.rb +11 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/statement_modifier.rb +12 -6
- data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
- data/lib/rubocop/cop/mixin/trailing_comma.rb +9 -11
- data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/offense.rb +1 -0
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/severity.rb +0 -8
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +8 -19
- data/lib/rubocop/cop/style/accessor_grouping.rb +20 -20
- data/lib/rubocop/cop/style/alias.rb +36 -33
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_coercion.rb +4 -0
- data/lib/rubocop/cop/style/array_join.rb +7 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +12 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +4 -5
- 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 +9 -12
- 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 +11 -3
- data/lib/rubocop/cop/style/case_like_if.rb +37 -18
- data/lib/rubocop/cop/style/class_and_module_children.rb +16 -11
- data/lib/rubocop/cop/style/class_check.rb +6 -11
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
- data/lib/rubocop/cop/style/class_vars.rb +7 -12
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +6 -7
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/combinable_loops.rb +84 -0
- 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 +8 -9
- data/lib/rubocop/cop/style/conditional_assignment.rb +50 -61
- 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 +13 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +8 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +2 -4
- 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 +3 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -17
- data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
- 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_lambda_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_literal.rb +18 -17
- data/lib/rubocop/cop/style/empty_method.rb +5 -8
- 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 +6 -10
- data/lib/rubocop/cop/style/even_odd.rb +8 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -26
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +3 -1
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +18 -23
- data/lib/rubocop/cop/style/format_string_token.rb +4 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +4 -4
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +24 -5
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -7
- data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -11
- data/lib/rubocop/cop/style/hash_transform_values.rb +18 -10
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +11 -17
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +2 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +23 -23
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +20 -29
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +53 -0
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +17 -14
- 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 +11 -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 +7 -6
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +12 -3
- 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 +13 -13
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +9 -28
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
- 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 +12 -10
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +10 -11
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/negated_if.rb +6 -6
- data/lib/rubocop/cop/style/negated_unless.rb +6 -6
- data/lib/rubocop/cop/style/negated_while.rb +7 -15
- data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +14 -12
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
- data/lib/rubocop/cop/style/next.rb +10 -14
- data/lib/rubocop/cop/style/nil_comparison.rb +13 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +34 -26
- data/lib/rubocop/cop/style/not.rb +20 -26
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -14
- data/lib/rubocop/cop/style/one_line_conditional.rb +73 -23
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +12 -1
- data/lib/rubocop/cop/style/or_assignment.rb +13 -10
- data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
- data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -14
- data/lib/rubocop/cop/style/proc.rb +6 -6
- data/lib/rubocop/cop/style/raise_args.rb +15 -24
- data/lib/rubocop/cop/style/random_with_offset.rb +19 -19
- data/lib/rubocop/cop/style/redundant_assignment.rb +8 -18
- data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
- data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -8
- data/lib/rubocop/cop/style/redundant_freeze.rb +5 -7
- data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -15
- data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
- data/lib/rubocop/cop/style/redundant_return.rb +17 -17
- data/lib/rubocop/cop/style/redundant_self.rb +9 -11
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +12 -31
- data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
- data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
- data/lib/rubocop/cop/style/return_nil.rb +5 -5
- data/lib/rubocop/cop/style/safe_navigation.rb +22 -16
- data/lib/rubocop/cop/style/sample.rb +12 -14
- data/lib/rubocop/cop/style/self_assignment.rb +26 -22
- data/lib/rubocop/cop/style/semicolon.rb +6 -9
- data/lib/rubocop/cop/style/send.rb +4 -5
- data/lib/rubocop/cop/style/signal_exception.rb +23 -19
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +18 -17
- data/lib/rubocop/cop/style/slicing_with_range.rb +6 -8
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +5 -6
- data/lib/rubocop/cop/style/string_concatenation.rb +16 -2
- data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
- data/lib/rubocop/cop/style/string_methods.rb +7 -17
- data/lib/rubocop/cop/style/strip.rb +9 -14
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
- data/lib/rubocop/cop/style/symbol_array.rb +5 -16
- data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
- data/lib/rubocop/cop/style/ternary_parentheses.rb +22 -22
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +11 -9
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
- data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
- data/lib/rubocop/cop/style/unless_else.rb +5 -8
- data/lib/rubocop/cop/style/unpack_first.rb +5 -8
- data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
- data/lib/rubocop/cop/style/when_then.rb +4 -6
- data/lib/rubocop/cop/style/while_until_do.rb +6 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
- data/lib/rubocop/cop/style/word_array.rb +5 -23
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -18
- data/lib/rubocop/cop/team.rb +1 -0
- data/lib/rubocop/cop/util.rb +2 -1
- data/lib/rubocop/cop/utils/format_string.rb +3 -5
- data/lib/rubocop/cop/variable_force.rb +2 -0
- data/lib/rubocop/cops_documentation_generator.rb +5 -3
- data/lib/rubocop/core_ext/string.rb +2 -2
- data/lib/rubocop/directive_comment.rb +32 -0
- data/lib/rubocop/ext/regexp_node.rb +46 -0
- data/lib/rubocop/file_finder.rb +1 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +13 -6
- data/lib/rubocop/formatter/html_formatter.rb +2 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/formatter/progress_formatter.rb +2 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
- data/lib/rubocop/name_similarity.rb +1 -0
- data/lib/rubocop/options.rb +43 -20
- data/lib/rubocop/remote_config.rb +1 -0
- data/lib/rubocop/result_cache.rb +31 -13
- data/lib/rubocop/rspec/cop_helper.rb +4 -1
- data/lib/rubocop/rspec/expect_offense.rb +14 -9
- data/lib/rubocop/rspec/shared_contexts.rb +13 -5
- data/lib/rubocop/runner.rb +35 -15
- data/lib/rubocop/string_interpreter.rb +3 -0
- data/lib/rubocop/target_finder.rb +5 -1
- data/lib/rubocop/target_ruby.rb +7 -1
- data/lib/rubocop/version.rb +7 -1
- data/lib/rubocop/yaml_duplication_checker.rb +1 -0
- metadata +26 -14
- data/lib/rubocop/cop/tokens_util.rb +0 -84
@@ -24,8 +24,9 @@ module RuboCop
|
|
24
24
|
#
|
25
25
|
# # good
|
26
26
|
# x != y
|
27
|
-
class RedundantConditional <
|
27
|
+
class RedundantConditional < Base
|
28
28
|
include Alignment
|
29
|
+
extend AutoCorrector
|
29
30
|
|
30
31
|
operators = RuboCop::AST::Node::COMPARISON_OPERATORS.to_a
|
31
32
|
COMPARISON_OPERATOR_MATCHER = "{:#{operators.join(' :')}}"
|
@@ -36,11 +37,9 @@ module RuboCop
|
|
36
37
|
def on_if(node)
|
37
38
|
return unless offense?(node)
|
38
39
|
|
39
|
-
|
40
|
-
end
|
40
|
+
message = message(node)
|
41
41
|
|
42
|
-
|
43
|
-
lambda do |corrector|
|
42
|
+
add_offense(node, message: message) do |corrector|
|
44
43
|
corrector.replace(node, replacement_condition(node))
|
45
44
|
end
|
46
45
|
end
|
@@ -23,13 +23,11 @@ module RuboCop
|
|
23
23
|
MSG_2 = 'Redundant `RuntimeError.new` call can be replaced with ' \
|
24
24
|
'just the message.'
|
25
25
|
|
26
|
-
|
26
|
+
RESTRICT_ON_SEND = %i[raise fail].freeze
|
27
27
|
|
28
28
|
# Switch `raise RuntimeError, 'message'` to `raise 'message'`, and
|
29
29
|
# `raise RuntimeError.new('message')` to `raise 'message'`.
|
30
30
|
def on_send(node)
|
31
|
-
return unless RAISE_METHODS.include?(node.method_name)
|
32
|
-
|
33
31
|
fix_exploded(node) || fix_compact(node)
|
34
32
|
end
|
35
33
|
|
@@ -31,9 +31,10 @@ module RuboCop
|
|
31
31
|
# # good
|
32
32
|
# ENV.fetch(:key, VALUE)
|
33
33
|
#
|
34
|
-
class RedundantFetchBlock <
|
34
|
+
class RedundantFetchBlock < Base
|
35
35
|
include FrozenStringLiteral
|
36
36
|
include RangeHelp
|
37
|
+
extend AutoCorrector
|
37
38
|
|
38
39
|
MSG = 'Use `%<good>s` instead of `%<bad>s`.'
|
39
40
|
|
@@ -52,17 +53,7 @@ module RuboCop
|
|
52
53
|
good = build_good_method(send, body)
|
53
54
|
bad = build_bad_method(send, body)
|
54
55
|
|
55
|
-
add_offense(
|
56
|
-
node,
|
57
|
-
location: range,
|
58
|
-
message: format(MSG, good: good, bad: bad)
|
59
|
-
)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def autocorrect(node)
|
64
|
-
redundant_fetch_block_candidate?(node) do |send, body|
|
65
|
-
lambda do |corrector|
|
56
|
+
add_offense(range, message: format(MSG, good: good, bad: bad)) do |corrector|
|
66
57
|
receiver, _, key = send.children
|
67
58
|
default_value = body ? body.source : 'nil'
|
68
59
|
|
@@ -24,8 +24,11 @@ module RuboCop
|
|
24
24
|
# require_relative '../foo'
|
25
25
|
# require_relative '../foo.so'
|
26
26
|
#
|
27
|
-
class RedundantFileExtensionInRequire <
|
27
|
+
class RedundantFileExtensionInRequire < Base
|
28
|
+
extend AutoCorrector
|
29
|
+
|
28
30
|
MSG = 'Redundant `.rb` file extension detected.'
|
31
|
+
RESTRICT_ON_SEND = %i[require require_relative].freeze
|
29
32
|
|
30
33
|
def_node_matcher :require_call?, <<~PATTERN
|
31
34
|
(send nil? {:require :require_relative} $str_type?)
|
@@ -33,15 +36,13 @@ module RuboCop
|
|
33
36
|
|
34
37
|
def on_send(node)
|
35
38
|
require_call?(node) do |name_node|
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
39
|
+
return unless name_node.value.end_with?('.rb')
|
39
40
|
|
40
|
-
|
41
|
-
|
41
|
+
add_offense(name_node) do |corrector|
|
42
|
+
correction = name_node.value.sub(/\.rb\z/, '')
|
42
43
|
|
43
|
-
|
44
|
-
|
44
|
+
corrector.replace(name_node, "'#{correction}'")
|
45
|
+
end
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
@@ -11,22 +11,20 @@ module RuboCop
|
|
11
11
|
#
|
12
12
|
# # good
|
13
13
|
# CONST = 1
|
14
|
-
class RedundantFreeze <
|
14
|
+
class RedundantFreeze < Base
|
15
|
+
extend AutoCorrector
|
15
16
|
include FrozenStringLiteral
|
16
17
|
|
17
18
|
MSG = 'Do not freeze immutable objects, as freezing them has no ' \
|
18
19
|
'effect.'
|
20
|
+
RESTRICT_ON_SEND = %i[freeze].freeze
|
19
21
|
|
20
22
|
def on_send(node)
|
21
|
-
return unless node.receiver &&
|
23
|
+
return unless node.receiver &&
|
22
24
|
(immutable_literal?(node.receiver) ||
|
23
25
|
operation_produces_immutable_object?(node.receiver))
|
24
26
|
|
25
|
-
add_offense(node)
|
26
|
-
end
|
27
|
-
|
28
|
-
def autocorrect(node)
|
29
|
-
lambda do |corrector|
|
27
|
+
add_offense(node) do |corrector|
|
30
28
|
corrector.remove(node.loc.dot)
|
31
29
|
corrector.remove(node.loc.selector)
|
32
30
|
end
|
@@ -15,8 +15,9 @@ module RuboCop
|
|
15
15
|
#
|
16
16
|
# # good if @var is already a String
|
17
17
|
# @var
|
18
|
-
class RedundantInterpolation <
|
18
|
+
class RedundantInterpolation < Base
|
19
19
|
include PercentLiteral
|
20
|
+
extend AutoCorrector
|
20
21
|
|
21
22
|
MSG = 'Prefer `to_s` over string interpolation.'
|
22
23
|
|
@@ -25,18 +26,18 @@ module RuboCop
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def on_dstr(node)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
return unless single_interpolation?(node)
|
30
|
+
|
31
|
+
add_offense(node) do |corrector|
|
32
|
+
embedded_node = node.children.first
|
33
|
+
|
34
|
+
if variable_interpolation?(embedded_node)
|
35
|
+
autocorrect_variable_interpolation(corrector, embedded_node, node)
|
36
|
+
elsif single_variable_interpolation?(embedded_node)
|
37
|
+
autocorrect_single_variable_interpolation(corrector, embedded_node, node)
|
38
|
+
else
|
39
|
+
autocorrect_other(corrector, embedded_node, node)
|
40
|
+
end
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
@@ -70,27 +71,27 @@ module RuboCop
|
|
70
71
|
percent_literal?(node.parent)
|
71
72
|
end
|
72
73
|
|
73
|
-
def autocorrect_variable_interpolation(embedded_node, node)
|
74
|
+
def autocorrect_variable_interpolation(corrector, embedded_node, node)
|
74
75
|
replacement = "#{embedded_node.loc.expression.source}.to_s"
|
75
|
-
|
76
|
+
|
77
|
+
corrector.replace(node, replacement)
|
76
78
|
end
|
77
79
|
|
78
|
-
def autocorrect_single_variable_interpolation(embedded_node, node)
|
80
|
+
def autocorrect_single_variable_interpolation(corrector, embedded_node, node)
|
79
81
|
variable_loc = embedded_node.children.first.loc
|
80
82
|
replacement = "#{variable_loc.expression.source}.to_s"
|
81
|
-
|
83
|
+
|
84
|
+
corrector.replace(node, replacement)
|
82
85
|
end
|
83
86
|
|
84
|
-
def autocorrect_other(embedded_node, node)
|
87
|
+
def autocorrect_other(corrector, embedded_node, node)
|
85
88
|
loc = node.loc
|
86
89
|
embedded_loc = embedded_node.loc
|
87
90
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
corrector.replace(embedded_loc.end, ').to_s')
|
93
|
-
end
|
91
|
+
corrector.replace(loc.begin, '')
|
92
|
+
corrector.replace(loc.end, '')
|
93
|
+
corrector.replace(embedded_loc.begin, '(')
|
94
|
+
corrector.replace(embedded_loc.end, ').to_s')
|
94
95
|
end
|
95
96
|
end
|
96
97
|
end
|
@@ -13,8 +13,9 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# x if y.z.nil?
|
15
15
|
#
|
16
|
-
class RedundantParentheses <
|
16
|
+
class RedundantParentheses < Base
|
17
17
|
include Parentheses
|
18
|
+
extend AutoCorrector
|
18
19
|
|
19
20
|
def_node_matcher :square_brackets?,
|
20
21
|
'(send {(send _recv _msg) str array hash} :[] ...)'
|
@@ -25,17 +26,11 @@ module RuboCop
|
|
25
26
|
'^^(block (send _ _ equal?(%0) ...) ...)'
|
26
27
|
|
27
28
|
def on_begin(node)
|
28
|
-
return if !parentheses?(node) || parens_allowed?(node)
|
29
|
-
return if node.parent && (node.parent.while_post_type? ||
|
30
|
-
node.parent.until_post_type?)
|
29
|
+
return if !parentheses?(node) || parens_allowed?(node) || ignore_syntax?(node)
|
31
30
|
|
32
31
|
check(node)
|
33
32
|
end
|
34
33
|
|
35
|
-
def autocorrect(node)
|
36
|
-
ParenthesesCorrector.correct(node)
|
37
|
-
end
|
38
|
-
|
39
34
|
private
|
40
35
|
|
41
36
|
def parens_allowed?(node)
|
@@ -45,6 +40,13 @@ module RuboCop
|
|
45
40
|
allowed_expression?(node)
|
46
41
|
end
|
47
42
|
|
43
|
+
def ignore_syntax?(node)
|
44
|
+
return false unless (parent = node.parent)
|
45
|
+
|
46
|
+
parent.while_post_type? || parent.until_post_type? ||
|
47
|
+
like_method_argument_parentheses?(parent)
|
48
|
+
end
|
49
|
+
|
48
50
|
def allowed_expression?(node)
|
49
51
|
allowed_ancestor?(node) ||
|
50
52
|
allowed_method_call?(node) ||
|
@@ -71,6 +73,10 @@ module RuboCop
|
|
71
73
|
!ancestor.begin_type? && !ancestor.def_type? && !ancestor.block_type?
|
72
74
|
end
|
73
75
|
|
76
|
+
def like_method_argument_parentheses?(node)
|
77
|
+
node.send_type? && node.arguments.size == 1 && !node.arithmetic_operation?
|
78
|
+
end
|
79
|
+
|
74
80
|
def empty_parentheses?(node)
|
75
81
|
# Don't flag `()`
|
76
82
|
node.children.empty?
|
@@ -115,15 +121,16 @@ module RuboCop
|
|
115
121
|
|
116
122
|
node = node.children.first while suspect_unary?(node)
|
117
123
|
|
118
|
-
if node.send_type?
|
119
|
-
|
120
|
-
end
|
124
|
+
return if node.send_type? &&
|
125
|
+
!method_call_with_redundant_parentheses?(node)
|
121
126
|
|
122
127
|
offense(begin_node, 'an unary operation')
|
123
128
|
end
|
124
129
|
|
125
130
|
def offense(node, msg)
|
126
|
-
add_offense(node, message: "Don't use parentheses around #{msg}.")
|
131
|
+
add_offense(node, message: "Don't use parentheses around #{msg}.") do |corrector|
|
132
|
+
ParenthesesCorrector.correct(corrector, node)
|
133
|
+
end
|
127
134
|
end
|
128
135
|
|
129
136
|
def suspect_unary?(node)
|
@@ -168,10 +175,9 @@ module RuboCop
|
|
168
175
|
def raised_to_power_negative_numeric?(begin_node, node)
|
169
176
|
return false unless node.numeric_type?
|
170
177
|
|
171
|
-
|
172
|
-
return false
|
178
|
+
next_sibling = begin_node.right_sibling
|
179
|
+
return false unless next_sibling
|
173
180
|
|
174
|
-
next_sibling = siblings[begin_node.sibling_index + 1]
|
175
181
|
base_value = node.children.first
|
176
182
|
|
177
183
|
base_value.negative? && next_sibling == :**
|
@@ -17,7 +17,9 @@ module RuboCop
|
|
17
17
|
# time = "8 o'clock"
|
18
18
|
# question = '"What did you say?"'
|
19
19
|
#
|
20
|
-
class RedundantPercentQ <
|
20
|
+
class RedundantPercentQ < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = 'Use `%<q_type>s` only for strings that contain both ' \
|
22
24
|
'single quotes and double quotes%<extra>s.'
|
23
25
|
DYNAMIC_MSG = ', or for dynamic strings that contain ' \
|
@@ -45,22 +47,18 @@ module RuboCop
|
|
45
47
|
check(node)
|
46
48
|
end
|
47
49
|
|
48
|
-
def autocorrect(node)
|
49
|
-
delimiter =
|
50
|
-
/^%Q[^"]+$|'/.match?(node.source) ? QUOTE : SINGLE_QUOTE
|
51
|
-
lambda do |corrector|
|
52
|
-
corrector.replace(node.loc.begin, delimiter)
|
53
|
-
corrector.replace(node.loc.end, delimiter)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
50
|
private
|
58
51
|
|
59
52
|
def check(node)
|
60
53
|
return unless start_with_percent_q_variant?(node)
|
61
54
|
return if interpolated_quotes?(node) || allowed_percent_q?(node)
|
62
55
|
|
63
|
-
add_offense(node)
|
56
|
+
add_offense(node) do |corrector|
|
57
|
+
delimiter = /^%Q[^"]+$|'/.match?(node.source) ? QUOTE : SINGLE_QUOTE
|
58
|
+
|
59
|
+
corrector.replace(node.loc.begin, delimiter)
|
60
|
+
corrector.replace(node.loc.end, delimiter)
|
61
|
+
end
|
64
62
|
end
|
65
63
|
|
66
64
|
def interpolated_quotes?(node)
|
@@ -21,9 +21,10 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# # good
|
23
23
|
# r = /[ab]/
|
24
|
-
class RedundantRegexpCharacterClass <
|
24
|
+
class RedundantRegexpCharacterClass < Base
|
25
25
|
include MatchRange
|
26
26
|
include RegexpLiteralHelp
|
27
|
+
extend AutoCorrector
|
27
28
|
|
28
29
|
MSG_REDUNDANT_CHARACTER_CLASS = 'Redundant single-element character class, ' \
|
29
30
|
'`%<char_class>s` can be replaced with `%<element>s`.'
|
@@ -48,33 +49,25 @@ module RuboCop
|
|
48
49
|
next if whitespace_in_free_space_mode?(node, loc)
|
49
50
|
|
50
51
|
add_offense(
|
51
|
-
|
52
|
-
location: loc,
|
53
|
-
message: format(
|
52
|
+
loc, message: format(
|
54
53
|
MSG_REDUNDANT_CHARACTER_CLASS,
|
55
54
|
char_class: loc.source,
|
56
55
|
element: without_character_class(loc)
|
57
56
|
)
|
58
|
-
)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def autocorrect(node)
|
63
|
-
lambda do |corrector|
|
64
|
-
each_redundant_character_class(node) do |loc|
|
57
|
+
) do |corrector|
|
65
58
|
corrector.replace(loc, without_character_class(loc))
|
66
59
|
end
|
67
60
|
end
|
68
61
|
end
|
69
62
|
|
63
|
+
private
|
64
|
+
|
70
65
|
def each_redundant_character_class(node)
|
71
66
|
pattern_source(node).scan(PATTERN) do
|
72
67
|
yield match_range(node.loc.begin.end, Regexp.last_match)
|
73
68
|
end
|
74
69
|
end
|
75
70
|
|
76
|
-
private
|
77
|
-
|
78
71
|
def without_character_class(loc)
|
79
72
|
loc.source[1..-2]
|
80
73
|
end
|
@@ -32,13 +32,14 @@ module RuboCop
|
|
32
32
|
#
|
33
33
|
# # good
|
34
34
|
# /[+\-]\d/
|
35
|
-
class RedundantRegexpEscape <
|
35
|
+
class RedundantRegexpEscape < Base
|
36
36
|
include RangeHelp
|
37
37
|
include RegexpLiteralHelp
|
38
|
+
extend AutoCorrector
|
38
39
|
|
39
40
|
MSG_REDUNDANT_ESCAPE = 'Redundant escape inside regexp literal'
|
40
41
|
|
41
|
-
ALLOWED_ALWAYS_ESCAPES =
|
42
|
+
ALLOWED_ALWAYS_ESCAPES = " \n[]^\\#".chars.freeze
|
42
43
|
ALLOWED_WITHIN_CHAR_CLASS_METACHAR_ESCAPES = '-'.chars.freeze
|
43
44
|
ALLOWED_OUTSIDE_CHAR_CLASS_METACHAR_ESCAPES = '.*+?{}()|$'.chars.freeze
|
44
45
|
|
@@ -46,19 +47,9 @@ module RuboCop
|
|
46
47
|
each_escape(node) do |char, index, within_character_class|
|
47
48
|
next if allowed_escape?(node, char, within_character_class)
|
48
49
|
|
49
|
-
|
50
|
-
node,
|
51
|
-
location: escape_range_at_index(node, index),
|
52
|
-
message: MSG_REDUNDANT_ESCAPE
|
53
|
-
)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def autocorrect(node)
|
58
|
-
lambda do |corrector|
|
59
|
-
each_escape(node) do |char, index, within_character_class|
|
60
|
-
next if allowed_escape?(node, char, within_character_class)
|
50
|
+
location = escape_range_at_index(node, index)
|
61
51
|
|
52
|
+
add_offense(location, message: MSG_REDUNDANT_ESCAPE) do |corrector|
|
62
53
|
corrector.remove_leading(escape_range_at_index(node, index), 1)
|
63
54
|
end
|
64
55
|
end
|
@@ -47,8 +47,9 @@ module RuboCop
|
|
47
47
|
# return x, y
|
48
48
|
# end
|
49
49
|
#
|
50
|
-
class RedundantReturn <
|
50
|
+
class RedundantReturn < Base
|
51
51
|
include RangeHelp
|
52
|
+
extend AutoCorrector
|
52
53
|
|
53
54
|
MSG = 'Redundant `return` detected.'
|
54
55
|
MULTI_RETURN_MSG = 'To return multiple values, use an array.'
|
@@ -58,16 +59,6 @@ module RuboCop
|
|
58
59
|
end
|
59
60
|
alias on_defs on_def
|
60
61
|
|
61
|
-
def autocorrect(node)
|
62
|
-
lambda do |corrector|
|
63
|
-
if node.arguments?
|
64
|
-
correct_with_arguments(node, corrector)
|
65
|
-
else
|
66
|
-
correct_without_arguments(node, corrector)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
62
|
private
|
72
63
|
|
73
64
|
def correct_without_arguments(return_node, corrector)
|
@@ -108,8 +99,8 @@ module RuboCop
|
|
108
99
|
when :return then check_return_node(node)
|
109
100
|
when :case then check_case_node(node)
|
110
101
|
when :if then check_if_node(node)
|
111
|
-
when :rescue
|
112
|
-
|
102
|
+
when :rescue then check_rescue_node(node)
|
103
|
+
when :resbody then check_resbody_node(node)
|
113
104
|
when :ensure then check_ensure_node(node)
|
114
105
|
when :begin, :kwbegin
|
115
106
|
check_begin_node(node)
|
@@ -121,7 +112,13 @@ module RuboCop
|
|
121
112
|
return if cop_config['AllowMultipleReturnValues'] &&
|
122
113
|
node.children.size > 1
|
123
114
|
|
124
|
-
add_offense(node,
|
115
|
+
add_offense(node.loc.keyword, message: message(node)) do |corrector|
|
116
|
+
if node.arguments?
|
117
|
+
correct_with_arguments(node, corrector)
|
118
|
+
else
|
119
|
+
correct_without_arguments(node, corrector)
|
120
|
+
end
|
121
|
+
end
|
125
122
|
end
|
126
123
|
|
127
124
|
def check_case_node(node)
|
@@ -137,9 +134,12 @@ module RuboCop
|
|
137
134
|
end
|
138
135
|
|
139
136
|
def check_rescue_node(node)
|
140
|
-
node.
|
141
|
-
|
142
|
-
|
137
|
+
node.branches.each { |branch| check_branch(branch) }
|
138
|
+
check_branch(node.body) unless node.else?
|
139
|
+
end
|
140
|
+
|
141
|
+
def check_resbody_node(node)
|
142
|
+
check_branch(node.body)
|
143
143
|
end
|
144
144
|
|
145
145
|
def check_ensure_node(node)
|