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
|
@@ -9,16 +9,16 @@ module RuboCop
|
|
|
9
9
|
|
|
10
10
|
# @api private
|
|
11
11
|
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode AutoCorrect StyleGuide Details
|
|
12
|
-
Enabled].freeze
|
|
12
|
+
Enabled Reference References Safe SafeAutoCorrect].freeze
|
|
13
13
|
# @api private
|
|
14
14
|
INTERNAL_PARAMS = %w[Description StyleGuide
|
|
15
15
|
VersionAdded VersionChanged VersionRemoved
|
|
16
|
-
Reference Safe SafeAutoCorrect].freeze
|
|
16
|
+
Reference References Safe SafeAutoCorrect].freeze
|
|
17
17
|
# @api private
|
|
18
18
|
NEW_COPS_VALUES = %w[pending disable enable].freeze
|
|
19
19
|
|
|
20
20
|
# @api private
|
|
21
|
-
CONFIG_CHECK_KEYS = %w[Enabled Safe SafeAutoCorrect AutoCorrect].to_set.freeze
|
|
21
|
+
CONFIG_CHECK_KEYS = %w[Enabled Safe SafeAutoCorrect AutoCorrect References].to_set.freeze
|
|
22
22
|
CONFIG_CHECK_DEPARTMENTS = %w[pending override_department].freeze
|
|
23
23
|
CONFIG_CHECK_AUTOCORRECTS = %w[always contextual disabled].freeze
|
|
24
24
|
private_constant :CONFIG_CHECK_KEYS, :CONFIG_CHECK_DEPARTMENTS
|
|
@@ -118,6 +118,7 @@ module RuboCop
|
|
|
118
118
|
invalid_cop_names.each do |name|
|
|
119
119
|
# There could be a custom cop with this name. If so, don't warn
|
|
120
120
|
next if Cop::Registry.global.contains_cop_matching?([name])
|
|
121
|
+
next if ConfigObsoletion.deprecated_cop_name?(name)
|
|
121
122
|
|
|
122
123
|
# Special case for inherit_mode, which is a directive that we keep in
|
|
123
124
|
# the configuration (even though it's not a cop), because it's easier
|
|
@@ -259,8 +260,7 @@ module RuboCop
|
|
|
259
260
|
end
|
|
260
261
|
end
|
|
261
262
|
|
|
262
|
-
# rubocop:disable Metrics/
|
|
263
|
-
def check_cop_config_value(hash, parent = nil)
|
|
263
|
+
def check_cop_config_value(hash, parent = nil) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
264
264
|
hash.each do |key, value|
|
|
265
265
|
check_cop_config_value(value, key) if value.is_a?(Hash)
|
|
266
266
|
|
|
@@ -270,6 +270,8 @@ module RuboCop
|
|
|
270
270
|
supposed_values = 'a boolean'
|
|
271
271
|
elsif key == 'AutoCorrect' && !CONFIG_CHECK_AUTOCORRECTS.include?(value)
|
|
272
272
|
supposed_values = '`always`, `contextual`, `disabled`, or a boolean'
|
|
273
|
+
elsif key == 'References'
|
|
274
|
+
supposed_values = 'an array of strings'
|
|
273
275
|
else
|
|
274
276
|
next
|
|
275
277
|
end
|
|
@@ -277,7 +279,6 @@ module RuboCop
|
|
|
277
279
|
raise ValidationError, param_error_message(parent, key, value, supposed_values)
|
|
278
280
|
end
|
|
279
281
|
end
|
|
280
|
-
# rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
|
281
282
|
|
|
282
283
|
# FIXME: Handling colors in exception messages like this is ugly.
|
|
283
284
|
def param_error_message(parent, key, value, supposed_values)
|
|
@@ -35,8 +35,8 @@ module RuboCop
|
|
|
35
35
|
# `false` is the same as `disabled` for backward compatibility.
|
|
36
36
|
return false if ['disabled', false].include?(cop_config['AutoCorrect'])
|
|
37
37
|
|
|
38
|
-
# When LSP is enabled, it is considered as editing
|
|
39
|
-
# and autocorrection with `AutoCorrect: contextual` will not be performed.
|
|
38
|
+
# When LSP is enabled or the `--editor-mode` option is on, it is considered as editing
|
|
39
|
+
# source code, and autocorrection with `AutoCorrect: contextual` will not be performed.
|
|
40
40
|
return false if contextual_autocorrect? && LSP.enabled?
|
|
41
41
|
|
|
42
42
|
# :safe_autocorrect is a derived option based on several command-line
|
|
@@ -50,7 +50,8 @@ module RuboCop
|
|
|
50
50
|
|
|
51
51
|
def disable_offense(offense_range)
|
|
52
52
|
unbreakable_range = multiline_ranges(offense_range)&.find do |range|
|
|
53
|
-
|
|
53
|
+
offense_range.overlaps?(range) &&
|
|
54
|
+
eol_comment_would_be_inside_literal?(offense_range, range)
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
if unbreakable_range
|
|
@@ -75,22 +76,28 @@ module RuboCop
|
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def disable_offense_with_eol_or_surround_comment(range)
|
|
78
|
-
|
|
79
|
-
needed_line_length = (range.source_line + eol_comment).length
|
|
80
|
-
|
|
81
|
-
if needed_line_length <= max_line_length
|
|
82
|
-
disable_offense_at_end_of_line(range_of_first_line(range), eol_comment)
|
|
83
|
-
else
|
|
79
|
+
if line_with_eol_comment_too_long?(range)
|
|
84
80
|
disable_offense_before_and_after(range_by_lines(range))
|
|
81
|
+
else
|
|
82
|
+
disable_offense_at_end_of_line(range_of_first_line(range))
|
|
85
83
|
end
|
|
86
84
|
end
|
|
87
85
|
|
|
88
|
-
def
|
|
89
|
-
|
|
86
|
+
def eol_comment_would_be_inside_literal?(offense_range, literal_range)
|
|
87
|
+
return true if line_with_eol_comment_too_long?(offense_range)
|
|
88
|
+
|
|
89
|
+
offense_line = offense_range.line
|
|
90
|
+
offense_line >= literal_range.first_line && offense_line < literal_range.last_line
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def line_with_eol_comment_too_long?(range)
|
|
94
|
+
return false unless max_line_length
|
|
95
|
+
|
|
96
|
+
(range.source_line + eol_comment).length > max_line_length
|
|
90
97
|
end
|
|
91
98
|
|
|
92
99
|
def surrounding_heredoc?(node)
|
|
93
|
-
node.
|
|
100
|
+
node.any_str_type? && node.heredoc?
|
|
94
101
|
end
|
|
95
102
|
|
|
96
103
|
def heredoc_range(node)
|
|
@@ -102,7 +109,7 @@ module RuboCop
|
|
|
102
109
|
end
|
|
103
110
|
|
|
104
111
|
def string_continuation?(node)
|
|
105
|
-
node.
|
|
112
|
+
node.any_str_type? && node.source.match?(/\\\s*$/)
|
|
106
113
|
end
|
|
107
114
|
|
|
108
115
|
def multiline_string?(node)
|
|
@@ -129,13 +136,19 @@ module RuboCop
|
|
|
129
136
|
end
|
|
130
137
|
|
|
131
138
|
def max_line_length
|
|
139
|
+
return unless config.cop_enabled?('Layout/LineLength')
|
|
140
|
+
|
|
132
141
|
config.for_cop('Layout/LineLength')['Max'] || 120
|
|
133
142
|
end
|
|
134
143
|
|
|
135
|
-
def disable_offense_at_end_of_line(range
|
|
144
|
+
def disable_offense_at_end_of_line(range)
|
|
136
145
|
Corrector.new(range).insert_after(range, eol_comment)
|
|
137
146
|
end
|
|
138
147
|
|
|
148
|
+
def eol_comment
|
|
149
|
+
" # rubocop:todo #{cop_name}"
|
|
150
|
+
end
|
|
151
|
+
|
|
139
152
|
def disable_offense_before_and_after(range_by_lines)
|
|
140
153
|
range_with_newline = range_by_lines.resize(range_by_lines.size + 1)
|
|
141
154
|
leading_whitespace = range_by_lines.source_line[/^\s*/]
|
data/lib/rubocop/cop/base.rb
CHANGED
|
@@ -41,6 +41,7 @@ module RuboCop
|
|
|
41
41
|
include AutocorrectLogic
|
|
42
42
|
|
|
43
43
|
attr_reader :config, :processed_source
|
|
44
|
+
attr_accessor :project_index
|
|
44
45
|
|
|
45
46
|
# Reports of an investigation.
|
|
46
47
|
# Immutable
|
|
@@ -306,7 +307,9 @@ module RuboCop
|
|
|
306
307
|
def ready
|
|
307
308
|
return self if self.class.support_multiple_source?
|
|
308
309
|
|
|
309
|
-
self.class.new(@config, @options)
|
|
310
|
+
self.class.new(@config, @options).tap do |fresh|
|
|
311
|
+
fresh.project_index = @project_index
|
|
312
|
+
end
|
|
310
313
|
end
|
|
311
314
|
|
|
312
315
|
### Reserved for Cop::Cop
|
|
@@ -328,12 +331,11 @@ module RuboCop
|
|
|
328
331
|
# @api private
|
|
329
332
|
def self.callbacks_needed
|
|
330
333
|
@callbacks_needed ||= public_instance_methods.select do |m|
|
|
331
|
-
# OPTIMIZE:
|
|
332
|
-
#
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
m.start_with?('on_', 'after_')
|
|
334
|
+
# OPTIMIZE: `start_with?` with two string arguments instead of a regex
|
|
335
|
+
# is faster in this specific case.
|
|
336
|
+
m.start_with?('on_', 'after_') &&
|
|
337
|
+
# exclude standard "callbacks" like 'on_new_investigation' unless refined
|
|
338
|
+
instance_method(m).owner != Base
|
|
337
339
|
end
|
|
338
340
|
end
|
|
339
341
|
# rubocop:enable Layout/ClassStructure
|
|
@@ -416,7 +418,10 @@ module RuboCop
|
|
|
416
418
|
### Actually private methods
|
|
417
419
|
|
|
418
420
|
def reset_investigation
|
|
419
|
-
@currently_disabled_lines =
|
|
421
|
+
@currently_disabled_lines = nil
|
|
422
|
+
@current_offenses = nil
|
|
423
|
+
@processed_source = nil
|
|
424
|
+
@current_corrector = nil
|
|
420
425
|
end
|
|
421
426
|
|
|
422
427
|
# @return [Symbol, Corrector] offense status
|
|
@@ -492,8 +497,23 @@ module RuboCop
|
|
|
492
497
|
patterns = cop_config[parameter]
|
|
493
498
|
return default_result unless patterns
|
|
494
499
|
|
|
495
|
-
|
|
496
|
-
|
|
500
|
+
file_patterns = FilePatterns.from(patterns)
|
|
501
|
+
relative_file_path = config.path_relative_to_config(file)
|
|
502
|
+
return true if file_patterns.match?(relative_file_path)
|
|
503
|
+
|
|
504
|
+
if parameter == 'Include' && !relative_file_path.start_with?('..')
|
|
505
|
+
matches_absolute_include_pattern?(patterns, file)
|
|
506
|
+
else
|
|
507
|
+
file_patterns.match?(file)
|
|
508
|
+
end
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
def matches_absolute_include_pattern?(patterns, file)
|
|
512
|
+
absolute_file_path = absolute?(file) ? file : File.expand_path(file)
|
|
513
|
+
patterns.any? do |pattern|
|
|
514
|
+
(absolute?(pattern.to_s) || pattern.to_s.start_with?('..')) &&
|
|
515
|
+
match_path?(pattern, absolute_file_path)
|
|
516
|
+
end
|
|
497
517
|
end
|
|
498
518
|
|
|
499
519
|
def enabled_line?(line_number)
|
|
@@ -524,15 +544,21 @@ module RuboCop
|
|
|
524
544
|
end
|
|
525
545
|
|
|
526
546
|
def range_for_original(range)
|
|
547
|
+
buffer = @current_original.buffer
|
|
548
|
+
return range if @current_offset.zero? && range.source_buffer.equal?(buffer)
|
|
549
|
+
|
|
527
550
|
::Parser::Source::Range.new(
|
|
528
|
-
|
|
551
|
+
buffer,
|
|
529
552
|
range.begin_pos + @current_offset,
|
|
530
553
|
range.end_pos + @current_offset
|
|
531
554
|
)
|
|
532
555
|
end
|
|
533
556
|
|
|
534
557
|
def target_satisfies_all_gem_version_requirements?
|
|
535
|
-
self.class.gem_requirements
|
|
558
|
+
gem_requirements = self.class.gem_requirements
|
|
559
|
+
return true if gem_requirements.empty?
|
|
560
|
+
|
|
561
|
+
gem_requirements.all? do |gem_name, version_req|
|
|
536
562
|
all_gem_versions_in_target = @config.gem_versions_in_target
|
|
537
563
|
next false unless all_gem_versions_in_target
|
|
538
564
|
|
|
@@ -128,8 +128,8 @@ module RuboCop
|
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
def ignored_gem?(node)
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
allowed_gems = Array(cop_config['AllowedGems'])
|
|
132
|
+
allowed_gems.include?(node.first_argument.value)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
def checked_options_present?(node)
|
|
@@ -163,7 +163,9 @@ module RuboCop
|
|
|
163
163
|
def gem_options(node)
|
|
164
164
|
return [] unless node.last_argument&.hash_type?
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
# Only literal keys carry an option name to check; a non-literal key
|
|
167
|
+
# (e.g. a variable or method call) has no `value` and must be skipped.
|
|
168
|
+
node.last_argument.keys.filter_map { |key| key.value if key.type?(:sym, :str) }
|
|
167
169
|
end
|
|
168
170
|
end
|
|
169
171
|
end
|
|
@@ -7,48 +7,48 @@ module RuboCop
|
|
|
7
7
|
# ref, or tag) are either required or forbidden.
|
|
8
8
|
#
|
|
9
9
|
# @example EnforcedStyle: required (default)
|
|
10
|
-
#
|
|
11
|
-
#
|
|
10
|
+
# # bad
|
|
11
|
+
# gem 'rubocop'
|
|
12
12
|
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
13
|
+
# # good
|
|
14
|
+
# gem 'rubocop', '~> 1.12'
|
|
15
15
|
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
16
|
+
# # good
|
|
17
|
+
# gem 'rubocop', '>= 1.10.0'
|
|
18
18
|
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
19
|
+
# # good
|
|
20
|
+
# gem 'rubocop', '>= 1.5.0', '< 1.10.0'
|
|
21
21
|
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
22
|
+
# # good
|
|
23
|
+
# gem 'rubocop', branch: 'feature-branch'
|
|
24
24
|
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
25
|
+
# # good
|
|
26
|
+
# gem 'rubocop', ref: '74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b'
|
|
27
27
|
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
28
|
+
# # good
|
|
29
|
+
# gem 'rubocop', tag: 'v1.17.0'
|
|
30
30
|
#
|
|
31
31
|
# @example EnforcedStyle: forbidden
|
|
32
|
-
#
|
|
33
|
-
#
|
|
32
|
+
# # good
|
|
33
|
+
# gem 'rubocop'
|
|
34
34
|
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
35
|
+
# # bad
|
|
36
|
+
# gem 'rubocop', '~> 1.12'
|
|
37
37
|
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
38
|
+
# # bad
|
|
39
|
+
# gem 'rubocop', '>= 1.10.0'
|
|
40
40
|
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
41
|
+
# # bad
|
|
42
|
+
# gem 'rubocop', '>= 1.5.0', '< 1.10.0'
|
|
43
43
|
#
|
|
44
|
-
#
|
|
45
|
-
#
|
|
44
|
+
# # bad
|
|
45
|
+
# gem 'rubocop', branch: 'feature-branch'
|
|
46
46
|
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
47
|
+
# # bad
|
|
48
|
+
# gem 'rubocop', ref: '74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b'
|
|
49
49
|
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
50
|
+
# # bad
|
|
51
|
+
# gem 'rubocop', tag: 'v1.17.0'
|
|
52
52
|
#
|
|
53
53
|
class GemVersion < Base
|
|
54
54
|
include ConfigurableEnforcedStyle
|
|
@@ -43,9 +43,8 @@ module RuboCop
|
|
|
43
43
|
def on_new_investigation
|
|
44
44
|
return if processed_source.blank?
|
|
45
45
|
|
|
46
|
-
gem_declarations(processed_source.ast)
|
|
47
|
-
|
|
48
|
-
next unless consecutive_lines(previous, current)
|
|
46
|
+
gem_declarations(processed_source.ast).each_cons(2) do |previous, current|
|
|
47
|
+
next unless consecutive_lines?(previous, current)
|
|
49
48
|
next unless case_insensitive_out_of_order?(gem_name(current), gem_name(previous))
|
|
50
49
|
|
|
51
50
|
register_offense(previous, current)
|
|
@@ -64,14 +64,16 @@ module RuboCop
|
|
|
64
64
|
r = '#' unless RESTRICTED_CALLBACKS.include?(method_name) # has Restricted?
|
|
65
65
|
c = '#' if NO_CHILD_NODES.include?(node_type) # has Children?
|
|
66
66
|
|
|
67
|
+
# The `after_` calls are guarded because barely any cop defines an `after_`
|
|
68
|
+
# callback, and the guard is cheaper than the method call it avoids.
|
|
67
69
|
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
|
68
|
-
def on_#{node_type}(node)
|
|
69
|
-
trigger_responding_cops(:on_#{node_type}, node)
|
|
70
|
-
#{r} trigger_restricted_cops(:on_#{node_type}, node)
|
|
71
|
-
#{c} super(node)
|
|
72
|
-
#{c} trigger_responding_cops(:after_#{node_type}, node)
|
|
73
|
-
#{c}#{r} trigger_restricted_cops(:after_#{node_type}, node)
|
|
74
|
-
end
|
|
70
|
+
def on_#{node_type}(node) # def on_send(node)
|
|
71
|
+
trigger_responding_cops(:on_#{node_type}, node) # trigger_responding_cops(:on_send, node)
|
|
72
|
+
#{r} trigger_restricted_cops(:on_#{node_type}, node) # trigger_restricted_cops(:on_send, node)
|
|
73
|
+
#{c} super(node) # super(node)
|
|
74
|
+
#{c} trigger_responding_cops(:after_#{node_type}, node) if @callbacks[:after_#{node_type}] # trigger_responding_cops(:after_send, node) if @callbacks[:after_send]
|
|
75
|
+
#{c}#{r} trigger_restricted_cops(:after_#{node_type}, node) unless @restricted_map[:after_#{node_type}].empty? # trigger_restricted_cops(:after_send, node) unless @restricted_map[:after_send].empty?
|
|
76
|
+
end # end
|
|
75
77
|
RUBY
|
|
76
78
|
end
|
|
77
79
|
|
|
@@ -81,13 +83,13 @@ module RuboCop
|
|
|
81
83
|
|
|
82
84
|
begin_investigation(processed_source, offset: offset, original: original)
|
|
83
85
|
if processed_source.valid_syntax?
|
|
84
|
-
invoke(:on_new_investigation, @
|
|
86
|
+
invoke(:on_new_investigation, @callbacks[:on_new_investigation])
|
|
85
87
|
invoke_with_argument(:investigate, @forces, processed_source)
|
|
86
88
|
|
|
87
89
|
walk(processed_source.ast) unless @cops.empty?
|
|
88
|
-
invoke(:on_investigation_end, @
|
|
90
|
+
invoke(:on_investigation_end, @callbacks[:on_investigation_end])
|
|
89
91
|
else
|
|
90
|
-
invoke(:on_other_file, @
|
|
92
|
+
invoke(:on_other_file, @callbacks[:on_other_file])
|
|
91
93
|
end
|
|
92
94
|
reports = @cops.map { |cop| cop.send(:complete_investigation) }
|
|
93
95
|
InvestigationReport.new(processed_source, reports, @errors)
|
|
@@ -157,7 +159,7 @@ module RuboCop
|
|
|
157
159
|
end
|
|
158
160
|
|
|
159
161
|
def invoke(callback, cops)
|
|
160
|
-
cops
|
|
162
|
+
cops&.each { |cop| with_cop_error_handling(cop) { cop.send(callback) } }
|
|
161
163
|
end
|
|
162
164
|
|
|
163
165
|
def invoke_with_argument(callback, cops, arg)
|
|
@@ -16,6 +16,9 @@ module RuboCop
|
|
|
16
16
|
return unless node
|
|
17
17
|
|
|
18
18
|
@processed_source = processed_source
|
|
19
|
+
# Disable autocorrection for tabs as it requires special handling
|
|
20
|
+
return if using_tabs?
|
|
21
|
+
|
|
19
22
|
expr = node.respond_to?(:loc) ? node.source_range : node
|
|
20
23
|
return if block_comment_within?(expr)
|
|
21
24
|
|
|
@@ -29,10 +32,14 @@ module RuboCop
|
|
|
29
32
|
def align_end(corrector, processed_source, node, align_to)
|
|
30
33
|
@processed_source = processed_source
|
|
31
34
|
whitespace = whitespace_range(node)
|
|
32
|
-
return false unless whitespace.source.strip.empty?
|
|
33
|
-
|
|
34
35
|
column = alignment_column(align_to)
|
|
35
|
-
|
|
36
|
+
indentation = indentation_string(column)
|
|
37
|
+
|
|
38
|
+
if whitespace.source.strip.empty?
|
|
39
|
+
corrector.replace(whitespace, indentation)
|
|
40
|
+
else
|
|
41
|
+
corrector.insert_after(whitespace, "\n#{indentation}")
|
|
42
|
+
end
|
|
36
43
|
end
|
|
37
44
|
|
|
38
45
|
private
|
|
@@ -54,7 +61,7 @@ module RuboCop
|
|
|
54
61
|
def inside_string_ranges(node)
|
|
55
62
|
return [] unless node.is_a?(Parser::AST::Node)
|
|
56
63
|
|
|
57
|
-
node.each_node(:
|
|
64
|
+
node.each_node(:any_str).filter_map { |n| inside_string_range(n) }
|
|
58
65
|
end
|
|
59
66
|
|
|
60
67
|
def inside_string_range(node)
|
|
@@ -73,9 +80,7 @@ module RuboCop
|
|
|
73
80
|
# nil.
|
|
74
81
|
# - The source map of `__FILE__` responds to neither :begin nor :end.
|
|
75
82
|
def delimited_string_literal?(node)
|
|
76
|
-
loc
|
|
77
|
-
|
|
78
|
-
loc.respond_to?(:begin) && loc.begin && loc.respond_to?(:end) && loc.end
|
|
83
|
+
node.loc?(:begin) && node.loc?(:end)
|
|
79
84
|
end
|
|
80
85
|
|
|
81
86
|
def block_comment_within?(expr)
|
|
@@ -119,6 +124,20 @@ module RuboCop
|
|
|
119
124
|
align_to.column
|
|
120
125
|
end
|
|
121
126
|
end
|
|
127
|
+
|
|
128
|
+
def indentation_string(column)
|
|
129
|
+
if using_tabs?
|
|
130
|
+
"\t" * column
|
|
131
|
+
else
|
|
132
|
+
' ' * column
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def using_tabs?
|
|
137
|
+
config = processed_source.config
|
|
138
|
+
indentation_style = config.for_cop('Layout/IndentationStyle')['EnforcedStyle']
|
|
139
|
+
indentation_style == 'tabs'
|
|
140
|
+
end
|
|
122
141
|
end
|
|
123
142
|
end
|
|
124
143
|
end
|
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
|
27
27
|
if block_node.arguments?
|
|
28
28
|
format(CORRECTION_WITH_ARGUMENTS,
|
|
29
29
|
collection: collection_node.source,
|
|
30
|
-
variables: argument_node.children.
|
|
30
|
+
variables: argument_node.children.map(&:source).join(', '))
|
|
31
31
|
else
|
|
32
32
|
format(CORRECTION_WITHOUT_ARGUMENTS, enumerable: collection_node.source)
|
|
33
33
|
end
|
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
|
6
6
|
class ForToEachCorrector
|
|
7
7
|
extend NodePattern::Macros
|
|
8
8
|
|
|
9
|
-
CORRECTION = '%<collection>s
|
|
9
|
+
CORRECTION = '%<collection>s%<dot>seach do |%<argument>s|'
|
|
10
10
|
|
|
11
11
|
def initialize(for_node)
|
|
12
12
|
@for_node = for_node
|
|
@@ -25,7 +25,12 @@ module RuboCop
|
|
|
25
25
|
attr_reader :for_node, :variable_node, :collection_node
|
|
26
26
|
|
|
27
27
|
def correction
|
|
28
|
-
format(
|
|
28
|
+
format(
|
|
29
|
+
CORRECTION,
|
|
30
|
+
collection: collection_source,
|
|
31
|
+
dot: collection_node.csend_type? ? '&.' : '.',
|
|
32
|
+
argument: variable_node.source
|
|
33
|
+
)
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
def collection_source
|
|
@@ -86,7 +86,13 @@ module RuboCop
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def lambda_arg_string
|
|
89
|
-
|
|
89
|
+
# Block-local (shadow) arguments are separated from regular arguments by a
|
|
90
|
+
# `;`; joining everything with `,` would turn them into extra parameters
|
|
91
|
+
# and change the lambda's arity.
|
|
92
|
+
regular, shadow = arguments.children.partition { |arg| !arg.shadowarg_type? }
|
|
93
|
+
arg_string = regular.map(&:source).join(', ')
|
|
94
|
+
arg_string += "; #{shadow.map(&:source).join(', ')}" unless shadow.empty?
|
|
95
|
+
arg_string
|
|
90
96
|
end
|
|
91
97
|
|
|
92
98
|
def needs_separating_space?
|
|
@@ -59,11 +59,7 @@ module RuboCop
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def content_if_comment_present(corrector, node)
|
|
62
|
-
|
|
63
|
-
children(node).last.source_range,
|
|
64
|
-
side: :right
|
|
65
|
-
).end.resize(1)
|
|
66
|
-
if range.source == '#'
|
|
62
|
+
if processed_source.comment_at_line(children(node).last.last_line)
|
|
67
63
|
select_content_to_be_inserted_after_last_element(corrector, node)
|
|
68
64
|
else
|
|
69
65
|
node.loc.end.source
|
|
@@ -18,7 +18,14 @@ module RuboCop
|
|
|
18
18
|
current_range = declaration_with_comment(node)
|
|
19
19
|
previous_range = declaration_with_comment(previous_declaration)
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
lambda do |corrector|
|
|
22
|
+
if current_range.source.end_with?("\n")
|
|
23
|
+
corrector.swap(current_range, previous_range)
|
|
24
|
+
else
|
|
25
|
+
corrector.insert_before(previous_range, "#{current_range.source}\n")
|
|
26
|
+
corrector.remove(current_range)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
22
29
|
end
|
|
23
30
|
|
|
24
31
|
private
|
|
@@ -10,8 +10,10 @@ module RuboCop
|
|
|
10
10
|
COMMA_REGEXP = /(?<=\))\s*,/.freeze
|
|
11
11
|
|
|
12
12
|
def correct(corrector, node)
|
|
13
|
-
|
|
14
|
-
corrector.remove(node.loc.
|
|
13
|
+
buffer = node.source_range.source_buffer
|
|
14
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.begin, buffer: buffer,
|
|
15
|
+
side: :right, whitespace: true))
|
|
16
|
+
remove_close_paren(corrector, node, buffer)
|
|
15
17
|
handle_orphaned_comma(corrector, node)
|
|
16
18
|
|
|
17
19
|
return unless ternary_condition?(node) && next_char_is_question_mark?(node)
|
|
@@ -21,6 +23,38 @@ module RuboCop
|
|
|
21
23
|
|
|
22
24
|
private
|
|
23
25
|
|
|
26
|
+
# When the line above `)` ends with a comment and a chained call follows `)`,
|
|
27
|
+
# crossing the newline would pull the chain into the comment. Preserve the newline.
|
|
28
|
+
def remove_close_paren(corrector, node, buffer)
|
|
29
|
+
newlines = !comment_above_close_paren_swallows_chain?(node, buffer)
|
|
30
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.end, buffer: buffer,
|
|
31
|
+
side: :left, newlines: newlines))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def comment_above_close_paren_swallows_chain?(node, buffer)
|
|
35
|
+
last_child = node.children.last
|
|
36
|
+
return false unless last_child
|
|
37
|
+
|
|
38
|
+
body_end = last_child.source_range.end_pos
|
|
39
|
+
close_paren_begin = node.loc.end.begin_pos
|
|
40
|
+
return false if body_end >= close_paren_begin
|
|
41
|
+
|
|
42
|
+
source_between = buffer.source[body_end...close_paren_begin]
|
|
43
|
+
return false unless source_between.match?(/#[^\n]*\n/)
|
|
44
|
+
|
|
45
|
+
chained_after_close_paren?(node)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def chained_after_close_paren?(node)
|
|
49
|
+
close_paren = node.loc.end
|
|
50
|
+
line_text = close_paren.source_line
|
|
51
|
+
after_paren = line_text[(close_paren.column + 1)..]
|
|
52
|
+
return false if after_paren.nil?
|
|
53
|
+
|
|
54
|
+
trimmed = after_paren.lstrip
|
|
55
|
+
!trimmed.empty? && !trimmed.start_with?('#')
|
|
56
|
+
end
|
|
57
|
+
|
|
24
58
|
def ternary_condition?(node)
|
|
25
59
|
node.parent&.if_type? && node.parent.ternary?
|
|
26
60
|
end
|
|
@@ -97,8 +97,8 @@ module RuboCop
|
|
|
97
97
|
if delimiters.first != delimiters.last
|
|
98
98
|
# With different delimiters (eg. `[]`, `()`), if there are the same
|
|
99
99
|
# number of each, escaping is not necessary
|
|
100
|
-
delimiter_counts = delimiters.
|
|
101
|
-
|
|
100
|
+
delimiter_counts = delimiters.to_h do |delimiter|
|
|
101
|
+
[delimiter, content.count(delimiter)]
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
return content if delimiter_counts[delimiters.first] == delimiter_counts[delimiters.last]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop # rubocop:disable Style/Documentation
|
|
5
|
+
# Autoloads corrector classes used by cops. Classes are autoloaded to reduce the number of
|
|
6
|
+
# required classes because they're referenced only when autocorrection is performed.
|
|
7
|
+
|
|
8
|
+
# rubocop:disable Layout/LineLength
|
|
9
|
+
autoload :AlignmentCorrector, 'rubocop/cop/correctors/alignment_corrector'
|
|
10
|
+
autoload :ConditionCorrector, 'rubocop/cop/correctors/condition_corrector'
|
|
11
|
+
autoload :EachToForCorrector, 'rubocop/cop/correctors/each_to_for_corrector'
|
|
12
|
+
autoload :EmptyLineCorrector, 'rubocop/cop/correctors/empty_line_corrector'
|
|
13
|
+
autoload :ForToEachCorrector, 'rubocop/cop/correctors/for_to_each_corrector'
|
|
14
|
+
autoload :IfThenCorrector, 'rubocop/cop/correctors/if_then_corrector'
|
|
15
|
+
autoload :LambdaLiteralToMethodCorrector, 'rubocop/cop/correctors/lambda_literal_to_method_corrector'
|
|
16
|
+
autoload :LineBreakCorrector, 'rubocop/cop/correctors/line_break_corrector'
|
|
17
|
+
autoload :MultilineLiteralBraceCorrector, 'rubocop/cop/correctors/multiline_literal_brace_corrector'
|
|
18
|
+
autoload :OrderedGemCorrector, 'rubocop/cop/correctors/ordered_gem_corrector'
|
|
19
|
+
autoload :ParenthesesCorrector, 'rubocop/cop/correctors/parentheses_corrector'
|
|
20
|
+
autoload :PercentLiteralCorrector, 'rubocop/cop/correctors/percent_literal_corrector'
|
|
21
|
+
autoload :PunctuationCorrector, 'rubocop/cop/correctors/punctuation_corrector'
|
|
22
|
+
autoload :RequireLibraryCorrector, 'rubocop/cop/correctors/require_library_corrector'
|
|
23
|
+
autoload :SpaceCorrector, 'rubocop/cop/correctors/space_corrector'
|
|
24
|
+
autoload :StringLiteralCorrector, 'rubocop/cop/correctors/string_literal_corrector'
|
|
25
|
+
autoload :UnusedArgCorrector, 'rubocop/cop/correctors/unused_arg_corrector'
|
|
26
|
+
# rubocop:enable Layout/LineLength
|
|
27
|
+
end
|
|
28
|
+
end
|