rubocop 1.12.0 → 1.13.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 +3 -2
- data/config/default.yml +10 -0
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +1 -1
- data/lib/rubocop/cached_data.rb +1 -3
- data/lib/rubocop/cli.rb +4 -6
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
- data/lib/rubocop/cli/command/show_cops.rb +1 -4
- data/lib/rubocop/comment_config.rb +2 -7
- data/lib/rubocop/config.rb +11 -26
- data/lib/rubocop/config_loader.rb +5 -11
- data/lib/rubocop/config_loader_resolver.rb +22 -14
- data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
- data/lib/rubocop/config_store.rb +1 -2
- data/lib/rubocop/config_validator.rb +5 -10
- data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
- data/lib/rubocop/cop/badge.rb +1 -2
- data/lib/rubocop/cop/base.rb +8 -6
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +42 -8
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
- data/lib/rubocop/cop/commissioner.rb +2 -8
- data/lib/rubocop/cop/cop.rb +4 -18
- data/lib/rubocop/cop/corrector.rb +1 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
- data/lib/rubocop/cop/generator.rb +1 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
- data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/example_description.rb +6 -4
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -4
- data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
- data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/class_structure.rb +4 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
- data/lib/rubocop/cop/layout/dot_position.rb +1 -3
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
- data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -2
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
- data/lib/rubocop/cop/layout/line_length.rb +4 -15
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +16 -10
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +4 -0
- data/lib/rubocop/cop/layout/redundant_line_break.rb +125 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
- data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
- data/lib/rubocop/cop/legacy/corrector.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -4
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
- data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
- data/lib/rubocop/cop/lint/else_layout.rb +1 -3
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
- data/lib/rubocop/cop/lint/empty_file.rb +1 -3
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
- data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
- data/lib/rubocop/cop/lint/loop.rb +1 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
- data/lib/rubocop/cop/lint/missing_super.rb +1 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +3 -4
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rand_one.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +8 -20
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
- data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
- data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
- data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
- data/lib/rubocop/cop/lint/symbol_conversion.rb +2 -4
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/to_json.rb +1 -2
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +2 -5
- data/lib/rubocop/cop/lint/unused_block_argument.rb +4 -8
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
- data/lib/rubocop/cop/lint/void.rb +4 -11
- data/lib/rubocop/cop/message_annotator.rb +1 -3
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -6
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
- data/lib/rubocop/cop/migration/department_name.rb +3 -7
- data/lib/rubocop/cop/mixin/alignment.rb +2 -4
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
- data/lib/rubocop/cop/mixin/def_node.rb +2 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -9
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
- data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
- data/lib/rubocop/cop/mixin/match_range.rb +2 -5
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -37
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
- data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
- data/lib/rubocop/cop/mixin/range_help.rb +10 -13
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
- data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
- data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
- data/lib/rubocop/cop/naming/file_name.rb +7 -16
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
- data/lib/rubocop/cop/naming/method_name.rb +1 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
- data/lib/rubocop/cop/offense.rb +3 -8
- data/lib/rubocop/cop/registry.rb +3 -11
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -4
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +5 -12
- data/lib/rubocop/cop/style/and_or.rb +3 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
- data/lib/rubocop/cop/style/case_like_if.rb +1 -2
- data/lib/rubocop/cop/style/character_literal.rb +2 -4
- data/lib/rubocop/cop/style/class_and_module_children.rb +3 -6
- data/lib/rubocop/cop/style/class_methods.rb +1 -3
- data/lib/rubocop/cop/style/collection_compact.rb +1 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +3 -8
- data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
- data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
- data/lib/rubocop/cop/style/copyright.rb +3 -6
- data/lib/rubocop/cop/style/date_time.rb +2 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
- data/lib/rubocop/cop/style/empty_else.rb +3 -9
- data/lib/rubocop/cop/style/empty_literal.rb +4 -8
- data/lib/rubocop/cop/style/empty_method.rb +3 -7
- data/lib/rubocop/cop/style/end_block.rb +1 -2
- data/lib/rubocop/cop/style/endless_method.rb +1 -3
- data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +31 -3
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -2
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +41 -13
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/lambda.rb +2 -4
- data/lib/rubocop/cop/style/lambda_call.rb +1 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +7 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +10 -18
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/min_max.rb +1 -2
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
- data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
- data/lib/rubocop/cop/style/module_function.rb +3 -6
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
- data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
- data/lib/rubocop/cop/style/negated_if.rb +1 -2
- data/lib/rubocop/cop/style/negated_unless.rb +1 -2
- data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
- data/lib/rubocop/cop/style/next.rb +4 -9
- data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
- data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
- data/lib/rubocop/cop/style/option_hash.rb +1 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
- data/lib/rubocop/cop/style/or_assignment.rb +2 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
- data/lib/rubocop/cop/style/proc.rb +1 -2
- data/lib/rubocop/cop/style/raise_args.rb +4 -8
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +15 -4
- data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
- data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
- data/lib/rubocop/cop/style/redundant_return.rb +3 -5
- data/lib/rubocop/cop/style/redundant_self.rb +2 -6
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
- data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
- data/lib/rubocop/cop/style/return_nil.rb +1 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
- data/lib/rubocop/cop/style/send.rb +1 -2
- data/lib/rubocop/cop/style/signal_exception.rb +3 -7
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +16 -4
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +1 -2
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
- data/lib/rubocop/cop/style/string_chars.rb +2 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
- data/lib/rubocop/cop/style/string_literals.rb +2 -5
- data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
- data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
- data/lib/rubocop/cop/style/trivial_accessors.rb +2 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -3
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
- data/lib/rubocop/cop/style/word_array.rb +1 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
- data/lib/rubocop/cop/team.rb +2 -5
- data/lib/rubocop/cop/util.rb +8 -11
- data/lib/rubocop/cop/utils/format_string.rb +1 -3
- data/lib/rubocop/cop/variable_force.rb +6 -15
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -2
- data/lib/rubocop/cop/variable_force/reference.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +4 -8
- data/lib/rubocop/cop/variable_force/variable.rb +2 -4
- data/lib/rubocop/cops_documentation_generator.rb +7 -21
- data/lib/rubocop/directive_comment.rb +5 -0
- data/lib/rubocop/file_finder.rb +1 -3
- data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
- data/lib/rubocop/formatter/html_formatter.rb +4 -10
- data/lib/rubocop/formatter/json_formatter.rb +1 -5
- data/lib/rubocop/formatter/junit_formatter.rb +3 -9
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/formatter/tap_formatter.rb +4 -2
- data/lib/rubocop/options.rb +27 -41
- data/lib/rubocop/path_util.rb +1 -3
- data/lib/rubocop/rake_task.rb +3 -0
- data/lib/rubocop/remote_config.rb +4 -7
- data/lib/rubocop/result_cache.rb +5 -12
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -9
- data/lib/rubocop/rspec/shared_contexts.rb +4 -15
- data/lib/rubocop/runner.rb +7 -14
- data/lib/rubocop/target_finder.rb +11 -16
- data/lib/rubocop/target_ruby.rb +4 -8
- data/lib/rubocop/version.rb +1 -1
- metadata +5 -5
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -99,12 +99,9 @@ module RuboCop
|
|
99
99
|
|
100
100
|
def register_offense(node, scope_exiting_keyword, conditional_keyword)
|
101
101
|
condition, = node.node_parts
|
102
|
-
example = [scope_exiting_keyword,
|
103
|
-
conditional_keyword,
|
104
|
-
condition.source].join(' ')
|
102
|
+
example = [scope_exiting_keyword, conditional_keyword, condition.source].join(' ')
|
105
103
|
if too_long_for_single_line?(node, example)
|
106
|
-
example = "#{conditional_keyword} #{condition.source}; "
|
107
|
-
"#{scope_exiting_keyword}; end"
|
104
|
+
example = "#{conditional_keyword} #{condition.source}; #{scope_exiting_keyword}; end"
|
108
105
|
end
|
109
106
|
|
110
107
|
add_offense(node.loc.keyword, message: format(MSG, example: example))
|
@@ -126,8 +123,7 @@ module RuboCop
|
|
126
123
|
end
|
127
124
|
|
128
125
|
def accepted_form?(node, ending: false)
|
129
|
-
accepted_if?(node, ending) || node.condition.multiline? ||
|
130
|
-
node.parent&.assignment?
|
126
|
+
accepted_if?(node, ending) || node.condition.multiline? || node.parent&.assignment?
|
131
127
|
end
|
132
128
|
|
133
129
|
def accepted_if?(node, ending)
|
@@ -61,11 +61,11 @@ module RuboCop
|
|
61
61
|
def single_argument(node)
|
62
62
|
first_argument = node.first_argument
|
63
63
|
if first_argument.hash_type?
|
64
|
-
|
65
|
-
corrector.replace(node, "{#{first_argument.source}}")
|
66
|
-
end
|
64
|
+
register_offense_for_hash(node, first_argument)
|
67
65
|
elsif first_argument.splat_type?
|
68
66
|
add_offense(node, message: MSG_SPLAT) unless allowed_splat_argument?
|
67
|
+
elsif use_zip_method_without_argument?(first_argument)
|
68
|
+
register_offense_for_zip_method(node, first_argument)
|
69
69
|
else
|
70
70
|
add_offense(node, message: MSG_TO_H) do |corrector|
|
71
71
|
replacement = first_argument.source
|
@@ -75,6 +75,31 @@ module RuboCop
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
def use_zip_method_without_argument?(first_argument)
|
79
|
+
return false unless first_argument&.send_type?
|
80
|
+
|
81
|
+
first_argument.method?(:zip) && first_argument.arguments.empty?
|
82
|
+
end
|
83
|
+
|
84
|
+
def register_offense_for_hash(node, hash_argument)
|
85
|
+
add_offense(node, message: MSG_LITERAL_HASH_ARG) do |corrector|
|
86
|
+
corrector.replace(node, "{#{hash_argument.source}}")
|
87
|
+
|
88
|
+
parent = node.parent
|
89
|
+
add_parentheses(parent, corrector) if parent&.send_type? && !parent.parenthesized?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def register_offense_for_zip_method(node, zip_method)
|
94
|
+
add_offense(node, message: MSG_TO_H) do |corrector|
|
95
|
+
if zip_method.parenthesized?
|
96
|
+
corrector.insert_before(zip_method.loc.end, '[]')
|
97
|
+
else
|
98
|
+
corrector.insert_after(zip_method, '([])')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
78
103
|
def requires_parens?(node)
|
79
104
|
node.call_type? && node.arguments.any? && !node.parenthesized?
|
80
105
|
end
|
@@ -85,6 +110,9 @@ module RuboCop
|
|
85
110
|
else
|
86
111
|
add_offense(node, message: MSG_LITERAL_MULTI_ARG) do |corrector|
|
87
112
|
corrector.replace(node, args_to_hash(node.arguments))
|
113
|
+
|
114
|
+
parent = node.parent
|
115
|
+
add_parentheses(parent, corrector) if parent&.send_type? && !parent.parenthesized?
|
88
116
|
end
|
89
117
|
end
|
90
118
|
end
|
@@ -38,8 +38,7 @@ module RuboCop
|
|
38
38
|
kv_each(node) do |target, method|
|
39
39
|
return unless target.receiver.receiver
|
40
40
|
|
41
|
-
msg = format(message, prefer: "each_#{method[0..-2]}",
|
42
|
-
current: "#{method}.each")
|
41
|
+
msg = format(message, prefer: "each_#{method[0..-2]}", current: "#{method}.each")
|
43
42
|
|
44
43
|
add_offense(kv_range(target), message: msg) do |corrector|
|
45
44
|
correct_key_value_each(target, corrector)
|
@@ -52,8 +52,7 @@ module RuboCop
|
|
52
52
|
return if node.when_branches.size < min_branches_count
|
53
53
|
|
54
54
|
hash_like_case?(node) do |condition_nodes, body_nodes|
|
55
|
-
if nodes_of_same_type?(condition_nodes) &&
|
56
|
-
nodes_of_same_type?(body_nodes)
|
55
|
+
if nodes_of_same_type?(condition_nodes) && nodes_of_same_type?(body_nodes)
|
57
56
|
add_offense(node)
|
58
57
|
end
|
59
58
|
end
|
@@ -137,7 +137,7 @@ module RuboCop
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def acceptable_19_syntax_symbol?(sym_name)
|
140
|
-
sym_name.
|
140
|
+
sym_name.delete_prefix!(':')
|
141
141
|
|
142
142
|
if cop_config['PreferHashRocketsForNonAlnumEndingSymbols'] &&
|
143
143
|
# Prefer { :production? => false } over { production?: false } and
|
@@ -174,10 +174,7 @@ module RuboCop
|
|
174
174
|
|
175
175
|
space = argument_without_space?(pair_node.parent) ? ' ' : ''
|
176
176
|
|
177
|
-
corrector.replace(
|
178
|
-
range,
|
179
|
-
range.source.sub(/^:(.*\S)\s*=>\s*$/, "#{space}\\1: ")
|
180
|
-
)
|
177
|
+
corrector.replace(range, range.source.sub(/^:(.*\S)\s*=>\s*$/, "#{space}\\1: "))
|
181
178
|
|
182
179
|
hash_node = pair_node.parent
|
183
180
|
return unless hash_node.parent&.return_type? && !hash_node.braces?
|
@@ -194,8 +191,7 @@ module RuboCop
|
|
194
191
|
end
|
195
192
|
|
196
193
|
def argument_without_space?(node)
|
197
|
-
node.argument? &&
|
198
|
-
node.loc.expression.begin_pos == node.parent.loc.selector.end_pos
|
194
|
+
node.argument? && node.loc.expression.begin_pos == node.parent.loc.selector.end_pos
|
199
195
|
end
|
200
196
|
|
201
197
|
def autocorrect_hash_rockets(corrector, pair_node)
|
@@ -215,8 +211,7 @@ module RuboCop
|
|
215
211
|
end
|
216
212
|
|
217
213
|
def force_hash_rockets?(pairs)
|
218
|
-
cop_config['UseHashRocketsWithSymbolValues'] &&
|
219
|
-
pairs.map(&:value).any?(&:sym_type?)
|
214
|
+
cop_config['UseHashRocketsWithSymbolValues'] && pairs.map(&:value).any?(&:sym_type?)
|
220
215
|
end
|
221
216
|
end
|
222
217
|
end
|
@@ -100,9 +100,7 @@ module RuboCop
|
|
100
100
|
def check_expressions(expressions)
|
101
101
|
return unless expressions.size > 1 && expressions.uniq.one?
|
102
102
|
|
103
|
-
expressions.each
|
104
|
-
add_offense(expression)
|
105
|
-
end
|
103
|
+
expressions.each { |expression| add_offense(expression) }
|
106
104
|
end
|
107
105
|
|
108
106
|
def message(node)
|
@@ -38,13 +38,13 @@ module RuboCop
|
|
38
38
|
include StatementModifier
|
39
39
|
include LineLengthHelp
|
40
40
|
include IgnoredPattern
|
41
|
+
include RangeHelp
|
41
42
|
extend AutoCorrector
|
42
43
|
|
43
44
|
MSG_USE_MODIFIER = 'Favor modifier `%<keyword>s` usage when having a ' \
|
44
45
|
'single-line body. Another good alternative is ' \
|
45
46
|
'the usage of control flow `&&`/`||`.'
|
46
|
-
MSG_USE_NORMAL =
|
47
|
-
'Modifier form of `%<keyword>s` makes the line too long.'
|
47
|
+
MSG_USE_NORMAL = 'Modifier form of `%<keyword>s` makes the line too long.'
|
48
48
|
|
49
49
|
def self.autocorrect_incompatible_with
|
50
50
|
[Style::SoleNestedConditional]
|
@@ -67,7 +67,16 @@ module RuboCop
|
|
67
67
|
|
68
68
|
def autocorrect(corrector, node)
|
69
69
|
replacement = if node.modifier_form?
|
70
|
-
|
70
|
+
indentation = ' ' * node.source_range.column
|
71
|
+
last_argument = node.if_branch.last_argument
|
72
|
+
|
73
|
+
if last_argument.respond_to?(:heredoc?) && last_argument.heredoc?
|
74
|
+
heredoc = extract_heredoc_from(last_argument)
|
75
|
+
remove_heredoc(corrector, heredoc)
|
76
|
+
to_normal_form_with_heredoc(node, indentation, heredoc)
|
77
|
+
else
|
78
|
+
to_normal_form(node, indentation)
|
79
|
+
end
|
71
80
|
else
|
72
81
|
to_modifier_form(node)
|
73
82
|
end
|
@@ -123,8 +132,7 @@ module RuboCop
|
|
123
132
|
end
|
124
133
|
|
125
134
|
def line_length_enabled_at_line?(line)
|
126
|
-
processed_source.comment_config
|
127
|
-
.cop_enabled_at_line?('Layout/LineLength', line)
|
135
|
+
processed_source.comment_config.cop_enabled_at_line?('Layout/LineLength', line)
|
128
136
|
end
|
129
137
|
|
130
138
|
def named_capture_in_condition?(node)
|
@@ -132,10 +140,7 @@ module RuboCop
|
|
132
140
|
end
|
133
141
|
|
134
142
|
def non_eligible_node?(node)
|
135
|
-
non_simple_if_unless?(node) ||
|
136
|
-
node.chained? ||
|
137
|
-
node.nested_conditional? ||
|
138
|
-
super
|
143
|
+
non_simple_if_unless?(node) || node.chained? || node.nested_conditional? || super
|
139
144
|
end
|
140
145
|
|
141
146
|
def non_simple_if_unless?(node)
|
@@ -153,18 +158,41 @@ module RuboCop
|
|
153
158
|
node = node.parent
|
154
159
|
end
|
155
160
|
|
156
|
-
node && (sibling = node.children[index + 1]) &&
|
157
|
-
sibling.source_range.first_line == line_no
|
161
|
+
node && (sibling = node.children[index + 1]) && sibling.source_range.first_line == line_no
|
158
162
|
end
|
159
163
|
|
160
|
-
def to_normal_form(node)
|
161
|
-
indentation = ' ' * node.source_range.column
|
164
|
+
def to_normal_form(node, indentation)
|
162
165
|
<<~RUBY.chomp
|
163
166
|
#{node.keyword} #{node.condition.source}
|
164
167
|
#{indentation} #{node.body.source}
|
165
168
|
#{indentation}end
|
166
169
|
RUBY
|
167
170
|
end
|
171
|
+
|
172
|
+
def to_normal_form_with_heredoc(node, indentation, heredoc)
|
173
|
+
heredoc_body, heredoc_end = heredoc
|
174
|
+
|
175
|
+
<<~RUBY.chomp
|
176
|
+
#{node.keyword} #{node.condition.source}
|
177
|
+
#{indentation} #{node.body.source}
|
178
|
+
#{indentation} #{heredoc_body.source.chomp}
|
179
|
+
#{indentation} #{heredoc_end.source.chomp}
|
180
|
+
#{indentation}end
|
181
|
+
RUBY
|
182
|
+
end
|
183
|
+
|
184
|
+
def extract_heredoc_from(last_argument)
|
185
|
+
heredoc_body = last_argument.loc.heredoc_body
|
186
|
+
heredoc_end = last_argument.loc.heredoc_end
|
187
|
+
|
188
|
+
[heredoc_body, heredoc_end]
|
189
|
+
end
|
190
|
+
|
191
|
+
def remove_heredoc(corrector, heredoc)
|
192
|
+
heredoc.each do |range|
|
193
|
+
corrector.remove(range_by_whole_lines(range, include_final_newline: true))
|
194
|
+
end
|
195
|
+
end
|
168
196
|
end
|
169
197
|
end
|
170
198
|
end
|
@@ -62,9 +62,7 @@ module RuboCop
|
|
62
62
|
referenced_after_loop?(var, range)
|
63
63
|
end
|
64
64
|
|
65
|
-
add_offense(node.loc.keyword)
|
66
|
-
autocorrect(corrector, node)
|
67
|
-
end
|
65
|
+
add_offense(node.loc.keyword) { |corrector| autocorrect(corrector, node) }
|
68
66
|
end
|
69
67
|
|
70
68
|
def autocorrect(corrector, node)
|
@@ -107,8 +105,7 @@ module RuboCop
|
|
107
105
|
else
|
108
106
|
indentation = body.source_range.source_line[LEADING_SPACE]
|
109
107
|
|
110
|
-
['loop do', body.source.gsub(/^/, configured_indent),
|
111
|
-
'end'].join("\n#{indentation}")
|
108
|
+
['loop do', body.source.gsub(/^/, configured_indent), 'end'].join("\n#{indentation}")
|
112
109
|
end
|
113
110
|
end
|
114
111
|
|
@@ -136,8 +136,7 @@ module RuboCop
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def inverse_blocks
|
139
|
-
@inverse_blocks ||= cop_config['InverseBlocks']
|
140
|
-
.merge(cop_config['InverseBlocks'].invert)
|
139
|
+
@inverse_blocks ||= cop_config['InverseBlocks'].merge(cop_config['InverseBlocks'].invert)
|
141
140
|
end
|
142
141
|
|
143
142
|
def negated?(node)
|
@@ -160,9 +159,7 @@ module RuboCop
|
|
160
159
|
# `Integer > Numeric`.
|
161
160
|
def possible_class_hierarchy_check?(lhs, rhs, method)
|
162
161
|
CLASS_COMPARISON_METHODS.include?(method) &&
|
163
|
-
(camel_case_constant?(lhs) ||
|
164
|
-
(rhs.size == 1 &&
|
165
|
-
camel_case_constant?(rhs.first)))
|
162
|
+
(camel_case_constant?(lhs) || (rhs.size == 1 && camel_case_constant?(rhs.first)))
|
166
163
|
end
|
167
164
|
|
168
165
|
def camel_case_constant?(node)
|
@@ -174,8 +171,7 @@ module RuboCop
|
|
174
171
|
end
|
175
172
|
|
176
173
|
def remove_end_parenthesis(corrector, node, method, method_call)
|
177
|
-
return unless EQUALITY_METHODS.include?(method) ||
|
178
|
-
method_call.parent.begin_type?
|
174
|
+
return unless EQUALITY_METHODS.include?(method) || method_call.parent.begin_type?
|
179
175
|
|
180
176
|
corrector.remove(end_parentheses(node, method_call))
|
181
177
|
end
|
@@ -67,8 +67,7 @@ module RuboCop
|
|
67
67
|
|
68
68
|
def starts_with_hex_or_colon?(str)
|
69
69
|
first_char = str[0].ord
|
70
|
-
(48..58).cover?(first_char) || (65..70).cover?(first_char) ||
|
71
|
-
(97..102).cover?(first_char)
|
70
|
+
(48..58).cover?(first_char) || (65..70).cover?(first_char) || (97..102).cover?(first_char)
|
72
71
|
end
|
73
72
|
end
|
74
73
|
end
|
@@ -50,10 +50,8 @@ module RuboCop
|
|
50
50
|
include ConfigurableEnforcedStyle
|
51
51
|
extend AutoCorrector
|
52
52
|
|
53
|
-
LITERAL_MESSAGE = 'Use the `-> { ... }` lambda literal syntax for '
|
54
|
-
|
55
|
-
METHOD_MESSAGE = 'Use the `lambda` method for %<modifier>s ' \
|
56
|
-
'lambdas.'
|
53
|
+
LITERAL_MESSAGE = 'Use the `-> { ... }` lambda literal syntax for %<modifier>s lambdas.'
|
54
|
+
METHOD_MESSAGE = 'Use the `lambda` method for %<modifier>s lambdas.'
|
57
55
|
|
58
56
|
OFFENDING_SELECTORS = {
|
59
57
|
style: {
|
@@ -23,14 +23,12 @@ module RuboCop
|
|
23
23
|
include RangeHelp
|
24
24
|
extend AutoCorrector
|
25
25
|
|
26
|
-
MSG = 'Use `\\` instead of `+` or `<<` to concatenate '
|
27
|
-
'those strings.'
|
26
|
+
MSG = 'Use `\\` instead of `+` or `<<` to concatenate those strings.'
|
28
27
|
CONCAT_TOKEN_TYPES = %i[tPLUS tLSHFT].freeze
|
29
28
|
SIMPLE_STRING_TOKEN_TYPE = :tSTRING
|
30
29
|
COMPLEX_STRING_BEGIN_TOKEN = :tSTRING_BEG
|
31
30
|
COMPLEX_STRING_END_TOKEN = :tSTRING_END
|
32
|
-
HIGH_PRECEDENCE_OP_TOKEN_TYPES = %i[tSTAR2 tPERCENT tDOT
|
33
|
-
tLBRACK2].freeze
|
31
|
+
HIGH_PRECEDENCE_OP_TOKEN_TYPES = %i[tSTAR2 tPERCENT tDOT tLBRACK2].freeze
|
34
32
|
QUOTE_DELIMITERS = %w[' "].freeze
|
35
33
|
|
36
34
|
def self.autocorrect_incompatible_with
|
@@ -38,9 +36,7 @@ module RuboCop
|
|
38
36
|
end
|
39
37
|
|
40
38
|
def on_new_investigation
|
41
|
-
processed_source.tokens.each_index
|
42
|
-
check_token_set(index)
|
43
|
-
end
|
39
|
+
processed_source.tokens.each_index { |index| check_token_set(index) }
|
44
40
|
end
|
45
41
|
|
46
42
|
private
|
@@ -56,9 +52,7 @@ module RuboCop
|
|
56
52
|
|
57
53
|
return unless eligible_next_successor?(next_successor)
|
58
54
|
|
59
|
-
add_offense(operator.pos)
|
60
|
-
autocorrect(corrector, operator.pos)
|
61
|
-
end
|
55
|
+
add_offense(operator.pos) { |corrector| autocorrect(corrector, operator.pos) }
|
62
56
|
end
|
63
57
|
|
64
58
|
def autocorrect(corrector, operator_range)
|
@@ -89,8 +83,7 @@ module RuboCop
|
|
89
83
|
end
|
90
84
|
|
91
85
|
def eligible_next_successor?(next_successor)
|
92
|
-
!(next_successor &&
|
93
|
-
HIGH_PRECEDENCE_OP_TOKEN_TYPES.include?(next_successor.type))
|
86
|
+
!(next_successor && HIGH_PRECEDENCE_OP_TOKEN_TYPES.include?(next_successor.type))
|
94
87
|
end
|
95
88
|
|
96
89
|
def eligible_predecessor?(predecessor)
|
@@ -40,8 +40,12 @@ module RuboCop
|
|
40
40
|
# to `true` allows the presence of parentheses in such a method call
|
41
41
|
# even with arguments.
|
42
42
|
#
|
43
|
-
# NOTE:
|
44
|
-
#
|
43
|
+
# NOTE: Parentheses are still allowed in cases where omitting them
|
44
|
+
# results in ambiguous or syntactically incorrect code. For example,
|
45
|
+
# parentheses are required around a method with arguments when inside an
|
46
|
+
# endless method definition introduced in Ruby 3.0. Parentheses are also
|
47
|
+
# allowed when forwarding arguments with the triple-dot syntax introduced
|
48
|
+
# in Ruby 2.7 as omitting them starts an endless range.
|
45
49
|
#
|
46
50
|
# @example EnforcedStyle: require_parentheses (default)
|
47
51
|
#
|
@@ -198,7 +202,7 @@ module RuboCop
|
|
198
202
|
extend AutoCorrector
|
199
203
|
|
200
204
|
def self.autocorrect_incompatible_with
|
201
|
-
[Style::NestedParenthesizedCalls]
|
205
|
+
[Style::NestedParenthesizedCalls, Style::RescueModifier]
|
202
206
|
end
|
203
207
|
|
204
208
|
def on_send(node)
|
@@ -5,7 +5,7 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
class MethodCallWithArgsParentheses
|
7
7
|
# Style omit_parentheses
|
8
|
-
# rubocop:disable Metrics/ModuleLength
|
8
|
+
# rubocop:disable Metrics/ModuleLength, Metrics/CyclomaticComplexity
|
9
9
|
module OmitParentheses
|
10
10
|
TRAILING_WHITESPACE_REGEX = /\s+\Z/.freeze
|
11
11
|
OMIT_MSG = 'Omit parentheses for method calls with arguments.'
|
@@ -13,7 +13,6 @@ module RuboCop
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
17
16
|
def omit_parentheses(node)
|
18
17
|
return unless node.parenthesized?
|
19
18
|
return if inside_endless_method_def?(node)
|
@@ -27,7 +26,6 @@ module RuboCop
|
|
27
26
|
auto_correct(corrector, node)
|
28
27
|
end
|
29
28
|
end
|
30
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
31
29
|
|
32
30
|
def auto_correct(corrector, node)
|
33
31
|
if parentheses_at_the_end_of_multiline_call?(node)
|
@@ -44,7 +42,7 @@ module RuboCop
|
|
44
42
|
|
45
43
|
def inside_endless_method_def?(node)
|
46
44
|
# parens are required around arguments inside an endless method
|
47
|
-
node.each_ancestor(:def).any?(&:endless?) && node.arguments.any?
|
45
|
+
node.each_ancestor(:def, :defs).any?(&:endless?) && node.arguments.any?
|
48
46
|
end
|
49
47
|
|
50
48
|
def syntax_like_method_call?(node)
|
@@ -57,8 +55,7 @@ module RuboCop
|
|
57
55
|
|
58
56
|
def allowed_camel_case_method_call?(node)
|
59
57
|
node.camel_case_method? &&
|
60
|
-
(node.arguments.none? ||
|
61
|
-
cop_config['AllowParenthesesInCamelCaseMethod'])
|
58
|
+
(node.arguments.none? || cop_config['AllowParenthesesInCamelCaseMethod'])
|
62
59
|
end
|
63
60
|
|
64
61
|
def allowed_string_interpolation_method_call?(node)
|
@@ -101,8 +98,7 @@ module RuboCop
|
|
101
98
|
end
|
102
99
|
|
103
100
|
def call_in_optional_arguments?(node)
|
104
|
-
node.parent &&
|
105
|
-
(node.parent.optarg_type? || node.parent.kwoptarg_type?)
|
101
|
+
node.parent && (node.parent.optarg_type? || node.parent.kwoptarg_type?)
|
106
102
|
end
|
107
103
|
|
108
104
|
def call_in_single_line_inheritance?(node)
|
@@ -114,14 +110,13 @@ module RuboCop
|
|
114
110
|
call_as_argument_or_chain?(node) ||
|
115
111
|
hash_literal_in_arguments?(node) ||
|
116
112
|
node.descendants.any? do |n|
|
117
|
-
ambigious_literal?(n) || logical_operator?(n) ||
|
113
|
+
n.forwarded_args_type? || ambigious_literal?(n) || logical_operator?(n) ||
|
118
114
|
call_with_braced_block?(n)
|
119
115
|
end
|
120
116
|
end
|
121
117
|
|
122
118
|
def call_with_braced_block?(node)
|
123
|
-
(node.send_type? || node.super_type?) &&
|
124
|
-
node.block_node && node.block_node.braces?
|
119
|
+
(node.send_type? || node.super_type?) && node.block_node && node.block_node.braces?
|
125
120
|
end
|
126
121
|
|
127
122
|
def call_as_argument_or_chain?(node)
|
@@ -147,13 +142,11 @@ module RuboCop
|
|
147
142
|
previous = node.descendants.first
|
148
143
|
return false unless previous&.send_type?
|
149
144
|
|
150
|
-
previous.parenthesized? ||
|
151
|
-
allowed_chained_call_with_parentheses?(previous)
|
145
|
+
previous.parenthesized? || allowed_chained_call_with_parentheses?(previous)
|
152
146
|
end
|
153
147
|
|
154
148
|
def ambigious_literal?(node)
|
155
|
-
splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) ||
|
156
|
-
unary_literal?(node)
|
149
|
+
splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) || unary_literal?(node)
|
157
150
|
end
|
158
151
|
|
159
152
|
def splat?(node)
|
@@ -182,15 +175,14 @@ module RuboCop
|
|
182
175
|
end
|
183
176
|
|
184
177
|
def assigned_before?(node, target)
|
185
|
-
node.assignment? &&
|
186
|
-
node.loc.operator.begin < target.loc.begin
|
178
|
+
node.assignment? && node.loc.operator.begin < target.loc.begin
|
187
179
|
end
|
188
180
|
|
189
181
|
def inside_string_interpolation?(node)
|
190
182
|
node.ancestors.drop_while { |a| !a.begin_type? }.any?(&:dstr_type?)
|
191
183
|
end
|
192
184
|
end
|
193
|
-
# rubocop:enable Metrics/ModuleLength
|
185
|
+
# rubocop:enable Metrics/ModuleLength, Metrics/CyclomaticComplexity
|
194
186
|
end
|
195
187
|
end
|
196
188
|
end
|