rubocop 1.57.1 → 1.81.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +92 -89
- data/assets/output.css.erb +159 -0
- data/assets/output.html.erb +1 -160
- data/config/default.yml +540 -86
- data/config/internal_affairs.yml +31 -0
- data/config/obsoletion.yml +8 -3
- data/exe/rubocop +1 -7
- data/lib/rubocop/cached_data.rb +21 -5
- data/lib/rubocop/cli/command/auto_generate_config.rb +30 -17
- data/lib/rubocop/cli/command/execute_runner.rb +4 -4
- data/lib/rubocop/cli/command/lsp.rb +4 -4
- data/lib/rubocop/cli/command/show_cops.rb +24 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
- data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +28 -4
- data/lib/rubocop/comment_config.rb +3 -3
- data/lib/rubocop/config.rb +92 -22
- data/lib/rubocop/config_finder.rb +12 -2
- data/lib/rubocop/config_loader.rb +71 -58
- data/lib/rubocop/config_loader_resolver.rb +48 -17
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +56 -9
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/config_validator.rb +39 -20
- data/lib/rubocop/cop/autocorrect_logic.rb +57 -27
- data/lib/rubocop/cop/base.rb +79 -18
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/gem_version.rb +4 -5
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/cop.rb +30 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +8 -16
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +13 -16
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +6 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/documentation.rb +32 -5
- data/lib/rubocop/cop/exclude_limit.rb +1 -1
- data/lib/rubocop/cop/force.rb +12 -0
- data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/dependency_version.rb +3 -5
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -4
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +39 -17
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +13 -8
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
- data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +124 -30
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +233 -0
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +11 -2
- data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +23 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +0 -5
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +9 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +3 -10
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +32 -13
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +45 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +0 -4
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +4 -4
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +36 -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 +37 -7
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +12 -8
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +16 -4
- data/lib/rubocop/cop/layout/extra_spacing.rb +5 -11
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -11
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +19 -10
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/hash_alignment.rb +8 -11
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +13 -13
- data/lib/rubocop/cop/layout/leading_comment_space.rb +83 -1
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +12 -3
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/line_length.rb +177 -29
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +11 -8
- data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
- data/lib/rubocop/cop/layout/redundant_line_break.rb +32 -46
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +16 -9
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +80 -37
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
- data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
- data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -5
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
- data/lib/rubocop/cop/legacy/corrector.rb +12 -2
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_range.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -9
- data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -14
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +4 -3
- data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
- data/lib/rubocop/cop/lint/debugger.rb +30 -8
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -2
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -13
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +0 -4
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +110 -32
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
- data/lib/rubocop/cop/lint/else_layout.rb +0 -2
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -58
- data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
- data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -5
- data/lib/rubocop/cop/lint/empty_when.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +2 -10
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +24 -23
- data/lib/rubocop/cop/lint/float_comparison.rb +58 -15
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -12
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -4
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +126 -11
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +49 -12
- data/lib/rubocop/cop/lint/loop.rb +6 -12
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -2
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_case_range.rb +14 -12
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -12
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -25
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -7
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +6 -8
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +9 -5
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
- data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/rand_one.rb +0 -4
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +4 -2
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +164 -12
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +9 -8
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -6
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +9 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -2
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +2 -9
- data/lib/rubocop/cop/lint/rescue_type.rb +5 -11
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +20 -9
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
- data/lib/rubocop/cop/lint/script_permission.rb +3 -3
- data/lib/rubocop/cop/lint/self_assignment.rb +72 -10
- data/lib/rubocop/cop/lint/shadowed_argument.rb +8 -7
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +19 -11
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +8 -3
- data/lib/rubocop/cop/lint/syntax.rb +10 -4
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +2 -4
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +4 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +56 -9
- data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -8
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +36 -10
- data/lib/rubocop/cop/lint/useless_assignment.rb +21 -16
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
- data/lib/rubocop/cop/lint/useless_or.rb +98 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -29
- data/lib/rubocop/cop/lint/useless_times.rb +2 -2
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +92 -18
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
- data/lib/rubocop/cop/metrics/block_length.rb +7 -5
- data/lib/rubocop/cop/metrics/block_nesting.rb +20 -8
- data/lib/rubocop/cop/metrics/class_length.rb +21 -15
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
- data/lib/rubocop/cop/metrics/method_length.rb +15 -6
- data/lib/rubocop/cop/metrics/module_length.rb +7 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +8 -9
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +8 -4
- data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/code_length.rb +12 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +23 -14
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
- data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -12
- 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 +45 -35
- data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
- data/lib/rubocop/cop/mixin/line_length_help.rb +34 -12
- data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -9
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
- data/lib/rubocop/cop/mixin/range_help.rb +15 -4
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +11 -5
- data/lib/rubocop/cop/mixin/string_help.rb +2 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +21 -5
- data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +39 -8
- data/lib/rubocop/cop/naming/constant_name.rb +7 -9
- data/lib/rubocop/cop/naming/file_name.rb +4 -6
- data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +13 -14
- data/lib/rubocop/cop/naming/method_name.rb +185 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
- data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +14 -13
- data/lib/rubocop/cop/naming/variable_name.rb +50 -6
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/offense.rb +4 -5
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/compound_hash.rb +4 -2
- data/lib/rubocop/cop/security/eval.rb +2 -1
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/open.rb +3 -2
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +172 -32
- data/lib/rubocop/cop/style/accessor_grouping.rb +43 -9
- data/lib/rubocop/cop/style/alias.rb +2 -1
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/and_or.rb +1 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +228 -36
- data/lib/rubocop/cop/style/array_first_last.rb +80 -0
- data/lib/rubocop/cop/style/array_intersect.rb +115 -39
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
- data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +52 -21
- data/lib/rubocop/cop/style/case_like_if.rb +14 -17
- data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
- data/lib/rubocop/cop/style/class_check.rb +1 -0
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +3 -3
- data/lib/rubocop/cop/style/collection_compact.rb +25 -15
- data/lib/rubocop/cop/style/collection_methods.rb +2 -1
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +22 -8
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +30 -4
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/concat_array_literals.rb +2 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +57 -40
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/copyright.rb +31 -21
- data/lib/rubocop/cop/style/data_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/date_time.rb +5 -4
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -7
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/documentation.rb +25 -25
- data/lib/rubocop/cop/style/documentation_method.rb +20 -0
- data/lib/rubocop/cop/style/double_negation.rb +5 -5
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +11 -15
- data/lib/rubocop/cop/style/each_with_object.rb +3 -4
- data/lib/rubocop/cop/style/empty_else.rb +10 -7
- data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
- data/lib/rubocop/cop/style/empty_literal.rb +36 -23
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
- data/lib/rubocop/cop/style/endless_method.rb +163 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +23 -31
- data/lib/rubocop/cop/style/exact_regexp_match.rb +6 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +19 -6
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
- data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
- data/lib/rubocop/cop/style/file_null.rb +89 -0
- data/lib/rubocop/cop/style/file_read.rb +2 -5
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/file_write.rb +2 -5
- data/lib/rubocop/cop/style/float_division.rb +8 -4
- data/lib/rubocop/cop/style/for.rb +3 -1
- data/lib/rubocop/cop/style/format_string.rb +9 -9
- data/lib/rubocop/cop/style/format_string_token.rb +38 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +20 -4
- data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
- data/lib/rubocop/cop/style/hash_each_methods.rb +110 -12
- data/lib/rubocop/cop/style/hash_except.rb +38 -146
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_slice.rb +80 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +35 -7
- data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +37 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +11 -15
- data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +8 -8
- data/lib/rubocop/cop/style/if_with_semicolon.rb +60 -6
- data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -18
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +48 -6
- data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
- data/lib/rubocop/cop/style/it_assignment.rb +93 -0
- data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
- data/lib/rubocop/cop/style/lambda.rb +2 -1
- data/lib/rubocop/cop/style/lambda_call.rb +10 -4
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +82 -50
- data/lib/rubocop/cop/style/map_into_array.rb +236 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +29 -10
- data/lib/rubocop/cop/style/map_to_set.rb +4 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +52 -25
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +21 -5
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +30 -13
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +35 -5
- data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -9
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +5 -3
- data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +53 -60
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/next.rb +45 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +11 -7
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
- data/lib/rubocop/cop/style/object_then.rb +16 -14
- data/lib/rubocop/cop/style/one_line_conditional.rb +48 -15
- data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
- data/lib/rubocop/cop/style/operator_method_call.rb +27 -9
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +47 -45
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +2 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
- data/lib/rubocop/cop/style/raise_args.rb +19 -14
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +29 -3
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +11 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +41 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +97 -25
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +19 -7
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +17 -14
- data/lib/rubocop/cop/style/redundant_each.rb +7 -4
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +4 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +5 -4
- data/lib/rubocop/cop/style/redundant_format.rb +283 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
- data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +72 -19
- data/lib/rubocop/cop/style/redundant_parentheses.rb +149 -49
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +12 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +16 -24
- data/lib/rubocop/cop/style/redundant_return.rb +9 -3
- data/lib/rubocop/cop/style/redundant_self.rb +32 -20
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +10 -9
- data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
- data/lib/rubocop/cop/style/redundant_string_escape.rb +3 -3
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/require_order.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +18 -4
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +54 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +163 -62
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/sample.rb +3 -4
- data/lib/rubocop/cop/style/select_by_regexp.rb +20 -13
- data/lib/rubocop/cop/style/self_assignment.rb +12 -18
- data/lib/rubocop/cop/style/semicolon.rb +30 -7
- data/lib/rubocop/cop/style/send.rb +4 -4
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +18 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
- data/lib/rubocop/cop/style/slicing_with_range.rb +105 -10
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +72 -87
- data/lib/rubocop/cop/style/special_global_vars.rb +2 -3
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_chars.rb +1 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +21 -17
- data/lib/rubocop/cop/style/string_literals.rb +1 -1
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/strip.rb +7 -4
- data/lib/rubocop/cop/style/struct_inheritance.rb +9 -2
- data/lib/rubocop/cop/style/super_arguments.rb +221 -0
- data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +78 -6
- data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
- data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +56 -2
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/unpack_first.rb +11 -14
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/while_until_do.rb +0 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
- data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
- data/lib/rubocop/cop/team.rb +28 -4
- data/lib/rubocop/cop/util.rb +19 -6
- data/lib/rubocop/cop/utils/format_string.rb +20 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +24 -5
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +14 -3
- data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
- data/lib/rubocop/cop/variable_force.rb +43 -20
- data/lib/rubocop/cops_documentation_generator.rb +135 -58
- data/lib/rubocop/core_ext/string.rb +2 -6
- data/lib/rubocop/directive_comment.rb +54 -18
- data/lib/rubocop/ext/regexp_node.rb +17 -35
- data/lib/rubocop/ext/regexp_parser.rb +4 -21
- data/lib/rubocop/file_finder.rb +9 -4
- data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
- data/lib/rubocop/formatter/disabled_config_formatter.rb +43 -14
- data/lib/rubocop/formatter/formatter_set.rb +8 -2
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +38 -15
- data/lib/rubocop/formatter/json_formatter.rb +0 -1
- data/lib/rubocop/formatter/junit_formatter.rb +70 -23
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +13 -3
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/formatter/tap_formatter.rb +3 -7
- data/lib/rubocop/formatter.rb +1 -1
- data/lib/rubocop/lockfile.rb +58 -7
- data/lib/rubocop/lsp/diagnostic.rb +190 -0
- data/lib/rubocop/lsp/logger.rb +3 -3
- data/lib/rubocop/lsp/routes.rb +77 -40
- data/lib/rubocop/lsp/runtime.rb +20 -50
- data/lib/rubocop/lsp/server.rb +6 -4
- data/lib/rubocop/lsp/severity.rb +1 -1
- data/lib/rubocop/lsp/stdin_runner.rb +69 -0
- data/lib/rubocop/lsp.rb +36 -0
- data/lib/rubocop/magic_comment.rb +12 -4
- data/lib/rubocop/options.rb +43 -22
- data/lib/rubocop/path_util.rb +21 -10
- data/lib/rubocop/pending_cops_reporter.rb +56 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
- data/lib/rubocop/plugin/load_error.rb +26 -0
- data/lib/rubocop/plugin/loader.rb +100 -0
- data/lib/rubocop/plugin/not_supported_error.rb +29 -0
- data/lib/rubocop/plugin.rb +46 -0
- data/lib/rubocop/rake_task.rb +5 -2
- data/lib/rubocop/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +29 -34
- data/lib/rubocop/rspec/cop_helper.rb +20 -2
- data/lib/rubocop/rspec/expect_offense.rb +31 -12
- data/lib/rubocop/rspec/shared_contexts.rb +112 -18
- data/lib/rubocop/rspec/support.rb +7 -2
- data/lib/rubocop/runner.rb +40 -13
- data/lib/rubocop/server/cache.rb +63 -11
- 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 +3 -3
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/server/core.rb +5 -0
- data/lib/rubocop/server/server_command/exec.rb +0 -1
- data/lib/rubocop/target_finder.rb +93 -82
- data/lib/rubocop/target_ruby.rb +111 -81
- data/lib/rubocop/version.rb +67 -9
- data/lib/rubocop/yaml_duplication_checker.rb +20 -26
- data/lib/rubocop.rb +61 -3
- data/lib/ruby_lsp/rubocop/addon.rb +90 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +103 -51
- data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
- /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
|
@@ -29,8 +29,7 @@ module RuboCop
|
|
|
29
29
|
MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
|
|
30
30
|
'aligned with `%<beginning>s` at ' \
|
|
31
31
|
'%<begin_loc_line>d, %<begin_loc_column>d.'
|
|
32
|
-
ANCESTOR_TYPES = %i[kwbegin
|
|
33
|
-
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS = %i[def defs].freeze
|
|
32
|
+
ANCESTOR_TYPES = %i[kwbegin any_def class module any_block].freeze
|
|
34
33
|
ALTERNATIVE_ACCESS_MODIFIERS = %i[public_class_method private_class_method].freeze
|
|
35
34
|
|
|
36
35
|
def on_resbody(node)
|
|
@@ -92,24 +91,25 @@ module RuboCop
|
|
|
92
91
|
)
|
|
93
92
|
end
|
|
94
93
|
|
|
94
|
+
# rubocop:disable Metrics/AbcSize
|
|
95
95
|
def alignment_source(node, starting_loc)
|
|
96
96
|
ending_loc =
|
|
97
97
|
case node.type
|
|
98
|
-
when :block, :kwbegin
|
|
98
|
+
when :block, :numblock, :itblock, :kwbegin
|
|
99
99
|
node.loc.begin
|
|
100
100
|
when :def, :defs, :class, :module,
|
|
101
101
|
:lvasgn, :ivasgn, :cvasgn, :gvasgn, :casgn
|
|
102
102
|
node.loc.name
|
|
103
103
|
when :masgn
|
|
104
|
-
|
|
105
|
-
mlhs_node.source_range
|
|
104
|
+
node.lhs.source_range
|
|
106
105
|
else
|
|
107
|
-
# It is a wrapper with access modifier.
|
|
108
|
-
node.child_nodes.first.loc.name
|
|
106
|
+
# It is a wrapper with receiver of object attribute or access modifier.
|
|
107
|
+
node.receiver&.source_range || node.child_nodes.first.loc.name
|
|
109
108
|
end
|
|
110
109
|
|
|
111
110
|
range_between(starting_loc.begin_pos, ending_loc.end_pos).source
|
|
112
111
|
end
|
|
112
|
+
# rubocop:enable Metrics/AbcSize
|
|
113
113
|
|
|
114
114
|
# We will use ancestor or wrapper with access modifier.
|
|
115
115
|
|
|
@@ -161,8 +161,7 @@ module RuboCop
|
|
|
161
161
|
end
|
|
162
162
|
|
|
163
163
|
def access_modifier_node(node)
|
|
164
|
-
return nil unless
|
|
165
|
-
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS.include?(node.type)
|
|
164
|
+
return nil unless node.any_def_type?
|
|
166
165
|
|
|
167
166
|
access_modifier_node = node.ancestors.first
|
|
168
167
|
return nil unless access_modifier?(access_modifier_node)
|
|
@@ -195,6 +194,14 @@ module RuboCop
|
|
|
195
194
|
def alignment_location(alignment_node)
|
|
196
195
|
if begin_end_alignment_style == 'start_of_line'
|
|
197
196
|
start_line_range(alignment_node)
|
|
197
|
+
elsif alignment_node.any_block_type?
|
|
198
|
+
# If the alignment node is a block, the `rescue`/`ensure` keyword should
|
|
199
|
+
# be aligned to the start of the block. It is possible that the block's
|
|
200
|
+
# `send_node` spans multiple lines, in which case it should align to the
|
|
201
|
+
# start of the last line.
|
|
202
|
+
send_node = alignment_node.send_node
|
|
203
|
+
range = processed_source.buffer.line_range(send_node.last_line)
|
|
204
|
+
range.adjust(begin_pos: range.source =~ /\S/)
|
|
198
205
|
else
|
|
199
206
|
alignment_node.source_range
|
|
200
207
|
end
|
|
@@ -25,16 +25,21 @@ module RuboCop
|
|
|
25
25
|
|
|
26
26
|
MSG = 'Put method call on a separate line if chained to a single line block.'
|
|
27
27
|
|
|
28
|
+
def self.autocorrect_incompatible_with
|
|
29
|
+
[Style::MapToHash]
|
|
30
|
+
end
|
|
31
|
+
|
|
28
32
|
def on_send(node)
|
|
29
33
|
range = offending_range(node)
|
|
30
34
|
add_offense(range) { |corrector| corrector.insert_before(range, "\n") } if range
|
|
31
35
|
end
|
|
36
|
+
alias on_csend on_send
|
|
32
37
|
|
|
33
38
|
private
|
|
34
39
|
|
|
35
40
|
def offending_range(node)
|
|
36
41
|
receiver = node.receiver
|
|
37
|
-
return unless receiver&.
|
|
42
|
+
return unless receiver&.any_block_type?
|
|
38
43
|
|
|
39
44
|
receiver_location = receiver.loc
|
|
40
45
|
closing_block_delimiter_line_num = receiver_location.end.line
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# Checks for colon (
|
|
6
|
+
# Checks for colon (`:`) not followed by some kind of space.
|
|
7
7
|
# N.B. this cop does not handle spaces after a ternary operator, which are
|
|
8
|
-
# instead handled by Layout/SpaceAroundOperators
|
|
8
|
+
# instead handled by `Layout/SpaceAroundOperators`.
|
|
9
9
|
#
|
|
10
10
|
# @example
|
|
11
11
|
# # bad
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# Checks for semicolon (
|
|
6
|
+
# Checks for semicolon (`;`) not followed by some kind of space.
|
|
7
7
|
#
|
|
8
8
|
# @example
|
|
9
9
|
# # bad
|
|
@@ -23,6 +23,16 @@ module RuboCop
|
|
|
23
23
|
def kind(token)
|
|
24
24
|
'semicolon' if token.semicolon?
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
def space_missing?(token1, token2)
|
|
28
|
+
super && !semicolon_sequence?(token1, token2)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def semicolon_sequence?(token, next_token)
|
|
34
|
+
token.semicolon? && next_token.semicolon?
|
|
35
|
+
end
|
|
26
36
|
end
|
|
27
37
|
end
|
|
28
38
|
end
|
|
@@ -16,6 +16,8 @@ module RuboCop
|
|
|
16
16
|
#
|
|
17
17
|
# something = 123if test
|
|
18
18
|
#
|
|
19
|
+
# return(foo + bar)
|
|
20
|
+
#
|
|
19
21
|
# # good
|
|
20
22
|
# something 'test' do |x|
|
|
21
23
|
# end
|
|
@@ -24,6 +26,9 @@ module RuboCop
|
|
|
24
26
|
# end
|
|
25
27
|
#
|
|
26
28
|
# something = 123 if test
|
|
29
|
+
#
|
|
30
|
+
# return (foo + bar)
|
|
31
|
+
#
|
|
27
32
|
class SpaceAroundKeyword < Base
|
|
28
33
|
extend AutoCorrector
|
|
29
34
|
|
|
@@ -33,9 +38,10 @@ module RuboCop
|
|
|
33
38
|
DO = 'do'
|
|
34
39
|
SAFE_NAVIGATION = '&.'
|
|
35
40
|
NAMESPACE_OPERATOR = '::'
|
|
36
|
-
ACCEPT_LEFT_PAREN = %w[break defined? next not rescue
|
|
41
|
+
ACCEPT_LEFT_PAREN = %w[break defined? next not rescue super yield].freeze
|
|
37
42
|
ACCEPT_LEFT_SQUARE_BRACKET = %w[super yield].freeze
|
|
38
43
|
ACCEPT_NAMESPACE_OPERATOR = 'super'
|
|
44
|
+
RESTRICT_ON_SEND = %i[!].freeze
|
|
39
45
|
|
|
40
46
|
def on_and(node)
|
|
41
47
|
check(node, [:operator].freeze) if node.keyword?
|
|
@@ -256,7 +262,7 @@ module RuboCop
|
|
|
256
262
|
# regular dotted method calls bind more tightly than operators
|
|
257
263
|
# so we need to climb up the AST past them
|
|
258
264
|
node.each_ancestor do |ancestor|
|
|
259
|
-
return true if ancestor.
|
|
265
|
+
return true if ancestor.operator_keyword? || ancestor.range_type?
|
|
260
266
|
return false unless ancestor.send_type?
|
|
261
267
|
return true if ancestor.operator_method?
|
|
262
268
|
end
|
|
@@ -50,6 +50,20 @@ module RuboCop
|
|
|
50
50
|
#
|
|
51
51
|
# # good
|
|
52
52
|
# a ** b
|
|
53
|
+
#
|
|
54
|
+
# @example EnforcedStyleForRationalLiterals: no_space (default)
|
|
55
|
+
# # bad
|
|
56
|
+
# 1 / 48r
|
|
57
|
+
#
|
|
58
|
+
# # good
|
|
59
|
+
# 1/48r
|
|
60
|
+
#
|
|
61
|
+
# @example EnforcedStyleForRationalLiterals: space
|
|
62
|
+
# # bad
|
|
63
|
+
# 1/48r
|
|
64
|
+
#
|
|
65
|
+
# # good
|
|
66
|
+
# 1 / 48r
|
|
53
67
|
class SpaceAroundOperators < Base
|
|
54
68
|
include PrecedingFollowingAlignment
|
|
55
69
|
include RangeHelp
|
|
@@ -64,7 +78,7 @@ module RuboCop
|
|
|
64
78
|
end
|
|
65
79
|
|
|
66
80
|
def on_sclass(node)
|
|
67
|
-
check_operator(:sclass, node.loc.operator, node
|
|
81
|
+
check_operator(:sclass, node.loc.operator, node)
|
|
68
82
|
end
|
|
69
83
|
|
|
70
84
|
def on_pair(node)
|
|
@@ -72,83 +86,90 @@ module RuboCop
|
|
|
72
86
|
|
|
73
87
|
return if hash_table_style? && !node.parent.pairs_on_same_line?
|
|
74
88
|
|
|
75
|
-
check_operator(:pair, node.loc.operator, node
|
|
89
|
+
check_operator(:pair, node.loc.operator, node)
|
|
76
90
|
end
|
|
77
91
|
|
|
78
92
|
def on_if(node)
|
|
79
93
|
return unless node.ternary?
|
|
80
94
|
|
|
81
|
-
check_operator(:if, node.loc.question, node.if_branch
|
|
82
|
-
check_operator(:if, node.loc.colon, node.else_branch
|
|
95
|
+
check_operator(:if, node.loc.question, node.if_branch)
|
|
96
|
+
check_operator(:if, node.loc.colon, node.else_branch)
|
|
83
97
|
end
|
|
84
98
|
|
|
85
99
|
def on_resbody(node)
|
|
86
100
|
return unless node.loc.assoc
|
|
87
101
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
check_operator(:resbody, node.loc.assoc, variable.source_range)
|
|
102
|
+
check_operator(:resbody, node.loc.assoc, node.exception_variable)
|
|
91
103
|
end
|
|
92
104
|
|
|
93
105
|
def on_send(node)
|
|
94
106
|
return if rational_literal?(node)
|
|
95
107
|
|
|
96
108
|
if node.setter_method?
|
|
97
|
-
|
|
109
|
+
on_setter_method(node)
|
|
98
110
|
elsif regular_operator?(node)
|
|
99
|
-
check_operator(:send, node.loc.selector, node.first_argument
|
|
111
|
+
check_operator(:send, node.loc.selector, node.first_argument)
|
|
100
112
|
end
|
|
101
113
|
end
|
|
102
114
|
|
|
103
115
|
def on_assignment(node)
|
|
104
|
-
|
|
116
|
+
rhs = node.rhs
|
|
105
117
|
|
|
106
118
|
return unless rhs
|
|
107
119
|
|
|
108
|
-
|
|
120
|
+
type = node.op_asgn_type? ? :special_asgn : :assignment
|
|
121
|
+
check_operator(type, node.loc.operator, rhs)
|
|
109
122
|
end
|
|
110
123
|
|
|
111
|
-
def
|
|
112
|
-
|
|
124
|
+
def on_class(node)
|
|
125
|
+
rhs = node.parent_class
|
|
113
126
|
|
|
114
|
-
return unless
|
|
127
|
+
return unless rhs
|
|
115
128
|
|
|
116
|
-
check_operator(:
|
|
129
|
+
check_operator(:class, node.loc.operator, rhs)
|
|
117
130
|
end
|
|
118
131
|
|
|
119
132
|
def on_binary(node)
|
|
120
|
-
|
|
133
|
+
rhs = node.rhs
|
|
121
134
|
|
|
122
135
|
return unless rhs
|
|
123
136
|
|
|
124
|
-
check_operator(:binary, node.loc.operator, rhs
|
|
137
|
+
check_operator(:binary, node.loc.operator, rhs)
|
|
125
138
|
end
|
|
126
139
|
|
|
127
|
-
def
|
|
128
|
-
|
|
140
|
+
def on_setter_method(node)
|
|
141
|
+
rhs = node.first_argument
|
|
129
142
|
|
|
130
|
-
return unless
|
|
143
|
+
return unless rhs
|
|
131
144
|
|
|
132
|
-
check_operator(:special_asgn, node.loc.operator,
|
|
145
|
+
check_operator(:special_asgn, node.loc.operator, node.first_argument)
|
|
133
146
|
end
|
|
134
147
|
|
|
135
148
|
def on_match_pattern(node)
|
|
136
149
|
return if target_ruby_version < 3.0
|
|
137
150
|
|
|
138
|
-
check_operator(:match_pattern, node.loc.operator, node
|
|
151
|
+
check_operator(:match_pattern, node.loc.operator, node)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def on_match_alt(node)
|
|
155
|
+
check_operator(:match_alt, node.loc.operator, node)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def on_match_as(node)
|
|
159
|
+
check_operator(:match_as, node.loc.operator, node)
|
|
139
160
|
end
|
|
140
161
|
|
|
141
162
|
alias on_or on_binary
|
|
142
163
|
alias on_and on_binary
|
|
143
164
|
alias on_lvasgn on_assignment
|
|
165
|
+
alias on_casgn on_assignment
|
|
144
166
|
alias on_masgn on_assignment
|
|
145
167
|
alias on_ivasgn on_assignment
|
|
146
168
|
alias on_cvasgn on_assignment
|
|
147
169
|
alias on_gvasgn on_assignment
|
|
148
|
-
alias on_class on_binary
|
|
149
170
|
alias on_or_asgn on_assignment
|
|
150
171
|
alias on_and_asgn on_assignment
|
|
151
|
-
alias on_op_asgn
|
|
172
|
+
alias on_op_asgn on_assignment
|
|
152
173
|
|
|
153
174
|
private
|
|
154
175
|
|
|
@@ -166,9 +187,12 @@ module RuboCop
|
|
|
166
187
|
with_space = range_with_surrounding_space(operator)
|
|
167
188
|
return if with_space.source.start_with?("\n")
|
|
168
189
|
|
|
190
|
+
comment = processed_source.comment_at_line(operator.line)
|
|
191
|
+
return if comment && with_space.last_column == comment.loc.column
|
|
192
|
+
|
|
169
193
|
offense(type, operator, with_space, right_operand) do |msg|
|
|
170
194
|
add_offense(operator, message: msg) do |corrector|
|
|
171
|
-
autocorrect(corrector, with_space)
|
|
195
|
+
autocorrect(corrector, with_space, right_operand)
|
|
172
196
|
end
|
|
173
197
|
end
|
|
174
198
|
end
|
|
@@ -178,11 +202,15 @@ module RuboCop
|
|
|
178
202
|
yield msg if msg
|
|
179
203
|
end
|
|
180
204
|
|
|
181
|
-
def autocorrect(corrector, range)
|
|
182
|
-
|
|
205
|
+
def autocorrect(corrector, range, right_operand)
|
|
206
|
+
range_source = range.source
|
|
207
|
+
|
|
208
|
+
if range_source.include?('**') && !space_around_exponent_operator?
|
|
183
209
|
corrector.replace(range, '**')
|
|
184
|
-
elsif
|
|
185
|
-
corrector.replace(range,
|
|
210
|
+
elsif range_source.include?('/') && !space_around_slash_operator?(right_operand)
|
|
211
|
+
corrector.replace(range, '/')
|
|
212
|
+
elsif range_source.end_with?("\n")
|
|
213
|
+
corrector.replace(range, " #{range_source.strip}\n")
|
|
186
214
|
else
|
|
187
215
|
enclose_operator_with_space(corrector, range)
|
|
188
216
|
end
|
|
@@ -202,14 +230,14 @@ module RuboCop
|
|
|
202
230
|
end
|
|
203
231
|
|
|
204
232
|
def offense_message(type, operator, with_space, right_operand)
|
|
205
|
-
if should_not_have_surrounding_space?(operator)
|
|
233
|
+
if should_not_have_surrounding_space?(operator, right_operand)
|
|
206
234
|
return if with_space.is?(operator.source)
|
|
207
235
|
|
|
208
236
|
"Space around operator `#{operator.source}` detected."
|
|
209
237
|
elsif !/^\s.*\s$/.match?(with_space.source)
|
|
210
238
|
"Surrounding space missing for operator `#{operator.source}`."
|
|
211
239
|
elsif excess_leading_space?(type, operator, with_space) ||
|
|
212
|
-
excess_trailing_space?(right_operand, with_space)
|
|
240
|
+
excess_trailing_space?(right_operand.source_range, with_space)
|
|
213
241
|
"Operator `#{operator.source}` should be surrounded " \
|
|
214
242
|
'by a single space.'
|
|
215
243
|
end
|
|
@@ -222,12 +250,12 @@ module RuboCop
|
|
|
222
250
|
return !aligned_with_operator?(operator) unless type == :assignment
|
|
223
251
|
|
|
224
252
|
token = Token.new(operator, nil, operator.source)
|
|
225
|
-
align_preceding =
|
|
253
|
+
align_preceding = aligned_with_preceding_equals_operator(token)
|
|
226
254
|
|
|
227
255
|
return false if align_preceding == :yes ||
|
|
228
|
-
|
|
256
|
+
aligned_with_subsequent_equals_operator(token) == :none
|
|
229
257
|
|
|
230
|
-
|
|
258
|
+
aligned_with_subsequent_equals_operator(token) != :yes
|
|
231
259
|
end
|
|
232
260
|
|
|
233
261
|
def excess_trailing_space?(right_operand, with_space)
|
|
@@ -240,19 +268,34 @@ module RuboCop
|
|
|
240
268
|
end
|
|
241
269
|
|
|
242
270
|
def hash_table_style?
|
|
243
|
-
|
|
271
|
+
return false unless align_hash_cop_config
|
|
272
|
+
|
|
273
|
+
enforced_styles = Array(align_hash_cop_config['EnforcedHashRocketStyle'])
|
|
274
|
+
enforced_styles.include?('table')
|
|
244
275
|
end
|
|
245
276
|
|
|
246
277
|
def space_around_exponent_operator?
|
|
247
278
|
cop_config['EnforcedStyleForExponentOperator'] == 'space'
|
|
248
279
|
end
|
|
249
280
|
|
|
281
|
+
def space_around_slash_operator?(right_operand)
|
|
282
|
+
return true unless right_operand.rational_type?
|
|
283
|
+
|
|
284
|
+
cop_config['EnforcedStyleForRationalLiterals'] == 'space'
|
|
285
|
+
end
|
|
286
|
+
|
|
250
287
|
def force_equal_sign_alignment?
|
|
251
288
|
config.for_cop('Layout/ExtraSpacing')['ForceEqualSignAlignment']
|
|
252
289
|
end
|
|
253
290
|
|
|
254
|
-
def should_not_have_surrounding_space?(operator)
|
|
255
|
-
operator.is?('**')
|
|
291
|
+
def should_not_have_surrounding_space?(operator, right_operand)
|
|
292
|
+
if operator.is?('**')
|
|
293
|
+
!space_around_exponent_operator?
|
|
294
|
+
elsif operator.is?('/')
|
|
295
|
+
!space_around_slash_operator?(right_operand)
|
|
296
|
+
else
|
|
297
|
+
false
|
|
298
|
+
end
|
|
256
299
|
end
|
|
257
300
|
end
|
|
258
301
|
end
|
|
@@ -77,23 +77,33 @@ module RuboCop
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
alias on_numblock on_block
|
|
80
|
+
alias on_itblock on_block
|
|
80
81
|
|
|
81
82
|
private
|
|
82
83
|
|
|
83
84
|
def check_empty(left_brace, space_plus_brace, used_style)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
if style_for_empty_braces == used_style
|
|
86
|
+
handle_different_styles_for_empty_braces(used_style)
|
|
87
|
+
return
|
|
88
|
+
elsif !config_to_allow_offenses.key?('Enabled')
|
|
89
|
+
config_to_allow_offenses['EnforcedStyleForEmptyBraces'] = used_style.to_s
|
|
90
|
+
end
|
|
87
91
|
|
|
88
92
|
if style_for_empty_braces == :space
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
end
|
|
93
|
+
range = left_brace
|
|
94
|
+
msg = MISSING_MSG
|
|
92
95
|
else
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
range = range_between(space_plus_brace.begin_pos, left_brace.begin_pos)
|
|
97
|
+
msg = DETECTED_MSG
|
|
98
|
+
end
|
|
99
|
+
add_offense(range, message: msg) { |corrector| autocorrect(corrector, range) }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def handle_different_styles_for_empty_braces(used_style)
|
|
103
|
+
if config_to_allow_offenses['EnforcedStyleForEmptyBraces'] &&
|
|
104
|
+
config_to_allow_offenses['EnforcedStyleForEmptyBraces'].to_sym != used_style
|
|
105
|
+
config_to_allow_offenses.clear
|
|
106
|
+
config_to_allow_offenses['Enabled'] = false
|
|
97
107
|
end
|
|
98
108
|
end
|
|
99
109
|
|
|
@@ -22,51 +22,18 @@ module RuboCop
|
|
|
22
22
|
RESTRICT_ON_SEND = %i[[] []=].freeze
|
|
23
23
|
|
|
24
24
|
def on_send(node)
|
|
25
|
-
return
|
|
25
|
+
return if node.loc.dot
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
receiver_end_pos = node.receiver.source_range.end_pos
|
|
28
|
+
selector_begin_pos = node.loc.selector.begin_pos
|
|
29
|
+
return if receiver_end_pos >= selector_begin_pos
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
31
|
+
range = range_between(receiver_end_pos, selector_begin_pos)
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
receiver_end_pos = node.receiver.source_range.end_pos
|
|
38
|
-
selector_begin_pos = node.loc.selector.begin_pos
|
|
39
|
-
return if receiver_end_pos >= selector_begin_pos
|
|
40
|
-
return if dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
|
41
|
-
|
|
42
|
-
range_between(receiver_end_pos, selector_begin_pos)
|
|
43
|
-
elsif node.method?(:[]=)
|
|
44
|
-
offense_range_for_assignment(node, begin_pos)
|
|
33
|
+
add_offense(range) do |corrector|
|
|
34
|
+
corrector.remove(range)
|
|
45
35
|
end
|
|
46
36
|
end
|
|
47
|
-
|
|
48
|
-
def dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
|
49
|
-
return false unless node.loc.respond_to?(:dot) && (dot = node.loc.dot)
|
|
50
|
-
|
|
51
|
-
dot.begin_pos == receiver_end_pos && dot.end_pos == selector_begin_pos
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def offense_range_for_assignment(node, begin_pos)
|
|
55
|
-
end_pos = node.receiver.source_range.end_pos
|
|
56
|
-
|
|
57
|
-
return if begin_pos - end_pos == 1 ||
|
|
58
|
-
(range = range_between(end_pos, begin_pos - 1)).source.start_with?('[')
|
|
59
|
-
|
|
60
|
-
range
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def register_offense(range)
|
|
64
|
-
add_offense(range) { |corrector| corrector.remove(range) }
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def reference_variable_with_brackets?(node)
|
|
68
|
-
node.receiver&.variable? && node.method?(:[]) && node.arguments.size == 1
|
|
69
|
-
end
|
|
70
37
|
end
|
|
71
38
|
end
|
|
72
39
|
end
|
|
@@ -6,15 +6,19 @@ module RuboCop
|
|
|
6
6
|
# Checks that brackets used for array literals have or don't have
|
|
7
7
|
# surrounding space depending on configuration.
|
|
8
8
|
#
|
|
9
|
+
# Array pattern matching is handled in the same way.
|
|
10
|
+
#
|
|
9
11
|
# @example EnforcedStyle: no_space (default)
|
|
10
12
|
# # The `no_space` style enforces that array literals have
|
|
11
13
|
# # no surrounding space.
|
|
12
14
|
#
|
|
13
15
|
# # bad
|
|
14
16
|
# array = [ a, b, c, d ]
|
|
17
|
+
# array = [ a, [ b, c ]]
|
|
15
18
|
#
|
|
16
19
|
# # good
|
|
17
20
|
# array = [a, b, c, d]
|
|
21
|
+
# array = [a, [b, c]]
|
|
18
22
|
#
|
|
19
23
|
# @example EnforcedStyle: space
|
|
20
24
|
# # The `space` style enforces that array literals have
|
|
@@ -22,9 +26,11 @@ module RuboCop
|
|
|
22
26
|
#
|
|
23
27
|
# # bad
|
|
24
28
|
# array = [a, b, c, d]
|
|
29
|
+
# array = [ a, [ b, c ]]
|
|
25
30
|
#
|
|
26
31
|
# # good
|
|
27
32
|
# array = [ a, b, c, d ]
|
|
33
|
+
# array = [ a, [ b, c ] ]
|
|
28
34
|
#
|
|
29
35
|
# @example EnforcedStyle: compact
|
|
30
36
|
# # The `compact` style normally requires a space inside
|
|
@@ -32,6 +38,7 @@ module RuboCop
|
|
|
32
38
|
# # or right brackets are collapsed together in nested arrays.
|
|
33
39
|
#
|
|
34
40
|
# # bad
|
|
41
|
+
# array = [a, b, c, d]
|
|
35
42
|
# array = [ a, [ b, c ] ]
|
|
36
43
|
# array = [
|
|
37
44
|
# [ a ],
|
|
@@ -39,6 +46,7 @@ module RuboCop
|
|
|
39
46
|
# ]
|
|
40
47
|
#
|
|
41
48
|
# # good
|
|
49
|
+
# array = [ a, b, c, d ]
|
|
42
50
|
# array = [ a, [ b, c ]]
|
|
43
51
|
# array = [[ a ],
|
|
44
52
|
# [ b, c ]]
|
|
@@ -76,9 +84,11 @@ module RuboCop
|
|
|
76
84
|
EMPTY_MSG = '%<command>s space inside empty array brackets.'
|
|
77
85
|
|
|
78
86
|
def on_array(node)
|
|
79
|
-
return
|
|
87
|
+
return if node.array_type? && !node.square_brackets?
|
|
80
88
|
|
|
89
|
+
node = find_node_with_brackets(node)
|
|
81
90
|
tokens, left, right = array_brackets(node)
|
|
91
|
+
return unless left && right
|
|
82
92
|
|
|
83
93
|
if empty_brackets?(left, right, tokens: tokens)
|
|
84
94
|
return empty_offenses(node, left, right, EMPTY_MSG)
|
|
@@ -89,9 +99,14 @@ module RuboCop
|
|
|
89
99
|
|
|
90
100
|
issue_offenses(node, left, right, start_ok, end_ok)
|
|
91
101
|
end
|
|
102
|
+
alias on_array_pattern on_array
|
|
92
103
|
|
|
93
104
|
private
|
|
94
105
|
|
|
106
|
+
def find_node_with_brackets(node)
|
|
107
|
+
node.ancestors.find(&:const_pattern_type?) || node
|
|
108
|
+
end
|
|
109
|
+
|
|
95
110
|
def autocorrect(corrector, node)
|
|
96
111
|
tokens, left, right = array_brackets(node)
|
|
97
112
|
|
|
@@ -109,7 +124,7 @@ module RuboCop
|
|
|
109
124
|
def array_brackets(node)
|
|
110
125
|
tokens = processed_source.tokens_within(node)
|
|
111
126
|
|
|
112
|
-
left = tokens.find(&:
|
|
127
|
+
left = tokens.find(&:left_bracket?)
|
|
113
128
|
right = tokens.reverse_each.find(&:right_bracket?)
|
|
114
129
|
|
|
115
130
|
[tokens, left, right]
|
|
@@ -182,7 +197,7 @@ module RuboCop
|
|
|
182
197
|
if side == :right
|
|
183
198
|
processed_source.tokens_within(node)[i].right_bracket?
|
|
184
199
|
else
|
|
185
|
-
processed_source.tokens_within(node)[i].
|
|
200
|
+
processed_source.tokens_within(node)[i].left_bracket?
|
|
186
201
|
end
|
|
187
202
|
end
|
|
188
203
|
|
|
@@ -82,6 +82,10 @@ module RuboCop
|
|
|
82
82
|
include RangeHelp
|
|
83
83
|
extend AutoCorrector
|
|
84
84
|
|
|
85
|
+
def self.autocorrect_incompatible_with
|
|
86
|
+
[Style::BlockDelimiters]
|
|
87
|
+
end
|
|
88
|
+
|
|
85
89
|
def on_block(node)
|
|
86
90
|
return if node.keywords?
|
|
87
91
|
|
|
@@ -99,6 +103,7 @@ module RuboCop
|
|
|
99
103
|
end
|
|
100
104
|
|
|
101
105
|
alias on_numblock on_block
|
|
106
|
+
alias on_itblock on_block
|
|
102
107
|
|
|
103
108
|
private
|
|
104
109
|
|