rubocop 1.71.1 → 1.88.2
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 +513 -149
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +38 -4
- data/exe/rubocop +1 -8
- data/lib/rubocop/cache_config.rb +29 -0
- data/lib/rubocop/cli/command/auto_generate_config.rb +36 -4
- data/lib/rubocop/cli/command/list_enabled_cops_for.rb +40 -0
- data/lib/rubocop/cli/command/lsp.rb +1 -1
- data/lib/rubocop/cli/command/mcp.rb +19 -0
- data/lib/rubocop/cli/command/show_cops.rb +2 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +4 -8
- data/lib/rubocop/cli/command/suggest_extensions.rb +8 -2
- data/lib/rubocop/cli.rb +48 -11
- data/lib/rubocop/comment_config.rb +60 -18
- data/lib/rubocop/config.rb +53 -16
- data/lib/rubocop/config_finder.rb +1 -1
- data/lib/rubocop/config_loader.rb +65 -49
- data/lib/rubocop/config_loader_resolver.rb +44 -19
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +6 -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 +7 -2
- data/lib/rubocop/config_validator.rb +7 -6
- data/lib/rubocop/cop/autocorrect_logic.rb +27 -14
- data/lib/rubocop/cop/base.rb +38 -12
- data/lib/rubocop/cop/bundler/gem_comment.rb +5 -3
- data/lib/rubocop/cop/bundler/gem_version.rb +28 -28
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -3
- data/lib/rubocop/cop/commissioner.rb +13 -11
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +26 -7
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -2
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -1
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -5
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +36 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors.rb +28 -0
- data/lib/rubocop/cop/documentation.rb +2 -3
- data/lib/rubocop/cop/exclude_limit.rb +31 -5
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +49 -17
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -3
- data/lib/rubocop/cop/gemspec/require_mfa.rb +22 -5
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +12 -7
- data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
- data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/itblock_handler.rb +69 -0
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +142 -0
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +13 -13
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +6 -2
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +1 -1
- 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_let_rubocop_config_new.rb +5 -3
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +13 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +4 -4
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +3 -16
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +60 -4
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +3 -1
- data/lib/rubocop/cop/layout/class_structure.rb +56 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +9 -2
- data/lib/rubocop/cop/layout/condition_position.rb +13 -3
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +2 -2
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -15
- data/lib/rubocop/cop/layout/empty_comment.rb +8 -10
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +28 -9
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +46 -21
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +34 -4
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +13 -2
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +17 -3
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +22 -2
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +16 -2
- data/lib/rubocop/cop/layout/end_alignment.rb +10 -3
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +35 -2
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +26 -0
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +20 -15
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +25 -25
- data/lib/rubocop/cop/layout/hash_alignment.rb +5 -8
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +3 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +33 -3
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +152 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +13 -1
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +62 -15
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +57 -57
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +9 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +3 -0
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +56 -56
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +236 -41
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +9 -5
- data/lib/rubocop/cop/layout/parameter_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/redundant_line_break.rb +12 -6
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +15 -7
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -10
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +10 -3
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +18 -3
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_brackets.rb +6 -39
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -8
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +12 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +3 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -11
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -10
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +2 -3
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +13 -1
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +47 -8
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +4 -3
- data/lib/rubocop/cop/lint/constant_reassignment.rb +93 -11
- data/lib/rubocop/cop/lint/constant_resolution.rb +6 -6
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
- data/lib/rubocop/cop/lint/data_define_override.rb +63 -0
- data/lib/rubocop/cop/lint/debugger.rb +13 -4
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_constants.rb +2 -8
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +5 -2
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +4 -4
- data/lib/rubocop/cop/lint/duplicate_methods.rb +219 -32
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +5 -42
- data/lib/rubocop/cop/lint/else_layout.rb +19 -0
- data/lib/rubocop/cop/lint/empty_block.rb +4 -4
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +20 -65
- data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +8 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
- data/lib/rubocop/cop/lint/empty_when.rb +8 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +19 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -8
- data/lib/rubocop/cop/lint/float_comparison.rb +33 -10
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -1
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +25 -5
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
- data/lib/rubocop/cop/lint/literal_as_condition.rb +129 -11
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +11 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +9 -12
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +19 -10
- data/lib/rubocop/cop/lint/mixed_case_range.rb +2 -2
- data/lib/rubocop/cop/lint/multiple_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -0
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +20 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +4 -2
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +4 -4
- data/lib/rubocop/cop/lint/number_conversion.rb +19 -10
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +11 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -1
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +7 -7
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +3 -13
- data/lib/rubocop/cop/lint/raise_exception.rb +30 -11
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +27 -10
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +6 -12
- data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +15 -4
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -23
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +134 -11
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +12 -2
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +268 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +4 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +8 -0
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +8 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +9 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +13 -4
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +3 -2
- data/lib/rubocop/cop/lint/require_relative_self_path.rb +7 -5
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +2 -2
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +22 -4
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +7 -1
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +5 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +63 -6
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -1
- 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 +27 -1
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +14 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +17 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +123 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +21 -4
- data/lib/rubocop/cop/lint/syntax.rb +25 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +36 -3
- data/lib/rubocop/cop/lint/to_json.rb +20 -17
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +5 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +36 -10
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +2 -0
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +2 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +17 -9
- data/lib/rubocop/cop/lint/unreachable_loop.rb +5 -5
- data/lib/rubocop/cop/lint/unreachable_pattern_branch.rb +113 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +10 -0
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +30 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +55 -25
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +92 -0
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +11 -10
- data/lib/rubocop/cop/lint/useless_or.rb +111 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +11 -7
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -1
- data/lib/rubocop/cop/lint/useless_times.rb +22 -1
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +147 -0
- data/lib/rubocop/cop/lint/void.rb +50 -21
- 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 +2 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +23 -0
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +3 -2
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +38 -7
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -3
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/migration/department_name.rb +12 -1
- data/lib/rubocop/cop/mixin/alignment.rb +3 -3
- data/lib/rubocop/cop/mixin/allowed_methods.rb +5 -5
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +9 -5
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +4 -4
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +5 -7
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_max.rb +6 -5
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- 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/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +20 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -2
- 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 +27 -4
- data/lib/rubocop/cop/mixin/hash_transform_method/autocorrection.rb +63 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +32 -78
- data/lib/rubocop/cop/mixin/line_length_help.rb +45 -10
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
- 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/project_index_help.rb +48 -0
- data/lib/rubocop/cop/mixin/range_help.rb +15 -3
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +5 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -7
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +1 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +25 -6
- data/lib/rubocop/cop/mixin.rb +86 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +3 -3
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +6 -5
- data/lib/rubocop/cop/naming/inclusive_language.rb +8 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +11 -2
- data/lib/rubocop/cop/naming/method_name.rb +187 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +330 -0
- data/lib/rubocop/cop/naming/{predicate_name.rb → predicate_prefix.rb} +48 -4
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -4
- data/lib/rubocop/cop/naming/variable_name.rb +51 -6
- data/lib/rubocop/cop/offense.rb +17 -1
- data/lib/rubocop/cop/registry.rb +66 -39
- data/lib/rubocop/cop/security/eval.rb +17 -3
- data/lib/rubocop/cop/security/io_methods.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +45 -12
- data/lib/rubocop/cop/style/accessor_grouping.rb +46 -8
- data/lib/rubocop/cop/style/alias.rb +15 -3
- data/lib/rubocop/cop/style/and_or.rb +2 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +46 -31
- data/lib/rubocop/cop/style/array_first_last.rb +12 -1
- data/lib/rubocop/cop/style/array_intersect.rb +117 -38
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +50 -0
- data/lib/rubocop/cop/style/array_join.rb +4 -2
- data/lib/rubocop/cop/style/ascii_comments.rb +6 -3
- data/lib/rubocop/cop/style/attr.rb +5 -2
- data/lib/rubocop/cop/style/bare_percent_literals.rb +4 -3
- data/lib/rubocop/cop/style/begin_block.rb +3 -1
- data/lib/rubocop/cop/style/bitwise_predicate.rb +8 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +42 -34
- data/lib/rubocop/cop/style/case_equality.rb +29 -15
- data/lib/rubocop/cop/style/case_like_if.rb +1 -1
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/class_and_module_children.rb +67 -12
- data/lib/rubocop/cop/style/class_equality_comparison.rb +22 -14
- data/lib/rubocop/cop/style/class_methods_definitions.rb +11 -5
- data/lib/rubocop/cop/style/collection_compact.rb +37 -17
- data/lib/rubocop/cop/style/collection_methods.rb +1 -0
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +16 -7
- data/lib/rubocop/cop/style/combinable_loops.rb +6 -0
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +12 -5
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/comparable_clamp.rb +12 -1
- data/lib/rubocop/cop/style/concat_array_literals.rb +7 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +33 -24
- data/lib/rubocop/cop/style/constant_visibility.rb +20 -12
- data/lib/rubocop/cop/style/copyright.rb +22 -11
- data/lib/rubocop/cop/style/data_inheritance.rb +11 -0
- data/lib/rubocop/cop/style/date_time.rb +4 -4
- data/lib/rubocop/cop/style/def_with_parentheses.rb +22 -5
- data/lib/rubocop/cop/style/dig_chain.rb +6 -1
- data/lib/rubocop/cop/style/dir_empty.rb +4 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +6 -1
- data/lib/rubocop/cop/style/documentation.rb +6 -6
- data/lib/rubocop/cop/style/documentation_method.rb +12 -8
- data/lib/rubocop/cop/style/double_negation.rb +3 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +4 -3
- data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_case_condition.rb +12 -2
- data/lib/rubocop/cop/style/empty_class_definition.rb +126 -0
- data/lib/rubocop/cop/style/empty_heredoc.rb +4 -0
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_literal.rb +11 -2
- data/lib/rubocop/cop/style/empty_method.rb +0 -6
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +110 -0
- data/lib/rubocop/cop/style/encoding.rb +7 -1
- data/lib/rubocop/cop/style/end_block.rb +3 -1
- data/lib/rubocop/cop/style/endless_method.rb +181 -18
- data/lib/rubocop/cop/style/env_home.rb +4 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +3 -3
- data/lib/rubocop/cop/style/even_odd.rb +11 -1
- data/lib/rubocop/cop/style/exact_regexp_match.rb +8 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +16 -3
- data/lib/rubocop/cop/style/exponential_notation.rb +5 -4
- data/lib/rubocop/cop/style/fetch_env_var.rb +33 -7
- data/lib/rubocop/cop/style/file_null.rb +4 -2
- data/lib/rubocop/cop/style/file_open.rb +84 -0
- data/lib/rubocop/cop/style/file_write.rb +21 -16
- data/lib/rubocop/cop/style/float_division.rb +15 -1
- data/lib/rubocop/cop/style/for.rb +4 -0
- data/lib/rubocop/cop/style/format_string.rb +17 -4
- data/lib/rubocop/cop/style/format_string_token.rb +85 -14
- 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 +5 -2
- data/lib/rubocop/cop/style/guard_clause.rb +29 -23
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +27 -9
- data/lib/rubocop/cop/style/hash_conversion.rb +28 -12
- data/lib/rubocop/cop/style/hash_each_methods.rb +3 -2
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_lookup_method.rb +102 -0
- data/lib/rubocop/cop/style/hash_slice.rb +16 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -1
- data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -9
- data/lib/rubocop/cop/style/hash_transform_values.rb +19 -9
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +18 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +26 -20
- data/lib/rubocop/cop/style/if_unless_modifier.rb +83 -16
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +16 -19
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +5 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -6
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inline_comment.rb +5 -2
- data/lib/rubocop/cop/style/inverse_methods.rb +10 -6
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +27 -7
- data/lib/rubocop/cop/style/ip_addresses.rb +3 -4
- data/lib/rubocop/cop/style/it_assignment.rb +69 -12
- data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +4 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +20 -10
- data/lib/rubocop/cop/style/lambda.rb +8 -1
- data/lib/rubocop/cop/style/lambda_call.rb +26 -10
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/magic_comment_format.rb +3 -3
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +11 -0
- data/lib/rubocop/cop/style/map_into_array.rb +5 -2
- data/lib/rubocop/cop/style/map_join.rb +123 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +12 -3
- data/lib/rubocop/cop/style/map_to_set.rb +1 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +9 -8
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +15 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +33 -4
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11 -5
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +7 -5
- data/lib/rubocop/cop/style/min_max_comparison.rb +17 -6
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -7
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +4 -2
- data/lib/rubocop/cop/style/module_member_existence_check.rb +110 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -4
- data/lib/rubocop/cop/style/multiline_memoization.rb +7 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +13 -16
- data/lib/rubocop/cop/style/mutable_constant.rb +106 -12
- data/lib/rubocop/cop/style/negative_array_index.rb +220 -0
- data/lib/rubocop/cop/style/next.rb +44 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +11 -10
- data/lib/rubocop/cop/style/nil_lambda.rb +9 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +5 -11
- data/lib/rubocop/cop/style/not.rb +2 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +1 -0
- data/lib/rubocop/cop/style/one_class_per_file.rb +115 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +21 -12
- data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
- data/lib/rubocop/cop/style/operator_method_call.rb +11 -2
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +57 -25
- data/lib/rubocop/cop/style/partition_instead_of_double_select.rb +270 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +4 -0
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/perl_backrefs.rb +5 -3
- data/lib/rubocop/cop/style/predicate_with_kind.rb +84 -0
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +12 -12
- data/lib/rubocop/cop/style/proc.rb +4 -2
- data/lib/rubocop/cop/style/raise_args.rb +9 -9
- data/lib/rubocop/cop/style/reduce_to_hash.rb +200 -0
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -0
- data/lib/rubocop/cop/style/redundant_array_constructor.rb +2 -2
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +38 -3
- data/lib/rubocop/cop/style/redundant_condition.rb +61 -1
- data/lib/rubocop/cop/style/redundant_constant_base.rb +5 -5
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +26 -4
- data/lib/rubocop/cop/style/redundant_each.rb +3 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +7 -1
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -10
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +1 -1
- data/lib/rubocop/cop/style/redundant_format.rb +312 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
- data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6 -1
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +26 -10
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +28 -7
- data/lib/rubocop/cop/style/redundant_min_max_by.rb +93 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +111 -37
- data/lib/rubocop/cop/style/redundant_percent_q.rb +5 -3
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +9 -0
- data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +12 -0
- data/lib/rubocop/cop/style/redundant_return.rb +3 -1
- data/lib/rubocop/cop/style/redundant_self.rb +20 -7
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +0 -5
- data/lib/rubocop/cop/style/redundant_sort.rb +7 -7
- data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
- data/lib/rubocop/cop/style/redundant_struct_keyword_init.rb +133 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +32 -3
- data/lib/rubocop/cop/style/rescue_modifier.rb +6 -3
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/reverse_find.rb +51 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +67 -20
- data/lib/rubocop/cop/style/select_by_kind.rb +158 -0
- data/lib/rubocop/cop/style/select_by_range.rb +197 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +53 -20
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +45 -12
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +21 -6
- data/lib/rubocop/cop/style/single_line_methods.rb +13 -8
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +77 -101
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +18 -15
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +24 -2
- data/lib/rubocop/cop/style/super_arguments.rb +3 -4
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +10 -7
- data/lib/rubocop/cop/style/tally_method.rb +181 -0
- data/lib/rubocop/cop/style/ternary_parentheses.rb +11 -0
- data/lib/rubocop/cop/style/top_level_method_definition.rb +3 -2
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +52 -1
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -2
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +18 -19
- data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/unless_logical_operators.rb +3 -3
- data/lib/rubocop/cop/style/while_until_do.rb +7 -0
- data/lib/rubocop/cop/style/while_until_modifier.rb +16 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
- data/lib/rubocop/cop/style/yoda_expression.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -3
- data/lib/rubocop/cop/team.rb +105 -40
- data/lib/rubocop/cop/util.rb +4 -5
- data/lib/rubocop/cop/utils/format_string.rb +20 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +7 -3
- data/lib/rubocop/cop/variable_force/branch.rb +30 -6
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +10 -3
- data/lib/rubocop/cop/variable_force.rb +26 -9
- data/lib/rubocop/cops_documentation_generator.rb +23 -7
- data/lib/rubocop/directive_comment.rb +80 -3
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/file_patterns.rb +9 -1
- data/lib/rubocop/formatter/clang_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +38 -13
- data/lib/rubocop/formatter/formatter_set.rb +2 -2
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/junit_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/formatter/simple_text_formatter.rb +0 -2
- data/lib/rubocop/formatter/tap_formatter.rb +5 -2
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
- data/lib/rubocop/formatter.rb +22 -21
- data/lib/rubocop/lsp/diagnostic.rb +22 -37
- data/lib/rubocop/lsp/disable_comment_edits.rb +135 -0
- data/lib/rubocop/lsp/routes.rb +47 -11
- data/lib/rubocop/lsp/runtime.rb +19 -8
- data/lib/rubocop/lsp/server.rb +0 -2
- data/lib/rubocop/lsp/stdin_runner.rb +11 -18
- data/lib/rubocop/magic_comment.rb +28 -0
- data/lib/rubocop/mcp/server.rb +200 -0
- data/lib/rubocop/options.rb +60 -14
- data/lib/rubocop/path_util.rb +18 -2
- 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/project_index_loader.rb +66 -0
- data/lib/rubocop/rake_task.rb +5 -2
- data/lib/rubocop/remote_config.rb +10 -8
- data/lib/rubocop/result_cache.rb +72 -47
- data/lib/rubocop/rspec/cop_helper.rb +21 -1
- data/lib/rubocop/rspec/expect_offense.rb +9 -3
- data/lib/rubocop/rspec/shared_contexts.rb +71 -3
- data/lib/rubocop/rspec/support.rb +4 -0
- data/lib/rubocop/runner.rb +188 -65
- data/lib/rubocop/server/cache.rb +56 -41
- 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/server/core.rb +8 -0
- data/lib/rubocop/target_finder.rb +21 -10
- data/lib/rubocop/target_ruby.rb +31 -14
- data/lib/rubocop/version.rb +50 -10
- data/lib/rubocop.rb +47 -96
- data/lib/ruby_lsp/rubocop/addon.rb +29 -17
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +86 -16
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/ruby_lsp/rubocop/wraps_built_in_lsp_runtime.rb +0 -50
|
@@ -21,6 +21,23 @@ module RuboCop
|
|
|
21
21
|
# something
|
|
22
22
|
# RUBY
|
|
23
23
|
#
|
|
24
|
+
# @example AllCops:ActiveSupportExtensionsEnabled: false (default)
|
|
25
|
+
# # good
|
|
26
|
+
# <<-RUBY.squish
|
|
27
|
+
# something
|
|
28
|
+
# RUBY
|
|
29
|
+
#
|
|
30
|
+
# @example AllCops:ActiveSupportExtensionsEnabled: true
|
|
31
|
+
# # bad
|
|
32
|
+
# <<-RUBY.squish
|
|
33
|
+
# something
|
|
34
|
+
# RUBY
|
|
35
|
+
#
|
|
36
|
+
# # good
|
|
37
|
+
# <<~RUBY.squish
|
|
38
|
+
# something
|
|
39
|
+
# RUBY
|
|
40
|
+
#
|
|
24
41
|
class HeredocIndentation < Base
|
|
25
42
|
include Alignment
|
|
26
43
|
include Heredoc
|
|
@@ -33,6 +50,11 @@ module RuboCop
|
|
|
33
50
|
'heredoc by using `<<~` instead of `%<current_indent_type>s`.'
|
|
34
51
|
WIDTH_MSG = 'Use %<indentation_width>d spaces for indentation in a heredoc.'
|
|
35
52
|
|
|
53
|
+
# @!method squish_method?(node)
|
|
54
|
+
def_node_matcher :squish_method?, <<~PATTERN
|
|
55
|
+
(send _ {:squish :squish!})
|
|
56
|
+
PATTERN
|
|
57
|
+
|
|
36
58
|
def on_heredoc(node)
|
|
37
59
|
body = heredoc_body(node)
|
|
38
60
|
return if body.strip.empty?
|
|
@@ -44,7 +66,7 @@ module RuboCop
|
|
|
44
66
|
expected_indent_level = base_indent_level(node) + configured_indentation_width
|
|
45
67
|
return if expected_indent_level == body_indent_level
|
|
46
68
|
else
|
|
47
|
-
return unless body_indent_level.zero?
|
|
69
|
+
return unless body_indent_level.zero? || heredoc_squish?(node)
|
|
48
70
|
end
|
|
49
71
|
|
|
50
72
|
return if line_too_long?(node)
|
|
@@ -60,6 +82,8 @@ module RuboCop
|
|
|
60
82
|
add_offense(node.loc.heredoc_body, message: message) do |corrector|
|
|
61
83
|
if heredoc_indent_type == '~'
|
|
62
84
|
adjust_squiggly(corrector, node)
|
|
85
|
+
elsif heredoc_squish?(node)
|
|
86
|
+
adjust_heredoc_squish(corrector, node)
|
|
63
87
|
else
|
|
64
88
|
adjust_minus(corrector, node)
|
|
65
89
|
end
|
|
@@ -89,6 +113,7 @@ module RuboCop
|
|
|
89
113
|
end
|
|
90
114
|
|
|
91
115
|
def line_too_long?(node)
|
|
116
|
+
return false unless max_line_length
|
|
92
117
|
return false if unlimited_heredoc_length?
|
|
93
118
|
|
|
94
119
|
body = heredoc_body(node)
|
|
@@ -108,8 +133,9 @@ module RuboCop
|
|
|
108
133
|
config.for_cop('Layout/LineLength')['AllowHeredoc']
|
|
109
134
|
end
|
|
110
135
|
|
|
111
|
-
def
|
|
112
|
-
|
|
136
|
+
def adjust_heredoc_squish(corrector, node)
|
|
137
|
+
adjust_squiggly(corrector, node)
|
|
138
|
+
adjust_minus(corrector, node)
|
|
113
139
|
end
|
|
114
140
|
|
|
115
141
|
def adjust_squiggly(corrector, node)
|
|
@@ -159,6 +185,10 @@ module RuboCop
|
|
|
159
185
|
def heredoc_end(node)
|
|
160
186
|
node.loc.heredoc_end.source
|
|
161
187
|
end
|
|
188
|
+
|
|
189
|
+
def heredoc_squish?(node)
|
|
190
|
+
active_support_extensions_enabled? && squish_method?(node.parent)
|
|
191
|
+
end
|
|
162
192
|
end
|
|
163
193
|
end
|
|
164
194
|
end
|
|
@@ -5,6 +5,8 @@ module RuboCop
|
|
|
5
5
|
module Layout
|
|
6
6
|
# Checks for indentation that doesn't use the specified number of spaces.
|
|
7
7
|
# The indentation width can be configured using the `Width` setting. The default width is 2.
|
|
8
|
+
# The block body indentation for method chain blocks can be configured using the
|
|
9
|
+
# `EnforcedStyleAlignWith` setting.
|
|
8
10
|
#
|
|
9
11
|
# See also the `Layout/IndentationConsistency` cop which is the companion to this one.
|
|
10
12
|
#
|
|
@@ -23,6 +25,17 @@ module RuboCop
|
|
|
23
25
|
# end
|
|
24
26
|
# end
|
|
25
27
|
#
|
|
28
|
+
# @example
|
|
29
|
+
# # bad
|
|
30
|
+
# value = (
|
|
31
|
+
# foo - bar
|
|
32
|
+
# )
|
|
33
|
+
#
|
|
34
|
+
# # good
|
|
35
|
+
# value = (
|
|
36
|
+
# foo - bar
|
|
37
|
+
# )
|
|
38
|
+
#
|
|
26
39
|
# @example AllowedPatterns: ['^\s*module']
|
|
27
40
|
# # bad
|
|
28
41
|
# module A
|
|
@@ -41,7 +54,22 @@ module RuboCop
|
|
|
41
54
|
# end
|
|
42
55
|
# end
|
|
43
56
|
# end
|
|
57
|
+
#
|
|
58
|
+
# @example EnforcedStyleAlignWith: start_of_line (default)
|
|
59
|
+
# # good
|
|
60
|
+
# records.uniq { |el| el[:profile_id] }
|
|
61
|
+
# .map do |message|
|
|
62
|
+
# SomeJob.perform_later(message[:id])
|
|
63
|
+
# end
|
|
64
|
+
#
|
|
65
|
+
# @example EnforcedStyleAlignWith: relative_to_receiver
|
|
66
|
+
# # good
|
|
67
|
+
# records.uniq { |el| el[:profile_id] }
|
|
68
|
+
# .map do |message|
|
|
69
|
+
# SomeJob.perform_later(message[:id])
|
|
70
|
+
# end
|
|
44
71
|
class IndentationWidth < Base # rubocop:disable Metrics/ClassLength
|
|
72
|
+
include ConfigurableEnforcedStyle
|
|
45
73
|
include EndKeywordAlignment
|
|
46
74
|
include Alignment
|
|
47
75
|
include CheckAssignment
|
|
@@ -50,7 +78,7 @@ module RuboCop
|
|
|
50
78
|
extend AutoCorrector
|
|
51
79
|
|
|
52
80
|
MSG = 'Use %<configured_indentation_width>d (not %<indentation>d) ' \
|
|
53
|
-
'
|
|
81
|
+
'%<indentation_type>s for%<name>s indentation.'
|
|
54
82
|
|
|
55
83
|
# @!method access_modifier?(node)
|
|
56
84
|
def_node_matcher :access_modifier?, <<~PATTERN
|
|
@@ -78,19 +106,32 @@ module RuboCop
|
|
|
78
106
|
check_indentation(node.loc.end, node.children.first)
|
|
79
107
|
end
|
|
80
108
|
|
|
109
|
+
def on_begin(node)
|
|
110
|
+
# Only a parenthesized grouping expression (e.g. `(\n foo\n)`) has
|
|
111
|
+
# explicit delimiters. Indent the body one step from the line
|
|
112
|
+
# the opening parenthesis is on, but only when the closing parenthesis is
|
|
113
|
+
# first on its line (a body on the opening line is skipped downstream).
|
|
114
|
+
return unless parentheses?(node) && begins_its_line?(node.loc.end)
|
|
115
|
+
|
|
116
|
+
check_indentation(opening_line_start(node.loc.begin), node.children.first)
|
|
117
|
+
end
|
|
118
|
+
|
|
81
119
|
def on_block(node)
|
|
82
120
|
end_loc = node.loc.end
|
|
83
121
|
|
|
84
122
|
return unless begins_its_line?(end_loc)
|
|
85
123
|
|
|
86
|
-
|
|
124
|
+
base_loc = block_body_indentation_base(node, end_loc)
|
|
125
|
+
check_indentation(base_loc, node.body)
|
|
87
126
|
|
|
88
127
|
return unless indented_internal_methods_style?
|
|
128
|
+
return unless contains_access_modifier?(node.body)
|
|
89
129
|
|
|
90
130
|
check_members(end_loc, [node.body])
|
|
91
131
|
end
|
|
92
132
|
|
|
93
133
|
alias on_numblock on_block
|
|
134
|
+
alias on_itblock on_block
|
|
94
135
|
|
|
95
136
|
def on_class(node)
|
|
96
137
|
base = node.loc.keyword
|
|
@@ -144,7 +185,7 @@ module RuboCop
|
|
|
144
185
|
end
|
|
145
186
|
|
|
146
187
|
def on_case_match(case_match)
|
|
147
|
-
case_match.
|
|
188
|
+
case_match.in_pattern_branches.each do |in_pattern_node|
|
|
148
189
|
check_indentation(in_pattern_node.loc.keyword, in_pattern_node.body)
|
|
149
190
|
end
|
|
150
191
|
|
|
@@ -163,15 +204,24 @@ module RuboCop
|
|
|
163
204
|
private
|
|
164
205
|
|
|
165
206
|
def autocorrect(corrector, node)
|
|
207
|
+
return unless node
|
|
208
|
+
|
|
166
209
|
AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
|
|
167
210
|
end
|
|
168
211
|
|
|
212
|
+
# Returns a range at the first non-space column of the line the opening parenthesis is on,
|
|
213
|
+
# used as the base to indent the body from.
|
|
214
|
+
def opening_line_start(begin_loc)
|
|
215
|
+
column = begin_loc.source_line =~ /\S/
|
|
216
|
+
source_range(processed_source.buffer, begin_loc.line, column)
|
|
217
|
+
end
|
|
218
|
+
|
|
169
219
|
def check_members(base, members)
|
|
170
220
|
check_indentation(base, select_check_member(members.first))
|
|
171
221
|
|
|
172
222
|
return unless members.any? && members.first.begin_type?
|
|
173
223
|
|
|
174
|
-
if
|
|
224
|
+
if indented_internal_methods_style?
|
|
175
225
|
check_members_for_indented_internal_methods_style(members)
|
|
176
226
|
else
|
|
177
227
|
check_members_for_normal_style(base, members)
|
|
@@ -300,10 +350,32 @@ module RuboCop
|
|
|
300
350
|
end
|
|
301
351
|
|
|
302
352
|
def message(configured_indentation_width, indentation, name)
|
|
353
|
+
if using_tabs?
|
|
354
|
+
message_for_tabs(configured_indentation_width, indentation, name)
|
|
355
|
+
else
|
|
356
|
+
message_for_spaces(configured_indentation_width, indentation, name)
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def message_for_tabs(configured_indentation_width, indentation, name)
|
|
361
|
+
configured_tabs = 1
|
|
362
|
+
actual_tabs = indentation / configured_indentation_width
|
|
363
|
+
|
|
364
|
+
format(
|
|
365
|
+
MSG,
|
|
366
|
+
configured_indentation_width: configured_tabs,
|
|
367
|
+
indentation: actual_tabs,
|
|
368
|
+
indentation_type: 'tabs',
|
|
369
|
+
name: name
|
|
370
|
+
)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
def message_for_spaces(configured_indentation_width, indentation, name)
|
|
303
374
|
format(
|
|
304
375
|
MSG,
|
|
305
376
|
configured_indentation_width: configured_indentation_width,
|
|
306
377
|
indentation: indentation,
|
|
378
|
+
indentation_type: 'spaces',
|
|
307
379
|
name: name
|
|
308
380
|
)
|
|
309
381
|
end
|
|
@@ -359,7 +431,13 @@ module RuboCop
|
|
|
359
431
|
def offending_range(body_node, indentation)
|
|
360
432
|
expr = body_node.source_range
|
|
361
433
|
begin_pos = expr.begin_pos
|
|
362
|
-
|
|
434
|
+
|
|
435
|
+
ind = if using_tabs?
|
|
436
|
+
begin_pos - line_indentation(expr).length
|
|
437
|
+
else
|
|
438
|
+
begin_pos - indentation
|
|
439
|
+
end
|
|
440
|
+
|
|
363
441
|
pos = indentation >= 0 ? ind..begin_pos : begin_pos..ind
|
|
364
442
|
range_between(pos.begin, pos.end)
|
|
365
443
|
end
|
|
@@ -373,8 +451,47 @@ module RuboCop
|
|
|
373
451
|
starting_node.send_type? && starting_node.bare_access_modifier?
|
|
374
452
|
end
|
|
375
453
|
|
|
376
|
-
def
|
|
377
|
-
|
|
454
|
+
def contains_access_modifier?(body_node)
|
|
455
|
+
return false unless body_node&.begin_type?
|
|
456
|
+
|
|
457
|
+
body_node.children.any? { |child| child.send_type? && child.bare_access_modifier? }
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
def indentation_style
|
|
461
|
+
config.for_cop('Layout/IndentationStyle')['EnforcedStyle'] || 'spaces'
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
def using_tabs?
|
|
465
|
+
indentation_style == 'tabs'
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
def column_offset_between(base_range, range)
|
|
469
|
+
return super unless using_tabs?
|
|
470
|
+
|
|
471
|
+
base_uses_tabs = line_uses_tabs?(base_range)
|
|
472
|
+
range_uses_tabs = line_uses_tabs?(range)
|
|
473
|
+
|
|
474
|
+
return super unless base_uses_tabs || range_uses_tabs
|
|
475
|
+
|
|
476
|
+
visual_column(base_range) - visual_column(range)
|
|
477
|
+
end
|
|
478
|
+
|
|
479
|
+
def line_indentation(range)
|
|
480
|
+
line = processed_source.lines[range.line - 1]
|
|
481
|
+
line[0...range.column]
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
def line_uses_tabs?(range)
|
|
485
|
+
line_indentation(range).include?("\t")
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
def visual_column(range)
|
|
489
|
+
indentation = line_indentation(range)
|
|
490
|
+
|
|
491
|
+
tab_count = indentation.count("\t")
|
|
492
|
+
space_count = indentation.count(' ')
|
|
493
|
+
|
|
494
|
+
(tab_count * configured_indentation_width) + space_count
|
|
378
495
|
end
|
|
379
496
|
|
|
380
497
|
def leftmost_modifier_of(node)
|
|
@@ -382,6 +499,34 @@ module RuboCop
|
|
|
382
499
|
|
|
383
500
|
leftmost_modifier_of(node.parent)
|
|
384
501
|
end
|
|
502
|
+
|
|
503
|
+
def block_body_indentation_base(node, end_loc)
|
|
504
|
+
return end_loc unless style == :relative_to_receiver
|
|
505
|
+
|
|
506
|
+
if dot_on_new_line?(node)
|
|
507
|
+
node.send_node.loc.dot
|
|
508
|
+
elsif selector_on_new_line?(node)
|
|
509
|
+
node.send_node.loc.selector
|
|
510
|
+
else
|
|
511
|
+
end_loc
|
|
512
|
+
end
|
|
513
|
+
end
|
|
514
|
+
|
|
515
|
+
def dot_on_new_line?(node)
|
|
516
|
+
send_node = node.send_node
|
|
517
|
+
return false unless send_node.loc?(:dot)
|
|
518
|
+
|
|
519
|
+
receiver = send_node.receiver
|
|
520
|
+
receiver && receiver.last_line < send_node.loc.dot.line
|
|
521
|
+
end
|
|
522
|
+
|
|
523
|
+
def selector_on_new_line?(node)
|
|
524
|
+
send_node = node.send_node
|
|
525
|
+
return false unless send_node.loc?(:dot) && send_node.loc?(:selector)
|
|
526
|
+
|
|
527
|
+
receiver = send_node.receiver
|
|
528
|
+
receiver && receiver.last_line < send_node.loc.selector.line
|
|
529
|
+
end
|
|
385
530
|
end
|
|
386
531
|
end
|
|
387
532
|
end
|
|
@@ -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,6 +73,12 @@ 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
|
+
#
|
|
70
82
|
# @example AllowSteepAnnotation: false (default)
|
|
71
83
|
#
|
|
72
84
|
# # bad
|
|
@@ -175,7 +187,7 @@ module RuboCop
|
|
|
175
187
|
end
|
|
176
188
|
|
|
177
189
|
def rbs_inline_annotation?(comment)
|
|
178
|
-
allow_rbs_inline_annotation? && comment.text.start_with?(/#:|#\[.+\]
|
|
190
|
+
allow_rbs_inline_annotation? && comment.text.start_with?(/#:|#\[.+\]|#\|/)
|
|
179
191
|
end
|
|
180
192
|
|
|
181
193
|
def allow_steep_annotation?
|
|
@@ -101,7 +101,7 @@ module RuboCop
|
|
|
101
101
|
ranges << loc.expression
|
|
102
102
|
elsif literal.heredoc?
|
|
103
103
|
ranges << loc.heredoc_body
|
|
104
|
-
elsif
|
|
104
|
+
elsif literal.loc?(:begin) || ignored_parent?(literal)
|
|
105
105
|
ranges << loc.expression
|
|
106
106
|
end
|
|
107
107
|
end
|
|
@@ -75,6 +75,7 @@ module RuboCop
|
|
|
75
75
|
check_for_breakable_block(node)
|
|
76
76
|
end
|
|
77
77
|
alias on_numblock on_block
|
|
78
|
+
alias on_itblock on_block
|
|
78
79
|
|
|
79
80
|
def on_str(node)
|
|
80
81
|
check_for_breakable_str(node)
|
|
@@ -92,6 +93,7 @@ module RuboCop
|
|
|
92
93
|
alias on_send on_potential_breakable_node
|
|
93
94
|
alias on_csend on_potential_breakable_node
|
|
94
95
|
alias on_def on_potential_breakable_node
|
|
96
|
+
alias on_defs on_potential_breakable_node
|
|
95
97
|
|
|
96
98
|
def on_new_investigation
|
|
97
99
|
return unless processed_source.raw_source.include?(';')
|
|
@@ -132,6 +134,7 @@ module RuboCop
|
|
|
132
134
|
|
|
133
135
|
def check_for_breakable_block(block_node)
|
|
134
136
|
return unless block_node.single_line?
|
|
137
|
+
return if receiver_contains_heredoc?(block_node)
|
|
135
138
|
|
|
136
139
|
line_index = block_node.loc.line - 1
|
|
137
140
|
range = breakable_block_range(block_node)
|
|
@@ -209,7 +212,7 @@ module RuboCop
|
|
|
209
212
|
# are not bisected.
|
|
210
213
|
# If the string contains spaces, use them to determine a place for a clean break;
|
|
211
214
|
# otherwise, the string will be broken at the line length limit.
|
|
212
|
-
def breakable_string_range(node)
|
|
215
|
+
def breakable_string_range(node)
|
|
213
216
|
source_range = node.source_range
|
|
214
217
|
relevant_substr = largest_possible_string(node)
|
|
215
218
|
|
|
@@ -221,13 +224,13 @@ module RuboCop
|
|
|
221
224
|
adjustment = max - source_range.last_column - 3
|
|
222
225
|
return if adjustment.abs > source_range.size
|
|
223
226
|
|
|
224
|
-
source_range.adjust(end_pos:
|
|
227
|
+
source_range.adjust(end_pos: adjustment)
|
|
225
228
|
end
|
|
226
229
|
end
|
|
227
230
|
|
|
228
231
|
def breakable_dstr_begin_position(node)
|
|
229
232
|
source_range = node.source_range
|
|
230
|
-
source_range.begin_pos if source_range.
|
|
233
|
+
source_range.begin_pos if source_range.column < max && source_range.last_column >= max
|
|
231
234
|
end
|
|
232
235
|
|
|
233
236
|
def breakable_range_by_line_index
|
|
@@ -249,17 +252,22 @@ module RuboCop
|
|
|
249
252
|
[max - indentation_difference(line), 0].max
|
|
250
253
|
end
|
|
251
254
|
|
|
255
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
252
256
|
def check_line(line, line_index)
|
|
253
257
|
return if line_length(line) <= max
|
|
254
258
|
return if allowed_line?(line, line_index)
|
|
259
|
+
if allow_rbs_inline_annotation? && rbs_inline_annotation_on_source_line?(line_index)
|
|
260
|
+
return
|
|
261
|
+
end
|
|
255
262
|
|
|
256
|
-
if
|
|
263
|
+
if allow_cop_directives? && directive_on_source_line?(line_index)
|
|
257
264
|
return check_directive_line(line, line_index)
|
|
258
265
|
end
|
|
259
|
-
return
|
|
266
|
+
return check_line_for_exemptions(line, line_index) if allow_uri? || allow_qualified_name?
|
|
260
267
|
|
|
261
268
|
register_offense(excess_range(nil, line, line_index), line, line_index)
|
|
262
269
|
end
|
|
270
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
263
271
|
|
|
264
272
|
def allowed_line?(line, line_index)
|
|
265
273
|
matches_allowed_pattern?(line) ||
|
|
@@ -303,6 +311,7 @@ module RuboCop
|
|
|
303
311
|
def max
|
|
304
312
|
cop_config['Max']
|
|
305
313
|
end
|
|
314
|
+
alias max_line_length max
|
|
306
315
|
|
|
307
316
|
def allow_heredoc?
|
|
308
317
|
allowed_heredoc
|
|
@@ -319,7 +328,7 @@ module RuboCop
|
|
|
319
328
|
def extract_heredocs(ast)
|
|
320
329
|
return [] unless ast
|
|
321
330
|
|
|
322
|
-
ast.each_node(:
|
|
331
|
+
ast.each_node(:any_str).select(&:heredoc?).map do |node|
|
|
323
332
|
body = node.location.heredoc_body
|
|
324
333
|
delimiter = node.location.heredoc_end.source.strip
|
|
325
334
|
[body.first_line...body.last_line, delimiter]
|
|
@@ -339,6 +348,13 @@ module RuboCop
|
|
|
339
348
|
heredocs.any? { |range, _delimiter| range.cover?(line_number) }
|
|
340
349
|
end
|
|
341
350
|
|
|
351
|
+
def receiver_contains_heredoc?(node)
|
|
352
|
+
return false unless (receiver = node.receiver)
|
|
353
|
+
return true if receiver.any_str_type? && receiver.heredoc?
|
|
354
|
+
|
|
355
|
+
receiver.each_descendant(:any_str).any?(&:heredoc?)
|
|
356
|
+
end
|
|
357
|
+
|
|
342
358
|
def check_directive_line(line, line_index)
|
|
343
359
|
length_without_directive = line_length_without_directive(line)
|
|
344
360
|
return if length_without_directive <= max
|
|
@@ -356,11 +372,32 @@ module RuboCop
|
|
|
356
372
|
)
|
|
357
373
|
end
|
|
358
374
|
|
|
359
|
-
def
|
|
360
|
-
uri_range
|
|
361
|
-
|
|
375
|
+
def check_line_for_exemptions(line, line_index)
|
|
376
|
+
uri_range = range_if_applicable(line, :uri)
|
|
377
|
+
qualified_name_range = range_if_applicable(line, :qualified_name)
|
|
378
|
+
|
|
379
|
+
return if allowed_combination?(line, uri_range, qualified_name_range)
|
|
380
|
+
|
|
381
|
+
range = uri_range || qualified_name_range
|
|
382
|
+
register_offense(excess_range(range, line, line_index), line, line_index)
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def range_if_applicable(line, type)
|
|
386
|
+
return unless type == :uri ? allow_uri? : allow_qualified_name?
|
|
362
387
|
|
|
363
|
-
|
|
388
|
+
find_excessive_range(line, type)
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
def allowed_combination?(line, uri_range, qualified_name_range)
|
|
392
|
+
if uri_range && qualified_name_range
|
|
393
|
+
allowed_position?(line, uri_range) && allowed_position?(line, qualified_name_range)
|
|
394
|
+
elsif uri_range
|
|
395
|
+
allowed_position?(line, uri_range)
|
|
396
|
+
elsif qualified_name_range
|
|
397
|
+
allowed_position?(line, qualified_name_range)
|
|
398
|
+
else
|
|
399
|
+
false
|
|
400
|
+
end
|
|
364
401
|
end
|
|
365
402
|
|
|
366
403
|
def breakable_dstr?(node)
|
|
@@ -369,9 +406,11 @@ module RuboCop
|
|
|
369
406
|
end
|
|
370
407
|
|
|
371
408
|
def string_delimiter(node)
|
|
372
|
-
delimiter = node.loc
|
|
373
|
-
|
|
374
|
-
|
|
409
|
+
delimiter = if node.loc?(:begin)
|
|
410
|
+
node.loc.begin
|
|
411
|
+
elsif node.parent&.dstr_type? && node.parent.loc?(:begin)
|
|
412
|
+
node.parent.loc.begin
|
|
413
|
+
end&.source
|
|
375
414
|
|
|
376
415
|
delimiter if %w[' "].include?(delimiter)
|
|
377
416
|
end
|
|
@@ -381,8 +420,16 @@ module RuboCop
|
|
|
381
420
|
# The maximum allowed length of a string value is:
|
|
382
421
|
# `Max` - end delimiter (quote) - continuation characters (space and slash)
|
|
383
422
|
max_length = max - 3
|
|
384
|
-
#
|
|
385
|
-
|
|
423
|
+
# Offset by the string's starting column so the broken line actually fits
|
|
424
|
+
# within `Max`. When on the same line as its parent, use the column difference;
|
|
425
|
+
# otherwise the string is indented on its own line, so subtract that indentation.
|
|
426
|
+
# (Without this, an indented string under a multi-line parent never shortens
|
|
427
|
+
# below `Max` and the autocorrect loops, inserting empty `"" \` fragments.)
|
|
428
|
+
max_length -= if same_line?(node, node.parent)
|
|
429
|
+
column_offset_between(node.loc, node.parent.loc)
|
|
430
|
+
else
|
|
431
|
+
node.loc.column
|
|
432
|
+
end
|
|
386
433
|
node.source[0...(max_length)]
|
|
387
434
|
end
|
|
388
435
|
end
|
|
@@ -27,67 +27,67 @@ module RuboCop
|
|
|
27
27
|
# line as the last element of the array.
|
|
28
28
|
#
|
|
29
29
|
# @example EnforcedStyle: symmetrical (default)
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
30
|
+
# # bad
|
|
31
|
+
# [ :a,
|
|
32
|
+
# :b
|
|
33
|
+
# ]
|
|
34
|
+
#
|
|
35
|
+
# # bad
|
|
36
|
+
# [
|
|
37
|
+
# :a,
|
|
38
|
+
# :b ]
|
|
39
|
+
#
|
|
40
|
+
# # good
|
|
41
|
+
# [ :a,
|
|
42
|
+
# :b ]
|
|
43
|
+
#
|
|
44
|
+
# # good
|
|
45
|
+
# [
|
|
46
|
+
# :a,
|
|
47
|
+
# :b
|
|
48
|
+
# ]
|
|
49
49
|
#
|
|
50
50
|
# @example EnforcedStyle: new_line
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
#
|
|
58
|
-
#
|
|
59
|
-
#
|
|
60
|
-
#
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
#
|
|
65
|
-
#
|
|
66
|
-
#
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
51
|
+
# # bad
|
|
52
|
+
# [
|
|
53
|
+
# :a,
|
|
54
|
+
# :b ]
|
|
55
|
+
#
|
|
56
|
+
# # bad
|
|
57
|
+
# [ :a,
|
|
58
|
+
# :b ]
|
|
59
|
+
#
|
|
60
|
+
# # good
|
|
61
|
+
# [ :a,
|
|
62
|
+
# :b
|
|
63
|
+
# ]
|
|
64
|
+
#
|
|
65
|
+
# # good
|
|
66
|
+
# [
|
|
67
|
+
# :a,
|
|
68
|
+
# :b
|
|
69
|
+
# ]
|
|
70
70
|
#
|
|
71
71
|
# @example EnforcedStyle: same_line
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
-
#
|
|
77
|
-
#
|
|
78
|
-
#
|
|
79
|
-
#
|
|
80
|
-
#
|
|
81
|
-
#
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
#
|
|
85
|
-
#
|
|
86
|
-
#
|
|
87
|
-
#
|
|
88
|
-
#
|
|
89
|
-
#
|
|
90
|
-
#
|
|
72
|
+
# # bad
|
|
73
|
+
# [ :a,
|
|
74
|
+
# :b
|
|
75
|
+
# ]
|
|
76
|
+
#
|
|
77
|
+
# # bad
|
|
78
|
+
# [
|
|
79
|
+
# :a,
|
|
80
|
+
# :b
|
|
81
|
+
# ]
|
|
82
|
+
#
|
|
83
|
+
# # good
|
|
84
|
+
# [
|
|
85
|
+
# :a,
|
|
86
|
+
# :b ]
|
|
87
|
+
#
|
|
88
|
+
# # good
|
|
89
|
+
# [ :a,
|
|
90
|
+
# :b ]
|
|
91
91
|
class MultilineArrayBraceLayout < Base
|
|
92
92
|
include MultilineLiteralBraceLayout
|
|
93
93
|
extend AutoCorrector
|