rubocop 0.86.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 +32 -0
- data/config/default.yml +198 -25
- data/lib/rubocop.rb +30 -5
- data/lib/rubocop/cli.rb +2 -4
- 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/show_cops.rb +3 -3
- 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 +41 -69
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- 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 +38 -12
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +1 -1
- 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/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 +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 +1 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
- 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 +16 -6
- 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_block_parameters.rb +22 -27
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -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 +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 +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 +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 +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 +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 +3 -3
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +41 -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 +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 +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 +2 -1
- 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 +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -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/enforce_superclass.rb +3 -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_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/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
- data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -24
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +10 -15
- 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 +3 -3
- 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_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 +10 -12
- 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 +23 -23
- 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 +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 +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 +23 -24
- 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 +13 -4
- 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 +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 +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 +20 -21
- 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 +23 -22
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +7 -9
- 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 +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 +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 +3 -3
- 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 +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 +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 +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 +27 -24
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
- 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 +1 -1
- 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 +26 -7
- 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 +7 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +11 -11
- 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/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 +3 -3
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
- 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/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 +3 -13
- data/lib/rubocop/cop/utils/format_string.rb +1 -2
- 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 +7 -5
- 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 +2 -2
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -3
- data/lib/rubocop/options.rb +18 -11
- data/lib/rubocop/path_util.rb +17 -17
- 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 +53 -22
- data/lib/rubocop/rspec/shared_contexts.rb +16 -17
- data/lib/rubocop/runner.rb +35 -34
- data/lib/rubocop/target_finder.rb +13 -10
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +2 -2
- metadata +40 -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
@@ -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
|
@@ -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
|
|
@@ -126,7 +129,7 @@ module RuboCop
|
|
126
129
|
end
|
127
130
|
|
128
131
|
def message_for_dup(node, method_name)
|
129
|
-
format(MSG, method: method_name, defined: @definitions[method_name],
|
132
|
+
format(MSG, method: method_name, defined: source_location(@definitions[method_name]),
|
130
133
|
current: source_location(node))
|
131
134
|
end
|
132
135
|
|
@@ -150,9 +153,9 @@ 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
|
-
@definitions[method_name] =
|
158
|
+
@definitions[method_name] = node
|
156
159
|
end
|
157
160
|
end
|
158
161
|
|
@@ -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
|
@@ -21,7 +21,7 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# num = 0
|
23
23
|
# sum = numbers.each_with_object(num) { |e, a| a += e }
|
24
|
-
class EachWithObjectArgument <
|
24
|
+
class EachWithObjectArgument < Base
|
25
25
|
MSG = 'The argument to each_with_object cannot be immutable.'
|
26
26
|
|
27
27
|
def_node_matcher :each_with_object?, <<~PATTERN
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.
|
7
|
+
# @example
|
8
|
+
# # bad
|
9
|
+
# if condition
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# unless condition
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # bad
|
17
|
+
# if condition
|
18
|
+
# do_something
|
19
|
+
# elsif other_condition
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# if condition
|
24
|
+
# do_something
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# # good
|
28
|
+
# unless condition
|
29
|
+
# do_something
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# # good
|
33
|
+
# if condition
|
34
|
+
# do_something
|
35
|
+
# elsif other_condition
|
36
|
+
# do_something_else
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# @example AllowComments: true (default)
|
40
|
+
# # good
|
41
|
+
# if condition
|
42
|
+
# do_something
|
43
|
+
# elsif other_condition
|
44
|
+
# # noop
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# @example AllowComments: false
|
48
|
+
# # bad
|
49
|
+
# if condition
|
50
|
+
# do_something
|
51
|
+
# elsif other_condition
|
52
|
+
# # noop
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
class EmptyConditionalBody < Base
|
56
|
+
MSG = 'Avoid `%<keyword>s` branches without a body.'
|
57
|
+
|
58
|
+
def on_if(node)
|
59
|
+
return if node.body
|
60
|
+
return if cop_config['AllowComments'] && comment_lines?(node)
|
61
|
+
|
62
|
+
add_offense(node, message: format(MSG, keyword: node.keyword))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -42,15 +42,15 @@ module RuboCop
|
|
42
42
|
# ensure
|
43
43
|
# do_something_else
|
44
44
|
# end
|
45
|
-
class EmptyEnsure <
|
45
|
+
class EmptyEnsure < Base
|
46
|
+
extend AutoCorrector
|
47
|
+
|
46
48
|
MSG = 'Empty `ensure` block detected.'
|
47
49
|
|
48
50
|
def on_ensure(node)
|
49
|
-
|
50
|
-
end
|
51
|
+
return if node.body
|
51
52
|
|
52
|
-
|
53
|
-
lambda do |corrector|
|
53
|
+
add_offense(node.loc.keyword) do |corrector|
|
54
54
|
corrector.remove(node.loc.keyword)
|
55
55
|
end
|
56
56
|
end
|
@@ -22,13 +22,13 @@ module RuboCop
|
|
22
22
|
# if (some_expression)
|
23
23
|
# bar
|
24
24
|
# end
|
25
|
-
class EmptyExpression <
|
25
|
+
class EmptyExpression < Base
|
26
26
|
MSG = 'Avoid empty expressions.'
|
27
27
|
|
28
28
|
def on_begin(node)
|
29
29
|
return unless empty_expression?(node)
|
30
30
|
|
31
|
-
add_offense(node
|
31
|
+
add_offense(node)
|
32
32
|
end
|
33
33
|
|
34
34
|
private
|
@@ -16,18 +16,17 @@ module RuboCop
|
|
16
16
|
# # good
|
17
17
|
#
|
18
18
|
# "result is #{some_result}"
|
19
|
-
class EmptyInterpolation <
|
19
|
+
class EmptyInterpolation < Base
|
20
20
|
include Interpolation
|
21
|
+
extend AutoCorrector
|
21
22
|
|
22
23
|
MSG = 'Empty interpolation detected.'
|
23
24
|
|
24
25
|
def on_interpolation(begin_node)
|
25
|
-
|
26
|
-
end
|
26
|
+
return unless begin_node.children.empty?
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
collector.remove(node.loc.expression)
|
28
|
+
add_offense(begin_node) do |corrector|
|
29
|
+
corrector.remove(begin_node.loc.expression)
|
31
30
|
end
|
32
31
|
end
|
33
32
|
end
|
@@ -44,7 +44,7 @@ module RuboCop
|
|
44
44
|
# # do nothing
|
45
45
|
# end
|
46
46
|
#
|
47
|
-
class EmptyWhen <
|
47
|
+
class EmptyWhen < Base
|
48
48
|
MSG = 'Avoid `when` branches without a body.'
|
49
49
|
|
50
50
|
def on_case(node)
|
@@ -52,7 +52,7 @@ module RuboCop
|
|
52
52
|
next if when_node.body
|
53
53
|
next if cop_config['AllowComments'] && comment_lines?(node)
|
54
54
|
|
55
|
-
add_offense(when_node
|
55
|
+
add_offense(when_node)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -4,57 +4,55 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Lint
|
6
6
|
# This cop checks for `return` from an `ensure` block.
|
7
|
-
#
|
8
|
-
#
|
7
|
+
# `return` from an ensure block is a dangerous code smell as it
|
8
|
+
# will take precedence over any exception being raised,
|
9
9
|
# and the exception will be silently thrown away as if it were rescued.
|
10
10
|
#
|
11
|
+
# If you want to rescue some (or all) exceptions, best to do it explicitly
|
12
|
+
#
|
11
13
|
# @example
|
12
14
|
#
|
13
15
|
# # bad
|
14
16
|
#
|
15
|
-
#
|
17
|
+
# def foo
|
16
18
|
# do_something
|
17
19
|
# ensure
|
18
|
-
#
|
19
|
-
# return
|
20
|
+
# cleanup
|
21
|
+
# return self
|
20
22
|
# end
|
21
23
|
#
|
22
24
|
# @example
|
23
25
|
#
|
24
26
|
# # good
|
25
27
|
#
|
26
|
-
#
|
28
|
+
# def foo
|
27
29
|
# do_something
|
30
|
+
# self
|
31
|
+
# ensure
|
32
|
+
# cleanup
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# # also good
|
36
|
+
#
|
37
|
+
# def foo
|
38
|
+
# begin
|
39
|
+
# do_something
|
40
|
+
# rescue SomeException
|
41
|
+
# # Let's ignore this exception
|
42
|
+
# end
|
43
|
+
# self
|
28
44
|
# ensure
|
29
|
-
#
|
45
|
+
# cleanup
|
30
46
|
# end
|
31
|
-
class EnsureReturn <
|
47
|
+
class EnsureReturn < Base
|
48
|
+
extend AutoCorrector
|
32
49
|
include RangeHelp
|
33
50
|
|
34
51
|
MSG = 'Do not return from an `ensure` block.'
|
35
52
|
|
36
53
|
def on_ensure(node)
|
37
|
-
|
38
|
-
|
39
|
-
return unless ensure_body
|
40
|
-
|
41
|
-
ensure_body.each_node(:return) do |return_node|
|
42
|
-
next if return_node.arguments.size >= 2
|
43
|
-
|
44
|
-
add_offense(return_node, location: :keyword)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def autocorrect(node)
|
49
|
-
lambda do |corrector|
|
50
|
-
if node.arguments?
|
51
|
-
corrector.replace(node, node.source.gsub(/return\s*/, ''))
|
52
|
-
else
|
53
|
-
range = range_by_whole_lines(
|
54
|
-
node.loc.expression, include_final_newline: true
|
55
|
-
)
|
56
|
-
corrector.remove(range)
|
57
|
-
end
|
54
|
+
node.body&.each_node(:return) do |return_node|
|
55
|
+
add_offense(return_node)
|
58
56
|
end
|
59
57
|
end
|
60
58
|
end
|