rubocop 1.67.0 → 1.81.6
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/LICENSE.txt +1 -1
- data/README.md +23 -19
- data/config/default.yml +384 -72
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +8 -3
- data/exe/rubocop +1 -8
- data/lib/rubocop/cached_data.rb +12 -4
- data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
- data/lib/rubocop/cli/command/execute_runner.rb +4 -4
- data/lib/rubocop/cli/command/show_cops.rb +24 -2
- data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +19 -4
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +52 -10
- data/lib/rubocop/config_loader.rb +56 -48
- data/lib/rubocop/config_loader_resolver.rb +36 -10
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +46 -2
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/config_validator.rb +25 -14
- data/lib/rubocop/cop/autocorrect_logic.rb +53 -28
- data/lib/rubocop/cop/base.rb +7 -1
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +8 -16
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +37 -15
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
- data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +5 -5
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +233 -0
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +13 -2
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +7 -16
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -9
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/class_structure.rb +45 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +3 -3
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +34 -20
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -5
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -9
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +8 -11
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +8 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +57 -2
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +11 -2
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/line_length.rb +158 -10
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +11 -8
- data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
- data/lib/rubocop/cop/layout/redundant_line_break.rb +19 -46
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +14 -7
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +31 -21
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
- data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +7 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -1
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
- data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
- data/lib/rubocop/cop/lint/debugger.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -3
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -23
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +14 -64
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +0 -6
- data/lib/rubocop/cop/lint/float_comparison.rb +51 -18
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -4
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +125 -10
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +24 -6
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -2
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_case_range.rb +5 -8
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -6
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -2
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -5
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +113 -9
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +3 -0
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +2 -5
- data/lib/rubocop/cop/lint/rescue_type.rb +4 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -1
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +5 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +39 -15
- data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -1
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +4 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +52 -2
- data/lib/rubocop/cop/lint/unreachable_loop.rb +6 -6
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +34 -8
- data/lib/rubocop/cop/lint/useless_assignment.rb +3 -1
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -0
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +3 -1
- data/lib/rubocop/cop/lint/useless_or.rb +98 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +23 -12
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +1 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +9 -9
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
- data/lib/rubocop/cop/metrics/method_length.rb +9 -1
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +3 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +3 -3
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/comments_help.rb +8 -3
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
- data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +4 -3
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +22 -22
- data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
- data/lib/rubocop/cop/mixin/line_length_help.rb +27 -10
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -9
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
- data/lib/rubocop/cop/mixin/range_help.rb +15 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +8 -3
- data/lib/rubocop/cop/mixin/string_help.rb +2 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +21 -5
- data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +20 -16
- data/lib/rubocop/cop/naming/constant_name.rb +6 -7
- data/lib/rubocop/cop/naming/file_name.rb +2 -4
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +12 -13
- data/lib/rubocop/cop/naming/method_name.rb +185 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
- data/lib/rubocop/cop/naming/{predicate_name.rb → predicate_prefix.rb} +48 -4
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +6 -14
- data/lib/rubocop/cop/naming/variable_name.rb +50 -6
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/offense.rb +2 -3
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/compound_hash.rb +2 -0
- data/lib/rubocop/cop/security/eval.rb +2 -1
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +114 -34
- data/lib/rubocop/cop/style/accessor_grouping.rb +32 -6
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/and_or.rb +1 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +57 -44
- data/lib/rubocop/cop/style/array_first_last.rb +18 -2
- data/lib/rubocop/cop/style/array_intersect.rb +115 -39
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +44 -26
- data/lib/rubocop/cop/style/case_like_if.rb +9 -12
- data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/style/collection_methods.rb +2 -1
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +20 -3
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +49 -31
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/data_inheritance.rb +7 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -5
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +5 -5
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +4 -7
- data/lib/rubocop/cop/style/each_with_object.rb +2 -3
- data/lib/rubocop/cop/style/empty_else.rb +4 -2
- data/lib/rubocop/cop/style/empty_literal.rb +5 -1
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
- data/lib/rubocop/cop/style/endless_method.rb +163 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +4 -4
- data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -3
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +17 -4
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
- data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
- data/lib/rubocop/cop/style/file_null.rb +89 -0
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/float_division.rb +8 -4
- data/lib/rubocop/cop/style/for.rb +1 -1
- data/lib/rubocop/cop/style/format_string_token.rb +38 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +3 -0
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +17 -3
- data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
- data/lib/rubocop/cop/style/hash_each_methods.rb +6 -8
- data/lib/rubocop/cop/style/hash_except.rb +35 -147
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_slice.rb +80 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +9 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +25 -6
- data/lib/rubocop/cop/style/if_inside_else.rb +10 -14
- data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +3 -4
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -9
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +16 -13
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
- data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
- data/lib/rubocop/cop/style/it_assignment.rb +93 -0
- data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
- data/lib/rubocop/cop/style/lambda.rb +1 -0
- data/lib/rubocop/cop/style/lambda_call.rb +10 -4
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/map_into_array.rb +11 -3
- data/lib/rubocop/cop/style/map_to_hash.rb +13 -4
- data/lib/rubocop/cop/style/map_to_set.rb +4 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +28 -20
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +18 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -11
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/missing_else.rb +2 -0
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
- data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +52 -51
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/next.rb +44 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +15 -15
- data/lib/rubocop/cop/style/one_line_conditional.rb +42 -13
- data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
- data/lib/rubocop/cop/style/operator_method_call.rb +5 -6
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +41 -38
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +2 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +15 -13
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +3 -1
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +36 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +95 -23
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +16 -5
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
- data/lib/rubocop/cop/style/redundant_each.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -9
- data/lib/rubocop/cop/style/redundant_format.rb +283 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
- data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +55 -19
- data/lib/rubocop/cop/style/redundant_parentheses.rb +105 -36
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +8 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -1
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +15 -18
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +3 -3
- data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
- data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +5 -3
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +75 -16
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +5 -2
- data/lib/rubocop/cop/style/self_assignment.rb +11 -17
- data/lib/rubocop/cop/style/semicolon.rb +21 -6
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +15 -4
- data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
- data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +68 -102
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +21 -17
- data/lib/rubocop/cop/style/string_literals.rb +1 -1
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/super_arguments.rb +66 -19
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +3 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +25 -4
- data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +56 -2
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
- data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/util.rb +12 -5
- data/lib/rubocop/cop/utils/format_string.rb +20 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +24 -5
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +14 -3
- data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
- data/lib/rubocop/cop/variable_force.rb +30 -19
- data/lib/rubocop/cops_documentation_generator.rb +54 -28
- data/lib/rubocop/directive_comment.rb +45 -11
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +20 -6
- data/lib/rubocop/formatter/formatter_set.rb +1 -1
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/lsp/diagnostic.rb +190 -0
- data/lib/rubocop/lsp/logger.rb +2 -2
- data/lib/rubocop/lsp/routes.rb +66 -26
- data/lib/rubocop/lsp/runtime.rb +18 -50
- data/lib/rubocop/lsp/server.rb +2 -4
- data/lib/rubocop/lsp/stdin_runner.rb +69 -0
- data/lib/rubocop/magic_comment.rb +11 -3
- data/lib/rubocop/options.rb +28 -12
- data/lib/rubocop/path_util.rb +15 -8
- data/lib/rubocop/pending_cops_reporter.rb +56 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
- data/lib/rubocop/plugin/load_error.rb +26 -0
- data/lib/rubocop/plugin/loader.rb +100 -0
- data/lib/rubocop/plugin/not_supported_error.rb +29 -0
- data/lib/rubocop/plugin.rb +46 -0
- data/lib/rubocop/rake_task.rb +4 -1
- data/lib/rubocop/result_cache.rb +27 -25
- data/lib/rubocop/rspec/cop_helper.rb +13 -1
- data/lib/rubocop/rspec/expect_offense.rb +15 -5
- data/lib/rubocop/rspec/shared_contexts.rb +38 -1
- data/lib/rubocop/rspec/support.rb +4 -2
- data/lib/rubocop/runner.rb +31 -18
- data/lib/rubocop/server/cache.rb +51 -13
- data/lib/rubocop/server/cli.rb +2 -2
- data/lib/rubocop/server/client_command/base.rb +10 -0
- data/lib/rubocop/server/client_command/exec.rb +2 -1
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/target_finder.rb +14 -9
- data/lib/rubocop/target_ruby.rb +27 -3
- data/lib/rubocop/version.rb +53 -12
- data/lib/rubocop.rb +44 -2
- data/lib/ruby_lsp/rubocop/addon.rb +90 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +91 -21
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
|
19
19
|
# * ignore_implicit (without curly braces)
|
|
20
20
|
#
|
|
21
21
|
# Alternatively you can specify multiple allowed styles. That's done by
|
|
22
|
-
# passing a list of styles to
|
|
22
|
+
# passing a list of styles to EnforcedHashRocketStyle and EnforcedColonStyle.
|
|
23
23
|
#
|
|
24
24
|
# @example EnforcedHashRocketStyle: key (default)
|
|
25
25
|
# # bad
|
|
@@ -193,7 +193,6 @@ module RuboCop
|
|
|
193
193
|
SEPARATOR_ALIGNMENT_STYLES = %w[EnforcedColonStyle EnforcedHashRocketStyle].freeze
|
|
194
194
|
|
|
195
195
|
def on_send(node)
|
|
196
|
-
return if double_splat?(node)
|
|
197
196
|
return unless node.arguments?
|
|
198
197
|
|
|
199
198
|
last_argument = node.last_argument
|
|
@@ -202,6 +201,7 @@ module RuboCop
|
|
|
202
201
|
|
|
203
202
|
ignore_node(last_argument)
|
|
204
203
|
end
|
|
204
|
+
alias on_csend on_send
|
|
205
205
|
alias on_super on_send
|
|
206
206
|
alias on_yield on_send
|
|
207
207
|
|
|
@@ -227,6 +227,7 @@ module RuboCop
|
|
|
227
227
|
left_sibling = argument_before_hash(node)
|
|
228
228
|
parent_loc = node.parent.loc
|
|
229
229
|
selector = left_sibling || parent_loc.selector || parent_loc.expression
|
|
230
|
+
|
|
230
231
|
same_line?(selector, node.pairs.first)
|
|
231
232
|
end
|
|
232
233
|
|
|
@@ -239,16 +240,12 @@ module RuboCop
|
|
|
239
240
|
self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
|
|
240
241
|
end
|
|
241
242
|
|
|
242
|
-
def double_splat?(node)
|
|
243
|
-
node.children.last.is_a?(Symbol)
|
|
244
|
-
end
|
|
245
|
-
|
|
246
243
|
def check_pairs(node)
|
|
247
244
|
first_pair = node.pairs.first
|
|
248
245
|
reset!
|
|
249
246
|
|
|
250
247
|
alignment_for(first_pair).each do |alignment|
|
|
251
|
-
delta = alignment.deltas_for_first_pair(first_pair
|
|
248
|
+
delta = alignment.deltas_for_first_pair(first_pair)
|
|
252
249
|
check_delta delta, node: first_pair, alignment: alignment
|
|
253
250
|
end
|
|
254
251
|
|
|
@@ -382,13 +379,13 @@ module RuboCop
|
|
|
382
379
|
end
|
|
383
380
|
|
|
384
381
|
def enforce_first_argument_with_fixed_indentation?
|
|
385
|
-
|
|
386
|
-
|
|
382
|
+
argument_alignment_config = config.for_enabled_cop('Layout/ArgumentAlignment')
|
|
387
383
|
argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
|
388
384
|
end
|
|
389
385
|
|
|
390
|
-
def
|
|
391
|
-
|
|
386
|
+
def same_line?(node1, node2)
|
|
387
|
+
# Override `Util#same_line?`
|
|
388
|
+
super || node1.last_line == line(node2)
|
|
392
389
|
end
|
|
393
390
|
end
|
|
394
391
|
end
|
|
@@ -75,6 +75,7 @@ module RuboCop
|
|
|
75
75
|
autocorrect(corrector, outermost_send)
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
|
+
alias on_csend on_send
|
|
78
79
|
|
|
79
80
|
private
|
|
80
81
|
|
|
@@ -161,7 +162,7 @@ module RuboCop
|
|
|
161
162
|
|
|
162
163
|
def end_keyword_before_closing_parenthesis?(parenthesized_send_node)
|
|
163
164
|
parenthesized_send_node.ancestors.any? do |ancestor|
|
|
164
|
-
ancestor.
|
|
165
|
+
ancestor.loc_is?(:end, 'end')
|
|
165
166
|
end
|
|
166
167
|
end
|
|
167
168
|
|
|
@@ -58,16 +58,17 @@ module RuboCop
|
|
|
58
58
|
PATTERN
|
|
59
59
|
|
|
60
60
|
def on_rescue(node)
|
|
61
|
-
|
|
62
|
-
check_indentation(node.loc.else, else_node)
|
|
61
|
+
check_indentation(node.loc.else, node.else_branch)
|
|
63
62
|
end
|
|
64
63
|
|
|
65
|
-
def
|
|
64
|
+
def on_resbody(node)
|
|
66
65
|
check_indentation(node.loc.keyword, node.body)
|
|
67
66
|
end
|
|
67
|
+
alias on_for on_resbody
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
def on_ensure(node)
|
|
70
|
+
check_indentation(node.loc.keyword, node.branch)
|
|
71
|
+
end
|
|
71
72
|
|
|
72
73
|
def on_kwbegin(node)
|
|
73
74
|
# Check indentation against end keyword but only if it's first on its
|
|
@@ -90,6 +91,7 @@ module RuboCop
|
|
|
90
91
|
end
|
|
91
92
|
|
|
92
93
|
alias on_numblock on_block
|
|
94
|
+
alias on_itblock on_block
|
|
93
95
|
|
|
94
96
|
def on_class(node)
|
|
95
97
|
base = node.loc.keyword
|
|
@@ -325,8 +327,7 @@ module RuboCop
|
|
|
325
327
|
if body_node.rescue_type?
|
|
326
328
|
check_rescue?(body_node)
|
|
327
329
|
elsif body_node.ensure_type?
|
|
328
|
-
block_body, = *body_node
|
|
329
|
-
|
|
330
|
+
block_body, = *body_node # rubocop:disable InternalAffairs/NodeDestructuring
|
|
330
331
|
if block_body&.rescue_type?
|
|
331
332
|
check_rescue?(block_body)
|
|
332
333
|
else
|
|
@@ -58,6 +58,12 @@ module RuboCop
|
|
|
58
58
|
# attr_reader :name #: String
|
|
59
59
|
# attr_reader :age #: Integer?
|
|
60
60
|
#
|
|
61
|
+
# #: (
|
|
62
|
+
# #| Integer,
|
|
63
|
+
# #| String
|
|
64
|
+
# #| ) -> void
|
|
65
|
+
# def foo; end
|
|
66
|
+
#
|
|
61
67
|
# @example AllowRBSInlineAnnotation: true
|
|
62
68
|
#
|
|
63
69
|
# # good
|
|
@@ -67,19 +73,46 @@ module RuboCop
|
|
|
67
73
|
# attr_reader :name #: String
|
|
68
74
|
# attr_reader :age #: Integer?
|
|
69
75
|
#
|
|
76
|
+
# #: (
|
|
77
|
+
# #| Integer,
|
|
78
|
+
# #| String
|
|
79
|
+
# #| ) -> void
|
|
80
|
+
# def foo; end
|
|
81
|
+
#
|
|
82
|
+
# @example AllowSteepAnnotation: false (default)
|
|
83
|
+
#
|
|
84
|
+
# # bad
|
|
85
|
+
# [1, 2, 3].each_with_object([]) do |n, list| #$ Array[Integer]
|
|
86
|
+
# list << n
|
|
87
|
+
# end
|
|
88
|
+
#
|
|
89
|
+
# name = 'John' #: String
|
|
90
|
+
#
|
|
91
|
+
# @example AllowSteepAnnotation: true
|
|
92
|
+
#
|
|
93
|
+
# # good
|
|
94
|
+
#
|
|
95
|
+
# [1, 2, 3].each_with_object([]) do |n, list| #$ Array[Integer]
|
|
96
|
+
# list << n
|
|
97
|
+
# end
|
|
98
|
+
#
|
|
99
|
+
# name = 'John' #: String
|
|
100
|
+
#
|
|
70
101
|
class LeadingCommentSpace < Base
|
|
71
102
|
include RangeHelp
|
|
72
103
|
extend AutoCorrector
|
|
73
104
|
|
|
74
105
|
MSG = 'Missing space after `#`.'
|
|
75
106
|
|
|
76
|
-
def on_new_investigation # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
107
|
+
def on_new_investigation # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
77
108
|
processed_source.comments.each do |comment|
|
|
78
109
|
next unless /\A(?!#\+\+|#--)(#+[^#\s=])/.match?(comment.text)
|
|
79
110
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
|
111
|
+
next if shebang_continuation?(comment)
|
|
80
112
|
next if doxygen_comment_style?(comment)
|
|
81
113
|
next if gemfile_ruby_comment?(comment)
|
|
82
114
|
next if rbs_inline_annotation?(comment)
|
|
115
|
+
next if steep_annotation?(comment)
|
|
83
116
|
|
|
84
117
|
add_offense(comment) do |corrector|
|
|
85
118
|
expr = comment.source_range
|
|
@@ -103,6 +136,20 @@ module RuboCop
|
|
|
103
136
|
comment.text.start_with?('#!')
|
|
104
137
|
end
|
|
105
138
|
|
|
139
|
+
def shebang_continuation?(comment)
|
|
140
|
+
return false unless shebang?(comment)
|
|
141
|
+
return true if comment.loc.line == 1
|
|
142
|
+
|
|
143
|
+
previous_line_comment = processed_source.comment_at_line(comment.loc.line - 1)
|
|
144
|
+
return false unless previous_line_comment
|
|
145
|
+
|
|
146
|
+
# If the comment is a shebang but not on the first line, check if the previous
|
|
147
|
+
# line has a shebang comment that wasn't marked as an offense; if so, this comment
|
|
148
|
+
# continues the shebang and is acceptable.
|
|
149
|
+
shebang?(previous_line_comment) &&
|
|
150
|
+
!current_offense_locations.include?(previous_line_comment.source_range)
|
|
151
|
+
end
|
|
152
|
+
|
|
106
153
|
def rackup_options?(comment)
|
|
107
154
|
comment.text.start_with?('#\\')
|
|
108
155
|
end
|
|
@@ -140,7 +187,15 @@ module RuboCop
|
|
|
140
187
|
end
|
|
141
188
|
|
|
142
189
|
def rbs_inline_annotation?(comment)
|
|
143
|
-
allow_rbs_inline_annotation? && comment.text.start_with?(/#:|#\[.+\]
|
|
190
|
+
allow_rbs_inline_annotation? && comment.text.start_with?(/#:|#\[.+\]|#\|/)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def allow_steep_annotation?
|
|
194
|
+
cop_config['AllowSteepAnnotation']
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def steep_annotation?(comment)
|
|
198
|
+
allow_steep_annotation? && comment.text.start_with?(/#[$:]/)
|
|
144
199
|
end
|
|
145
200
|
end
|
|
146
201
|
end
|
|
@@ -51,6 +51,15 @@ module RuboCop
|
|
|
51
51
|
private_constant :LINE_1_ENDING, :LINE_2_BEGINNING,
|
|
52
52
|
:LEADING_STYLE_OFFENSE, :TRAILING_STYLE_OFFENSE
|
|
53
53
|
|
|
54
|
+
# When both cops are activated and run in the same iteration of the correction loop,
|
|
55
|
+
# `Style/StringLiterals` undoes the moving of spaces that
|
|
56
|
+
# `Layout/LineContinuationLeadingSpace` performs. This is because `Style/StringLiterals`
|
|
57
|
+
# takes the original string content and transforms it, rather than just modifying the
|
|
58
|
+
# delimiters, in order to handle escaping for quotes within the string.
|
|
59
|
+
def self.autocorrect_incompatible_with
|
|
60
|
+
[Style::StringLiterals]
|
|
61
|
+
end
|
|
62
|
+
|
|
54
63
|
def on_dstr(node)
|
|
55
64
|
# Quick check if we possibly have line continuations.
|
|
56
65
|
return unless node.source.include?('\\')
|
|
@@ -129,9 +138,9 @@ module RuboCop
|
|
|
129
138
|
|
|
130
139
|
def message(_range)
|
|
131
140
|
if enforced_style_leading?
|
|
132
|
-
'Move trailing spaces to the start of next line.'
|
|
141
|
+
'Move trailing spaces to the start of the next line.'
|
|
133
142
|
else
|
|
134
|
-
'Move leading spaces to the end of previous line.'
|
|
143
|
+
'Move leading spaces to the end of the previous line.'
|
|
135
144
|
end
|
|
136
145
|
end
|
|
137
146
|
|
|
@@ -101,7 +101,7 @@ module RuboCop
|
|
|
101
101
|
ranges << loc.expression
|
|
102
102
|
elsif literal.heredoc?
|
|
103
103
|
ranges << loc.heredoc_body
|
|
104
|
-
elsif loc.respond_to?(:begin) && loc.begin
|
|
104
|
+
elsif (loc.respond_to?(:begin) && loc.begin) || ignored_parent?(literal)
|
|
105
105
|
ranges << loc.expression
|
|
106
106
|
end
|
|
107
107
|
end
|
|
@@ -127,6 +127,12 @@ module RuboCop
|
|
|
127
127
|
comment_ranges(processed_source.comments)
|
|
128
128
|
end
|
|
129
129
|
|
|
130
|
+
def ignored_parent?(node)
|
|
131
|
+
return false unless node.parent
|
|
132
|
+
|
|
133
|
+
node.parent.type?(:regexp, :xstr)
|
|
134
|
+
end
|
|
135
|
+
|
|
130
136
|
def no_space_style?
|
|
131
137
|
cop_config['EnforcedStyle'] == 'no_space'
|
|
132
138
|
end
|
|
@@ -102,7 +102,7 @@ module RuboCop
|
|
|
102
102
|
|
|
103
103
|
def strings_concatenated_with_backslash?(dstr_node)
|
|
104
104
|
dstr_node.multiline? &&
|
|
105
|
-
dstr_node.children.all? { |c| c.
|
|
105
|
+
dstr_node.children.all? { |c| c.type?(:str, :dstr) } &&
|
|
106
106
|
dstr_node.children.none?(&:multiline?)
|
|
107
107
|
end
|
|
108
108
|
|
|
@@ -127,7 +127,7 @@ module RuboCop
|
|
|
127
127
|
|
|
128
128
|
def base_column(child)
|
|
129
129
|
grandparent = child.parent.parent
|
|
130
|
-
if grandparent&.
|
|
130
|
+
if grandparent&.pair_type?
|
|
131
131
|
grandparent.loc.column
|
|
132
132
|
else
|
|
133
133
|
child.source_range.source_line =~ /\S/
|
|
@@ -38,7 +38,7 @@ module RuboCop
|
|
|
38
38
|
# * `Layout/MultilineHashKeyLineBreaks`
|
|
39
39
|
# * `Layout/MultilineMethodArgumentLineBreaks`
|
|
40
40
|
# * `Layout/MultilineMethodParameterLineBreaks`
|
|
41
|
-
# * `Layout
|
|
41
|
+
# * `Layout/ParameterAlignment`
|
|
42
42
|
# * `Style/BlockDelimiters`
|
|
43
43
|
#
|
|
44
44
|
# Together, these cops will pretty print hashes, arrays,
|
|
@@ -60,7 +60,7 @@ module RuboCop
|
|
|
60
60
|
# bar: "0000000000",
|
|
61
61
|
# baz: "0000000000",
|
|
62
62
|
# }
|
|
63
|
-
class LineLength < Base
|
|
63
|
+
class LineLength < Base # rubocop:disable Metrics/ClassLength
|
|
64
64
|
include CheckLineBreakable
|
|
65
65
|
include AllowedPattern
|
|
66
66
|
include RangeHelp
|
|
@@ -74,8 +74,16 @@ module RuboCop
|
|
|
74
74
|
def on_block(node)
|
|
75
75
|
check_for_breakable_block(node)
|
|
76
76
|
end
|
|
77
|
-
|
|
78
77
|
alias on_numblock on_block
|
|
78
|
+
alias on_itblock on_block
|
|
79
|
+
|
|
80
|
+
def on_str(node)
|
|
81
|
+
check_for_breakable_str(node)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def on_dstr(node)
|
|
85
|
+
check_for_breakable_dstr(node)
|
|
86
|
+
end
|
|
79
87
|
|
|
80
88
|
def on_potential_breakable_node(node)
|
|
81
89
|
check_for_breakable_node(node)
|
|
@@ -83,7 +91,9 @@ module RuboCop
|
|
|
83
91
|
alias on_array on_potential_breakable_node
|
|
84
92
|
alias on_hash on_potential_breakable_node
|
|
85
93
|
alias on_send on_potential_breakable_node
|
|
94
|
+
alias on_csend on_potential_breakable_node
|
|
86
95
|
alias on_def on_potential_breakable_node
|
|
96
|
+
alias on_defs on_potential_breakable_node
|
|
87
97
|
|
|
88
98
|
def on_new_investigation
|
|
89
99
|
return unless processed_source.raw_source.include?(';')
|
|
@@ -124,6 +134,7 @@ module RuboCop
|
|
|
124
134
|
|
|
125
135
|
def check_for_breakable_block(block_node)
|
|
126
136
|
return unless block_node.single_line?
|
|
137
|
+
return if receiver_contains_heredoc?(block_node)
|
|
127
138
|
|
|
128
139
|
line_index = block_node.loc.line - 1
|
|
129
140
|
range = breakable_block_range(block_node)
|
|
@@ -132,6 +143,42 @@ module RuboCop
|
|
|
132
143
|
breakable_range_by_line_index[line_index] = range_between(pos, pos + 1)
|
|
133
144
|
end
|
|
134
145
|
|
|
146
|
+
def check_for_breakable_str(node)
|
|
147
|
+
line_index = node.loc.line - 1
|
|
148
|
+
return if breakable_range_by_line_index[line_index]
|
|
149
|
+
|
|
150
|
+
return unless breakable_string?(node)
|
|
151
|
+
return unless (delimiter = string_delimiter(node))
|
|
152
|
+
return unless (pos = breakable_string_position(node))
|
|
153
|
+
|
|
154
|
+
breakable_range_by_line_index[line_index] = range_between(pos, pos + 1)
|
|
155
|
+
breakable_string_delimiters[line_index] = delimiter
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def check_for_breakable_dstr(node) # rubocop:disable Metrics/AbcSize
|
|
159
|
+
line_index = node.loc.line - 1
|
|
160
|
+
return if breakable_range_by_line_index[line_index]
|
|
161
|
+
|
|
162
|
+
return unless breakable_dstr?(node)
|
|
163
|
+
return unless (delimiter = string_delimiter(node))
|
|
164
|
+
|
|
165
|
+
node.each_child_node(:begin).detect do |begin_node|
|
|
166
|
+
next unless (pos = breakable_dstr_begin_position(begin_node))
|
|
167
|
+
|
|
168
|
+
breakable_range_by_line_index[line_index] = range_between(pos, pos + 1)
|
|
169
|
+
breakable_string_delimiters[line_index] = delimiter
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def breakable_string?(node)
|
|
174
|
+
allow_string_split? &&
|
|
175
|
+
node.single_line? &&
|
|
176
|
+
!node.heredoc? &&
|
|
177
|
+
# TODO: strings inside hashes, kwargs and arrays are currently ignored,
|
|
178
|
+
# but could be considered in the future
|
|
179
|
+
!node.parent&.type?(:pair, :kwoptarg, :array)
|
|
180
|
+
end
|
|
181
|
+
|
|
135
182
|
def breakable_block_range(block_node)
|
|
136
183
|
if block_node.arguments? && !block_node.lambda?
|
|
137
184
|
block_node.arguments.loc.end
|
|
@@ -153,10 +200,47 @@ module RuboCop
|
|
|
153
200
|
next_range
|
|
154
201
|
end
|
|
155
202
|
|
|
203
|
+
def breakable_string_position(node)
|
|
204
|
+
source_range = node.source_range
|
|
205
|
+
return if source_range.last_column < max
|
|
206
|
+
return unless (pos = breakable_string_range(node))
|
|
207
|
+
|
|
208
|
+
pos.end_pos unless pos.end_pos == source_range.begin_pos
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Locate where to break a string that is too long, ensuring that escape characters
|
|
212
|
+
# are not bisected.
|
|
213
|
+
# If the string contains spaces, use them to determine a place for a clean break;
|
|
214
|
+
# otherwise, the string will be broken at the line length limit.
|
|
215
|
+
def breakable_string_range(node)
|
|
216
|
+
source_range = node.source_range
|
|
217
|
+
relevant_substr = largest_possible_string(node)
|
|
218
|
+
|
|
219
|
+
if (space_pos = relevant_substr.rindex(/\s/))
|
|
220
|
+
source_range.resize(space_pos + 1)
|
|
221
|
+
elsif (escape_pos = relevant_substr.rindex(/\\(u[\da-f]{0,4}|x[\da-f]{0,2})?\z/))
|
|
222
|
+
source_range.resize(escape_pos)
|
|
223
|
+
else
|
|
224
|
+
adjustment = max - source_range.last_column - 3
|
|
225
|
+
return if adjustment.abs > source_range.size
|
|
226
|
+
|
|
227
|
+
source_range.adjust(end_pos: adjustment)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def breakable_dstr_begin_position(node)
|
|
232
|
+
source_range = node.source_range
|
|
233
|
+
source_range.begin_pos if source_range.column < max && source_range.last_column >= max
|
|
234
|
+
end
|
|
235
|
+
|
|
156
236
|
def breakable_range_by_line_index
|
|
157
237
|
@breakable_range_by_line_index ||= {}
|
|
158
238
|
end
|
|
159
239
|
|
|
240
|
+
def breakable_string_delimiters
|
|
241
|
+
@breakable_string_delimiters ||= {}
|
|
242
|
+
end
|
|
243
|
+
|
|
160
244
|
def heredocs
|
|
161
245
|
@heredocs ||= extract_heredocs(processed_source.ast)
|
|
162
246
|
end
|
|
@@ -175,7 +259,7 @@ module RuboCop
|
|
|
175
259
|
if ignore_cop_directives? && directive_on_source_line?(line_index)
|
|
176
260
|
return check_directive_line(line, line_index)
|
|
177
261
|
end
|
|
178
|
-
return
|
|
262
|
+
return check_line_for_exemptions(line, line_index) if allow_uri? || allow_qualified_name?
|
|
179
263
|
|
|
180
264
|
register_offense(excess_range(nil, line, line_index), line, line_index)
|
|
181
265
|
end
|
|
@@ -197,7 +281,14 @@ module RuboCop
|
|
|
197
281
|
|
|
198
282
|
add_offense(loc, message: message) do |corrector|
|
|
199
283
|
self.max = line_length(line)
|
|
200
|
-
|
|
284
|
+
|
|
285
|
+
insertion = if (delimiter = breakable_string_delimiters[line_index])
|
|
286
|
+
[delimiter, " \\\n", delimiter].join
|
|
287
|
+
else
|
|
288
|
+
"\n"
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
corrector.insert_before(breakable_range, insertion) unless breakable_range.nil?
|
|
201
292
|
end
|
|
202
293
|
end
|
|
203
294
|
|
|
@@ -224,10 +315,14 @@ module RuboCop
|
|
|
224
315
|
cop_config['AllowHeredoc']
|
|
225
316
|
end
|
|
226
317
|
|
|
318
|
+
def allow_string_split?
|
|
319
|
+
cop_config['SplitStrings']
|
|
320
|
+
end
|
|
321
|
+
|
|
227
322
|
def extract_heredocs(ast)
|
|
228
323
|
return [] unless ast
|
|
229
324
|
|
|
230
|
-
ast.each_node(:
|
|
325
|
+
ast.each_node(:any_str).select(&:heredoc?).map do |node|
|
|
231
326
|
body = node.location.heredoc_body
|
|
232
327
|
delimiter = node.location.heredoc_end.source.strip
|
|
233
328
|
[body.first_line...body.last_line, delimiter]
|
|
@@ -247,6 +342,13 @@ module RuboCop
|
|
|
247
342
|
heredocs.any? { |range, _delimiter| range.cover?(line_number) }
|
|
248
343
|
end
|
|
249
344
|
|
|
345
|
+
def receiver_contains_heredoc?(node)
|
|
346
|
+
return false unless (receiver = node.receiver)
|
|
347
|
+
return true if receiver.any_str_type? && receiver.heredoc?
|
|
348
|
+
|
|
349
|
+
receiver.each_descendant(:any_str).any?(&:heredoc?)
|
|
350
|
+
end
|
|
351
|
+
|
|
250
352
|
def check_directive_line(line, line_index)
|
|
251
353
|
length_without_directive = line_length_without_directive(line)
|
|
252
354
|
return if length_without_directive <= max
|
|
@@ -264,11 +366,57 @@ module RuboCop
|
|
|
264
366
|
)
|
|
265
367
|
end
|
|
266
368
|
|
|
267
|
-
def
|
|
268
|
-
uri_range
|
|
269
|
-
|
|
369
|
+
def check_line_for_exemptions(line, line_index)
|
|
370
|
+
uri_range = range_if_applicable(line, :uri)
|
|
371
|
+
qualified_name_range = range_if_applicable(line, :qualified_name)
|
|
372
|
+
|
|
373
|
+
return if allowed_combination?(line, uri_range, qualified_name_range)
|
|
374
|
+
|
|
375
|
+
range = uri_range || qualified_name_range
|
|
376
|
+
register_offense(excess_range(range, line, line_index), line, line_index)
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def range_if_applicable(line, type)
|
|
380
|
+
return unless type == :uri ? allow_uri? : allow_qualified_name?
|
|
381
|
+
|
|
382
|
+
find_excessive_range(line, type)
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def allowed_combination?(line, uri_range, qualified_name_range)
|
|
386
|
+
if uri_range && qualified_name_range
|
|
387
|
+
allowed_position?(line, uri_range) && allowed_position?(line, qualified_name_range)
|
|
388
|
+
elsif uri_range
|
|
389
|
+
allowed_position?(line, uri_range)
|
|
390
|
+
elsif qualified_name_range
|
|
391
|
+
allowed_position?(line, qualified_name_range)
|
|
392
|
+
else
|
|
393
|
+
false
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
def breakable_dstr?(node)
|
|
398
|
+
# If the `dstr` only contains one child, it cannot be broken
|
|
399
|
+
breakable_string?(node) && !node.child_nodes.one?
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def string_delimiter(node)
|
|
403
|
+
delimiter = node.loc.begin
|
|
404
|
+
if node.parent&.dstr_type? && node.parent.loc.respond_to?(:begin)
|
|
405
|
+
delimiter ||= node.parent.loc.begin
|
|
406
|
+
end
|
|
407
|
+
delimiter = delimiter&.source
|
|
408
|
+
|
|
409
|
+
delimiter if %w[' "].include?(delimiter)
|
|
410
|
+
end
|
|
270
411
|
|
|
271
|
-
|
|
412
|
+
# Find the largest possible substring of a string node to retain before a break
|
|
413
|
+
def largest_possible_string(node)
|
|
414
|
+
# The maximum allowed length of a string value is:
|
|
415
|
+
# `Max` - end delimiter (quote) - continuation characters (space and slash)
|
|
416
|
+
max_length = max - 3
|
|
417
|
+
# If the string doesn't start at the beginning of the line, the max length is offset
|
|
418
|
+
max_length -= column_offset_between(node.loc, node.parent.loc) if node.parent
|
|
419
|
+
node.source[0...(max_length)]
|
|
272
420
|
end
|
|
273
421
|
end
|
|
274
422
|
end
|
|
@@ -52,7 +52,7 @@ module RuboCop
|
|
|
52
52
|
def on_hash(node)
|
|
53
53
|
# This cop only deals with hashes wrapped by a set of curly
|
|
54
54
|
# braces like {foo: 1}. That is, not a kwargs hashes.
|
|
55
|
-
#
|
|
55
|
+
# Layout/MultilineMethodArgumentLineBreaks handles those.
|
|
56
56
|
return unless starts_with_curly_brace?(node)
|
|
57
57
|
return unless node.loc.begin
|
|
58
58
|
|
|
@@ -33,6 +33,18 @@ module RuboCop
|
|
|
33
33
|
#
|
|
34
34
|
# @example AllowMultilineFinalElement: false (default)
|
|
35
35
|
#
|
|
36
|
+
# # bad
|
|
37
|
+
# foo(a, b,
|
|
38
|
+
# c
|
|
39
|
+
# )
|
|
40
|
+
#
|
|
41
|
+
# # bad
|
|
42
|
+
# foo(
|
|
43
|
+
# a, b, {
|
|
44
|
+
# foo: "bar",
|
|
45
|
+
# }
|
|
46
|
+
# )
|
|
47
|
+
#
|
|
36
48
|
# # good
|
|
37
49
|
# foo(
|
|
38
50
|
# a,
|
|
@@ -44,6 +56,18 @@ module RuboCop
|
|
|
44
56
|
#
|
|
45
57
|
# @example AllowMultilineFinalElement: true
|
|
46
58
|
#
|
|
59
|
+
# # bad
|
|
60
|
+
# foo(a, b,
|
|
61
|
+
# c
|
|
62
|
+
# )
|
|
63
|
+
#
|
|
64
|
+
# # good
|
|
65
|
+
# foo(
|
|
66
|
+
# a, b, {
|
|
67
|
+
# foo: "bar",
|
|
68
|
+
# }
|
|
69
|
+
# )
|
|
70
|
+
#
|
|
47
71
|
# # good
|
|
48
72
|
# foo(
|
|
49
73
|
# a,
|
|
@@ -75,6 +99,7 @@ module RuboCop
|
|
|
75
99
|
|
|
76
100
|
check_line_breaks(node, args, ignore_last: ignore_last_element?)
|
|
77
101
|
end
|
|
102
|
+
alias on_csend on_send
|
|
78
103
|
|
|
79
104
|
private
|
|
80
105
|
|
|
@@ -12,7 +12,7 @@ module RuboCop
|
|
|
12
12
|
# argument of the call, then the closing brace should be on the same
|
|
13
13
|
# line as the last argument of the call.
|
|
14
14
|
#
|
|
15
|
-
# If
|
|
15
|
+
# If a method call's opening brace is on the line above the first
|
|
16
16
|
# argument of the call, then the closing brace should be on the line
|
|
17
17
|
# below the last argument of the call.
|
|
18
18
|
#
|
|
@@ -109,6 +109,7 @@ module RuboCop
|
|
|
109
109
|
def on_send(node)
|
|
110
110
|
check_brace_layout(node)
|
|
111
111
|
end
|
|
112
|
+
alias on_csend on_send
|
|
112
113
|
|
|
113
114
|
private
|
|
114
115
|
|
|
@@ -100,7 +100,7 @@ module RuboCop
|
|
|
100
100
|
|
|
101
101
|
def extra_indentation(given_style, parent)
|
|
102
102
|
if given_style == :indented_relative_to_receiver
|
|
103
|
-
if parent
|
|
103
|
+
if parent&.type?(:splat, :kwsplat)
|
|
104
104
|
configured_indentation_width - parent.loc.operator.length
|
|
105
105
|
else
|
|
106
106
|
configured_indentation_width
|
|
@@ -216,7 +216,7 @@ module RuboCop
|
|
|
216
216
|
|
|
217
217
|
def get_dot_right_above(node)
|
|
218
218
|
node.each_ancestor.find do |a|
|
|
219
|
-
dot = a.loc.
|
|
219
|
+
dot = a.loc.dot if a.loc?(:dot)
|
|
220
220
|
next unless dot
|
|
221
221
|
|
|
222
222
|
dot.line == node.loc.dot.line - 1 && dot.column == node.loc.dot.column
|
|
@@ -224,7 +224,7 @@ module RuboCop
|
|
|
224
224
|
end
|
|
225
225
|
|
|
226
226
|
def find_multiline_block_chain_node(node)
|
|
227
|
-
return unless (block_node = node.each_descendant(:
|
|
227
|
+
return unless (block_node = node.each_descendant(:any_block).first)
|
|
228
228
|
return unless block_node.multiline? && block_node.parent.call_type?
|
|
229
229
|
|
|
230
230
|
if node.receiver.call_type?
|
|
@@ -239,7 +239,7 @@ module RuboCop
|
|
|
239
239
|
node = node.receiver while node.receiver
|
|
240
240
|
# ascend to first call which has a dot
|
|
241
241
|
node = node.parent
|
|
242
|
-
node = node.parent until node.loc
|
|
242
|
+
node = node.parent until node.loc?(:dot)
|
|
243
243
|
|
|
244
244
|
node
|
|
245
245
|
end
|
|
@@ -12,7 +12,7 @@ module RuboCop
|
|
|
12
12
|
# first parameter of the definition, then the closing brace should be
|
|
13
13
|
# on the same line as the last parameter of the definition.
|
|
14
14
|
#
|
|
15
|
-
# If
|
|
15
|
+
# If a method definition's opening brace is on the line above the first
|
|
16
16
|
# parameter of the definition, then the closing brace should be on the
|
|
17
17
|
# line below the last parameter of the definition.
|
|
18
18
|
#
|