rubocop 0.88.0 → 0.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/bin/rubocop-profile +1 -0
- data/config/default.yml +96 -16
- data/lib/rubocop.rb +16 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +2 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +2 -2
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/base.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +32 -11
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +3 -7
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +7 -4
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +2 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +4 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +27 -23
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +16 -19
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +25 -15
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +14 -16
- data/lib/rubocop/cop/mixin/alignment.rb +2 -1
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +37 -8
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +3 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
- data/lib/rubocop/cop/style/accessor_grouping.rb +23 -21
- data/lib/rubocop/cop/style/alias.rb +41 -36
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_join.rb +6 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +11 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -14
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +19 -16
- data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +6 -10
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/command_literal.rb +23 -24
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +12 -3
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +12 -12
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +7 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +6 -8
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -19
- data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +15 -16
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +5 -9
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +21 -20
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +21 -19
- data/lib/rubocop/cop/style/format_string_token.rb +5 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +8 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +10 -32
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +13 -13
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
- data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -0
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +23 -10
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +3 -13
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +2 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/options.rb +3 -3
- data/lib/rubocop/path_util.rb +19 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/rspec/expect_offense.rb +1 -1
- data/lib/rubocop/rspec/shared_contexts.rb +1 -5
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/target_finder.rb +12 -9
- data/lib/rubocop/version.rb +2 -2
- metadata +21 -8
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -30,8 +30,9 @@ module RuboCop
|
|
30
30
|
# bar
|
31
31
|
# SQL
|
32
32
|
#
|
33
|
-
class HeredocMethodCallPosition <
|
33
|
+
class HeredocMethodCallPosition < Base
|
34
34
|
include RangeHelp
|
35
|
+
extend AutoCorrector
|
35
36
|
|
36
37
|
MSG = 'Put a method call with a HEREDOC receiver on the ' \
|
37
38
|
'same line as the HEREDOC opening.'
|
@@ -41,25 +42,23 @@ module RuboCop
|
|
41
42
|
return unless heredoc
|
42
43
|
return if correctly_positioned?(node, heredoc)
|
43
44
|
|
44
|
-
add_offense(
|
45
|
+
add_offense(call_after_heredoc_range(heredoc)) do |corrector|
|
46
|
+
autocorrect(corrector, node, heredoc)
|
47
|
+
end
|
45
48
|
end
|
46
49
|
alias on_csend on_send
|
47
50
|
|
48
|
-
|
49
|
-
heredoc = heredoc_node_descendent_receiver(node)
|
51
|
+
private
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
def autocorrect(corrector, node, heredoc)
|
54
|
+
call_range = call_range_to_safely_reposition(node, heredoc)
|
55
|
+
return if call_range.nil?
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end
|
57
|
+
call_source = call_range.source.strip
|
58
|
+
corrector.remove(call_range)
|
59
|
+
corrector.insert_after(heredoc_begin_line_range(node), call_source)
|
59
60
|
end
|
60
61
|
|
61
|
-
private
|
62
|
-
|
63
62
|
def heredoc_node_descendent_receiver(node)
|
64
63
|
while send_node?(node)
|
65
64
|
return node.receiver if heredoc_node?(node.receiver)
|
@@ -148,7 +147,7 @@ module RuboCop
|
|
148
147
|
end
|
149
148
|
|
150
149
|
def trailing_comma?(call_source, call_line_source)
|
151
|
-
call_source
|
150
|
+
"#{call_source}," == call_line_source
|
152
151
|
end
|
153
152
|
end
|
154
153
|
end
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
# 'Item 1' \
|
23
23
|
# 'Item 2'
|
24
24
|
# ]
|
25
|
-
class ImplicitStringConcatenation <
|
25
|
+
class ImplicitStringConcatenation < Base
|
26
26
|
MSG = 'Combine %<string1>s and %<string2>s into a single string ' \
|
27
27
|
'literal, rather than using implicit string concatenation.'
|
28
28
|
FOR_ARRAY = ' Or, if they were intended to be separate array ' \
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
41
41
|
elsif node.parent&.send_type?
|
42
42
|
message << FOR_METHOD
|
43
43
|
end
|
44
|
-
add_offense(
|
44
|
+
add_offense(range, message: message)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -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,31 +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)
|
29
30
|
|
30
|
-
add_offense(node)
|
31
|
+
add_offense(node) do |corrector|
|
32
|
+
autocorrect(corrector, node)
|
33
|
+
end
|
31
34
|
end
|
32
35
|
|
33
|
-
|
34
|
-
lambda do |corrector|
|
35
|
-
starting_token, ending_token = if node.source.include?('"')
|
36
|
-
['%{', '}']
|
37
|
-
else
|
38
|
-
['"', '"']
|
39
|
-
end
|
36
|
+
private
|
40
37
|
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
def autocorrect(corrector, node)
|
39
|
+
starting_token, ending_token = if node.source.include?('"')
|
40
|
+
['%{', '}']
|
41
|
+
else
|
42
|
+
['"', '"']
|
43
|
+
end
|
44
|
+
|
45
|
+
corrector.replace(node.loc.begin, starting_token)
|
46
|
+
corrector.replace(node.loc.end, ending_token)
|
44
47
|
end
|
45
48
|
|
46
49
|
def heredoc?(node)
|
@@ -29,7 +29,7 @@ module RuboCop
|
|
29
29
|
# while true
|
30
30
|
# break if condition
|
31
31
|
# end
|
32
|
-
class LiteralAsCondition <
|
32
|
+
class LiteralAsCondition < Base
|
33
33
|
include RangeHelp
|
34
34
|
|
35
35
|
MSG = 'Literal `%<literal>s` appeared as a condition.'
|
@@ -60,7 +60,9 @@ module RuboCop
|
|
60
60
|
next unless when_node.conditions.all?(&:literal?)
|
61
61
|
|
62
62
|
range = when_conditions_range(when_node)
|
63
|
-
|
63
|
+
message = message(range)
|
64
|
+
|
65
|
+
add_offense(range, message: message)
|
64
66
|
end
|
65
67
|
end
|
66
68
|
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
|
+
METHOD_LIFECYCLE_CALLBACKS = %i[method_added method_removed method_undefined
|
49
|
+
singleton_method_added singleton_method_removed
|
50
|
+
singleton_method_undefined].freeze
|
51
|
+
|
52
|
+
CALLBACKS = (OBJECT_LIFECYCLE_CALLBACKS +
|
53
|
+
CLASS_LIFECYCLE_CALLBACKS +
|
54
|
+
METHOD_LIFECYCLE_CALLBACKS).to_set.freeze
|
55
|
+
|
56
|
+
def on_def(node)
|
57
|
+
return unless offender?(node)
|
58
|
+
|
59
|
+
if node.method?(:initialize)
|
60
|
+
add_offense(node, message: CONSTRUCTOR_MSG) if inside_class_with_stateful_parent?(node)
|
61
|
+
elsif callback_method_def?(node)
|
62
|
+
add_offense(node, message: CALLBACK_MSG)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def on_defs(node)
|
67
|
+
return if !callback_method_def?(node) || contains_super?(node)
|
68
|
+
|
69
|
+
add_offense(node, message: CALLBACK_MSG)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def offender?(node)
|
75
|
+
(node.method?(:initialize) || callback_method_def?(node)) && !contains_super?(node)
|
76
|
+
end
|
77
|
+
|
78
|
+
def callback_method_def?(node)
|
79
|
+
return unless CALLBACKS.include?(node.method_name)
|
80
|
+
|
81
|
+
node.each_ancestor(:class, :sclass, :module).first
|
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
|