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
|
@@ -3,18 +3,21 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# Checks the args passed to `fail` and `raise`.
|
|
7
|
-
# style (default), it recommends passing the exception class and message
|
|
8
|
-
# to `raise`, rather than construct an instance of the error. It will
|
|
9
|
-
# still allow passing just a message, or the construction of an error
|
|
10
|
-
# with more than one argument.
|
|
6
|
+
# Checks the args passed to `fail` and `raise`.
|
|
11
7
|
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
8
|
+
# Exploded style (default) enforces passing the exception class and message
|
|
9
|
+
# arguments separately, rather than constructing an instance of the error.
|
|
10
|
+
#
|
|
11
|
+
# Compact style enforces constructing an error instance.
|
|
12
|
+
#
|
|
13
|
+
# Both styles allow passing just a message, or an error instance when there is more
|
|
14
|
+
# than one argument.
|
|
15
15
|
#
|
|
16
16
|
# The exploded style has an `AllowedCompactTypes` configuration
|
|
17
|
-
# option that takes an Array of exception name Strings.
|
|
17
|
+
# option that takes an `Array` of exception name Strings.
|
|
18
|
+
#
|
|
19
|
+
# @safety
|
|
20
|
+
# This cop is unsafe because `raise Foo` calls `Foo.exception`, not `Foo.new`.
|
|
18
21
|
#
|
|
19
22
|
# @example EnforcedStyle: exploded (default)
|
|
20
23
|
# # bad
|
|
@@ -47,6 +50,9 @@ module RuboCop
|
|
|
47
50
|
|
|
48
51
|
EXPLODED_MSG = 'Provide an exception class and message as arguments to `%<method>s`.'
|
|
49
52
|
COMPACT_MSG = 'Provide an exception object as an argument to `%<method>s`.'
|
|
53
|
+
ACCEPTABLE_ARG_TYPES = %i[
|
|
54
|
+
hash forwarded_restarg splat forwarded_restarg forwarded_args
|
|
55
|
+
].freeze
|
|
50
56
|
|
|
51
57
|
RESTRICT_ON_SEND = %i[raise fail].freeze
|
|
52
58
|
|
|
@@ -77,7 +83,7 @@ module RuboCop
|
|
|
77
83
|
|
|
78
84
|
def correction_exploded_to_compact(node)
|
|
79
85
|
exception_node, *message_nodes = *node.arguments
|
|
80
|
-
return
|
|
86
|
+
return if message_nodes.size > 1
|
|
81
87
|
|
|
82
88
|
argument = message_nodes.first.source
|
|
83
89
|
exception_class = exception_node.receiver&.source || exception_node.source
|
|
@@ -135,9 +141,8 @@ module RuboCop
|
|
|
135
141
|
|
|
136
142
|
arg = args.first
|
|
137
143
|
|
|
138
|
-
# Allow
|
|
139
|
-
|
|
140
|
-
arg.hash_type? || arg.splat_type?
|
|
144
|
+
# Allow nodes that may forward more than one argument
|
|
145
|
+
ACCEPTABLE_ARG_TYPES.include?(arg.type)
|
|
141
146
|
end
|
|
142
147
|
|
|
143
148
|
def allowed_non_exploded_type?(arg)
|
|
@@ -147,7 +152,7 @@ module RuboCop
|
|
|
147
152
|
end
|
|
148
153
|
|
|
149
154
|
def requires_parens?(parent)
|
|
150
|
-
parent.
|
|
155
|
+
parent.operator_keyword? || (parent.if_type? && parent.ternary?)
|
|
151
156
|
end
|
|
152
157
|
end
|
|
153
158
|
end
|
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
|
36
36
|
(send
|
|
37
37
|
{nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
|
|
38
38
|
:rand
|
|
39
|
-
{int (
|
|
39
|
+
{int (range int int)}))
|
|
40
40
|
PATTERN
|
|
41
41
|
|
|
42
42
|
# @!method rand_op_integer?(node)
|
|
@@ -45,7 +45,7 @@ module RuboCop
|
|
|
45
45
|
(send
|
|
46
46
|
{nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
|
|
47
47
|
:rand
|
|
48
|
-
{int (
|
|
48
|
+
{int (range int int)})
|
|
49
49
|
{:+ :-}
|
|
50
50
|
int)
|
|
51
51
|
PATTERN
|
|
@@ -56,7 +56,7 @@ module RuboCop
|
|
|
56
56
|
(send
|
|
57
57
|
{nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
|
|
58
58
|
:rand
|
|
59
|
-
{int (
|
|
59
|
+
{int (range int int)})
|
|
60
60
|
{:succ :pred :next})
|
|
61
61
|
PATTERN
|
|
62
62
|
|
|
@@ -67,12 +67,13 @@ module RuboCop
|
|
|
67
67
|
return unless redundant_argument?(node)
|
|
68
68
|
|
|
69
69
|
offense_range = argument_range(node)
|
|
70
|
-
message = format(MSG, arg: node.
|
|
70
|
+
message = format(MSG, arg: node.first_argument.source)
|
|
71
71
|
|
|
72
72
|
add_offense(offense_range, message: message) do |corrector|
|
|
73
73
|
corrector.remove(offense_range)
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
|
+
alias on_csend on_send
|
|
76
77
|
|
|
77
78
|
private
|
|
78
79
|
|
|
@@ -80,14 +81,20 @@ module RuboCop
|
|
|
80
81
|
redundant_argument = redundant_arg_for_method(node.method_name.to_s)
|
|
81
82
|
return false if redundant_argument.nil?
|
|
82
83
|
|
|
83
|
-
node.
|
|
84
|
+
target_argument = if node.first_argument.respond_to?(:value)
|
|
85
|
+
node.first_argument.value
|
|
86
|
+
else
|
|
87
|
+
node.first_argument
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
argument_matched?(target_argument, redundant_argument)
|
|
84
91
|
end
|
|
85
92
|
|
|
86
93
|
def redundant_arg_for_method(method_name)
|
|
87
94
|
arg = cop_config['Methods'].fetch(method_name) { return }
|
|
88
95
|
|
|
89
96
|
@mem ||= {}
|
|
90
|
-
@mem[method_name] ||=
|
|
97
|
+
@mem[method_name] ||= arg.inspect
|
|
91
98
|
end
|
|
92
99
|
|
|
93
100
|
def argument_range(node)
|
|
@@ -97,6 +104,25 @@ module RuboCop
|
|
|
97
104
|
range_with_surrounding_space(node.first_argument.source_range, newlines: false)
|
|
98
105
|
end
|
|
99
106
|
end
|
|
107
|
+
|
|
108
|
+
def argument_matched?(target_argument, redundant_argument)
|
|
109
|
+
argument = if target_argument.is_a?(AST::Node)
|
|
110
|
+
target_argument.source
|
|
111
|
+
elsif exclude_cntrl_character?(target_argument, redundant_argument)
|
|
112
|
+
target_argument.inspect
|
|
113
|
+
else
|
|
114
|
+
target_argument.to_s
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
argument == redundant_argument
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def exclude_cntrl_character?(target_argument, redundant_argument)
|
|
121
|
+
return true unless (target_argument_string = target_argument.to_s).valid_encoding?
|
|
122
|
+
|
|
123
|
+
!target_argument_string.sub(/\A'/, '"').sub(/'\z/, '"').match?(/[[:cntrl:]]/) ||
|
|
124
|
+
!redundant_argument.match?(/[[:cntrl:]]/)
|
|
125
|
+
end
|
|
100
126
|
end
|
|
101
127
|
end
|
|
102
128
|
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Style
|
|
6
|
+
# Checks for redundant calls of `Array#flatten`.
|
|
7
|
+
#
|
|
8
|
+
# `Array#join` joins nested arrays recursively, so flattening an array
|
|
9
|
+
# beforehand is redundant.
|
|
10
|
+
#
|
|
11
|
+
# @safety
|
|
12
|
+
# Cop is unsafe because the receiver of `flatten` method might not
|
|
13
|
+
# be an `Array`, so it's possible it won't respond to `join` method,
|
|
14
|
+
# or the end result would be different.
|
|
15
|
+
# Also, if the global variable `$,` is set to a value other than the default `nil`,
|
|
16
|
+
# false positives may occur.
|
|
17
|
+
#
|
|
18
|
+
# @example
|
|
19
|
+
# # bad
|
|
20
|
+
# x.flatten.join
|
|
21
|
+
# x.flatten(1).join
|
|
22
|
+
#
|
|
23
|
+
# # good
|
|
24
|
+
# x.join
|
|
25
|
+
#
|
|
26
|
+
class RedundantArrayFlatten < Base
|
|
27
|
+
extend AutoCorrector
|
|
28
|
+
|
|
29
|
+
MSG = 'Remove the redundant `flatten`.'
|
|
30
|
+
|
|
31
|
+
RESTRICT_ON_SEND = %i[flatten].freeze
|
|
32
|
+
|
|
33
|
+
# @!method flatten_join?(node)
|
|
34
|
+
def_node_matcher :flatten_join?, <<~PATTERN
|
|
35
|
+
(call (call !nil? :flatten _?) :join (nil)?)
|
|
36
|
+
PATTERN
|
|
37
|
+
|
|
38
|
+
def on_send(node)
|
|
39
|
+
return unless flatten_join?(node.parent)
|
|
40
|
+
|
|
41
|
+
range = node.loc.dot.begin.join(node.source_range.end)
|
|
42
|
+
add_offense(range) do |corrector|
|
|
43
|
+
corrector.remove(range)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
alias on_csend on_send
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -54,12 +54,14 @@ module RuboCop
|
|
|
54
54
|
|
|
55
55
|
private
|
|
56
56
|
|
|
57
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
57
58
|
def check_branch(node)
|
|
58
59
|
return unless node
|
|
59
60
|
|
|
60
61
|
case node.type
|
|
61
|
-
when :case
|
|
62
|
-
when :
|
|
62
|
+
when :case then check_case_node(node)
|
|
63
|
+
when :case_match then check_case_match_node(node)
|
|
64
|
+
when :if then check_if_node(node)
|
|
63
65
|
when :rescue, :resbody
|
|
64
66
|
check_rescue_node(node)
|
|
65
67
|
when :ensure then check_ensure_node(node)
|
|
@@ -67,12 +69,18 @@ module RuboCop
|
|
|
67
69
|
check_begin_node(node)
|
|
68
70
|
end
|
|
69
71
|
end
|
|
72
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
70
73
|
|
|
71
74
|
def check_case_node(node)
|
|
72
75
|
node.when_branches.each { |when_node| check_branch(when_node.body) }
|
|
73
76
|
check_branch(node.else_branch)
|
|
74
77
|
end
|
|
75
78
|
|
|
79
|
+
def check_case_match_node(node)
|
|
80
|
+
node.in_pattern_branches.each { |in_pattern_node| check_branch(in_pattern_node.body) }
|
|
81
|
+
check_branch(node.else_branch)
|
|
82
|
+
end
|
|
83
|
+
|
|
76
84
|
def check_if_node(node)
|
|
77
85
|
return if node.modifier_form? || node.ternary?
|
|
78
86
|
|
|
@@ -85,7 +93,7 @@ module RuboCop
|
|
|
85
93
|
end
|
|
86
94
|
|
|
87
95
|
def check_ensure_node(node)
|
|
88
|
-
check_branch(node.
|
|
96
|
+
check_branch(node.branch)
|
|
89
97
|
end
|
|
90
98
|
|
|
91
99
|
def check_begin_node(node)
|
|
@@ -68,6 +68,10 @@ module RuboCop
|
|
|
68
68
|
|
|
69
69
|
MSG = 'Redundant `begin` block detected.'
|
|
70
70
|
|
|
71
|
+
def self.autocorrect_incompatible_with
|
|
72
|
+
[Style::BlockDelimiters]
|
|
73
|
+
end
|
|
74
|
+
|
|
71
75
|
# @!method offensive_kwbegins(node)
|
|
72
76
|
def_node_search :offensive_kwbegins, <<~PATTERN
|
|
73
77
|
[(kwbegin ...) !#allowable_kwbegin?]
|
|
@@ -75,12 +79,35 @@ module RuboCop
|
|
|
75
79
|
|
|
76
80
|
def on_def(node)
|
|
77
81
|
return unless node.body&.kwbegin_type?
|
|
78
|
-
return if node.endless?
|
|
82
|
+
return if node.endless?
|
|
79
83
|
|
|
80
84
|
register_offense(node.body)
|
|
81
85
|
end
|
|
82
86
|
alias on_defs on_def
|
|
83
87
|
|
|
88
|
+
def on_if(node)
|
|
89
|
+
return if node.modifier_form?
|
|
90
|
+
|
|
91
|
+
inspect_branches(node)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def on_case(node)
|
|
95
|
+
inspect_branches(node)
|
|
96
|
+
end
|
|
97
|
+
alias on_case_match on_case
|
|
98
|
+
|
|
99
|
+
def on_while(node)
|
|
100
|
+
return if node.modifier_form?
|
|
101
|
+
|
|
102
|
+
body = node.body
|
|
103
|
+
|
|
104
|
+
return unless body&.kwbegin_type?
|
|
105
|
+
return if body.rescue_node || body.ensure_node
|
|
106
|
+
|
|
107
|
+
register_offense(body)
|
|
108
|
+
end
|
|
109
|
+
alias on_until on_while
|
|
110
|
+
|
|
84
111
|
def on_block(node)
|
|
85
112
|
return if target_ruby_version < 2.5
|
|
86
113
|
return if node.send_node.lambda_literal?
|
|
@@ -91,6 +118,7 @@ module RuboCop
|
|
|
91
118
|
end
|
|
92
119
|
|
|
93
120
|
alias on_numblock on_block
|
|
121
|
+
alias on_itblock on_block
|
|
94
122
|
|
|
95
123
|
def on_kwbegin(node)
|
|
96
124
|
return unless (target_node = offensive_kwbegins(node).to_a.last)
|
|
@@ -175,13 +203,15 @@ module RuboCop
|
|
|
175
203
|
end
|
|
176
204
|
|
|
177
205
|
def begin_block_has_multiline_statements?(node)
|
|
206
|
+
return false unless node.parent
|
|
207
|
+
|
|
178
208
|
node.children.count >= 2
|
|
179
209
|
end
|
|
180
210
|
|
|
181
211
|
def contain_rescue_or_ensure?(node)
|
|
182
212
|
first_child = node.children.first
|
|
183
213
|
|
|
184
|
-
first_child.
|
|
214
|
+
first_child.type?(:rescue, :ensure)
|
|
185
215
|
end
|
|
186
216
|
|
|
187
217
|
def valid_context_using_only_begin?(node)
|
|
@@ -194,6 +224,15 @@ module RuboCop
|
|
|
194
224
|
def valid_begin_assignment?(node)
|
|
195
225
|
node.parent&.assignment? && !node.children.one?
|
|
196
226
|
end
|
|
227
|
+
|
|
228
|
+
def inspect_branches(node)
|
|
229
|
+
node.branches.each do |branch|
|
|
230
|
+
next unless branch&.kwbegin_type?
|
|
231
|
+
next if branch.rescue_node || branch.ensure_node
|
|
232
|
+
|
|
233
|
+
register_offense(branch)
|
|
234
|
+
end
|
|
235
|
+
end
|
|
197
236
|
end
|
|
198
237
|
end
|
|
199
238
|
end
|
|
@@ -5,6 +5,19 @@ module RuboCop
|
|
|
5
5
|
module Style
|
|
6
6
|
# Checks for unnecessary conditional expressions.
|
|
7
7
|
#
|
|
8
|
+
# NOTE: Since the intention of the comment cannot be automatically determined,
|
|
9
|
+
# autocorrection is not applied when a comment is used, as shown below:
|
|
10
|
+
#
|
|
11
|
+
# [source,ruby]
|
|
12
|
+
# -----
|
|
13
|
+
# if b
|
|
14
|
+
# # Important note.
|
|
15
|
+
# b
|
|
16
|
+
# else
|
|
17
|
+
# c
|
|
18
|
+
# end
|
|
19
|
+
# -----
|
|
20
|
+
#
|
|
8
21
|
# @example
|
|
9
22
|
# # bad
|
|
10
23
|
# a = b ? b : c
|
|
@@ -12,7 +25,6 @@ module RuboCop
|
|
|
12
25
|
# # good
|
|
13
26
|
# a = b || c
|
|
14
27
|
#
|
|
15
|
-
# @example
|
|
16
28
|
# # bad
|
|
17
29
|
# if b
|
|
18
30
|
# b
|
|
@@ -30,7 +42,29 @@ module RuboCop
|
|
|
30
42
|
# c
|
|
31
43
|
# end
|
|
32
44
|
#
|
|
45
|
+
# # bad
|
|
46
|
+
# a.nil? ? true : a
|
|
47
|
+
#
|
|
48
|
+
# # good
|
|
49
|
+
# a.nil? || a
|
|
50
|
+
#
|
|
51
|
+
# # bad
|
|
52
|
+
# if a.nil?
|
|
53
|
+
# true
|
|
54
|
+
# else
|
|
55
|
+
# a
|
|
56
|
+
# end
|
|
57
|
+
#
|
|
58
|
+
# # good
|
|
59
|
+
# a.nil? || a
|
|
60
|
+
#
|
|
61
|
+
# @example AllowedMethods: ['nonzero?'] (default)
|
|
62
|
+
# # good
|
|
63
|
+
# num.nonzero? ? true : false
|
|
64
|
+
#
|
|
33
65
|
class RedundantCondition < Base
|
|
66
|
+
include AllowedMethods
|
|
67
|
+
include CommentsHelp
|
|
34
68
|
include RangeHelp
|
|
35
69
|
extend AutoCorrector
|
|
36
70
|
|
|
@@ -41,21 +75,12 @@ module RuboCop
|
|
|
41
75
|
].freeze
|
|
42
76
|
|
|
43
77
|
def on_if(node)
|
|
44
|
-
return if node.elsif_conditional?
|
|
45
|
-
return unless offense?(node)
|
|
78
|
+
return if node.modifier_form? || node.elsif_conditional? || !offense?(node)
|
|
46
79
|
|
|
47
80
|
message = message(node)
|
|
48
81
|
|
|
49
82
|
add_offense(range_of_offense(node), message: message) do |corrector|
|
|
50
|
-
|
|
51
|
-
correct_ternary(corrector, node)
|
|
52
|
-
elsif redundant_condition?(node)
|
|
53
|
-
corrector.replace(node, node.if_branch.source)
|
|
54
|
-
else
|
|
55
|
-
corrected = make_ternary_form(node)
|
|
56
|
-
|
|
57
|
-
corrector.replace(node, corrected)
|
|
58
|
-
end
|
|
83
|
+
autocorrect(corrector, node)
|
|
59
84
|
end
|
|
60
85
|
end
|
|
61
86
|
|
|
@@ -69,6 +94,20 @@ module RuboCop
|
|
|
69
94
|
end
|
|
70
95
|
end
|
|
71
96
|
|
|
97
|
+
def autocorrect(corrector, node)
|
|
98
|
+
return if node.each_descendant.any? { |descendant| contains_comments?(descendant) }
|
|
99
|
+
|
|
100
|
+
if node.ternary? && !branches_have_method?(node)
|
|
101
|
+
correct_ternary(corrector, node)
|
|
102
|
+
elsif redundant_condition?(node)
|
|
103
|
+
corrector.replace(node, node.if_branch.source)
|
|
104
|
+
else
|
|
105
|
+
corrected = make_ternary_form(node)
|
|
106
|
+
|
|
107
|
+
corrector.replace(node, corrected)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
72
111
|
def range_of_offense(node)
|
|
73
112
|
return node.source_range unless node.ternary?
|
|
74
113
|
return node.source_range if node.ternary? && branches_have_method?(node)
|
|
@@ -77,8 +116,7 @@ module RuboCop
|
|
|
77
116
|
end
|
|
78
117
|
|
|
79
118
|
def offense?(node)
|
|
80
|
-
_condition, _if_branch, else_branch = *node
|
|
81
|
-
|
|
119
|
+
_condition, _if_branch, else_branch = *node # rubocop:disable InternalAffairs/NodeDestructuring
|
|
82
120
|
return false if use_if_branch?(else_branch) || use_hash_key_assignment?(else_branch)
|
|
83
121
|
|
|
84
122
|
synonymous_condition_and_branch?(node) && !node.elsif? &&
|
|
@@ -94,7 +132,7 @@ module RuboCop
|
|
|
94
132
|
end
|
|
95
133
|
|
|
96
134
|
def use_hash_key_assignment?(else_branch)
|
|
97
|
-
else_branch&.send_type? && else_branch
|
|
135
|
+
else_branch&.send_type? && else_branch.method?(:[]=)
|
|
98
136
|
end
|
|
99
137
|
|
|
100
138
|
def use_hash_key_access?(node)
|
|
@@ -102,7 +140,7 @@ module RuboCop
|
|
|
102
140
|
end
|
|
103
141
|
|
|
104
142
|
def synonymous_condition_and_branch?(node)
|
|
105
|
-
condition, if_branch, _else_branch = *node
|
|
143
|
+
condition, if_branch, _else_branch = *node # rubocop:disable InternalAffairs/NodeDestructuring
|
|
106
144
|
# e.g.
|
|
107
145
|
# if var
|
|
108
146
|
# var
|
|
@@ -111,6 +149,16 @@ module RuboCop
|
|
|
111
149
|
# end
|
|
112
150
|
return true if condition == if_branch
|
|
113
151
|
|
|
152
|
+
# e.g.
|
|
153
|
+
# a.nil? ? true : a
|
|
154
|
+
# or
|
|
155
|
+
# if a.nil?
|
|
156
|
+
# true
|
|
157
|
+
# else
|
|
158
|
+
# a
|
|
159
|
+
# end
|
|
160
|
+
return true if if_branch_is_true_type_and_else_is_not?(node)
|
|
161
|
+
|
|
114
162
|
# e.g.
|
|
115
163
|
# if foo
|
|
116
164
|
# @value = foo
|
|
@@ -129,8 +177,20 @@ module RuboCop
|
|
|
129
177
|
!use_hash_key_access?(if_branch)
|
|
130
178
|
end
|
|
131
179
|
|
|
180
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
181
|
+
def if_branch_is_true_type_and_else_is_not?(node)
|
|
182
|
+
return false unless node.ternary? || node.if?
|
|
183
|
+
|
|
184
|
+
cond = node.condition
|
|
185
|
+
return false unless cond.call_type?
|
|
186
|
+
return false if !cond.predicate_method? || allowed_method?(cond.method_name)
|
|
187
|
+
|
|
188
|
+
node.if_branch&.true_type? && node.else_branch && !node.else_branch.true_type?
|
|
189
|
+
end
|
|
190
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
191
|
+
|
|
132
192
|
def branches_have_assignment?(node)
|
|
133
|
-
_condition, if_branch, else_branch = *node
|
|
193
|
+
_condition, if_branch, else_branch = *node # rubocop:disable InternalAffairs/NodeDestructuring
|
|
134
194
|
|
|
135
195
|
return false unless if_branch && else_branch
|
|
136
196
|
|
|
@@ -140,16 +200,14 @@ module RuboCop
|
|
|
140
200
|
end
|
|
141
201
|
|
|
142
202
|
def asgn_type?(node)
|
|
143
|
-
node.
|
|
203
|
+
node.type?(:lvasgn, :ivasgn, :cvasgn, :gvasgn)
|
|
144
204
|
end
|
|
145
205
|
|
|
146
206
|
def branches_have_method?(node)
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return false unless if_branch && else_branch
|
|
207
|
+
return false unless node.if_branch && node.else_branch
|
|
150
208
|
|
|
151
|
-
single_argument_method?(if_branch) && single_argument_method?(else_branch) &&
|
|
152
|
-
same_method?(if_branch, else_branch)
|
|
209
|
+
single_argument_method?(node.if_branch) && single_argument_method?(node.else_branch) &&
|
|
210
|
+
same_method?(node.if_branch, node.else_branch)
|
|
153
211
|
end
|
|
154
212
|
|
|
155
213
|
def single_argument_method?(node)
|
|
@@ -169,9 +227,17 @@ module RuboCop
|
|
|
169
227
|
return false unless argument.hash_type?
|
|
170
228
|
return false unless (node = argument.children.first)
|
|
171
229
|
|
|
172
|
-
node.
|
|
230
|
+
node.type?(:kwsplat, :forwarded_kwrestarg)
|
|
173
231
|
end
|
|
174
232
|
|
|
233
|
+
def wrap_arguments_with_parens(condition)
|
|
234
|
+
method = condition.source_range.begin.join(condition.loc.selector.end)
|
|
235
|
+
arguments = condition.first_argument.source_range.begin.join(condition.source_range.end)
|
|
236
|
+
|
|
237
|
+
"#{method.source}(#{arguments.source})"
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# rubocop:disable Metrics/AbcSize
|
|
175
241
|
def if_source(if_branch, arithmetic_operation)
|
|
176
242
|
if branches_have_method?(if_branch.parent) && if_branch.parenthesized?
|
|
177
243
|
if_branch.source.delete_suffix(')')
|
|
@@ -179,10 +245,16 @@ module RuboCop
|
|
|
179
245
|
argument_source = if_branch.first_argument.source
|
|
180
246
|
|
|
181
247
|
"#{if_branch.receiver.source} #{if_branch.method_name} (#{argument_source}"
|
|
248
|
+
elsif if_branch.true_type?
|
|
249
|
+
condition = if_branch.parent.condition
|
|
250
|
+
return condition.source if condition.arguments.empty? || condition.parenthesized?
|
|
251
|
+
|
|
252
|
+
wrap_arguments_with_parens(condition)
|
|
182
253
|
else
|
|
183
254
|
if_branch.source
|
|
184
255
|
end
|
|
185
256
|
end
|
|
257
|
+
# rubocop:enable Metrics/AbcSize
|
|
186
258
|
|
|
187
259
|
def else_source(else_branch, arithmetic_operation) # rubocop:disable Metrics/AbcSize
|
|
188
260
|
if arithmetic_operation
|
|
@@ -221,7 +293,7 @@ module RuboCop
|
|
|
221
293
|
end
|
|
222
294
|
|
|
223
295
|
def make_ternary_form(node)
|
|
224
|
-
_condition, if_branch, else_branch = *node
|
|
296
|
+
_condition, if_branch, else_branch = *node # rubocop:disable InternalAffairs/NodeDestructuring
|
|
225
297
|
arithmetic_operation = use_arithmetic_operation?(if_branch)
|
|
226
298
|
|
|
227
299
|
ternary_form = [
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# Checks for
|
|
6
|
+
# Checks for paths given to `require_relative` that start with
|
|
7
|
+
# the current directory (`./`), which can be omitted.
|
|
7
8
|
#
|
|
8
9
|
# @example
|
|
9
10
|
#
|
|
@@ -18,20 +19,31 @@ module RuboCop
|
|
|
18
19
|
extend AutoCorrector
|
|
19
20
|
|
|
20
21
|
MSG = 'Remove the redundant current directory path.'
|
|
21
|
-
|
|
22
|
+
RESTRICT_ON_SEND = %i[require_relative].freeze
|
|
23
|
+
CURRENT_DIRECTORY_PREFIX = %r{\./+}.freeze
|
|
24
|
+
REDUNDANT_CURRENT_DIRECTORY_PREFIX = /\A#{CURRENT_DIRECTORY_PREFIX}/.freeze
|
|
22
25
|
|
|
23
26
|
def on_send(node)
|
|
24
|
-
return unless node.
|
|
25
|
-
return unless
|
|
26
|
-
return unless (
|
|
27
|
+
return unless (first_argument = node.first_argument)
|
|
28
|
+
return unless (index = first_argument.source.index(CURRENT_DIRECTORY_PREFIX))
|
|
29
|
+
return unless (redundant_length = redundant_path_length(first_argument.str_content))
|
|
27
30
|
|
|
28
|
-
begin_pos =
|
|
29
|
-
|
|
31
|
+
begin_pos = first_argument.source_range.begin.begin_pos + index
|
|
32
|
+
end_pos = begin_pos + redundant_length
|
|
33
|
+
range = range_between(begin_pos, end_pos)
|
|
30
34
|
|
|
31
35
|
add_offense(range) do |corrector|
|
|
32
36
|
corrector.remove(range)
|
|
33
37
|
end
|
|
34
38
|
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def redundant_path_length(path)
|
|
43
|
+
return unless (match = path&.match(REDUNDANT_CURRENT_DIRECTORY_PREFIX))
|
|
44
|
+
|
|
45
|
+
match[0].length
|
|
46
|
+
end
|
|
35
47
|
end
|
|
36
48
|
end
|
|
37
49
|
end
|