rubocop 1.12.1 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -2
- data/config/default.yml +78 -8
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +10 -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 +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 +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 +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 +1 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +30 -14
- 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 +57 -11
- 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 +14 -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 +36 -15
- 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 +6 -4
- 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 +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 +19 -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_in_pattern.rb +62 -0
- 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 +2 -3
- 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 +18 -27
- 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 +4 -16
- 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 +2 -4
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +19 -3
- 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 +7 -7
- data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
- 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/string_literals_help.rb +3 -5
- data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
- 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 +19 -10
- 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 +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 +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 +19 -3
- 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 +27 -8
- data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
- data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
- 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 -12
- 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_in_pattern_then.rb +62 -0
- 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/multiline_when_then.rb +2 -11
- 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 +17 -9
- 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/quoted_symbols.rb +110 -0
- 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 +25 -7
- 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 +20 -4
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +15 -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 +2 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
- data/lib/rubocop/cop/style/string_literals.rb +3 -5
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
- 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/top_level_method_definition.rb +83 -0
- 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 +67 -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 +4 -2
- 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 +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 +5 -1
- 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 +23 -14
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- 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 +18 -16
- data/lib/rubocop/target_ruby.rb +4 -8
- data/lib/rubocop/version.rb +1 -1
- metadata +16 -7
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -132,9 +132,7 @@ module RuboCop
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def extract_heredoc_argument(node)
|
135
|
-
node.arguments.find
|
136
|
-
extract_heredoc(arg_node)
|
137
|
-
end
|
135
|
+
node.arguments.find { |arg_node| extract_heredoc(arg_node) }
|
138
136
|
end
|
139
137
|
|
140
138
|
def extract_heredoc(node)
|
@@ -234,12 +232,7 @@ module RuboCop
|
|
234
232
|
def remove_internal_trailing_comma(node, corrector)
|
235
233
|
offset = internal_trailing_comma_offset_from_last_arg(node)
|
236
234
|
last_arg_end_pos = node.children.last.source_range.end_pos
|
237
|
-
corrector.remove(
|
238
|
-
range_between(
|
239
|
-
last_arg_end_pos,
|
240
|
-
last_arg_end_pos + offset
|
241
|
-
)
|
242
|
-
)
|
235
|
+
corrector.remove(range_between(last_arg_end_pos, last_arg_end_pos + offset))
|
243
236
|
end
|
244
237
|
|
245
238
|
def internal_trailing_comma?(node)
|
@@ -81,10 +81,7 @@ module RuboCop
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def width_message(indentation_width)
|
84
|
-
format(
|
85
|
-
WIDTH_MSG,
|
86
|
-
indentation_width: indentation_width
|
87
|
-
)
|
84
|
+
format(WIDTH_MSG, indentation_width: indentation_width)
|
88
85
|
end
|
89
86
|
|
90
87
|
def line_too_long?(node)
|
@@ -126,8 +123,7 @@ module RuboCop
|
|
126
123
|
body = heredoc_body(node)
|
127
124
|
body_indent_level = indent_level(body)
|
128
125
|
correct_indent_level = base_indent_level(node) + indentation_width
|
129
|
-
body.gsub(/^[^\S\r\n]{#{body_indent_level}}/,
|
130
|
-
' ' * correct_indent_level)
|
126
|
+
body.gsub(/^[^\S\r\n]{#{body_indent_level}}/, ' ' * correct_indent_level)
|
131
127
|
end
|
132
128
|
|
133
129
|
def indented_end(node)
|
@@ -46,9 +46,7 @@ module RuboCop
|
|
46
46
|
next unless (range = find_offence(line, lineno))
|
47
47
|
next if in_string_literal?(str_ranges, range)
|
48
48
|
|
49
|
-
add_offense(range)
|
50
|
-
autocorrect(corrector, range)
|
51
|
-
end
|
49
|
+
add_offense(range) { |corrector| autocorrect(corrector, range) }
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|
@@ -135,8 +135,7 @@ module RuboCop
|
|
135
135
|
check_indentation(when_node.loc.keyword, when_node.body)
|
136
136
|
end
|
137
137
|
|
138
|
-
check_indentation(case_node.when_branches.last.loc.keyword,
|
139
|
-
case_node.else_branch)
|
138
|
+
check_indentation(case_node.when_branches.last.loc.keyword, case_node.else_branch)
|
140
139
|
end
|
141
140
|
|
142
141
|
def on_if(node, base = node)
|
@@ -314,9 +313,12 @@ module RuboCop
|
|
314
313
|
check_rescue?(body_node)
|
315
314
|
elsif body_node.ensure_type?
|
316
315
|
block_body, = *body_node
|
317
|
-
return unless block_body
|
318
316
|
|
319
|
-
|
317
|
+
if block_body&.rescue_type?
|
318
|
+
check_rescue?(block_body)
|
319
|
+
else
|
320
|
+
!block_body.nil?
|
321
|
+
end
|
320
322
|
else
|
321
323
|
true
|
322
324
|
end
|
@@ -41,10 +41,7 @@ module RuboCop
|
|
41
41
|
return unless token
|
42
42
|
return if token.column.zero?
|
43
43
|
|
44
|
-
space_range =
|
45
|
-
range_with_surrounding_space(range: token.pos,
|
46
|
-
side: :left,
|
47
|
-
newlines: false)
|
44
|
+
space_range = range_with_surrounding_space(range: token.pos, side: :left, newlines: false)
|
48
45
|
# If the file starts with a byte order mark (BOM), the column can be
|
49
46
|
# non-zero, but then we find out here if there's no space to the left
|
50
47
|
# of the first token.
|
@@ -122,8 +122,7 @@ module RuboCop
|
|
122
122
|
range = breakable_block_range(block_node)
|
123
123
|
pos = range.begin_pos + 1
|
124
124
|
|
125
|
-
breakable_range_by_line_index[line_index] =
|
126
|
-
range_between(pos, pos + 1)
|
125
|
+
breakable_range_by_line_index[line_index] = range_between(pos, pos + 1)
|
127
126
|
end
|
128
127
|
|
129
128
|
def breakable_block_range(block_node)
|
@@ -171,11 +170,7 @@ module RuboCop
|
|
171
170
|
end
|
172
171
|
return check_uri_line(line, line_index) if allow_uri?
|
173
172
|
|
174
|
-
register_offense(
|
175
|
-
excess_range(nil, line, line_index),
|
176
|
-
line,
|
177
|
-
line_index
|
178
|
-
)
|
173
|
+
register_offense(excess_range(nil, line, line_index), line, line_index)
|
179
174
|
end
|
180
175
|
|
181
176
|
def ignored_line?(line, line_index)
|
@@ -242,9 +237,7 @@ module RuboCop
|
|
242
237
|
end
|
243
238
|
|
244
239
|
def line_in_heredoc?(line_number)
|
245
|
-
heredocs.any?
|
246
|
-
range.cover?(line_number)
|
247
|
-
end
|
240
|
+
heredocs.any? { |range, _delimiter| range.cover?(line_number) }
|
248
241
|
end
|
249
242
|
|
250
243
|
def check_directive_line(line, line_index)
|
@@ -266,11 +259,7 @@ module RuboCop
|
|
266
259
|
uri_range = find_excessive_uri_range(line)
|
267
260
|
return if uri_range && allowed_uri_position?(line, uri_range)
|
268
261
|
|
269
|
-
register_offense(
|
270
|
-
excess_range(uri_range, line, line_index),
|
271
|
-
line,
|
272
|
-
line_index
|
273
|
-
)
|
262
|
+
register_offense(excess_range(uri_range, line, line_index), line, line_index)
|
274
263
|
end
|
275
264
|
end
|
276
265
|
end
|
@@ -24,8 +24,7 @@ module RuboCop
|
|
24
24
|
include MultilineElementLineBreaks
|
25
25
|
extend AutoCorrector
|
26
26
|
|
27
|
-
MSG = 'Each item in a multi-line array must start '
|
28
|
-
'on a separate line.'
|
27
|
+
MSG = 'Each item in a multi-line array must start on a separate line.'
|
29
28
|
|
30
29
|
def on_array(node)
|
31
30
|
check_line_breaks(node, node.children)
|
@@ -52,17 +52,14 @@ module RuboCop
|
|
52
52
|
include RangeHelp
|
53
53
|
extend AutoCorrector
|
54
54
|
|
55
|
-
MSG = 'Block body expression is on the same line as '
|
56
|
-
|
57
|
-
ARG_MSG = 'Block argument expression is not on the same line as the ' \
|
58
|
-
'block start.'
|
55
|
+
MSG = 'Block body expression is on the same line as the block start.'
|
56
|
+
ARG_MSG = 'Block argument expression is not on the same line as the block start.'
|
59
57
|
PIPE_SIZE = '|'.length
|
60
58
|
|
61
59
|
def on_block(node)
|
62
60
|
return if node.single_line?
|
63
61
|
|
64
|
-
unless args_on_beginning_line?(node) ||
|
65
|
-
line_break_necessary_in_args?(node)
|
62
|
+
unless args_on_beginning_line?(node) || line_break_necessary_in_args?(node)
|
66
63
|
add_offense_for_expression(node, node.arguments, ARG_MSG)
|
67
64
|
end
|
68
65
|
|
@@ -74,8 +71,7 @@ module RuboCop
|
|
74
71
|
private
|
75
72
|
|
76
73
|
def args_on_beginning_line?(node)
|
77
|
-
!node.arguments? ||
|
78
|
-
node.loc.begin.line == node.arguments.loc.last_line
|
74
|
+
!node.arguments? || node.loc.begin.line == node.arguments.loc.last_line
|
79
75
|
end
|
80
76
|
|
81
77
|
def line_break_necessary_in_args?(node)
|
@@ -101,9 +97,7 @@ module RuboCop
|
|
101
97
|
expression = expr.source_range
|
102
98
|
range = range_between(expression.begin_pos, expression.end_pos)
|
103
99
|
|
104
|
-
add_offense(range, message: msg)
|
105
|
-
autocorrect(corrector, node)
|
106
|
-
end
|
100
|
+
add_offense(range, message: msg) { |corrector| autocorrect(corrector, node) }
|
107
101
|
end
|
108
102
|
|
109
103
|
def autocorrect(corrector, node)
|
@@ -128,8 +122,7 @@ module RuboCop
|
|
128
122
|
newlines: false
|
129
123
|
).end_pos
|
130
124
|
range = range_between(node.loc.begin.end.begin_pos, end_pos)
|
131
|
-
corrector.replace(range,
|
132
|
-
" |#{block_arg_string(node, node.arguments)}|")
|
125
|
+
corrector.replace(range, " |#{block_arg_string(node, node.arguments)}|")
|
133
126
|
end
|
134
127
|
|
135
128
|
def autocorrect_body(corrector, node, block_body)
|
@@ -141,8 +134,7 @@ module RuboCop
|
|
141
134
|
|
142
135
|
block_start_col = node.source_range.column
|
143
136
|
|
144
|
-
corrector.insert_before(first_node,
|
145
|
-
"\n #{' ' * block_start_col}")
|
137
|
+
corrector.insert_before(first_node, "\n #{' ' * block_start_col}")
|
146
138
|
end
|
147
139
|
|
148
140
|
def block_arg_string(node, args)
|
@@ -24,8 +24,7 @@ module RuboCop
|
|
24
24
|
include MultilineElementLineBreaks
|
25
25
|
extend AutoCorrector
|
26
26
|
|
27
|
-
MSG = 'Each key in a multi-line hash must start on a '
|
28
|
-
'separate line.'
|
27
|
+
MSG = 'Each key in a multi-line hash must start on a separate line.'
|
29
28
|
|
30
29
|
def on_hash(node)
|
31
30
|
# This cop only deals with hashes wrapped by a set of curly
|
@@ -23,8 +23,7 @@ module RuboCop
|
|
23
23
|
include MultilineElementLineBreaks
|
24
24
|
extend AutoCorrector
|
25
25
|
|
26
|
-
MSG = 'Each argument in a multi-line method call must start '
|
27
|
-
'on a separate line.'
|
26
|
+
MSG = 'Each argument in a multi-line method call must start on a separate line.'
|
28
27
|
|
29
28
|
def on_send(node)
|
30
29
|
return if node.method?(:[]=)
|
@@ -152,8 +152,7 @@ module RuboCop
|
|
152
152
|
def alignment_base(node, rhs, given_style)
|
153
153
|
case given_style
|
154
154
|
when :aligned
|
155
|
-
semantic_alignment_base(node, rhs) ||
|
156
|
-
syntactic_alignment_base(node, rhs)
|
155
|
+
semantic_alignment_base(node, rhs) || syntactic_alignment_base(node, rhs)
|
157
156
|
when :indented
|
158
157
|
nil
|
159
158
|
when :indented_relative_to_receiver
|
@@ -170,15 +169,11 @@ module RuboCop
|
|
170
169
|
|
171
170
|
# a = b
|
172
171
|
# .c
|
173
|
-
part_of_assignment_rhs(lhs, rhs)
|
174
|
-
return assignment_rhs(base).source_range
|
175
|
-
end
|
172
|
+
part_of_assignment_rhs(lhs, rhs) { |base| return assignment_rhs(base).source_range }
|
176
173
|
|
177
174
|
# a + b
|
178
175
|
# .c
|
179
|
-
operation_rhs(lhs)
|
180
|
-
return base.source_range
|
181
|
-
end
|
176
|
+
operation_rhs(lhs) { |base| return base.source_range }
|
182
177
|
end
|
183
178
|
|
184
179
|
# a.b
|
@@ -228,8 +223,7 @@ module RuboCop
|
|
228
223
|
end
|
229
224
|
|
230
225
|
def operator_rhs?(node, receiver)
|
231
|
-
node.operator_method? && node.arguments? &&
|
232
|
-
within_node?(receiver, node.first_argument)
|
226
|
+
node.operator_method? && node.arguments? && within_node?(receiver, node.first_argument)
|
233
227
|
end
|
234
228
|
end
|
235
229
|
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks whether certain expressions, e.g. method calls, that could fit
|
7
|
+
# completely on a single line, are broken up into multiple lines unnecessarily.
|
8
|
+
#
|
9
|
+
# @example any configuration
|
10
|
+
# # bad
|
11
|
+
# foo(
|
12
|
+
# a,
|
13
|
+
# b
|
14
|
+
# )
|
15
|
+
#
|
16
|
+
# puts 'string that fits on ' \
|
17
|
+
# 'a single line'
|
18
|
+
#
|
19
|
+
# things
|
20
|
+
# .select { |thing| thing.cond? }
|
21
|
+
# .join('-')
|
22
|
+
#
|
23
|
+
# # good
|
24
|
+
# foo(a, b)
|
25
|
+
#
|
26
|
+
# puts 'string that fits on a single line'
|
27
|
+
#
|
28
|
+
# things.select { |thing| thing.cond? }.join('-')
|
29
|
+
#
|
30
|
+
# @example InspectBlocks: false (default)
|
31
|
+
# # good
|
32
|
+
# foo(a) do |x|
|
33
|
+
# puts x
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# @example InspectBlocks: true
|
37
|
+
# # bad
|
38
|
+
# foo(a) do |x|
|
39
|
+
# puts x
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# # good
|
43
|
+
# foo(a) { |x| puts x }
|
44
|
+
#
|
45
|
+
class RedundantLineBreak < Cop
|
46
|
+
include CheckAssignment
|
47
|
+
|
48
|
+
MSG = 'Redundant line break detected.'
|
49
|
+
|
50
|
+
def on_send(node)
|
51
|
+
# Include "the whole expression".
|
52
|
+
node = node.parent while convertible_block?(node) ||
|
53
|
+
node.parent.is_a?(RuboCop::AST::BinaryOperatorNode) ||
|
54
|
+
node.parent&.send_type?
|
55
|
+
|
56
|
+
return unless offense?(node) && !part_of_ignored_node?(node)
|
57
|
+
|
58
|
+
add_offense(node)
|
59
|
+
ignore_node(node)
|
60
|
+
end
|
61
|
+
|
62
|
+
def check_assignment(node, _rhs)
|
63
|
+
return unless offense?(node)
|
64
|
+
|
65
|
+
add_offense(node)
|
66
|
+
ignore_node(node)
|
67
|
+
end
|
68
|
+
|
69
|
+
def autocorrect(node)
|
70
|
+
->(corrector) { corrector.replace(node.source_range, to_single_line(node.source).strip) }
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def offense?(node)
|
76
|
+
return false if configured_to_not_be_inspected?(node)
|
77
|
+
|
78
|
+
node.multiline? && !too_long?(node) && suitable_as_single_line?(node)
|
79
|
+
end
|
80
|
+
|
81
|
+
def configured_to_not_be_inspected?(node)
|
82
|
+
return true if other_cop_takes_precedence?(node)
|
83
|
+
|
84
|
+
!cop_config['InspectBlocks'] && (node.block_type? ||
|
85
|
+
node.each_descendant(:block).any?(&:multiline?))
|
86
|
+
end
|
87
|
+
|
88
|
+
def other_cop_takes_precedence?(node)
|
89
|
+
single_line_block_chain_enabled? && node.each_descendant(:block).any? do |block_node|
|
90
|
+
block_node.parent.send_type? && block_node.parent.loc.dot && !block_node.multiline?
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def single_line_block_chain_enabled?
|
95
|
+
@config.for_cop('Layout/SingleLineBlockChain')['Enabled']
|
96
|
+
end
|
97
|
+
|
98
|
+
def suitable_as_single_line?(node)
|
99
|
+
!comment_within?(node) &&
|
100
|
+
node.each_descendant(:if, :case, :kwbegin, :def).none? &&
|
101
|
+
node.each_descendant(:dstr, :str).none?(&:heredoc?) &&
|
102
|
+
node.each_descendant(:begin).none? { |b| b.first_line != b.last_line }
|
103
|
+
end
|
104
|
+
|
105
|
+
def convertible_block?(node)
|
106
|
+
return false unless node.parent&.block_type?
|
107
|
+
|
108
|
+
send_node = node.parent&.send_node
|
109
|
+
send_node.parenthesized? || !send_node.arguments?
|
110
|
+
end
|
111
|
+
|
112
|
+
def comment_within?(node)
|
113
|
+
processed_source.comments.map(&:loc).map(&:line).any? do |comment_line_number|
|
114
|
+
comment_line_number >= node.first_line && comment_line_number <= node.last_line
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def too_long?(node)
|
119
|
+
lines = processed_source.lines[(node.first_line - 1)...node.last_line]
|
120
|
+
to_single_line(lines.join("\n")).length > max_line_length
|
121
|
+
end
|
122
|
+
|
123
|
+
def to_single_line(source)
|
124
|
+
source
|
125
|
+
.gsub(/" *\\\n\s*'/, %q(" + ')) # Double quote, backslash, and then single quote
|
126
|
+
.gsub(/' *\\\n\s*"/, %q(' + ")) # Single quote, backslash, and then double quote
|
127
|
+
.gsub(/(["']) *\\\n\s*\1/, '') # Double or single quote, backslash, then same quote
|
128
|
+
.gsub(/\s*\\?\n\s*/, ' ') # Any other line break, with or without backslash
|
129
|
+
end
|
130
|
+
|
131
|
+
def max_line_length
|
132
|
+
config.for_cop('Layout/LineLength')['Max']
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -32,8 +32,7 @@ module RuboCop
|
|
32
32
|
ANCESTOR_TYPES = %i[kwbegin def defs class module].freeze
|
33
33
|
RUBY_2_5_ANCESTOR_TYPES = (ANCESTOR_TYPES + %i[block]).freeze
|
34
34
|
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS = %i[def defs].freeze
|
35
|
-
ALTERNATIVE_ACCESS_MODIFIERS = %i[public_class_method
|
36
|
-
private_class_method].freeze
|
35
|
+
ALTERNATIVE_ACCESS_MODIFIERS = %i[public_class_method private_class_method].freeze
|
37
36
|
|
38
37
|
def on_resbody(node)
|
39
38
|
check(node) unless modifier?(node)
|
@@ -118,8 +117,7 @@ module RuboCop
|
|
118
117
|
def alignment_node(node)
|
119
118
|
ancestor_node = ancestor_node(node)
|
120
119
|
|
121
|
-
return ancestor_node if ancestor_node.nil? ||
|
122
|
-
ancestor_node.kwbegin_type?
|
120
|
+
return ancestor_node if ancestor_node.nil? || ancestor_node.kwbegin_type?
|
123
121
|
|
124
122
|
assignment_node = assignment_node(ancestor_node)
|
125
123
|
return assignment_node if same_line?(ancestor_node, assignment_node)
|
@@ -173,8 +171,7 @@ module RuboCop
|
|
173
171
|
end
|
174
172
|
|
175
173
|
def access_modifier?(node)
|
176
|
-
return true if node.respond_to?(:access_modifier?) &&
|
177
|
-
node.access_modifier?
|
174
|
+
return true if node.respond_to?(:access_modifier?) && node.access_modifier?
|
178
175
|
|
179
176
|
return true if node.respond_to?(:method_name) &&
|
180
177
|
ALTERNATIVE_ACCESS_MODIFIERS.include?(node.method_name)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop checks if method calls are chained onto single line blocks. It considers that a
|
7
|
+
# line break before the dot improves the readability of the code.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# example.select { |item| item.cond? }.join('-')
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# example.select { |item| item.cond? }
|
15
|
+
# .join('-')
|
16
|
+
#
|
17
|
+
# # good (not a concern for this cop)
|
18
|
+
# example.select do |item|
|
19
|
+
# item.cond?
|
20
|
+
# end.join('-')
|
21
|
+
#
|
22
|
+
class SingleLineBlockChain < Base
|
23
|
+
include RangeHelp
|
24
|
+
extend AutoCorrector
|
25
|
+
|
26
|
+
MSG = 'Put method call on a separate line if chained to a single line block.'
|
27
|
+
|
28
|
+
def on_send(node)
|
29
|
+
range = offending_range(node)
|
30
|
+
add_offense(range) { |corrector| corrector.insert_before(range, "\n") } if range
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def offending_range(node)
|
36
|
+
receiver = node.receiver
|
37
|
+
return unless receiver&.block_type?
|
38
|
+
|
39
|
+
receiver_location = receiver.loc
|
40
|
+
closing_block_delimiter_line_number = receiver_location.end.line
|
41
|
+
return if receiver_location.begin.line < closing_block_delimiter_line_number
|
42
|
+
|
43
|
+
node_location = node.loc
|
44
|
+
dot_range = node_location.dot
|
45
|
+
return unless dot_range
|
46
|
+
return if dot_range.line > closing_block_delimiter_line_number
|
47
|
+
|
48
|
+
range_between(dot_range.begin_pos, node_location.selector.end_pos)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|