rubocop 1.12.1 → 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 +2 -5
- 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 +4 -10
- 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 +1 -2
- 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/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 -17
- 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 +1 -3
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +5 -12
- 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 +2 -8
- 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 -8
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +28 -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 +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +7 -13
- 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 +1 -3
- 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 +4 -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 +15 -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 +4 -10
- 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/file_finder.rb +1 -3
- 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/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
@@ -19,10 +19,8 @@ module RuboCop
|
|
19
19
|
include RangeHelp
|
20
20
|
extend AutoCorrector
|
21
21
|
|
22
|
-
MSG = 'Include a copyright notice matching /%<notice>s/ before '
|
23
|
-
|
24
|
-
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in ' \
|
25
|
-
'your RuboCop config'
|
22
|
+
MSG = 'Include a copyright notice matching /%<notice>s/ before any code.'
|
23
|
+
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in your RuboCop config'
|
26
24
|
|
27
25
|
def on_new_investigation
|
28
26
|
return if notice.empty? || notice_found?(processed_source)
|
@@ -57,8 +55,7 @@ module RuboCop
|
|
57
55
|
regex = Regexp.new(notice)
|
58
56
|
return if autocorrect_notice&.match?(regex)
|
59
57
|
|
60
|
-
raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must "
|
61
|
-
"match Notice /#{notice}/"
|
58
|
+
raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must match Notice /#{notice}/"
|
62
59
|
end
|
63
60
|
|
64
61
|
def insert_notice_before(processed_source)
|
@@ -63,15 +63,12 @@ module RuboCop
|
|
63
63
|
PATTERN
|
64
64
|
|
65
65
|
def on_send(node)
|
66
|
-
return unless date_time?(node) ||
|
67
|
-
(to_datetime?(node) && disallow_coercion?)
|
66
|
+
return unless date_time?(node) || (to_datetime?(node) && disallow_coercion?)
|
68
67
|
return if historic_date?(node)
|
69
68
|
|
70
69
|
message = to_datetime?(node) ? COERCION_MSG : CLASS_MSG
|
71
70
|
|
72
|
-
add_offense(node, message: message)
|
73
|
-
autocorrect(corrector, node)
|
74
|
-
end
|
71
|
+
add_offense(node, message: message) { |corrector| autocorrect(corrector, node) }
|
75
72
|
end
|
76
73
|
|
77
74
|
private
|
@@ -36,8 +36,7 @@ module RuboCop
|
|
36
36
|
class DefWithParentheses < Base
|
37
37
|
extend AutoCorrector
|
38
38
|
|
39
|
-
MSG = "Omit the parentheses in defs when the method doesn't accept "
|
40
|
-
'any arguments.'
|
39
|
+
MSG = "Omit the parentheses in defs when the method doesn't accept any arguments."
|
41
40
|
|
42
41
|
def on_def(node)
|
43
42
|
return if node.single_line?
|
@@ -25,8 +25,7 @@ module RuboCop
|
|
25
25
|
class EachForSimpleLoop < Base
|
26
26
|
extend AutoCorrector
|
27
27
|
|
28
|
-
MSG = 'Use `Integer#times` for a simple loop which iterates a fixed '
|
29
|
-
'number of times.'
|
28
|
+
MSG = 'Use `Integer#times` for a simple loop which iterates a fixed number of times.'
|
30
29
|
|
31
30
|
def on_block(node)
|
32
31
|
return unless offending_each_range(node)
|
@@ -44,19 +44,14 @@ module RuboCop
|
|
44
44
|
def on_case(case_node)
|
45
45
|
return if case_node.condition
|
46
46
|
|
47
|
-
branch_bodies = [
|
48
|
-
*case_node.when_branches.map(&:body),
|
49
|
-
case_node.else_branch
|
50
|
-
].compact
|
47
|
+
branch_bodies = [*case_node.when_branches.map(&:body), case_node.else_branch].compact
|
51
48
|
|
52
49
|
return if branch_bodies.any? do |body|
|
53
50
|
body.return_type? ||
|
54
51
|
body.each_descendant.any?(&:return_type?)
|
55
52
|
end
|
56
53
|
|
57
|
-
add_offense(case_node.loc.keyword)
|
58
|
-
autocorrect(corrector, case_node)
|
59
|
-
end
|
54
|
+
add_offense(case_node.loc.keyword) { |corrector| autocorrect(corrector, case_node) }
|
60
55
|
end
|
61
56
|
|
62
57
|
private
|
@@ -123,17 +123,13 @@ module RuboCop
|
|
123
123
|
def empty_check(node)
|
124
124
|
return unless node.else? && !node.else_branch
|
125
125
|
|
126
|
-
add_offense(node.loc.else)
|
127
|
-
autocorrect(corrector, node)
|
128
|
-
end
|
126
|
+
add_offense(node.loc.else) { |corrector| autocorrect(corrector, node) }
|
129
127
|
end
|
130
128
|
|
131
129
|
def nil_check(node)
|
132
130
|
return unless node.else_branch&.nil_type?
|
133
131
|
|
134
|
-
add_offense(node.loc.else)
|
135
|
-
autocorrect(corrector, node)
|
136
|
-
end
|
132
|
+
add_offense(node.loc.else) { |corrector| autocorrect(corrector, node) }
|
137
133
|
end
|
138
134
|
|
139
135
|
def autocorrect(corrector, node)
|
@@ -154,9 +150,7 @@ module RuboCop
|
|
154
150
|
return node if node.case_type?
|
155
151
|
return node unless node.elsif?
|
156
152
|
|
157
|
-
node.each_ancestor(:if, :case, :when).find(-> { node })
|
158
|
-
parent.loc.end
|
159
|
-
end
|
153
|
+
node.each_ancestor(:if, :case, :when).find(-> { node }) { |parent| parent.loc.end }
|
160
154
|
end
|
161
155
|
|
162
156
|
def autocorrect_forbidden?(type)
|
@@ -37,8 +37,7 @@ module RuboCop
|
|
37
37
|
def_node_matcher :str_node, '(send (const {nil? cbase} :String) :new)'
|
38
38
|
|
39
39
|
# @!method array_with_block(node)
|
40
|
-
def_node_matcher :array_with_block,
|
41
|
-
'(block (send (const {nil? cbase} :Array) :new) args _)'
|
40
|
+
def_node_matcher :array_with_block, '(block (send (const {nil? cbase} :Array) :new) args _)'
|
42
41
|
|
43
42
|
# @!method hash_with_block(node)
|
44
43
|
def_node_matcher :hash_with_block, <<~PATTERN
|
@@ -84,20 +83,17 @@ module RuboCop
|
|
84
83
|
parent = node.parent
|
85
84
|
return false unless parent && %i[send super zsuper].include?(parent.type)
|
86
85
|
|
87
|
-
node.equal?(parent.arguments.first) &&
|
88
|
-
!parentheses?(node.parent)
|
86
|
+
node.equal?(parent.arguments.first) && !parentheses?(node.parent)
|
89
87
|
end
|
90
88
|
|
91
89
|
def replacement_range(node)
|
92
|
-
if hash_node(node) &&
|
93
|
-
first_argument_unparenthesized?(node)
|
90
|
+
if hash_node(node) && first_argument_unparenthesized?(node)
|
94
91
|
# `some_method {}` is not same as `some_method Hash.new`
|
95
92
|
# because the braces are interpreted as a block. We will have
|
96
93
|
# to rewrite the arguments to wrap them in parenthesis.
|
97
94
|
args = node.parent.arguments
|
98
95
|
|
99
|
-
range_between(args[0].source_range.begin_pos - 1,
|
100
|
-
args[-1].source_range.end_pos)
|
96
|
+
range_between(args[0].source_range.begin_pos - 1, args[-1].source_range.end_pos)
|
101
97
|
else
|
102
98
|
node.source_range
|
103
99
|
end
|
@@ -45,16 +45,13 @@ module RuboCop
|
|
45
45
|
extend AutoCorrector
|
46
46
|
|
47
47
|
MSG_COMPACT = 'Put empty method definitions on a single line.'
|
48
|
-
MSG_EXPANDED = 'Put the `end` of empty method definitions on the '
|
49
|
-
'next line.'
|
48
|
+
MSG_EXPANDED = 'Put the `end` of empty method definitions on the next line.'
|
50
49
|
|
51
50
|
def on_def(node)
|
52
51
|
return if node.body || comment_lines?(node)
|
53
52
|
return if correct_style?(node)
|
54
53
|
|
55
|
-
add_offense(node)
|
56
|
-
corrector.replace(node, corrected(node))
|
57
|
-
end
|
54
|
+
add_offense(node) { |corrector| corrector.replace(node, corrected(node)) }
|
58
55
|
end
|
59
56
|
alias on_defs on_def
|
60
57
|
|
@@ -65,8 +62,7 @@ module RuboCop
|
|
65
62
|
end
|
66
63
|
|
67
64
|
def correct_style?(node)
|
68
|
-
compact_style? && compact?(node) ||
|
69
|
-
expanded_style? && expanded?(node)
|
65
|
+
compact_style? && compact?(node) || expanded_style? && expanded?(node)
|
70
66
|
end
|
71
67
|
|
72
68
|
def corrected(node)
|
@@ -15,8 +15,7 @@ module RuboCop
|
|
15
15
|
class EndBlock < Base
|
16
16
|
extend AutoCorrector
|
17
17
|
|
18
|
-
MSG = 'Avoid the use of `END` blocks. '
|
19
|
-
'Use `Kernel#at_exit` instead.'
|
18
|
+
MSG = 'Avoid the use of `END` blocks. Use `Kernel#at_exit` instead.'
|
20
19
|
|
21
20
|
def on_postexe(node)
|
22
21
|
add_offense(node.loc.keyword) do |corrector|
|
@@ -79,9 +79,7 @@ module RuboCop
|
|
79
79
|
def handle_disallow_style(node)
|
80
80
|
return unless node.endless?
|
81
81
|
|
82
|
-
add_offense(node)
|
83
|
-
correct_to_multiline(corrector, node)
|
84
|
-
end
|
82
|
+
add_offense(node) { |corrector| correct_to_multiline(corrector, node) }
|
85
83
|
end
|
86
84
|
|
87
85
|
def correct_to_multiline(corrector, node)
|
@@ -112,13 +112,11 @@ module RuboCop
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def special_file_keyword?(node)
|
115
|
-
node.str_type? &&
|
116
|
-
node.source == '__FILE__'
|
115
|
+
node.str_type? && node.source == '__FILE__'
|
117
116
|
end
|
118
117
|
|
119
118
|
def special_line_keyword?(node)
|
120
|
-
node.int_type? &&
|
121
|
-
node.source == '__LINE__'
|
119
|
+
node.int_type? && node.source == '__LINE__'
|
122
120
|
end
|
123
121
|
|
124
122
|
def file_and_line(node)
|
@@ -85,9 +85,7 @@ module RuboCop
|
|
85
85
|
elsif (default_dir = pathname_parent_expand_path(node))
|
86
86
|
return unless unrecommended_argument?(default_dir)
|
87
87
|
|
88
|
-
add_offense(node, message: PATHNAME_MSG)
|
89
|
-
autocorrect(corrector, node)
|
90
|
-
end
|
88
|
+
add_offense(node, message: PATHNAME_MSG) { |corrector| autocorrect(corrector, node) }
|
91
89
|
elsif (default_dir = pathname_new_parent_expand_path(node))
|
92
90
|
return unless unrecommended_argument?(default_dir)
|
93
91
|
|
@@ -106,10 +106,7 @@ module RuboCop
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def block_body_range(block_node, send_node)
|
109
|
-
range_between(
|
110
|
-
send_node.loc.expression.end_pos,
|
111
|
-
block_node.loc.end.end_pos
|
112
|
-
)
|
109
|
+
range_between(send_node.loc.expression.end_pos, block_node.loc.end.end_pos)
|
113
110
|
end
|
114
111
|
end
|
115
112
|
end
|
@@ -146,10 +146,7 @@ module RuboCop
|
|
146
146
|
next if seq.percent?
|
147
147
|
|
148
148
|
detected_style = seq.style
|
149
|
-
token = contents.begin.adjust(
|
150
|
-
begin_pos: seq.begin_pos,
|
151
|
-
end_pos: seq.end_pos
|
152
|
-
)
|
149
|
+
token = contents.begin.adjust(begin_pos: seq.begin_pos, end_pos: seq.end_pos)
|
153
150
|
|
154
151
|
yield(detected_style, token)
|
155
152
|
end
|
@@ -76,8 +76,7 @@ module RuboCop
|
|
76
76
|
include RangeHelp
|
77
77
|
extend AutoCorrector
|
78
78
|
|
79
|
-
MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: '
|
80
|
-
'true`.'
|
79
|
+
MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: true`.'
|
81
80
|
MSG_MISSING = 'Missing frozen string literal comment.'
|
82
81
|
MSG_UNNECESSARY = 'Unnecessary frozen string literal comment.'
|
83
82
|
MSG_DISABLED = 'Frozen string literal comment must be set to `true`.'
|
@@ -143,17 +142,13 @@ module RuboCop
|
|
143
142
|
def missing_offense(processed_source)
|
144
143
|
range = source_range(processed_source.buffer, 0, 0)
|
145
144
|
|
146
|
-
add_offense(range, message: MSG_MISSING)
|
147
|
-
insert_comment(corrector)
|
148
|
-
end
|
145
|
+
add_offense(range, message: MSG_MISSING) { |corrector| insert_comment(corrector) }
|
149
146
|
end
|
150
147
|
|
151
148
|
def missing_true_offense(processed_source)
|
152
149
|
range = source_range(processed_source.buffer, 0, 0)
|
153
150
|
|
154
|
-
add_offense(range, message: MSG_MISSING_TRUE)
|
155
|
-
insert_comment(corrector)
|
156
|
-
end
|
151
|
+
add_offense(range, message: MSG_MISSING_TRUE) { |corrector| insert_comment(corrector) }
|
157
152
|
end
|
158
153
|
|
159
154
|
def unnecessary_comment_offense(processed_source)
|
@@ -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
|
@@ -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
|