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
@@ -23,13 +23,14 @@ module RuboCop
|
|
23
23
|
class RandOne < Base
|
24
24
|
MSG = '`%<method>s` always returns `0`. ' \
|
25
25
|
'Perhaps you meant `rand(2)` or `rand`?'
|
26
|
+
RESTRICT_ON_SEND = %i[rand].freeze
|
26
27
|
|
27
28
|
def_node_matcher :rand_one?, <<~PATTERN
|
28
29
|
(send {(const {nil? cbase} :Kernel) nil?} :rand {(int {-1 1}) (float {-1.0 1.0})})
|
29
30
|
PATTERN
|
30
31
|
|
31
32
|
def on_send(node)
|
32
|
-
return unless
|
33
|
+
return unless rand_one?(node)
|
33
34
|
|
34
35
|
add_offense(node)
|
35
36
|
end
|
@@ -41,13 +41,12 @@ module RuboCop
|
|
41
41
|
def on_new_investigation
|
42
42
|
return unless offenses_to_check
|
43
43
|
|
44
|
-
comments = processed_source.comments
|
45
44
|
cop_disabled_line_ranges = processed_source.disabled_line_ranges
|
46
45
|
|
47
46
|
redundant_cops = Hash.new { |h, k| h[k] = Set.new }
|
48
47
|
|
49
48
|
each_redundant_disable(cop_disabled_line_ranges,
|
50
|
-
offenses_to_check
|
49
|
+
offenses_to_check) do |comment, redundant_cop|
|
51
50
|
redundant_cops[comment].add(redundant_cop)
|
52
51
|
end
|
53
52
|
|
@@ -57,19 +56,29 @@ module RuboCop
|
|
57
56
|
|
58
57
|
private
|
59
58
|
|
59
|
+
def previous_line_blank?(range)
|
60
|
+
processed_source.buffer.source_line(range.line - 1).blank?
|
61
|
+
end
|
62
|
+
|
60
63
|
def comment_range_with_surrounding_space(range)
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
64
|
+
if previous_line_blank?(range)
|
65
|
+
# When the previous line is blank, it should be retained
|
66
|
+
range_with_surrounding_space(range: range, side: :right)
|
67
|
+
else
|
68
|
+
# Eat the entire comment, the preceding space, and the preceding
|
69
|
+
# newline if there is one.
|
70
|
+
original_begin = range.begin_pos
|
71
|
+
range = range_with_surrounding_space(range: range,
|
72
|
+
side: :left,
|
73
|
+
newlines: true)
|
74
|
+
|
75
|
+
range_with_surrounding_space(range: range,
|
76
|
+
side: :right,
|
77
|
+
# Special for a comment that
|
78
|
+
# begins the file: remove
|
79
|
+
# the newline at the end.
|
80
|
+
newlines: original_begin.zero?)
|
81
|
+
end
|
73
82
|
end
|
74
83
|
|
75
84
|
def directive_range_in_list(range, ranges)
|
@@ -88,25 +97,25 @@ module RuboCop
|
|
88
97
|
newlines: false)
|
89
98
|
end
|
90
99
|
|
91
|
-
def each_redundant_disable(cop_disabled_line_ranges, offenses,
|
100
|
+
def each_redundant_disable(cop_disabled_line_ranges, offenses,
|
92
101
|
&block)
|
93
102
|
disabled_ranges = cop_disabled_line_ranges[COP_NAME] || [0..0]
|
94
103
|
|
95
104
|
cop_disabled_line_ranges.each do |cop, line_ranges|
|
96
105
|
each_already_disabled(line_ranges,
|
97
|
-
disabled_ranges
|
106
|
+
disabled_ranges) do |comment|
|
98
107
|
yield comment, cop
|
99
108
|
end
|
100
109
|
|
101
|
-
each_line_range(line_ranges, disabled_ranges, offenses,
|
110
|
+
each_line_range(line_ranges, disabled_ranges, offenses,
|
102
111
|
cop, &block)
|
103
112
|
end
|
104
113
|
end
|
105
114
|
|
106
|
-
def each_line_range(line_ranges, disabled_ranges, offenses,
|
115
|
+
def each_line_range(line_ranges, disabled_ranges, offenses,
|
107
116
|
cop)
|
108
117
|
line_ranges.each_with_index do |line_range, ix|
|
109
|
-
comment =
|
118
|
+
comment = processed_source.comment_at_line(line_range.begin)
|
110
119
|
next if ignore_offense?(disabled_ranges, line_range)
|
111
120
|
|
112
121
|
redundant_cop = find_redundant(comment, offenses, cop, line_range,
|
@@ -115,7 +124,7 @@ module RuboCop
|
|
115
124
|
end
|
116
125
|
end
|
117
126
|
|
118
|
-
def each_already_disabled(line_ranges, disabled_ranges
|
127
|
+
def each_already_disabled(line_ranges, disabled_ranges)
|
119
128
|
line_ranges.each_cons(2) do |previous_range, range|
|
120
129
|
next if ignore_offense?(disabled_ranges, range)
|
121
130
|
next if previous_range.end != range.begin
|
@@ -124,14 +133,12 @@ module RuboCop
|
|
124
133
|
# the end of the previous range, it means that the cop was
|
125
134
|
# already disabled by an earlier comment. So it's redundant
|
126
135
|
# whether there are offenses or not.
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
134
|
-
yield redundant_comment if redundant_comment
|
136
|
+
comment = processed_source.comment_at_line(range.begin)
|
137
|
+
|
138
|
+
# Comments disabling all cops don't count since it's reasonable
|
139
|
+
# to disable a few select cops first and then all cops further
|
140
|
+
# down in the code.
|
141
|
+
yield comment if comment && !all_disabled?(comment)
|
135
142
|
end
|
136
143
|
end
|
137
144
|
|
@@ -250,7 +257,7 @@ module RuboCop
|
|
250
257
|
end
|
251
258
|
|
252
259
|
def all_cop_names
|
253
|
-
@all_cop_names ||=
|
260
|
+
@all_cop_names ||= Registry.global.names
|
254
261
|
end
|
255
262
|
|
256
263
|
def ends_its_line?(range)
|
@@ -45,18 +45,28 @@ module RuboCop
|
|
45
45
|
return if processed_source.blank?
|
46
46
|
|
47
47
|
offenses = processed_source.comment_config.extra_enabled_comments
|
48
|
-
offenses.each
|
48
|
+
offenses.each { |comment, cop_names| register_offense(comment, cop_names) }
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def register_offense(comment, cop_names)
|
54
|
+
directive = DirectiveComment.new(comment)
|
55
|
+
|
56
|
+
cop_names.each do |name|
|
49
57
|
add_offense(
|
50
58
|
range_of_offense(comment, name),
|
51
59
|
message: format(MSG, cop: all_or_name(name))
|
52
60
|
) do |corrector|
|
53
|
-
|
61
|
+
if directive.match?(cop_names)
|
62
|
+
corrector.remove(range_with_surrounding_space(range: directive.range, side: :right))
|
63
|
+
else
|
64
|
+
corrector.remove(range_with_comma(comment, name))
|
65
|
+
end
|
54
66
|
end
|
55
67
|
end
|
56
68
|
end
|
57
69
|
|
58
|
-
private
|
59
|
-
|
60
70
|
def range_of_offense(comment, name)
|
61
71
|
start_pos = comment_start(comment) + cop_name_indention(comment, name)
|
62
72
|
range_between(start_pos, start_pos + name.size)
|
@@ -40,10 +40,12 @@ module RuboCop
|
|
40
40
|
|
41
41
|
MSG = 'Use `%<method>s %<module_name>s` instead of `%<bad_method>s`.'
|
42
42
|
MIXIN_METHODS = %i[include prepend extend].freeze
|
43
|
+
SEND_METHODS = %i[send public_send __send__].freeze
|
44
|
+
RESTRICT_ON_SEND = SEND_METHODS
|
43
45
|
|
44
46
|
def_node_matcher :send_with_mixin_argument?, <<~PATTERN
|
45
47
|
(send
|
46
|
-
(const _ _) {
|
48
|
+
(const _ _) {:#{SEND_METHODS.join(' :')}}
|
47
49
|
({sym str} $#mixin_method?)
|
48
50
|
$(const _ _))
|
49
51
|
PATTERN
|
@@ -75,8 +75,7 @@ module RuboCop
|
|
75
75
|
|
76
76
|
def rescued_groups_for(rescues)
|
77
77
|
rescues.map do |group|
|
78
|
-
|
79
|
-
evaluate_exceptions(rescue_group)
|
78
|
+
evaluate_exceptions(group)
|
80
79
|
end
|
81
80
|
end
|
82
81
|
|
@@ -117,14 +116,15 @@ module RuboCop
|
|
117
116
|
$VERBOSE = old_verbose
|
118
117
|
end
|
119
118
|
|
120
|
-
def evaluate_exceptions(
|
121
|
-
|
122
|
-
|
119
|
+
def evaluate_exceptions(group)
|
120
|
+
rescued_exceptions = group.exceptions
|
121
|
+
|
122
|
+
if rescued_exceptions.any?
|
123
123
|
rescued_exceptions.each_with_object([]) do |exception, converted|
|
124
124
|
begin
|
125
125
|
silence_warnings do
|
126
126
|
# Avoid printing deprecation warnings about constants
|
127
|
-
converted << Kernel.const_get(exception)
|
127
|
+
converted << Kernel.const_get(exception.source)
|
128
128
|
end
|
129
129
|
rescue NameError
|
130
130
|
converted << nil
|
@@ -3,10 +3,10 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Lint
|
6
|
-
# This cop
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# "shadowing outer local variable - foo"
|
6
|
+
# This cop checks for the use of local variable names from an outer scope
|
7
|
+
# in block arguments or block-local variables. This mirrors the warning
|
8
|
+
# given by `ruby -cw` prior to Ruby 2.6:
|
9
|
+
# "shadowing outer local variable - foo".
|
10
10
|
#
|
11
11
|
# @example
|
12
12
|
#
|
@@ -24,6 +24,7 @@ module RuboCop
|
|
24
24
|
class StructNewOverride < Base
|
25
25
|
MSG = '`%<member_name>s` member overrides `Struct#%<method_name>s`' \
|
26
26
|
' and it may be unexpected.'
|
27
|
+
RESTRICT_ON_SEND = %i[new].freeze
|
27
28
|
|
28
29
|
STRUCT_METHOD_NAMES = Struct.instance_methods
|
29
30
|
STRUCT_MEMBER_NAME_TYPES = %i[sym str].freeze
|
@@ -9,12 +9,23 @@ module RuboCop
|
|
9
9
|
# for an optional argument, your method should too.
|
10
10
|
#
|
11
11
|
# @example
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
12
|
+
# class Point
|
13
|
+
# attr_reader :x, :y
|
14
|
+
#
|
15
|
+
# # bad, incorrect arity
|
16
|
+
# def to_json
|
17
|
+
# JSON.generate([x, y])
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# # good, preserving args
|
21
|
+
# def to_json(*args)
|
22
|
+
# JSON.generate([x, y], *args)
|
23
|
+
# end
|
15
24
|
#
|
16
|
-
#
|
17
|
-
#
|
25
|
+
# # good, discarding args
|
26
|
+
# def to_json(*_args)
|
27
|
+
# JSON.generate([x, y])
|
28
|
+
# end
|
18
29
|
# end
|
19
30
|
#
|
20
31
|
class ToJSON < Base
|
@@ -11,7 +11,7 @@ module RuboCop
|
|
11
11
|
#
|
12
12
|
# # Detected since Ruby 2.7
|
13
13
|
# return 1 # 1 is always ignored.
|
14
|
-
class TopLevelReturnWithArgument <
|
14
|
+
class TopLevelReturnWithArgument < Base
|
15
15
|
# This cop works by validating the ancestors of the return node. A
|
16
16
|
# top-level return node's ancestors should not be of block, def, or
|
17
17
|
# defs type.
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for trailing commas in attribute declarations, such as
|
7
|
+
# `#attr_reader`. Leaving a trailing comma will nullify the next method
|
8
|
+
# definition by overriding it with a getter method.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# class Foo
|
14
|
+
# attr_reader :foo,
|
15
|
+
#
|
16
|
+
# def bar
|
17
|
+
# puts "Unreachable."
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# class Foo
|
23
|
+
# attr_reader :foo
|
24
|
+
#
|
25
|
+
# def bar
|
26
|
+
# puts "No problem!"
|
27
|
+
# end
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
class TrailingCommaInAttributeDeclaration < Base
|
31
|
+
extend AutoCorrector
|
32
|
+
include RangeHelp
|
33
|
+
|
34
|
+
MSG = 'Avoid leaving a trailing comma in attribute declarations.'
|
35
|
+
|
36
|
+
def on_send(node)
|
37
|
+
return unless node.attribute_accessor? && node.arguments.last.def_type?
|
38
|
+
|
39
|
+
trailing_comma = trailing_comma_range(node)
|
40
|
+
|
41
|
+
add_offense(trailing_comma) do |corrector|
|
42
|
+
corrector.remove(trailing_comma)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def trailing_comma_range(node)
|
49
|
+
range_with_surrounding_space(
|
50
|
+
range: node.arguments[-2].source_range,
|
51
|
+
side: :right
|
52
|
+
).end.resize(1)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -130,7 +130,8 @@ module RuboCop
|
|
130
130
|
case node.type
|
131
131
|
when :begin, :kwbegin
|
132
132
|
statements = *node
|
133
|
-
statements.
|
133
|
+
break_statement = statements.find { |statement| break_statement?(statement) }
|
134
|
+
break_statement && !preceded_by_continue_statement?(break_statement)
|
134
135
|
when :if
|
135
136
|
check_if(node)
|
136
137
|
when :case
|
@@ -158,16 +159,12 @@ module RuboCop
|
|
158
159
|
end
|
159
160
|
|
160
161
|
def preceded_by_continue_statement?(break_statement)
|
161
|
-
|
162
|
+
break_statement.left_siblings.any? do |sibling|
|
162
163
|
next if sibling.loop_keyword? || loop_method?(sibling)
|
163
164
|
|
164
165
|
sibling.each_descendant(:next, :redo).any?
|
165
166
|
end
|
166
167
|
end
|
167
|
-
|
168
|
-
def left_siblings_of(node)
|
169
|
-
node.parent.children[0, node.sibling_index]
|
170
|
-
end
|
171
168
|
end
|
172
169
|
end
|
173
170
|
end
|
@@ -44,10 +44,12 @@ module RuboCop
|
|
44
44
|
MSG = '`%<uri_method>s` method is obsolete and should not be used. ' \
|
45
45
|
'Instead, use %<replacements>s depending on your specific use ' \
|
46
46
|
'case.'
|
47
|
+
METHOD_NAMES = %i[escape encode unescape decode].freeze
|
48
|
+
RESTRICT_ON_SEND = METHOD_NAMES
|
47
49
|
|
48
50
|
def_node_matcher :uri_escape_unescape?, <<~PATTERN
|
49
51
|
(send
|
50
|
-
(const ${nil? cbase} :URI) ${
|
52
|
+
(const ${nil? cbase} :URI) ${:#{METHOD_NAMES.join(' :')}}
|
51
53
|
...)
|
52
54
|
PATTERN
|
53
55
|
|
@@ -16,35 +16,20 @@ module RuboCop
|
|
16
16
|
class UriRegexp < Base
|
17
17
|
extend AutoCorrector
|
18
18
|
|
19
|
-
MSG = '`%<
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def_node_matcher :uri_regexp_with_argument?, <<~PATTERN
|
24
|
-
(send
|
25
|
-
(const ${nil? cbase} :URI) :regexp
|
26
|
-
${(str _) (array ...)})
|
27
|
-
PATTERN
|
28
|
-
|
29
|
-
def_node_matcher :uri_regexp_without_argument?, <<~PATTERN
|
30
|
-
(send
|
31
|
-
(const ${nil? cbase} :URI) :regexp)
|
32
|
-
PATTERN
|
19
|
+
MSG = '`%<current>s` is obsolete and should not be used. Instead, use `%<preferred>s`.'
|
20
|
+
URI_CONSTANTS = ['URI', '::URI'].freeze
|
21
|
+
RESTRICT_ON_SEND = %i[regexp].freeze
|
33
22
|
|
34
23
|
def on_send(node)
|
35
|
-
return unless node.
|
36
|
-
|
37
|
-
captured_values = uri_regexp_with_argument?(node) || uri_regexp_without_argument?(node)
|
38
|
-
|
39
|
-
double_colon, arg = captured_values
|
40
|
-
|
41
|
-
top_level = double_colon ? '::' : ''
|
42
|
-
argument = arg ? "(#{arg.source})" : ''
|
24
|
+
return unless node.receiver
|
25
|
+
return unless URI_CONSTANTS.include?(node.receiver.source)
|
43
26
|
|
44
|
-
|
27
|
+
argument = node.first_argument ? "(#{node.first_argument.source})" : ''
|
28
|
+
preferred_method = "#{node.receiver.source}::DEFAULT_PARSER.make_regexp#{argument}"
|
29
|
+
message = format(MSG, current: node.source, preferred: preferred_method)
|
45
30
|
|
46
|
-
add_offense(node.loc.selector, message:
|
47
|
-
corrector.replace(node,
|
31
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
32
|
+
corrector.replace(node, preferred_method)
|
48
33
|
end
|
49
34
|
end
|
50
35
|
end
|