rubocop 0.85.1 → 0.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +16 -4
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +227 -26
- data/lib/rubocop.rb +33 -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/init_dotfile.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 +2 -2
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +40 -68
- 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 +1 -3
- 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 +3 -3
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- 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.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +3 -3
- 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 +2 -37
- data/lib/rubocop/cop/layout/comment_indentation.rb +3 -3
- 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 +9 -16
- 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/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 +49 -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 +61 -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 +31 -25
- 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 -31
- 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 +13 -15
- 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 +1 -1
- 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 +5 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
- 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/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/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +1 -1
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +27 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +38 -9
- 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 +1 -1
- 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 +11 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
- data/lib/rubocop/cop/style/alias.rb +7 -3
- data/lib/rubocop/cop/style/array_coercion.rb +63 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +3 -2
- data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +144 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -4
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +217 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +21 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -3
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +5 -2
- data/lib/rubocop/cop/style/conditional_assignment.rb +11 -2
- data/lib/rubocop/cop/style/copyright.rb +3 -3
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +2 -2
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
- data/lib/rubocop/cop/style/documentation.rb +6 -6
- data/lib/rubocop/cop/style/each_with_object.rb +0 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +8 -6
- data/lib/rubocop/cop/style/empty_literal.rb +5 -5
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/encoding.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +4 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +6 -2
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +8 -10
- data/lib/rubocop/cop/style/float_division.rb +7 -10
- data/lib/rubocop/cop/style/format_string.rb +4 -0
- data/lib/rubocop/cop/style/format_string_token.rb +6 -5
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/guard_clause.rb +2 -2
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -3
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +8 -28
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +3 -4
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/missing_else.rb +1 -11
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +9 -2
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -5
- 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 +28 -12
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- 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/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 +3 -15
- data/lib/rubocop/cop/utils/format_string.rb +2 -3
- 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 +2 -1
- data/lib/rubocop/name_similarity.rb +7 -3
- data/lib/rubocop/options.rb +15 -8
- 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 +19 -16
- data/lib/rubocop/runner.rb +34 -33
- data/lib/rubocop/target_finder.rb +14 -11
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +2 -2
- 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
@@ -45,7 +45,7 @@ module RuboCop
|
|
45
45
|
# end
|
46
46
|
# end
|
47
47
|
# end
|
48
|
-
class IneffectiveAccessModifier <
|
48
|
+
class IneffectiveAccessModifier < Base
|
49
49
|
MSG = '`%<modifier>s` (on line %<line>d) does not make singleton ' \
|
50
50
|
'methods %<modifier>s. Use %<alternative>s instead.'
|
51
51
|
ALTERNATIVE_PRIVATE = '`private_class_method` or `private` inside a ' \
|
@@ -70,12 +70,8 @@ module RuboCop
|
|
70
70
|
def check_node(node)
|
71
71
|
return unless node&.begin_type?
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
ineffective_modifier(node, ignored_methods) do |defs_node, modifier|
|
76
|
-
add_offense(defs_node,
|
77
|
-
location: :keyword,
|
78
|
-
message: format_message(modifier))
|
73
|
+
ineffective_modifier(node) do |defs_node, modifier|
|
74
|
+
add_offense(defs_node.loc.keyword, message: format_message(modifier))
|
79
75
|
end
|
80
76
|
end
|
81
77
|
|
@@ -97,20 +93,24 @@ module RuboCop
|
|
97
93
|
alternative: alternative)
|
98
94
|
end
|
99
95
|
|
100
|
-
|
96
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
97
|
+
def ineffective_modifier(node, ignored_methods = nil, modifier = nil, &block)
|
101
98
|
node.each_child_node do |child|
|
102
99
|
case child.type
|
103
100
|
when :send
|
104
101
|
modifier = child if access_modifier?(child)
|
105
102
|
when :defs
|
103
|
+
ignored_methods ||= private_class_method_names(node)
|
106
104
|
next if correct_visibility?(child, modifier, ignored_methods)
|
107
105
|
|
108
106
|
yield child, modifier
|
109
107
|
when :kwbegin
|
108
|
+
ignored_methods ||= private_class_method_names(node)
|
110
109
|
ineffective_modifier(child, ignored_methods, modifier, &block)
|
111
110
|
end
|
112
111
|
end
|
113
112
|
end
|
113
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
114
114
|
|
115
115
|
def access_modifier?(node)
|
116
116
|
node.bare_access_modifier? && !node.method?(:module_function)
|
@@ -33,8 +33,9 @@ module RuboCop
|
|
33
33
|
# class C < StandardError; end
|
34
34
|
#
|
35
35
|
# C = Class.new(StandardError)
|
36
|
-
class InheritException <
|
36
|
+
class InheritException < Base
|
37
37
|
include ConfigurableEnforcedStyle
|
38
|
+
extend AutoCorrector
|
38
39
|
|
39
40
|
MSG = 'Inherit from `%<prefer>s` instead of `%<current>s`.'
|
40
41
|
PREFERRED_BASE_CLASS = {
|
@@ -65,19 +66,23 @@ module RuboCop
|
|
65
66
|
return unless node.parent_class &&
|
66
67
|
illegal_class_name?(node.parent_class)
|
67
68
|
|
68
|
-
|
69
|
+
message = message(node.parent_class)
|
70
|
+
|
71
|
+
add_offense(node.parent_class, message: message) do |corrector|
|
72
|
+
corrector.replace(node.parent_class, preferred_base_class)
|
73
|
+
end
|
69
74
|
end
|
70
75
|
|
71
76
|
def on_send(node)
|
77
|
+
return unless node.method?(:new)
|
78
|
+
|
72
79
|
constant = class_new_call?(node)
|
73
80
|
return unless constant && illegal_class_name?(constant)
|
74
81
|
|
75
|
-
|
76
|
-
end
|
82
|
+
message = message(constant)
|
77
83
|
|
78
|
-
|
79
|
-
|
80
|
-
corrector.replace(node, preferred_base_class)
|
84
|
+
add_offense(constant, message: message) do |corrector|
|
85
|
+
corrector.replace(constant, preferred_base_class)
|
81
86
|
end
|
82
87
|
end
|
83
88
|
|
@@ -16,18 +16,34 @@ module RuboCop
|
|
16
16
|
# # good
|
17
17
|
#
|
18
18
|
# foo = "something with #{interpolation} inside"
|
19
|
-
class InterpolationCheck <
|
19
|
+
class InterpolationCheck < Base
|
20
|
+
extend AutoCorrector
|
21
|
+
|
20
22
|
MSG = 'Interpolation in single quoted string detected. '\
|
21
23
|
'Use double quoted strings if you need interpolation.'
|
22
24
|
|
23
25
|
def on_str(node)
|
24
|
-
return if heredoc?(node)
|
25
|
-
|
26
26
|
parent = node.parent
|
27
27
|
return if parent && (parent.dstr_type? || parent.regexp_type?)
|
28
|
-
return unless /(?<!\\)#\{.*\}/.match?(node.source
|
28
|
+
return unless /(?<!\\)#\{.*\}/.match?(node.source)
|
29
|
+
return if heredoc?(node)
|
30
|
+
|
31
|
+
add_offense(node) do |corrector|
|
32
|
+
autocorrect(corrector, node)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def autocorrect(corrector, node)
|
39
|
+
starting_token, ending_token = if node.source.include?('"')
|
40
|
+
['%{', '}']
|
41
|
+
else
|
42
|
+
['"', '"']
|
43
|
+
end
|
29
44
|
|
30
|
-
|
45
|
+
corrector.replace(node.loc.begin, starting_token)
|
46
|
+
corrector.replace(node.loc.end, ending_token)
|
31
47
|
end
|
32
48
|
|
33
49
|
def heredoc?(node)
|
@@ -29,7 +29,9 @@ module RuboCop
|
|
29
29
|
# while true
|
30
30
|
# break if condition
|
31
31
|
# end
|
32
|
-
class LiteralAsCondition <
|
32
|
+
class LiteralAsCondition < Base
|
33
|
+
include RangeHelp
|
34
|
+
|
33
35
|
MSG = 'Literal `%<literal>s` appeared as a condition.'
|
34
36
|
|
35
37
|
def on_if(node)
|
@@ -57,7 +59,10 @@ module RuboCop
|
|
57
59
|
case_node.each_when do |when_node|
|
58
60
|
next unless when_node.conditions.all?(&:literal?)
|
59
61
|
|
60
|
-
|
62
|
+
range = when_conditions_range(when_node)
|
63
|
+
message = message(range)
|
64
|
+
|
65
|
+
add_offense(range, message: message)
|
61
66
|
end
|
62
67
|
end
|
63
68
|
end
|
@@ -129,6 +134,13 @@ module RuboCop
|
|
129
134
|
node.condition
|
130
135
|
end
|
131
136
|
end
|
137
|
+
|
138
|
+
def when_conditions_range(when_node)
|
139
|
+
range_between(
|
140
|
+
when_node.conditions.first.source_range.begin_pos,
|
141
|
+
when_node.conditions.last.source_range.end_pos
|
142
|
+
)
|
143
|
+
end
|
132
144
|
end
|
133
145
|
end
|
134
146
|
end
|
@@ -16,10 +16,11 @@ module RuboCop
|
|
16
16
|
# # good
|
17
17
|
#
|
18
18
|
# "result is 10"
|
19
|
-
class LiteralInInterpolation <
|
19
|
+
class LiteralInInterpolation < Base
|
20
20
|
include Interpolation
|
21
21
|
include RangeHelp
|
22
22
|
include PercentLiteral
|
23
|
+
extend AutoCorrector
|
23
24
|
|
24
25
|
MSG = 'Literal interpolation detected.'
|
25
26
|
COMPOSITE = %i[array hash pair irange erange].freeze
|
@@ -30,14 +31,13 @@ module RuboCop
|
|
30
31
|
return if special_keyword?(final_node)
|
31
32
|
return unless prints_as_self?(final_node)
|
32
33
|
|
33
|
-
add_offense(final_node)
|
34
|
-
|
34
|
+
add_offense(final_node) do |corrector|
|
35
|
+
return if final_node.dstr_type? # nested, fixed in next iteration
|
35
36
|
|
36
|
-
|
37
|
-
return if node.dstr_type? # nested, fixed in next iteration
|
37
|
+
value = autocorrected_value(final_node)
|
38
38
|
|
39
|
-
|
40
|
-
|
39
|
+
corrector.replace(final_node.parent, value)
|
40
|
+
end
|
41
41
|
end
|
42
42
|
|
43
43
|
private
|
@@ -42,7 +42,9 @@ module RuboCop
|
|
42
42
|
# do_something
|
43
43
|
# break if some_condition
|
44
44
|
# end
|
45
|
-
class Loop <
|
45
|
+
class Loop < Base
|
46
|
+
extend AutoCorrector
|
47
|
+
|
46
48
|
MSG = 'Use `Kernel#loop` with `break` rather than ' \
|
47
49
|
'`begin/end/until`(or `while`).'
|
48
50
|
|
@@ -57,7 +59,26 @@ module RuboCop
|
|
57
59
|
private
|
58
60
|
|
59
61
|
def register_offense(node)
|
60
|
-
|
62
|
+
body = node.body
|
63
|
+
|
64
|
+
add_offense(node.loc.keyword) do |corrector|
|
65
|
+
corrector.replace(body.loc.begin, 'loop do')
|
66
|
+
corrector.remove(keyword_and_condition_range(node))
|
67
|
+
corrector.insert_before(body.loc.end, build_break_line(node))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def keyword_and_condition_range(node)
|
72
|
+
node.body.loc.end.end.join(node.source_range.end)
|
73
|
+
end
|
74
|
+
|
75
|
+
def build_break_line(node)
|
76
|
+
conditional_keyword = node.while_post_type? ? 'unless' : 'if'
|
77
|
+
"break #{conditional_keyword} #{node.condition.source}\n#{indent(node)}"
|
78
|
+
end
|
79
|
+
|
80
|
+
def indent(node)
|
81
|
+
' ' * node.loc.column
|
61
82
|
end
|
62
83
|
end
|
63
84
|
end
|
@@ -42,7 +42,7 @@ module RuboCop
|
|
42
42
|
# # Including this, that's 3 lines on which the cop is disabled.
|
43
43
|
# # rubocop:enable Layout/SpaceAroundOperators
|
44
44
|
#
|
45
|
-
class MissingCopEnableDirective <
|
45
|
+
class MissingCopEnableDirective < Base
|
46
46
|
include RangeHelp
|
47
47
|
|
48
48
|
MSG = 'Re-enable %<cop>s cop with `# rubocop:enable` after ' \
|
@@ -50,7 +50,8 @@ module RuboCop
|
|
50
50
|
MSG_BOUND = 'Re-enable %<cop>s cop within %<max_range>s lines after ' \
|
51
51
|
'disabling it.'
|
52
52
|
|
53
|
-
|
53
|
+
# rubocop:disable Metrics/AbcSize
|
54
|
+
def on_new_investigation
|
54
55
|
max_range = cop_config['MaximumRangeSize']
|
55
56
|
processed_source.disabled_line_ranges.each do |cop, line_ranges|
|
56
57
|
line_ranges.each do |line_range|
|
@@ -61,12 +62,12 @@ module RuboCop
|
|
61
62
|
range = source_range(processed_source.buffer,
|
62
63
|
line_range.min,
|
63
64
|
(0..0))
|
64
|
-
|
65
|
-
|
66
|
-
message: message(max_range: max_range, cop: cop))
|
65
|
+
|
66
|
+
add_offense(range, message: message(max_range: max_range, cop: cop))
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
70
|
+
# rubocop:enable Metrics/AbcSize
|
70
71
|
|
71
72
|
private
|
72
73
|
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for the presence of constructors and lifecycle callbacks
|
7
|
+
# without calls to `super`.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# class Employee < Person
|
12
|
+
# def initialize(name, salary)
|
13
|
+
# @salary = salary
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# class Employee < Person
|
19
|
+
# def initialize(name, salary)
|
20
|
+
# super(name)
|
21
|
+
# @salary = salary
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# class Parent
|
27
|
+
# def self.inherited(base)
|
28
|
+
# do_something
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# # good
|
33
|
+
# class Parent
|
34
|
+
# def self.inherited(base)
|
35
|
+
# super
|
36
|
+
# do_something
|
37
|
+
# end
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
class MissingSuper < Base
|
41
|
+
CONSTRUCTOR_MSG = 'Call `super` to initialize state of the parent class.'
|
42
|
+
CALLBACK_MSG = 'Call `super` to invoke callback defined in the parent class.'
|
43
|
+
|
44
|
+
STATELESS_CLASSES = %w[BasicObject Object].freeze
|
45
|
+
|
46
|
+
OBJECT_LIFECYCLE_CALLBACKS = %i[method_missing respond_to_missing?].freeze
|
47
|
+
CLASS_LIFECYCLE_CALLBACKS = %i[inherited].freeze
|
48
|
+
MODULE_LIFECYCLE_CALLBACKS = %i[included extended prepended].freeze
|
49
|
+
|
50
|
+
def on_def(node)
|
51
|
+
return unless offender?(node)
|
52
|
+
|
53
|
+
if node.method?(:initialize)
|
54
|
+
add_offense(node, message: CONSTRUCTOR_MSG) if inside_class_with_stateful_parent?(node)
|
55
|
+
elsif callback_method_def?(node)
|
56
|
+
add_offense(node, message: CALLBACK_MSG)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def on_defs(node)
|
61
|
+
return if !callback_method_def?(node) || contains_super?(node)
|
62
|
+
|
63
|
+
add_offense(node, message: CALLBACK_MSG)
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def offender?(node)
|
69
|
+
(node.method?(:initialize) || callback_method_def?(node)) && !contains_super?(node)
|
70
|
+
end
|
71
|
+
|
72
|
+
def callback_method_def?(node)
|
73
|
+
method_name = node.method_name
|
74
|
+
|
75
|
+
if OBJECT_LIFECYCLE_CALLBACKS.include?(method_name) ||
|
76
|
+
CLASS_LIFECYCLE_CALLBACKS.include?(method_name)
|
77
|
+
|
78
|
+
node.each_ancestor(:class, :sclass, :module).first
|
79
|
+
elsif MODULE_LIFECYCLE_CALLBACKS.include?(method_name)
|
80
|
+
node.each_ancestor(:module).first
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def contains_super?(node)
|
85
|
+
node.each_descendant(:super, :zsuper).any?
|
86
|
+
end
|
87
|
+
|
88
|
+
def inside_class_with_stateful_parent?(node)
|
89
|
+
class_node = node.each_ancestor(:class).first
|
90
|
+
class_node&.parent_class && !stateless_class?(class_node.parent_class)
|
91
|
+
end
|
92
|
+
|
93
|
+
def stateless_class?(node)
|
94
|
+
STATELESS_CLASSES.include?(node.const_name)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -21,7 +21,9 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# x < y && y < z
|
23
23
|
# 10 <= x && x <= 20
|
24
|
-
class MultipleComparison <
|
24
|
+
class MultipleComparison < Base
|
25
|
+
extend AutoCorrector
|
26
|
+
|
25
27
|
MSG = 'Use the `&&` operator to compare multiple values.'
|
26
28
|
|
27
29
|
def_node_matcher :multiple_compare?, <<~PATTERN
|
@@ -29,16 +31,11 @@ module RuboCop
|
|
29
31
|
PATTERN
|
30
32
|
|
31
33
|
def on_send(node)
|
32
|
-
return unless multiple_compare?(node)
|
33
|
-
|
34
|
-
add_offense(node)
|
35
|
-
end
|
34
|
+
return unless (center = multiple_compare?(node))
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
new_center = "#{center.source} && #{center.source}"
|
36
|
+
add_offense(node) do |corrector|
|
37
|
+
new_center = "#{center.source} && #{center.source}"
|
40
38
|
|
41
|
-
lambda do |corrector|
|
42
39
|
corrector.replace(center, new_center)
|
43
40
|
end
|
44
41
|
end
|
@@ -54,36 +54,30 @@ module RuboCop
|
|
54
54
|
# end
|
55
55
|
# end
|
56
56
|
# end
|
57
|
-
class NestedMethodDefinition <
|
57
|
+
class NestedMethodDefinition < Base
|
58
58
|
MSG = 'Method definitions must not be nested. ' \
|
59
59
|
'Use `lambda` instead.'
|
60
60
|
|
61
61
|
def on_def(node)
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
66
|
-
alias on_defs on_def
|
67
|
-
|
68
|
-
private
|
62
|
+
subject, = *node
|
63
|
+
return if node.defs_type? && subject.lvar_type?
|
69
64
|
|
70
|
-
|
71
|
-
|
72
|
-
if child.def_type?
|
73
|
-
yield child
|
74
|
-
elsif child.defs_type?
|
75
|
-
subject, = *child
|
76
|
-
next if subject.lvar_type?
|
65
|
+
def_ancestor = node.each_ancestor(:def, :defs).first
|
66
|
+
return unless def_ancestor
|
77
67
|
|
78
|
-
|
79
|
-
|
80
|
-
|
68
|
+
within_scoping_def =
|
69
|
+
node.each_ancestor(:block, :sclass).any? do |ancestor|
|
70
|
+
scoping_method_call?(ancestor)
|
81
71
|
end
|
82
|
-
|
72
|
+
|
73
|
+
add_offense(node) if def_ancestor && !within_scoping_def
|
83
74
|
end
|
75
|
+
alias on_defs on_def
|
76
|
+
|
77
|
+
private
|
84
78
|
|
85
79
|
def scoping_method_call?(child)
|
86
|
-
eval_call?(child) || exec_call?(child) ||
|
80
|
+
child.sclass_type? || eval_call?(child) || exec_call?(child) ||
|
87
81
|
class_or_module_or_struct_new_call?(child)
|
88
82
|
end
|
89
83
|
|
@@ -96,7 +90,7 @@ module RuboCop
|
|
96
90
|
PATTERN
|
97
91
|
|
98
92
|
def_node_matcher :class_or_module_or_struct_new_call?, <<~PATTERN
|
99
|
-
(block (send (const nil? {:Class :Module :Struct}) :new ...) ...)
|
93
|
+
(block (send (const {nil? cbase} {:Class :Module :Struct}) :new ...) ...)
|
100
94
|
PATTERN
|
101
95
|
end
|
102
96
|
end
|