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
@@ -38,7 +38,7 @@ module RuboCop
|
|
38
38
|
# end
|
39
39
|
# end
|
40
40
|
#
|
41
|
-
class NonLocalExitFromIterator <
|
41
|
+
class NonLocalExitFromIterator < Base
|
42
42
|
MSG = 'Non-local exit from iterator, without return value. ' \
|
43
43
|
'`next`, `break`, `Array#find`, `Array#any?`, etc. ' \
|
44
44
|
'is preferred.'
|
@@ -57,7 +57,7 @@ module RuboCop
|
|
57
57
|
next unless node.arguments?
|
58
58
|
|
59
59
|
if chained_send?(node.send_node)
|
60
|
-
add_offense(return_node
|
60
|
+
add_offense(return_node.loc.keyword)
|
61
61
|
break
|
62
62
|
end
|
63
63
|
end
|
@@ -20,7 +20,9 @@ module RuboCop
|
|
20
20
|
# Integer('10', 10)
|
21
21
|
# Float('10.2')
|
22
22
|
# Complex('10')
|
23
|
-
class NumberConversion <
|
23
|
+
class NumberConversion < Base
|
24
|
+
extend AutoCorrector
|
25
|
+
|
24
26
|
CONVERSION_METHOD_CLASS_MAPPING = {
|
25
27
|
to_i: "#{Integer.name}(%<number_object>s, 10)",
|
26
28
|
to_f: "#{Float.name}(%<number_object>s)",
|
@@ -49,14 +51,9 @@ module RuboCop
|
|
49
51
|
to_method: to_method,
|
50
52
|
corrected_method: correct_method(node, receiver)
|
51
53
|
)
|
52
|
-
add_offense(node, message: message)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
def autocorrect(node)
|
57
|
-
lambda do |corrector|
|
58
|
-
corrector.replace(node,
|
59
|
-
correct_method(node, node.receiver))
|
54
|
+
add_offense(node, message: message) do |corrector|
|
55
|
+
corrector.replace(node, correct_method(node, node.receiver))
|
56
|
+
end
|
60
57
|
end
|
61
58
|
end
|
62
59
|
|
@@ -27,13 +27,14 @@ module RuboCop
|
|
27
27
|
# # frozen_string_literal: true
|
28
28
|
# p [''.frozen?, ''.encoding] #=> [true, #<Encoding:US-ASCII>]
|
29
29
|
#
|
30
|
-
class OrderedMagicComments <
|
30
|
+
class OrderedMagicComments < Base
|
31
31
|
include FrozenStringLiteral
|
32
|
+
extend AutoCorrector
|
32
33
|
|
33
34
|
MSG = 'The encoding magic comment should precede all other ' \
|
34
35
|
'magic comments.'
|
35
36
|
|
36
|
-
def
|
37
|
+
def on_new_investigation
|
37
38
|
return if processed_source.buffer.source.empty?
|
38
39
|
|
39
40
|
encoding_line, frozen_string_literal_line = magic_comment_lines
|
@@ -43,24 +44,21 @@ module RuboCop
|
|
43
44
|
|
44
45
|
range = processed_source.buffer.line_range(encoding_line + 1)
|
45
46
|
|
46
|
-
add_offense(range
|
47
|
+
add_offense(range) do |corrector|
|
48
|
+
autocorrect(corrector, encoding_line, frozen_string_literal_line)
|
49
|
+
end
|
47
50
|
end
|
48
51
|
|
49
|
-
|
50
|
-
encoding_line, frozen_string_literal_line = magic_comment_lines
|
52
|
+
private
|
51
53
|
|
54
|
+
def autocorrect(corrector, encoding_line, frozen_string_literal_line)
|
52
55
|
range1 = processed_source.buffer.line_range(encoding_line + 1)
|
53
|
-
range2 =
|
54
|
-
processed_source.buffer.line_range(frozen_string_literal_line + 1)
|
56
|
+
range2 = processed_source.buffer.line_range(frozen_string_literal_line + 1)
|
55
57
|
|
56
|
-
|
57
|
-
|
58
|
-
corrector.replace(range2, range1.source)
|
59
|
-
end
|
58
|
+
corrector.replace(range1, range2.source)
|
59
|
+
corrector.replace(range2, range1.source)
|
60
60
|
end
|
61
61
|
|
62
|
-
private
|
63
|
-
|
64
62
|
def magic_comment_lines
|
65
63
|
lines = [nil, nil]
|
66
64
|
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cops looks for references of Regexp captures that are out of range
|
7
|
+
# and thus always returns nil.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
#
|
11
|
+
# /(foo)bar/ =~ 'foobar'
|
12
|
+
#
|
13
|
+
# # bad - always returns nil
|
14
|
+
#
|
15
|
+
# puts $2 # => nil
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
#
|
19
|
+
# puts $1 # => foo
|
20
|
+
#
|
21
|
+
class OutOfRangeRegexpRef < Base
|
22
|
+
MSG = 'Do not use out of range reference for the Regexp.'
|
23
|
+
|
24
|
+
REGEXP_RECEIVER_METHODS = %i[=~ === match].to_set.freeze
|
25
|
+
REGEXP_ARGUMENT_METHODS = %i[=~ match grep gsub gsub! sub sub! [] slice slice! index rindex
|
26
|
+
scan partition rpartition start_with? end_with?].to_set.freeze
|
27
|
+
REGEXP_CAPTURE_METHODS = (REGEXP_RECEIVER_METHODS + REGEXP_ARGUMENT_METHODS).freeze
|
28
|
+
|
29
|
+
def on_new_investigation
|
30
|
+
@valid_ref = 0
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_match_with_lvasgn(node)
|
34
|
+
check_regexp(node.children.first)
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_send(node)
|
38
|
+
return unless REGEXP_CAPTURE_METHODS.include?(node.method_name)
|
39
|
+
|
40
|
+
@valid_ref = nil
|
41
|
+
|
42
|
+
if node.receiver&.regexp_type?
|
43
|
+
check_regexp(node.receiver)
|
44
|
+
elsif node.first_argument&.regexp_type? \
|
45
|
+
&& REGEXP_ARGUMENT_METHODS.include?(node.method_name)
|
46
|
+
check_regexp(node.first_argument)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def on_when(node)
|
51
|
+
regexp_conditions = node.conditions.select(&:regexp_type?)
|
52
|
+
|
53
|
+
@valid_ref = regexp_conditions.map do |condition|
|
54
|
+
check_regexp(condition)
|
55
|
+
end.compact.max
|
56
|
+
end
|
57
|
+
|
58
|
+
def on_nth_ref(node)
|
59
|
+
backref, = *node
|
60
|
+
return if @valid_ref.nil?
|
61
|
+
|
62
|
+
add_offense(node) if backref > @valid_ref
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def check_regexp(regexp)
|
68
|
+
return if contain_non_literal?(regexp)
|
69
|
+
|
70
|
+
tree = Regexp::Parser.parse(regexp.content)
|
71
|
+
@valid_ref = regexp_captures(tree)
|
72
|
+
end
|
73
|
+
|
74
|
+
def contain_non_literal?(node)
|
75
|
+
node.children.size != 2 || !node.children.first.str_type?
|
76
|
+
end
|
77
|
+
|
78
|
+
def regexp_captures(tree)
|
79
|
+
named_capture = numbered_capture = 0
|
80
|
+
tree.each_expression do |e|
|
81
|
+
if e.type?(:group)
|
82
|
+
e.respond_to?(:name) ? named_capture += 1 : numbered_capture += 1
|
83
|
+
end
|
84
|
+
end
|
85
|
+
named_capture.positive? ? named_capture : numbered_capture
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -15,8 +15,9 @@ module RuboCop
|
|
15
15
|
# do_something(foo)
|
16
16
|
# do_something (2 + 3) * 4
|
17
17
|
# do_something (foo * bar).baz
|
18
|
-
class ParenthesesAsGroupedExpression <
|
18
|
+
class ParenthesesAsGroupedExpression < Base
|
19
19
|
include RangeHelp
|
20
|
+
extend AutoCorrector
|
20
21
|
|
21
22
|
MSG = '`(...)` interpreted as grouped expression.'
|
22
23
|
|
@@ -28,18 +29,11 @@ module RuboCop
|
|
28
29
|
|
29
30
|
range = space_range(node.first_argument.source_range, space_length)
|
30
31
|
|
31
|
-
add_offense(
|
32
|
-
end
|
33
|
-
alias on_csend on_send
|
34
|
-
|
35
|
-
def autocorrect(node)
|
36
|
-
space_length = spaces_before_left_parenthesis(node)
|
37
|
-
range = space_range(node.first_argument.source_range, space_length)
|
38
|
-
|
39
|
-
lambda do |corrector|
|
32
|
+
add_offense(range) do |corrector|
|
40
33
|
corrector.remove(range)
|
41
34
|
end
|
42
35
|
end
|
36
|
+
alias on_csend on_send
|
43
37
|
|
44
38
|
private
|
45
39
|
|
@@ -48,17 +42,22 @@ module RuboCop
|
|
48
42
|
return true
|
49
43
|
end
|
50
44
|
|
51
|
-
node.operator_method? || node.setter_method? ||
|
45
|
+
node.operator_method? || node.setter_method? || chained_calls?(node) ||
|
46
|
+
operator_keyword?(node)
|
52
47
|
end
|
53
48
|
|
54
49
|
def first_argument_starts_with_left_parenthesis?(node)
|
55
50
|
node.first_argument.source.start_with?('(')
|
56
51
|
end
|
57
52
|
|
58
|
-
def
|
53
|
+
def chained_calls?(node)
|
59
54
|
first_argument = node.first_argument
|
55
|
+
first_argument.send_type? && (node.children.last&.children&.count || 0) > 1
|
56
|
+
end
|
60
57
|
|
61
|
-
|
58
|
+
def operator_keyword?(node)
|
59
|
+
first_argument = node.first_argument
|
60
|
+
first_argument.operator_keyword?
|
62
61
|
end
|
63
62
|
|
64
63
|
def spaces_before_left_parenthesis(node)
|
@@ -20,8 +20,9 @@ module RuboCop
|
|
20
20
|
# # good
|
21
21
|
#
|
22
22
|
# %w(foo bar)
|
23
|
-
class PercentStringArray <
|
23
|
+
class PercentStringArray < Base
|
24
24
|
include PercentLiteral
|
25
|
+
extend AutoCorrector
|
25
26
|
|
26
27
|
QUOTES_AND_COMMAS = [/,$/, /^'.*'$/, /^".*"$/].freeze
|
27
28
|
LEADING_QUOTE = /^['"]/.freeze
|
@@ -37,24 +38,24 @@ module RuboCop
|
|
37
38
|
def on_percent_literal(node)
|
38
39
|
return unless contains_quotes_or_commas?(node)
|
39
40
|
|
40
|
-
add_offense(node)
|
41
|
+
add_offense(node) do |corrector|
|
42
|
+
autocorrect(corrector, node)
|
43
|
+
end
|
41
44
|
end
|
42
45
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
46
|
+
private
|
47
|
+
|
48
|
+
def autocorrect(corrector, node)
|
49
|
+
node.each_value do |value|
|
50
|
+
range = value.loc.expression
|
47
51
|
|
48
|
-
|
49
|
-
|
52
|
+
match = range.source.match(TRAILING_QUOTE)
|
53
|
+
corrector.remove_trailing(range, match[0].length) if match
|
50
54
|
|
51
|
-
|
52
|
-
end
|
55
|
+
corrector.remove_leading(range, 1) if LEADING_QUOTE.match?(range.source)
|
53
56
|
end
|
54
57
|
end
|
55
58
|
|
56
|
-
private
|
57
|
-
|
58
59
|
def contains_quotes_or_commas?(node)
|
59
60
|
node.values.any? do |value|
|
60
61
|
literal = value.children.first.to_s.scrub
|
@@ -20,8 +20,9 @@ module RuboCop
|
|
20
20
|
# # good
|
21
21
|
#
|
22
22
|
# %i(foo bar)
|
23
|
-
class PercentSymbolArray <
|
23
|
+
class PercentSymbolArray < Base
|
24
24
|
include PercentLiteral
|
25
|
+
extend AutoCorrector
|
25
26
|
|
26
27
|
MSG = "Within `%i`/`%I`, ':' and ',' are unnecessary and may be " \
|
27
28
|
'unwanted in the resulting symbols.'
|
@@ -33,23 +34,23 @@ module RuboCop
|
|
33
34
|
def on_percent_literal(node)
|
34
35
|
return unless contains_colons_or_commas?(node)
|
35
36
|
|
36
|
-
add_offense(node)
|
37
|
+
add_offense(node) do |corrector|
|
38
|
+
autocorrect(corrector, node)
|
39
|
+
end
|
37
40
|
end
|
38
41
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
42
|
+
private
|
43
|
+
|
44
|
+
def autocorrect(corrector, node)
|
45
|
+
node.children.each do |child|
|
46
|
+
range = child.loc.expression
|
43
47
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
48
|
+
corrector.remove_trailing(range, 1) if range.source.end_with?(',')
|
49
|
+
corrector.remove_leading(range, 1) if
|
50
|
+
range.source.start_with?(':')
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
51
|
-
private
|
52
|
-
|
53
54
|
def contains_colons_or_commas?(node)
|
54
55
|
node.children.any? do |child|
|
55
56
|
literal = child.children.first.to_s
|
@@ -27,7 +27,9 @@ module RuboCop
|
|
27
27
|
# raise Exception # This exception means `Gem::Exception`.
|
28
28
|
# end
|
29
29
|
# end
|
30
|
-
class RaiseException <
|
30
|
+
class RaiseException < Base
|
31
|
+
extend AutoCorrector
|
32
|
+
|
31
33
|
MSG = 'Use `StandardError` over `Exception`.'
|
32
34
|
|
33
35
|
def_node_matcher :exception?, <<~PATTERN
|
@@ -44,21 +46,21 @@ module RuboCop
|
|
44
46
|
exception_new_with_message?(node, &check(node))
|
45
47
|
end
|
46
48
|
|
47
|
-
def autocorrect(node)
|
48
|
-
lambda do |corrector|
|
49
|
-
exception_class = node.children.first&.cbase_type? ? '::StandardError' : 'StandardError'
|
50
|
-
|
51
|
-
corrector.replace(node, exception_class)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
49
|
private
|
56
50
|
|
57
51
|
def check(node)
|
58
52
|
lambda do |exception_class, cbase|
|
59
53
|
return if cbase.nil? && implicit_namespace?(node)
|
60
54
|
|
61
|
-
add_offense(exception_class)
|
55
|
+
add_offense(exception_class) do |corrector|
|
56
|
+
prefer_exception = if exception_class.children.first&.cbase_type?
|
57
|
+
'::StandardError'
|
58
|
+
else
|
59
|
+
'StandardError'
|
60
|
+
end
|
61
|
+
|
62
|
+
corrector.replace(exception_class, prefer_exception)
|
63
|
+
end
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
@@ -20,16 +20,16 @@ module RuboCop
|
|
20
20
|
# # good
|
21
21
|
#
|
22
22
|
# 0 # just use 0 instead
|
23
|
-
class RandOne <
|
23
|
+
class RandOne < Base
|
24
24
|
MSG = '`%<method>s` always returns `0`. ' \
|
25
25
|
'Perhaps you meant `rand(2)` or `rand`?'
|
26
26
|
|
27
27
|
def_node_matcher :rand_one?, <<~PATTERN
|
28
|
-
(send {(const nil? :Kernel) nil?} :rand {(int {-1 1}) (float {-1.0 1.0})})
|
28
|
+
(send {(const {nil? cbase} :Kernel) nil?} :rand {(int {-1 1}) (float {-1.0 1.0})})
|
29
29
|
PATTERN
|
30
30
|
|
31
31
|
def on_send(node)
|
32
|
-
return unless rand_one?(node)
|
32
|
+
return unless node.method?(:rand) && rand_one?(node)
|
33
33
|
|
34
34
|
add_offense(node)
|
35
35
|
end
|
@@ -25,34 +25,33 @@ module RuboCop
|
|
25
25
|
#
|
26
26
|
# # good
|
27
27
|
# x += 1
|
28
|
-
class RedundantCopDisableDirective <
|
28
|
+
class RedundantCopDisableDirective < Base
|
29
29
|
include RangeHelp
|
30
|
+
extend AutoCorrector
|
30
31
|
|
31
32
|
COP_NAME = 'Lint/RedundantCopDisableDirective'
|
32
33
|
|
33
|
-
|
34
|
+
attr_accessor :offenses_to_check
|
35
|
+
|
36
|
+
def initialize(config = nil, options = nil, offenses = nil)
|
37
|
+
@offenses_to_check = offenses
|
38
|
+
super(config, options)
|
39
|
+
end
|
40
|
+
|
41
|
+
def on_new_investigation
|
42
|
+
return unless offenses_to_check
|
43
|
+
|
44
|
+
cop_disabled_line_ranges = processed_source.disabled_line_ranges
|
45
|
+
|
34
46
|
redundant_cops = Hash.new { |h, k| h[k] = Set.new }
|
35
47
|
|
36
48
|
each_redundant_disable(cop_disabled_line_ranges,
|
37
|
-
|
49
|
+
offenses_to_check) do |comment, redundant_cop|
|
38
50
|
redundant_cops[comment].add(redundant_cop)
|
39
51
|
end
|
40
52
|
|
41
53
|
add_offenses(redundant_cops)
|
42
|
-
|
43
|
-
|
44
|
-
def autocorrect(args)
|
45
|
-
lambda do |corrector|
|
46
|
-
ranges, range = *args # Ranges are sorted by position.
|
47
|
-
|
48
|
-
range = if range.source.start_with?('#')
|
49
|
-
comment_range_with_surrounding_space(range)
|
50
|
-
else
|
51
|
-
directive_range_in_list(range, ranges)
|
52
|
-
end
|
53
|
-
|
54
|
-
corrector.remove(range)
|
55
|
-
end
|
54
|
+
super
|
56
55
|
end
|
57
56
|
|
58
57
|
private
|
@@ -88,25 +87,25 @@ module RuboCop
|
|
88
87
|
newlines: false)
|
89
88
|
end
|
90
89
|
|
91
|
-
def each_redundant_disable(cop_disabled_line_ranges, offenses,
|
90
|
+
def each_redundant_disable(cop_disabled_line_ranges, offenses,
|
92
91
|
&block)
|
93
92
|
disabled_ranges = cop_disabled_line_ranges[COP_NAME] || [0..0]
|
94
93
|
|
95
94
|
cop_disabled_line_ranges.each do |cop, line_ranges|
|
96
95
|
each_already_disabled(line_ranges,
|
97
|
-
disabled_ranges
|
96
|
+
disabled_ranges) do |comment|
|
98
97
|
yield comment, cop
|
99
98
|
end
|
100
99
|
|
101
|
-
each_line_range(line_ranges, disabled_ranges, offenses,
|
100
|
+
each_line_range(line_ranges, disabled_ranges, offenses,
|
102
101
|
cop, &block)
|
103
102
|
end
|
104
103
|
end
|
105
104
|
|
106
|
-
def each_line_range(line_ranges, disabled_ranges, offenses,
|
105
|
+
def each_line_range(line_ranges, disabled_ranges, offenses,
|
107
106
|
cop)
|
108
107
|
line_ranges.each_with_index do |line_range, ix|
|
109
|
-
comment =
|
108
|
+
comment = processed_source.comment_at_line(line_range.begin)
|
110
109
|
next if ignore_offense?(disabled_ranges, line_range)
|
111
110
|
|
112
111
|
redundant_cop = find_redundant(comment, offenses, cop, line_range,
|
@@ -115,7 +114,7 @@ module RuboCop
|
|
115
114
|
end
|
116
115
|
end
|
117
116
|
|
118
|
-
def each_already_disabled(line_ranges, disabled_ranges
|
117
|
+
def each_already_disabled(line_ranges, disabled_ranges)
|
119
118
|
line_ranges.each_cons(2) do |previous_range, range|
|
120
119
|
next if ignore_offense?(disabled_ranges, range)
|
121
120
|
next if previous_range.end != range.begin
|
@@ -124,18 +123,16 @@ module RuboCop
|
|
124
123
|
# the end of the previous range, it means that the cop was
|
125
124
|
# already disabled by an earlier comment. So it's redundant
|
126
125
|
# whether there are offenses or not.
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
134
|
-
yield redundant_comment if redundant_comment
|
126
|
+
comment = processed_source.comment_at_line(range.begin)
|
127
|
+
|
128
|
+
# Comments disabling all cops don't count since it's reasonable
|
129
|
+
# to disable a few select cops first and then all cops further
|
130
|
+
# down in the code.
|
131
|
+
yield comment if comment && !all_disabled?(comment)
|
135
132
|
end
|
136
133
|
end
|
137
134
|
|
138
|
-
# rubocop:todo Metrics/CyclomaticComplexity
|
135
|
+
# rubocop:todo Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
139
136
|
def find_redundant(comment, offenses, cop, line_range, next_line_range)
|
140
137
|
if all_disabled?(comment)
|
141
138
|
# If there's a disable all comment followed by a comment
|
@@ -153,7 +150,7 @@ module RuboCop
|
|
153
150
|
cop if cop_offenses.none? { |o| line_range.cover?(o.line) }
|
154
151
|
end
|
155
152
|
end
|
156
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
153
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
157
154
|
|
158
155
|
def all_disabled?(comment)
|
159
156
|
/rubocop\s*:\s*(?:disable|todo)\s+all\b/.match?(comment.text)
|
@@ -187,10 +184,12 @@ module RuboCop
|
|
187
184
|
cop_list = cops.sort.map { |c| describe(c) }
|
188
185
|
|
189
186
|
add_offense(
|
190
|
-
|
191
|
-
location: location,
|
187
|
+
location,
|
192
188
|
message: "Unnecessary disabling of #{cop_list.join(', ')}."
|
193
|
-
)
|
189
|
+
) do |corrector|
|
190
|
+
range = comment_range_with_surrounding_space(location)
|
191
|
+
corrector.remove(range)
|
192
|
+
end
|
194
193
|
end
|
195
194
|
|
196
195
|
def add_offense_for_some_cops(comment, cops)
|
@@ -200,10 +199,12 @@ module RuboCop
|
|
200
199
|
|
201
200
|
cop_ranges.each do |cop, range|
|
202
201
|
add_offense(
|
203
|
-
|
204
|
-
location: range,
|
202
|
+
range,
|
205
203
|
message: "Unnecessary disabling of #{describe(cop)}."
|
206
|
-
)
|
204
|
+
) do |corrector|
|
205
|
+
range = directive_range_in_list(range, ranges)
|
206
|
+
corrector.remove(range)
|
207
|
+
end
|
207
208
|
end
|
208
209
|
end
|
209
210
|
|
@@ -246,7 +247,7 @@ module RuboCop
|
|
246
247
|
end
|
247
248
|
|
248
249
|
def all_cop_names
|
249
|
-
@all_cop_names ||=
|
250
|
+
@all_cop_names ||= Registry.global.names
|
250
251
|
end
|
251
252
|
|
252
253
|
def ends_its_line?(range)
|