rubocop 0.85.1 → 0.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +16 -4
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +227 -26
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +3 -3
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +2 -4
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +21 -4
- data/lib/rubocop/config_loader.rb +41 -69
- data/lib/rubocop/config_loader_resolver.rb +4 -4
- data/lib/rubocop/config_obsoletion.rb +6 -2
- data/lib/rubocop/config_store.rb +4 -0
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +14 -24
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +407 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +47 -50
- data/lib/rubocop/cop/cop.rb +85 -236
- data/lib/rubocop/cop/corrector.rb +38 -115
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +39 -13
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +3 -3
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
- data/lib/rubocop/cop/layout/class_structure.rb +5 -44
- data/lib/rubocop/cop/layout/comment_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +2 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +17 -7
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +4 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +21 -17
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -5
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +21 -5
- data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +15 -21
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +84 -13
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +12 -13
- data/lib/rubocop/cop/lint/percent_string_array.rb +14 -13
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +14 -13
- data/lib/rubocop/cop/lint/raise_exception.rb +15 -5
- data/lib/rubocop/cop/lint/rand_one.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +43 -40
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -11
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -2
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +10 -2
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/syntax.rb +11 -26
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +9 -4
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +26 -16
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +24 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +26 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +37 -4
- data/lib/rubocop/cop/metrics/method_length.rb +25 -2
- data/lib/rubocop/cop/metrics/module_length.rb +26 -3
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +47 -4
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +14 -16
- data/lib/rubocop/cop/mixin/alignment.rb +2 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +26 -5
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +19 -5
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +27 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -27
- data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -5
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +12 -17
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -6
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +4 -4
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +4 -6
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -3
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -10
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
- data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
- data/lib/rubocop/cop/style/alias.rb +41 -36
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_coercion.rb +63 -0
- data/lib/rubocop/cop/style/array_join.rb +6 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +11 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
- data/lib/rubocop/cop/style/bare_percent_literals.rb +11 -13
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +141 -0
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +25 -27
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +220 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +15 -12
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +24 -7
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/command_literal.rb +24 -25
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +12 -3
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +15 -15
- data/lib/rubocop/cop/style/date_time.rb +2 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +9 -12
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +8 -10
- data/lib/rubocop/cop/style/documentation.rb +8 -10
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -19
- data/lib/rubocop/cop/style/empty_case_condition.rb +27 -26
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +20 -21
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +6 -10
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -22
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +9 -11
- data/lib/rubocop/cop/style/float_division.rb +8 -11
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +21 -19
- data/lib/rubocop/cop/style/format_string_token.rb +10 -12
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +20 -42
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +11 -3
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +23 -33
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +11 -21
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +5 -11
- data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -8
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +27 -24
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +5 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +18 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -2
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +4 -3
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +23 -32
- data/lib/rubocop/cop/style/redundant_self.rb +6 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +3 -1
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +23 -2
- data/lib/rubocop/cop/style/symbol_array.rb +6 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -8
- data/lib/rubocop/cop/team.rb +98 -82
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +5 -15
- data/lib/rubocop/cop/utils/format_string.rb +2 -3
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +7 -5
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/file_finder.rb +12 -12
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -3
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +7 -3
- data/lib/rubocop/options.rb +18 -11
- data/lib/rubocop/path_util.rb +19 -19
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/rake_task.rb +7 -9
- data/lib/rubocop/result_cache.rb +12 -8
- data/lib/rubocop/rspec/cop_helper.rb +4 -4
- data/lib/rubocop/rspec/expect_offense.rb +63 -22
- data/lib/rubocop/rspec/shared_contexts.rb +16 -17
- data/lib/rubocop/runner.rb +35 -34
- data/lib/rubocop/target_finder.rb +14 -11
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +2 -2
- data/lib/rubocop.rb +33 -5
- metadata +49 -11
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -35
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Legacy
|
|
6
|
+
# Legacy support for Corrector#corrections
|
|
7
|
+
# See https://docs.rubocop.org/rubocop/cop_api_v1_changelog.html
|
|
8
|
+
class CorrectionsProxy
|
|
9
|
+
def initialize(corrector)
|
|
10
|
+
@corrector = corrector
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def <<(callable)
|
|
14
|
+
suppress_clobbering do
|
|
15
|
+
@corrector.transaction do
|
|
16
|
+
callable.call(@corrector)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def empty?
|
|
22
|
+
@corrector.empty?
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def concat(corrections)
|
|
26
|
+
if corrections.is_a?(CorrectionsProxy)
|
|
27
|
+
suppress_clobbering do
|
|
28
|
+
corrector.merge!(corrections.corrector)
|
|
29
|
+
end
|
|
30
|
+
else
|
|
31
|
+
corrections.each { |correction| self << correction }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
protected
|
|
36
|
+
|
|
37
|
+
attr_reader :corrector
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def suppress_clobbering
|
|
42
|
+
yield
|
|
43
|
+
rescue ::Parser::ClobberingError
|
|
44
|
+
# ignore Clobbering errors
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Legacy
|
|
6
|
+
# Legacy Corrector for v0 API support.
|
|
7
|
+
# See https://docs.rubocop.org/rubocop/cop_api_v1_changelog.html
|
|
8
|
+
class Corrector < RuboCop::Cop::Corrector
|
|
9
|
+
# Support legacy second argument
|
|
10
|
+
def initialize(source, corr = [])
|
|
11
|
+
super(source)
|
|
12
|
+
if corr.is_a?(CorrectionsProxy)
|
|
13
|
+
merge!(corr.send(:corrector))
|
|
14
|
+
else
|
|
15
|
+
# warn "Corrector.new with corrections is deprecated." unless corr.empty? TODO
|
|
16
|
+
corr.each do |c|
|
|
17
|
+
corrections << c
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def corrections
|
|
23
|
+
# warn "#corrections is deprecated. Open an issue if you have a valid usecase." TODO
|
|
24
|
+
CorrectionsProxy.new(self)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -24,18 +24,21 @@ module RuboCop
|
|
|
24
24
|
# # good
|
|
25
25
|
# # Lambda arguments require no disambiguation
|
|
26
26
|
# foo = ->(bar) { bar.baz }
|
|
27
|
-
class AmbiguousBlockAssociation <
|
|
27
|
+
class AmbiguousBlockAssociation < Base
|
|
28
28
|
MSG = 'Parenthesize the param `%<param>s` to make sure that the ' \
|
|
29
29
|
'block will be associated with the `%<method>s` method ' \
|
|
30
30
|
'call.'
|
|
31
31
|
|
|
32
32
|
def on_send(node)
|
|
33
|
-
return
|
|
34
|
-
node.last_argument.lambda? || allowed_method?(node)
|
|
33
|
+
return unless node.arguments?
|
|
35
34
|
|
|
36
35
|
return unless ambiguous_block_association?(node)
|
|
36
|
+
return if node.parenthesized? ||
|
|
37
|
+
node.last_argument.lambda? || allowed_method?(node)
|
|
38
|
+
|
|
39
|
+
message = message(node)
|
|
37
40
|
|
|
38
|
-
add_offense(node)
|
|
41
|
+
add_offense(node, message: message)
|
|
39
42
|
end
|
|
40
43
|
alias on_csend on_send
|
|
41
44
|
|
|
@@ -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)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Lint
|
|
6
|
+
# Check that certain constants are fully qualified.
|
|
7
|
+
#
|
|
8
|
+
# This is not enabled by default because it would mark a lot of offenses
|
|
9
|
+
# unnecessarily.
|
|
10
|
+
#
|
|
11
|
+
# Generally, gems should fully qualify all constants to avoid conflicts with
|
|
12
|
+
# the code that uses the gem. Enable this cop without using `Only`/`Ignore`
|
|
13
|
+
#
|
|
14
|
+
# Large projects will over time end up with one or two constant names that
|
|
15
|
+
# are problematic because of a conflict with a library or just internally
|
|
16
|
+
# using the same name a namespace and a class. To avoid too many unnecessary
|
|
17
|
+
# offenses, Enable this cop with `Only: [The, Constant, Names, Causing, Issues]`
|
|
18
|
+
#
|
|
19
|
+
# @example
|
|
20
|
+
# # By default checks every constant
|
|
21
|
+
#
|
|
22
|
+
# # bad
|
|
23
|
+
# User
|
|
24
|
+
#
|
|
25
|
+
# # bad
|
|
26
|
+
# User::Login
|
|
27
|
+
#
|
|
28
|
+
# # good
|
|
29
|
+
# ::User
|
|
30
|
+
#
|
|
31
|
+
# # good
|
|
32
|
+
# ::User::Login
|
|
33
|
+
#
|
|
34
|
+
# @example Only: ['Login']
|
|
35
|
+
# # Restrict this cop to only being concerned about certain constants
|
|
36
|
+
#
|
|
37
|
+
# # bad
|
|
38
|
+
# Login
|
|
39
|
+
#
|
|
40
|
+
# # good
|
|
41
|
+
# ::Login
|
|
42
|
+
#
|
|
43
|
+
# # good
|
|
44
|
+
# User::Login
|
|
45
|
+
#
|
|
46
|
+
# @example Ignore: ['Login']
|
|
47
|
+
# # Restrict this cop not being concerned about certain constants
|
|
48
|
+
#
|
|
49
|
+
# # bad
|
|
50
|
+
# User
|
|
51
|
+
#
|
|
52
|
+
# # good
|
|
53
|
+
# ::User::Login
|
|
54
|
+
#
|
|
55
|
+
# # good
|
|
56
|
+
# Login
|
|
57
|
+
#
|
|
58
|
+
class ConstantResolution < Base
|
|
59
|
+
MSG = 'Fully qualify this constant to avoid possibly ambiguous resolution.'
|
|
60
|
+
|
|
61
|
+
def_node_matcher :unqualified_const?, <<~PATTERN
|
|
62
|
+
(const nil? #const_name?)
|
|
63
|
+
PATTERN
|
|
64
|
+
|
|
65
|
+
def on_const(node)
|
|
66
|
+
return unless unqualified_const?(node)
|
|
67
|
+
|
|
68
|
+
add_offense(node)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
def const_name?(name)
|
|
74
|
+
name = name.to_s
|
|
75
|
+
(allowed_names.empty? || allowed_names.include?(name)) &&
|
|
76
|
+
!ignored_names.include?(name)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def allowed_names
|
|
80
|
+
cop_config['Only']
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def ignored_names
|
|
84
|
+
cop_config['Ignore']
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -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
|
|
@@ -15,7 +15,7 @@ module RuboCop
|
|
|
15
15
|
# OpenSSL::Cipher::AES.new(128, :GCM)
|
|
16
16
|
#
|
|
17
17
|
# # good
|
|
18
|
-
# OpenSSL::Cipher.new('
|
|
18
|
+
# OpenSSL::Cipher.new('aes-128-gcm')
|
|
19
19
|
#
|
|
20
20
|
# @example
|
|
21
21
|
#
|
|
@@ -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)
|
|
@@ -127,9 +131,9 @@ module RuboCop
|
|
|
127
131
|
end
|
|
128
132
|
|
|
129
133
|
def build_cipher_arguments(node, algorithm_name)
|
|
130
|
-
algorithm_parts = algorithm_name.split('-')
|
|
131
|
-
size_and_mode = sanitize_arguments(node.arguments)
|
|
132
|
-
"'#{(algorithm_parts + size_and_mode + ['
|
|
134
|
+
algorithm_parts = algorithm_name.downcase.split('-')
|
|
135
|
+
size_and_mode = sanitize_arguments(node.arguments).map(&:downcase)
|
|
136
|
+
"'#{(algorithm_parts + size_and_mode + ['cbc']).take(3).join('-')}'"
|
|
133
137
|
end
|
|
134
138
|
end
|
|
135
139
|
end
|
|
@@ -22,7 +22,9 @@ module RuboCop
|
|
|
22
22
|
# def initialize
|
|
23
23
|
# @x = 1
|
|
24
24
|
# end
|
|
25
|
-
class DisjunctiveAssignmentInConstructor <
|
|
25
|
+
class DisjunctiveAssignmentInConstructor < Base
|
|
26
|
+
extend AutoCorrector
|
|
27
|
+
|
|
26
28
|
MSG = 'Unnecessary disjunctive assignment. Use plain assignment.'
|
|
27
29
|
|
|
28
30
|
def on_def(node)
|
|
@@ -73,7 +75,11 @@ module RuboCop
|
|
|
73
75
|
# @param [Node] node a disjunctive assignment
|
|
74
76
|
def check_disjunctive_assignment(node)
|
|
75
77
|
lhs = node.child_nodes.first
|
|
76
|
-
|
|
78
|
+
return unless lhs.ivasgn_type?
|
|
79
|
+
|
|
80
|
+
add_offense(node.loc.operator) do |corrector|
|
|
81
|
+
corrector.replace(node.loc.operator, '=')
|
|
82
|
+
end
|
|
77
83
|
end
|
|
78
84
|
end
|
|
79
85
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Lint
|
|
6
|
+
# This cop checks that there are no repeated conditions used in if 'elsif'.
|
|
7
|
+
#
|
|
8
|
+
# @example
|
|
9
|
+
# # bad
|
|
10
|
+
# if x == 1
|
|
11
|
+
# do_something
|
|
12
|
+
# elsif x == 1
|
|
13
|
+
# do_something_else
|
|
14
|
+
# end
|
|
15
|
+
#
|
|
16
|
+
# # good
|
|
17
|
+
# if x == 1
|
|
18
|
+
# do_something
|
|
19
|
+
# elsif x == 2
|
|
20
|
+
# do_something_else
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
class DuplicateElsifCondition < Base
|
|
24
|
+
MSG = 'Duplicate `elsif` condition detected.'
|
|
25
|
+
|
|
26
|
+
def on_if(node)
|
|
27
|
+
previous = []
|
|
28
|
+
while node.if? || node.elsif?
|
|
29
|
+
condition = node.condition
|
|
30
|
+
add_offense(condition) if previous.include?(condition)
|
|
31
|
+
previous << condition
|
|
32
|
+
node = node.else_branch
|
|
33
|
+
break unless node&.if_type?
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|