rubocop 1.11.0 → 1.15.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 +6 -3
- data/config/default.yml +58 -6
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +6 -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/cli/command/suggest_extensions.rb +3 -2
- data/lib/rubocop/comment_config.rb +45 -101
- 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 +43 -11
- data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
- 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 +6 -12
- 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 +7 -5
- 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 +12 -10
- data/lib/rubocop/cop/layout/argument_alignment.rb +34 -18
- data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
- data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
- 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/block_end_newline.rb +4 -8
- 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 +18 -30
- data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
- 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 +10 -9
- 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_argument_indentation.rb +6 -5
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +36 -20
- 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/first_parameter_indentation.rb +6 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +18 -13
- 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_consistency.rb +9 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
- data/lib/rubocop/cop/layout/indentation_width.rb +24 -12
- 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 +22 -15
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
- data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
- data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
- 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 +83 -41
- 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_block.rb +18 -2
- 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 +11 -5
- 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 +9 -22
- 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/suppressed_exception.rb +44 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
- 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 +14 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
- 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 +5 -12
- 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 +12 -7
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +20 -4
- data/lib/rubocop/cop/mixin/code_length.rb +1 -3
- data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
- 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 +3 -6
- 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 +7 -7
- data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
- 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 +13 -10
- 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 +4 -3
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
- 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 +4 -7
- 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/string_literals_help.rb +1 -1
- 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 +7 -13
- 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 +6 -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/naming/rescued_exceptions_variable_name.rb +10 -0
- data/lib/rubocop/cop/offense.rb +3 -8
- data/lib/rubocop/cop/registry.rb +12 -11
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +3 -5
- 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.rb +59 -71
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
- data/lib/rubocop/cop/style/case_like_if.rb +16 -6
- data/lib/rubocop/cop/style/character_literal.rb +2 -4
- data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
- data/lib/rubocop/cop/style/class_equality_comparison.rb +2 -0
- 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 +4 -9
- 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/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +25 -3
- 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 +12 -9
- 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 +3 -5
- 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 +20 -24
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -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 +47 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
- 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_if_else_condition.rb +23 -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/nil_lambda.rb +29 -12
- 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 +40 -6
- 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 +6 -4
- data/lib/rubocop/cop/style/redundant_self.rb +9 -9
- 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 +21 -14
- 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 +21 -4
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +31 -7
- 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 +39 -0
- 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 +10 -0
- 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/top_level_method_definition.rb +75 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -3
- 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 +67 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +8 -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 +16 -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 +69 -9
- data/lib/rubocop/ext/regexp_parser.rb +3 -6
- 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 +23 -14
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/formatter/tap_formatter.rb +4 -2
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/options.rb +30 -50
- 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 +8 -15
- data/lib/rubocop/runner.rb +7 -14
- data/lib/rubocop/target_finder.rb +19 -16
- data/lib/rubocop/target_ruby.rb +4 -8
- data/lib/rubocop/version.rb +1 -1
- metadata +13 -7
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -5,6 +5,7 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
class MethodCallWithArgsParentheses
|
7
7
|
# Style omit_parentheses
|
8
|
+
# rubocop:disable Metrics/ModuleLength, Metrics/CyclomaticComplexity
|
8
9
|
module OmitParentheses
|
9
10
|
TRAILING_WHITESPACE_REGEX = /\s+\Z/.freeze
|
10
11
|
OMIT_MSG = 'Omit parentheses for method calls with arguments.'
|
@@ -15,10 +16,11 @@ module RuboCop
|
|
15
16
|
def omit_parentheses(node)
|
16
17
|
return unless node.parenthesized?
|
17
18
|
return if inside_endless_method_def?(node)
|
18
|
-
return if node
|
19
|
+
return if syntax_like_method_call?(node)
|
19
20
|
return if super_call_without_arguments?(node)
|
20
21
|
return if allowed_camel_case_method_call?(node)
|
21
22
|
return if legitimate_call_with_parentheses?(node)
|
23
|
+
return if allowed_string_interpolation_method_call?(node)
|
22
24
|
|
23
25
|
add_offense(offense_range(node), message: OMIT_MSG) do |corrector|
|
24
26
|
auto_correct(corrector, node)
|
@@ -40,7 +42,11 @@ module RuboCop
|
|
40
42
|
|
41
43
|
def inside_endless_method_def?(node)
|
42
44
|
# parens are required around arguments inside an endless method
|
43
|
-
node.each_ancestor(:def).any?(&:endless?) && node.arguments.any?
|
45
|
+
node.each_ancestor(:def, :defs).any?(&:endless?) && node.arguments.any?
|
46
|
+
end
|
47
|
+
|
48
|
+
def syntax_like_method_call?(node)
|
49
|
+
node.implicit_call? || node.operator_method?
|
44
50
|
end
|
45
51
|
|
46
52
|
def super_call_without_arguments?(node)
|
@@ -49,8 +55,12 @@ module RuboCop
|
|
49
55
|
|
50
56
|
def allowed_camel_case_method_call?(node)
|
51
57
|
node.camel_case_method? &&
|
52
|
-
(node.arguments.none? ||
|
53
|
-
|
58
|
+
(node.arguments.none? || cop_config['AllowParenthesesInCamelCaseMethod'])
|
59
|
+
end
|
60
|
+
|
61
|
+
def allowed_string_interpolation_method_call?(node)
|
62
|
+
cop_config['AllowParenthesesInStringInterpolation'] &&
|
63
|
+
inside_string_interpolation?(node)
|
54
64
|
end
|
55
65
|
|
56
66
|
def parentheses_at_the_end_of_multiline_call?(node)
|
@@ -88,8 +98,7 @@ module RuboCop
|
|
88
98
|
end
|
89
99
|
|
90
100
|
def call_in_optional_arguments?(node)
|
91
|
-
node.parent &&
|
92
|
-
(node.parent.optarg_type? || node.parent.kwoptarg_type?)
|
101
|
+
node.parent && (node.parent.optarg_type? || node.parent.kwoptarg_type?)
|
93
102
|
end
|
94
103
|
|
95
104
|
def call_in_single_line_inheritance?(node)
|
@@ -101,20 +110,19 @@ module RuboCop
|
|
101
110
|
call_as_argument_or_chain?(node) ||
|
102
111
|
hash_literal_in_arguments?(node) ||
|
103
112
|
node.descendants.any? do |n|
|
104
|
-
ambigious_literal?(n) || logical_operator?(n) ||
|
113
|
+
n.forwarded_args_type? || ambigious_literal?(n) || logical_operator?(n) ||
|
105
114
|
call_with_braced_block?(n)
|
106
115
|
end
|
107
116
|
end
|
108
117
|
|
109
118
|
def call_with_braced_block?(node)
|
110
|
-
(node.send_type? || node.super_type?) &&
|
111
|
-
node.block_node && node.block_node.braces?
|
119
|
+
(node.send_type? || node.super_type?) && node.block_node && node.block_node.braces?
|
112
120
|
end
|
113
121
|
|
114
122
|
def call_as_argument_or_chain?(node)
|
115
123
|
node.parent &&
|
116
124
|
(node.parent.send_type? && !assigned_before?(node.parent, node) ||
|
117
|
-
node.parent.csend_type? || node.parent.super_type?)
|
125
|
+
node.parent.csend_type? || node.parent.super_type? || node.parent.yield_type?)
|
118
126
|
end
|
119
127
|
|
120
128
|
def hash_literal_in_arguments?(node)
|
@@ -134,13 +142,11 @@ module RuboCop
|
|
134
142
|
previous = node.descendants.first
|
135
143
|
return false unless previous&.send_type?
|
136
144
|
|
137
|
-
previous.parenthesized? ||
|
138
|
-
allowed_chained_call_with_parentheses?(previous)
|
145
|
+
previous.parenthesized? || allowed_chained_call_with_parentheses?(previous)
|
139
146
|
end
|
140
147
|
|
141
148
|
def ambigious_literal?(node)
|
142
|
-
splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) ||
|
143
|
-
unary_literal?(node)
|
149
|
+
splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) || unary_literal?(node)
|
144
150
|
end
|
145
151
|
|
146
152
|
def splat?(node)
|
@@ -169,10 +175,14 @@ module RuboCop
|
|
169
175
|
end
|
170
176
|
|
171
177
|
def assigned_before?(node, target)
|
172
|
-
node.assignment? &&
|
173
|
-
|
178
|
+
node.assignment? && node.loc.operator.begin < target.loc.begin
|
179
|
+
end
|
180
|
+
|
181
|
+
def inside_string_interpolation?(node)
|
182
|
+
node.ancestors.drop_while { |a| !a.begin_type? }.any?(&:dstr_type?)
|
174
183
|
end
|
175
184
|
end
|
185
|
+
# rubocop:enable Metrics/ModuleLength, Metrics/CyclomaticComplexity
|
176
186
|
end
|
177
187
|
end
|
178
188
|
end
|
@@ -15,8 +15,7 @@ module RuboCop
|
|
15
15
|
include IgnoredMethods
|
16
16
|
extend AutoCorrector
|
17
17
|
|
18
|
-
MSG = 'Do not use parentheses for method calls with '
|
19
|
-
'no arguments.'
|
18
|
+
MSG = 'Do not use parentheses for method calls with no arguments.'
|
20
19
|
|
21
20
|
def on_send(node)
|
22
21
|
return unless !node.arguments? && node.parenthesized?
|
@@ -40,11 +40,9 @@ module RuboCop
|
|
40
40
|
|
41
41
|
receiver = node.receiver
|
42
42
|
|
43
|
-
return unless receiver&.block_type? &&
|
44
|
-
receiver.loc.end.is?('end')
|
43
|
+
return unless receiver&.block_type? && receiver.loc.end.is?('end')
|
45
44
|
|
46
|
-
range = range_between(receiver.loc.end.begin_pos,
|
47
|
-
node.source_range.end_pos)
|
45
|
+
range = range_between(receiver.loc.end.begin_pos, node.source_range.end_pos)
|
48
46
|
|
49
47
|
add_offense(range)
|
50
48
|
end
|
@@ -93,8 +93,7 @@ module RuboCop
|
|
93
93
|
extend AutoCorrector
|
94
94
|
|
95
95
|
MSG_PRESENT = 'Use def without parentheses.'
|
96
|
-
MSG_MISSING = 'Use def with parentheses when there are '
|
97
|
-
'parameters.'
|
96
|
+
MSG_MISSING = 'Use def with parentheses when there are parameters.'
|
98
97
|
|
99
98
|
def on_def(node)
|
100
99
|
return if node.endless?
|
@@ -124,18 +123,15 @@ module RuboCop
|
|
124
123
|
|
125
124
|
def correct_definition(def_node, corrector)
|
126
125
|
arguments_range = def_node.arguments.source_range
|
127
|
-
args_with_space = range_with_surrounding_space(range: arguments_range,
|
128
|
-
|
129
|
-
leading_space = range_between(args_with_space.begin_pos,
|
130
|
-
arguments_range.begin_pos)
|
126
|
+
args_with_space = range_with_surrounding_space(range: arguments_range, side: :left)
|
127
|
+
leading_space = range_between(args_with_space.begin_pos, arguments_range.begin_pos)
|
131
128
|
corrector.replace(leading_space, '(')
|
132
129
|
corrector.insert_after(arguments_range, ')')
|
133
130
|
end
|
134
131
|
|
135
132
|
def require_parentheses?(args)
|
136
133
|
style == :require_parentheses ||
|
137
|
-
(style == :require_no_parentheses_except_multiline &&
|
138
|
-
args.multiline?)
|
134
|
+
(style == :require_no_parentheses_except_multiline && args.multiline?)
|
139
135
|
end
|
140
136
|
|
141
137
|
def arguments_without_parentheses?(node)
|
@@ -98,10 +98,8 @@ module RuboCop
|
|
98
98
|
include ConfigurableEnforcedStyle
|
99
99
|
|
100
100
|
MSG = '`%<type>s` condition requires an `else`-clause.'
|
101
|
-
MSG_NIL = '`%<type>s` condition requires an `else`-clause with '
|
102
|
-
|
103
|
-
MSG_EMPTY = '`%<type>s` condition requires an empty ' \
|
104
|
-
'`else`-clause.'
|
101
|
+
MSG_NIL = '`%<type>s` condition requires an `else`-clause with `nil` in it.'
|
102
|
+
MSG_EMPTY = '`%<type>s` condition requires an empty `else`-clause.'
|
105
103
|
|
106
104
|
def on_normal_if_unless(node)
|
107
105
|
return if case_style?
|
@@ -22,8 +22,7 @@ module RuboCop
|
|
22
22
|
# end
|
23
23
|
#
|
24
24
|
class MissingRespondToMissing < Base
|
25
|
-
MSG =
|
26
|
-
'When using `method_missing`, define `respond_to_missing?`.'
|
25
|
+
MSG = 'When using `method_missing`, define `respond_to_missing?`.'
|
27
26
|
|
28
27
|
def on_def(node)
|
29
28
|
return unless node.method?(:method_missing)
|
@@ -53,8 +53,7 @@ module RuboCop
|
|
53
53
|
def range_to_remove_for_subsequent_mixin(mixins, node)
|
54
54
|
range = node.loc.expression
|
55
55
|
prev_mixin = mixins.each_cons(2) { |m, n| break m if n == node }
|
56
|
-
between = prev_mixin.loc.expression.end
|
57
|
-
.join(range.begin)
|
56
|
+
between = prev_mixin.loc.expression.end.join(range.begin)
|
58
57
|
# if separated from previous mixin with only whitespace?
|
59
58
|
unless /\S/.match?(between.source)
|
60
59
|
range = range.join(between) # then remove that too
|
@@ -103,12 +102,9 @@ module RuboCop
|
|
103
102
|
end
|
104
103
|
|
105
104
|
def sibling_mixins(send_node)
|
106
|
-
siblings = send_node.parent.each_child_node(:send)
|
107
|
-
.select(&:macro?)
|
105
|
+
siblings = send_node.parent.each_child_node(:send).select(&:macro?)
|
108
106
|
|
109
|
-
siblings.select
|
110
|
-
sibling_node.method?(send_node.method_name)
|
111
|
-
end
|
107
|
+
siblings.select { |sibling_node| sibling_node.method?(send_node.method_name) }
|
112
108
|
end
|
113
109
|
|
114
110
|
def grouped_style?
|
@@ -129,9 +125,7 @@ module RuboCop
|
|
129
125
|
end
|
130
126
|
|
131
127
|
def group_mixins(node, mixins)
|
132
|
-
mixin_names = mixins.reverse.flat_map
|
133
|
-
mixin.arguments.map(&:source)
|
134
|
-
end
|
128
|
+
mixin_names = mixins.reverse.flat_map { |mixin| mixin.arguments.map(&:source) }
|
135
129
|
|
136
130
|
"#{node.method_name} #{mixin_names.join(', ')}"
|
137
131
|
end
|
@@ -41,8 +41,7 @@ module RuboCop
|
|
41
41
|
# prepend M
|
42
42
|
# end
|
43
43
|
class MixinUsage < Base
|
44
|
-
MSG = '`%<statement>s` is used at the top level. Use inside `class` '
|
45
|
-
'or `module`.'
|
44
|
+
MSG = '`%<statement>s` is used at the top level. Use inside `class` or `module`.'
|
46
45
|
RESTRICT_ON_SEND = %i[include extend prepend].freeze
|
47
46
|
|
48
47
|
# @!method include_statement(node)
|
@@ -75,12 +75,9 @@ module RuboCop
|
|
75
75
|
include ConfigurableEnforcedStyle
|
76
76
|
extend AutoCorrector
|
77
77
|
|
78
|
-
MODULE_FUNCTION_MSG =
|
79
|
-
|
80
|
-
|
81
|
-
'Use `extend self` instead of `module_function`.'
|
82
|
-
FORBIDDEN_MSG =
|
83
|
-
'Do not use `module_function` or `extend self`.'
|
78
|
+
MODULE_FUNCTION_MSG = 'Use `module_function` instead of `extend self`.'
|
79
|
+
EXTEND_SELF_MSG = 'Use `extend self` instead of `module_function`.'
|
80
|
+
FORBIDDEN_MSG = 'Do not use `module_function` or `extend self`.'
|
84
81
|
|
85
82
|
# @!method module_function_node?(node)
|
86
83
|
def_node_matcher :module_function_node?, '(send nil? :module_function)'
|
@@ -33,8 +33,7 @@ module RuboCop
|
|
33
33
|
|
34
34
|
next unless receiver&.block_type? && receiver&.multiline?
|
35
35
|
|
36
|
-
range = range_between(receiver.loc.end.begin_pos,
|
37
|
-
node.send_node.source_range.end_pos)
|
36
|
+
range = range_between(receiver.loc.end.begin_pos, node.send_node.source_range.end_pos)
|
38
37
|
|
39
38
|
add_offense(range)
|
40
39
|
|
@@ -29,9 +29,7 @@ module RuboCop
|
|
29
29
|
return if opening_line(node) == closing_line(node)
|
30
30
|
return if correction_exceeds_max_line_length?(node)
|
31
31
|
|
32
|
-
add_offense(node)
|
33
|
-
autocorrect(corrector, node)
|
34
|
-
end
|
32
|
+
add_offense(node) { |corrector| autocorrect(corrector, node) }
|
35
33
|
end
|
36
34
|
alias on_defs on_def
|
37
35
|
|
@@ -40,7 +38,7 @@ module RuboCop
|
|
40
38
|
def autocorrect(corrector, node)
|
41
39
|
arguments = node.arguments
|
42
40
|
joined_arguments = arguments.map(&:source).join(', ')
|
43
|
-
last_line_source_of_arguments =
|
41
|
+
last_line_source_of_arguments = last_line_source_of_arguments(arguments)
|
44
42
|
|
45
43
|
if last_line_source_of_arguments.start_with?(')')
|
46
44
|
joined_arguments = "#{joined_arguments}#{last_line_source_of_arguments}"
|
@@ -48,13 +46,20 @@ module RuboCop
|
|
48
46
|
corrector.remove(range_by_whole_lines(arguments.loc.end, include_final_newline: true))
|
49
47
|
end
|
50
48
|
|
51
|
-
corrector.
|
49
|
+
corrector.remove(arguments_range(node))
|
50
|
+
corrector.insert_after(arguments.loc.begin, joined_arguments)
|
51
|
+
end
|
52
|
+
|
53
|
+
def last_line_source_of_arguments(arguments)
|
54
|
+
processed_source[arguments.last_line - 1].strip
|
52
55
|
end
|
53
56
|
|
54
57
|
def arguments_range(node)
|
55
|
-
range_between(
|
58
|
+
range = range_between(
|
56
59
|
node.first_argument.source_range.begin_pos, node.last_argument.source_range.end_pos
|
57
60
|
)
|
61
|
+
|
62
|
+
range_with_surrounding_space(range: range, side: :left)
|
58
63
|
end
|
59
64
|
|
60
65
|
def opening_line(node)
|
@@ -28,8 +28,7 @@ module RuboCop
|
|
28
28
|
class MultilineTernaryOperator < Base
|
29
29
|
extend AutoCorrector
|
30
30
|
|
31
|
-
MSG = 'Avoid multi-line ternary operators, '
|
32
|
-
'use `if` or `unless` instead.'
|
31
|
+
MSG = 'Avoid multi-line ternary operators, use `if` or `unless` instead.'
|
33
32
|
|
34
33
|
def on_if(node)
|
35
34
|
return unless offense?(node)
|
@@ -92,9 +92,7 @@ module RuboCop
|
|
92
92
|
|
93
93
|
def variables_in_node(node)
|
94
94
|
if node.or_type?
|
95
|
-
node.node_parts
|
96
|
-
.flat_map { |node_part| variables_in_node(node_part) }
|
97
|
-
.uniq
|
95
|
+
node.node_parts.flat_map { |node_part| variables_in_node(node_part) }.uniq
|
98
96
|
else
|
99
97
|
variables_in_simple_node(node)
|
100
98
|
end
|
@@ -142,7 +140,7 @@ module RuboCop
|
|
142
140
|
def switch_comparison?(node)
|
143
141
|
return true if @last_comparison.nil?
|
144
142
|
|
145
|
-
@last_comparison.descendants.none?
|
143
|
+
@last_comparison.descendants.none?(node)
|
146
144
|
end
|
147
145
|
|
148
146
|
def reset_comparison
|
@@ -87,9 +87,7 @@ module RuboCop
|
|
87
87
|
return if operation_produces_immutable_object?(value)
|
88
88
|
return if frozen_string_literal?(value)
|
89
89
|
|
90
|
-
add_offense(value)
|
91
|
-
autocorrect(corrector, value)
|
92
|
-
end
|
90
|
+
add_offense(value) { |corrector| autocorrect(corrector, value) }
|
93
91
|
end
|
94
92
|
|
95
93
|
def check(value)
|
@@ -101,9 +99,7 @@ module RuboCop
|
|
101
99
|
return if FROZEN_STRING_LITERAL_TYPES.include?(value.type) &&
|
102
100
|
frozen_string_literals_enabled?
|
103
101
|
|
104
|
-
add_offense(value)
|
105
|
-
autocorrect(corrector, value)
|
106
|
-
end
|
102
|
+
add_offense(value) { |corrector| autocorrect(corrector, value) }
|
107
103
|
end
|
108
104
|
|
109
105
|
def autocorrect(corrector, node)
|
@@ -133,8 +129,7 @@ module RuboCop
|
|
133
129
|
end
|
134
130
|
|
135
131
|
def frozen_string_literal?(node)
|
136
|
-
FROZEN_STRING_LITERAL_TYPES.include?(node.type) &&
|
137
|
-
frozen_string_literals_enabled?
|
132
|
+
FROZEN_STRING_LITERAL_TYPES.include?(node.type) && frozen_string_literals_enabled?
|
138
133
|
end
|
139
134
|
|
140
135
|
def frozen_regexp_or_range_literals?(node)
|
@@ -142,8 +137,7 @@ module RuboCop
|
|
142
137
|
end
|
143
138
|
|
144
139
|
def requires_parentheses?(node)
|
145
|
-
node.range_type? ||
|
146
|
-
(node.send_type? && node.loc.dot.nil?)
|
140
|
+
node.range_type? || (node.send_type? && node.loc.dot.nil?)
|
147
141
|
end
|
148
142
|
|
149
143
|
def correct_splat_expansion(corrector, expr, splat_value)
|
@@ -97,8 +97,29 @@ module RuboCop
|
|
97
97
|
if node.if_branch.nil?
|
98
98
|
corrector.remove(range_by_whole_lines(node.loc.else, include_final_newline: true))
|
99
99
|
else
|
100
|
-
|
101
|
-
|
100
|
+
if_range = if_range(node)
|
101
|
+
else_range = else_range(node)
|
102
|
+
|
103
|
+
corrector.replace(if_range, else_range.source)
|
104
|
+
corrector.replace(else_range, if_range.source)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Collect the entire if branch, including whitespace and comments
|
109
|
+
def if_range(node)
|
110
|
+
if node.ternary?
|
111
|
+
node.if_branch
|
112
|
+
else
|
113
|
+
range_between(node.condition.loc.expression.end_pos, node.loc.else.begin_pos)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Collect the entire else branch, including whitespace and comments
|
118
|
+
def else_range(node)
|
119
|
+
if node.ternary?
|
120
|
+
node.else_branch
|
121
|
+
else
|
122
|
+
range_between(node.loc.else.end_pos, node.loc.end.begin_pos)
|
102
123
|
end
|
103
124
|
end
|
104
125
|
end
|