rubocop 0.88.0 → 0.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/bin/rubocop-profile +1 -0
- data/config/default.yml +96 -16
- data/lib/rubocop.rb +16 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +2 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +2 -2
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/base.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- 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 +32 -11
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/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/class_structure.rb +3 -7
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- 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_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +7 -4
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +2 -2
- 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 +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +4 -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 +1 -1
- 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 +27 -23
- 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 +4 -10
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +16 -19
- 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 +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
- 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/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 +8 -3
- 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 +25 -15
- 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 +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
- 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/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +37 -8
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +3 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- 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 +23 -21
- 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_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 +2 -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 -14
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +19 -16
- data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +6 -10
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/command_literal.rb +23 -24
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +1 -1
- 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 +12 -12
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +7 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +6 -8
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -19
- data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +15 -16
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +5 -9
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +21 -20
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- 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 +5 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +8 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +10 -32
- 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 +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +13 -13
- 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_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
- data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -0
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +23 -10
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- 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/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +3 -13
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +2 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/options.rb +3 -3
- data/lib/rubocop/path_util.rb +19 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/rspec/expect_offense.rb +1 -1
- data/lib/rubocop/rspec/shared_contexts.rb +1 -5
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/target_finder.rb +12 -9
- data/lib/rubocop/version.rb +2 -2
- metadata +21 -8
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -20,8 +20,8 @@ module RuboCop
|
|
20
20
|
#
|
21
21
|
# # With parentheses, there's no ambiguity.
|
22
22
|
# do_something(*some_array)
|
23
|
-
class AmbiguousOperator <
|
24
|
-
|
23
|
+
class AmbiguousOperator < Base
|
24
|
+
extend AutoCorrector
|
25
25
|
|
26
26
|
AMBIGUITIES = {
|
27
27
|
'+' => { actual: 'positive number', possible: 'addition' },
|
@@ -38,18 +38,23 @@ module RuboCop
|
|
38
38
|
'a whitespace to the right of the `%<operator>s` if it ' \
|
39
39
|
'should be a %<possible>s.'
|
40
40
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
41
|
+
def on_new_investigation
|
42
|
+
processed_source.diagnostics.each do |diagnostic|
|
43
|
+
next unless diagnostic.reason == :ambiguous_prefix
|
44
|
+
|
45
|
+
offense_node = find_offense_node_by(diagnostic)
|
46
|
+
message = message(diagnostic)
|
47
|
+
|
48
|
+
add_offense(
|
49
|
+
diagnostic.location, message: message, severity: diagnostic.level
|
50
|
+
) do |corrector|
|
51
|
+
add_parentheses(offense_node, corrector)
|
52
|
+
end
|
44
53
|
end
|
45
54
|
end
|
46
55
|
|
47
56
|
private
|
48
57
|
|
49
|
-
def relevant_diagnostic?(diagnostic)
|
50
|
-
diagnostic.reason == :ambiguous_prefix
|
51
|
-
end
|
52
|
-
|
53
58
|
def find_offense_node_by(diagnostic)
|
54
59
|
ast = processed_source.ast
|
55
60
|
ast.each_node(:splat, :block_pass, :kwsplat) do |node|
|
@@ -68,7 +73,7 @@ module RuboCop
|
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
71
|
-
def
|
76
|
+
def message(diagnostic)
|
72
77
|
operator = diagnostic.location.source
|
73
78
|
hash = AMBIGUITIES[operator]
|
74
79
|
format(MSG_FORMAT, hash)
|
@@ -21,25 +21,27 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# # With parentheses, there's no ambiguity.
|
23
23
|
# do_something(/pattern/i)
|
24
|
-
class AmbiguousRegexpLiteral <
|
25
|
-
|
24
|
+
class AmbiguousRegexpLiteral < Base
|
25
|
+
extend AutoCorrector
|
26
26
|
|
27
27
|
MSG = 'Ambiguous regexp literal. Parenthesize the method arguments ' \
|
28
28
|
"if it's surely a regexp literal, or add a whitespace to the " \
|
29
29
|
'right of the `/` if it should be a division.'
|
30
30
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
31
|
+
def on_new_investigation
|
32
|
+
processed_source.diagnostics.each do |diagnostic|
|
33
|
+
next unless diagnostic.reason == :ambiguous_literal
|
34
|
+
|
35
|
+
offense_node = find_offense_node_by(diagnostic)
|
36
|
+
|
37
|
+
add_offense(diagnostic.location, severity: diagnostic.level) do |corrector|
|
38
|
+
add_parentheses(offense_node, corrector)
|
39
|
+
end
|
34
40
|
end
|
35
41
|
end
|
36
42
|
|
37
43
|
private
|
38
44
|
|
39
|
-
def relevant_diagnostic?(diagnostic)
|
40
|
-
diagnostic.reason == :ambiguous_literal
|
41
|
-
end
|
42
|
-
|
43
45
|
def find_offense_node_by(diagnostic)
|
44
46
|
node = processed_source.ast.each_node(:regexp).find do |regexp_node|
|
45
47
|
regexp_node.source_range.begin_pos == diagnostic.location.begin_pos
|
@@ -47,10 +49,6 @@ module RuboCop
|
|
47
49
|
|
48
50
|
node.parent
|
49
51
|
end
|
50
|
-
|
51
|
-
def alternative_message(_diagnostic)
|
52
|
-
MSG
|
53
|
-
end
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
# do_something
|
35
35
|
# end
|
36
36
|
#
|
37
|
-
class AssignmentInCondition <
|
37
|
+
class AssignmentInCondition < Base
|
38
38
|
include SafeAssignment
|
39
39
|
|
40
40
|
MSG_WITH_SAFE_ASSIGNMENT_ALLOWED =
|
@@ -53,7 +53,7 @@ module RuboCop
|
|
53
53
|
next :skip_children if skip_children?(asgn_node)
|
54
54
|
next if allowed_construct?(asgn_node)
|
55
55
|
|
56
|
-
add_offense(asgn_node
|
56
|
+
add_offense(asgn_node.loc.operator)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
alias on_while on_if
|
@@ -14,7 +14,9 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# BigDecimal(123.456, 3)
|
16
16
|
#
|
17
|
-
class BigDecimalNew <
|
17
|
+
class BigDecimalNew < Base
|
18
|
+
extend AutoCorrector
|
19
|
+
|
18
20
|
MSG = '`%<double_colon>sBigDecimal.new()` is deprecated. ' \
|
19
21
|
'Use `%<double_colon>sBigDecimal()` instead.'
|
20
22
|
|
@@ -24,18 +26,16 @@ module RuboCop
|
|
24
26
|
PATTERN
|
25
27
|
|
26
28
|
def on_send(node)
|
27
|
-
return unless
|
29
|
+
return unless node.method?(:new)
|
30
|
+
|
31
|
+
big_decimal_new(node) do |captured_value|
|
28
32
|
double_colon = captured_value ? '::' : ''
|
29
33
|
message = format(MSG, double_colon: double_colon)
|
30
34
|
|
31
|
-
add_offense(node
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def autocorrect(node)
|
36
|
-
lambda do |corrector|
|
37
|
-
corrector.remove(node.loc.selector)
|
38
|
-
corrector.remove(node.loc.dot)
|
35
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
36
|
+
corrector.remove(node.loc.selector)
|
37
|
+
corrector.remove(node.loc.dot)
|
38
|
+
end
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for places where binary operator has identical operands.
|
7
|
+
#
|
8
|
+
# It covers arithmetic operators: `+`, `-`, `*`, `/`, `%`, `**`;
|
9
|
+
# comparison operators: `==`, `===`, `=~`, `>`, `>=`, `<`, `<=`;
|
10
|
+
# bitwise operators: `|`, `^`, `&`, `<<`, `>>`;
|
11
|
+
# boolean operators: `&&`, `||`
|
12
|
+
# and "spaceship" operator - `<=>`.
|
13
|
+
#
|
14
|
+
# This cop is marked as unsafe as it does not consider side effects when calling methods
|
15
|
+
# and thus can generate false positives:
|
16
|
+
# if wr.take_char == '\0' && wr.take_char == '\0'
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# # bad
|
20
|
+
# x.top >= x.top
|
21
|
+
#
|
22
|
+
# if a.x != 0 && a.x != 0
|
23
|
+
# do_something
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# def childs?
|
27
|
+
# left_child || left_child
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
class BinaryOperatorWithIdenticalOperands < Base
|
31
|
+
MSG = 'Binary operator `%<op>s` has identical operands.'
|
32
|
+
MATH_OPERATORS = %i[+ - * / % ** << >> | ^].to_set.freeze
|
33
|
+
|
34
|
+
def on_send(node)
|
35
|
+
return unless node.binary_operation?
|
36
|
+
|
37
|
+
lhs, operation, rhs = *node
|
38
|
+
return if MATH_OPERATORS.include?(node.method_name) && rhs.basic_literal?
|
39
|
+
|
40
|
+
add_offense(node, message: format(MSG, op: operation)) if lhs == rhs
|
41
|
+
end
|
42
|
+
|
43
|
+
def on_and(node)
|
44
|
+
add_offense(node, message: format(MSG, op: node.operator)) if node.lhs == node.rhs
|
45
|
+
end
|
46
|
+
alias on_or on_and
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -21,7 +21,9 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# # good
|
23
23
|
# false
|
24
|
-
class BooleanSymbol <
|
24
|
+
class BooleanSymbol < Base
|
25
|
+
extend AutoCorrector
|
26
|
+
|
25
27
|
MSG = 'Symbol with a boolean name - ' \
|
26
28
|
'you probably meant to use `%<boolean>s`.'
|
27
29
|
|
@@ -30,19 +32,22 @@ module RuboCop
|
|
30
32
|
def on_sym(node)
|
31
33
|
return unless boolean_symbol?(node)
|
32
34
|
|
33
|
-
add_offense(node, message: format(MSG, boolean: node.value))
|
35
|
+
add_offense(node, message: format(MSG, boolean: node.value)) do |corrector|
|
36
|
+
autocorrect(corrector, node)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
corrector.replace(node, boolean_literal)
|
40
|
+
private
|
41
|
+
|
42
|
+
def autocorrect(corrector, node)
|
43
|
+
boolean_literal = node.source.delete(':')
|
44
|
+
parent = node.parent
|
45
|
+
if parent&.pair_type? && node.equal?(parent.children[0])
|
46
|
+
corrector.remove(parent.loc.operator)
|
47
|
+
boolean_literal = "#{node.source} =>"
|
45
48
|
end
|
49
|
+
|
50
|
+
corrector.replace(node, boolean_literal)
|
46
51
|
end
|
47
52
|
end
|
48
53
|
end
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
# def cook(dry_ingredients = self.dry_ingredients)
|
48
48
|
# dry_ingredients.combine
|
49
49
|
# end
|
50
|
-
class CircularArgumentReference <
|
50
|
+
class CircularArgumentReference < Base
|
51
51
|
MSG = 'Circular argument reference - `%<arg_name>s`.'
|
52
52
|
|
53
53
|
def on_kwoptarg(node)
|
@@ -32,9 +32,14 @@ module RuboCop
|
|
32
32
|
# def some_method
|
33
33
|
# do_something
|
34
34
|
# end
|
35
|
-
class Debugger <
|
35
|
+
class Debugger < Base
|
36
36
|
MSG = 'Remove debugger entry point `%<source>s`.'
|
37
37
|
|
38
|
+
DEBUGGER_METHODS = %i[
|
39
|
+
debugger byebug remote_byebug pry remote_pry pry_remote console rescue
|
40
|
+
save_and_open_page save_and_open_screenshot save_screenshot irb
|
41
|
+
].to_set.freeze
|
42
|
+
|
38
43
|
def_node_matcher :kernel?, <<~PATTERN
|
39
44
|
{
|
40
45
|
(const nil? :Kernel)
|
@@ -57,6 +62,7 @@ module RuboCop
|
|
57
62
|
PATTERN
|
58
63
|
|
59
64
|
def on_send(node)
|
65
|
+
return unless DEBUGGER_METHODS.include?(node.method_name)
|
60
66
|
return unless debugger_call?(node) || binding_irb?(node)
|
61
67
|
|
62
68
|
add_offense(node)
|
@@ -20,7 +20,9 @@ module RuboCop
|
|
20
20
|
# File.exist?(some_path)
|
21
21
|
# Dir.exist?(some_path)
|
22
22
|
# block_given?
|
23
|
-
class DeprecatedClassMethods <
|
23
|
+
class DeprecatedClassMethods < Base
|
24
|
+
extend AutoCorrector
|
25
|
+
|
24
26
|
# Inner class to DeprecatedClassMethods.
|
25
27
|
# This class exists to add abstraction and clean naming to the
|
26
28
|
# objects that are going to be operated on.
|
@@ -60,20 +62,17 @@ module RuboCop
|
|
60
62
|
replacement: :block_given?)
|
61
63
|
].freeze
|
62
64
|
|
65
|
+
DEPRECATED_METHODS = DEPRECATED_METHODS_OBJECT.map(&:deprecated_method).freeze
|
66
|
+
|
63
67
|
def on_send(node)
|
68
|
+
return unless DEPRECATED_METHODS.include?(node.method_name)
|
69
|
+
|
64
70
|
check(node) do |data|
|
65
71
|
message = format(MSG, current: deprecated_method(data),
|
66
72
|
prefer: replacement_method(data))
|
67
73
|
|
68
|
-
add_offense(node
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def autocorrect(node)
|
73
|
-
lambda do |corrector|
|
74
|
-
check(node) do |data|
|
75
|
-
corrector.replace(node.loc.selector,
|
76
|
-
data.replacement_method.to_s)
|
74
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
75
|
+
corrector.replace(node.loc.selector, data.replacement_method.to_s)
|
77
76
|
end
|
78
77
|
end
|
79
78
|
end
|
@@ -37,8 +37,9 @@ module RuboCop
|
|
37
37
|
# # good
|
38
38
|
# OpenSSL::Digest.digest('SHA256', 'foo')
|
39
39
|
#
|
40
|
-
class DeprecatedOpenSSLConstant <
|
40
|
+
class DeprecatedOpenSSLConstant < Base
|
41
41
|
include RangeHelp
|
42
|
+
extend AutoCorrector
|
42
43
|
|
43
44
|
MSG = 'Use `%<constant>s.%<method>s(%<replacement_args>s)`' \
|
44
45
|
' instead of `%<original>s`.'
|
@@ -54,26 +55,29 @@ module RuboCop
|
|
54
55
|
|
55
56
|
def on_send(node)
|
56
57
|
return if node.arguments.any? { |arg| arg.variable? || arg.send_type? || arg.const_type? }
|
58
|
+
return unless algorithm_const(node)
|
57
59
|
|
58
|
-
|
60
|
+
message = message(node)
|
61
|
+
|
62
|
+
add_offense(node, message: message) do |corrector|
|
63
|
+
autocorrect(corrector, node)
|
64
|
+
end
|
59
65
|
end
|
60
66
|
|
61
|
-
|
67
|
+
private
|
68
|
+
|
69
|
+
def autocorrect(corrector, node)
|
62
70
|
algorithm_constant, = algorithm_const(node)
|
63
71
|
|
64
|
-
|
65
|
-
|
66
|
-
corrector.remove(algorithm_constant.loc.name)
|
72
|
+
corrector.remove(algorithm_constant.loc.double_colon)
|
73
|
+
corrector.remove(algorithm_constant.loc.name)
|
67
74
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
75
|
+
corrector.replace(
|
76
|
+
correction_range(node),
|
77
|
+
"#{node.loc.selector.source}(#{replacement_args(node)})"
|
78
|
+
)
|
73
79
|
end
|
74
80
|
|
75
|
-
private
|
76
|
-
|
77
81
|
def message(node)
|
78
82
|
algorithm_constant, = algorithm_const(node)
|
79
83
|
parent_constant = openssl_class(algorithm_constant)
|
@@ -49,10 +49,13 @@ module RuboCop
|
|
49
49
|
# end
|
50
50
|
#
|
51
51
|
# alias bar foo
|
52
|
-
class DuplicateMethods <
|
52
|
+
class DuplicateMethods < Base
|
53
53
|
MSG = 'Method `%<method>s` is defined at both %<defined>s and ' \
|
54
54
|
'%<current>s.'
|
55
55
|
|
56
|
+
METHOD_DEF_METHODS = %i[alias_method attr_reader attr_writer
|
57
|
+
attr_accessor attr].to_set.freeze
|
58
|
+
|
56
59
|
def initialize(config = nil, options = nil)
|
57
60
|
super
|
58
61
|
@definitions = {}
|
@@ -96,10 +99,10 @@ module RuboCop
|
|
96
99
|
PATTERN
|
97
100
|
|
98
101
|
def_node_matcher :sym_name, '(sym $_name)'
|
99
|
-
|
100
102
|
def on_send(node)
|
103
|
+
return unless METHOD_DEF_METHODS.include?(node.method_name)
|
104
|
+
|
101
105
|
if (name = alias_method?(node))
|
102
|
-
return unless name
|
103
106
|
return if node.ancestors.any?(&:if_type?)
|
104
107
|
return if possible_dsl?(node)
|
105
108
|
|
@@ -150,7 +153,7 @@ module RuboCop
|
|
150
153
|
end
|
151
154
|
message = message_for_dup(node, method_name)
|
152
155
|
|
153
|
-
add_offense(
|
156
|
+
add_offense(loc, message: message)
|
154
157
|
else
|
155
158
|
@definitions[method_name] = node
|
156
159
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks that there are no repeated exceptions
|
7
|
+
# used in 'rescue' expressions.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# begin
|
12
|
+
# something
|
13
|
+
# rescue FirstException
|
14
|
+
# handle_exception
|
15
|
+
# rescue FirstException
|
16
|
+
# handle_other_exception
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # good
|
20
|
+
# begin
|
21
|
+
# something
|
22
|
+
# rescue FirstException
|
23
|
+
# handle_exception
|
24
|
+
# rescue SecondException
|
25
|
+
# handle_other_exception
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
class DuplicateRescueException < Base
|
29
|
+
include RescueNode
|
30
|
+
|
31
|
+
MSG = 'Duplicate `rescue` exception detected.'
|
32
|
+
|
33
|
+
def on_rescue(node)
|
34
|
+
return if rescue_modifier?(node)
|
35
|
+
|
36
|
+
_body, *resbodies, _else = *node
|
37
|
+
|
38
|
+
resbodies.each_with_object(Set.new) do |resbody, previous|
|
39
|
+
rescued_exceptions = rescued_exceptions(resbody)
|
40
|
+
|
41
|
+
rescued_exceptions.each do |exception|
|
42
|
+
add_offense(exception) unless previous.add?(exception)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def rescued_exceptions(resbody)
|
50
|
+
rescue_group, = *resbody
|
51
|
+
if rescue_group
|
52
|
+
rescue_group.values
|
53
|
+
else
|
54
|
+
[]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|