rubocop 1.57.1 → 1.81.7
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 +49 -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 +10 -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 -10
- 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 +17 -8
- 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 +187 -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 +16 -20
- 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 +23 -5
- 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 +33 -9
- 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 +79 -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
|
@@ -8,16 +8,12 @@ module RuboCop
|
|
|
8
8
|
# @example
|
|
9
9
|
#
|
|
10
10
|
# # bad
|
|
11
|
-
#
|
|
12
11
|
# result = (1..4).reduce(0) do |acc, i|
|
|
13
12
|
# next if i.odd?
|
|
14
13
|
# acc + i
|
|
15
14
|
# end
|
|
16
15
|
#
|
|
17
|
-
# @example
|
|
18
|
-
#
|
|
19
16
|
# # good
|
|
20
|
-
#
|
|
21
17
|
# result = (1..4).reduce(0) do |acc, i|
|
|
22
18
|
# next acc if i.odd?
|
|
23
19
|
# acc + i
|
|
@@ -34,35 +30,20 @@ module RuboCop
|
|
|
34
30
|
add_offense(void_next) if void_next
|
|
35
31
|
end
|
|
36
32
|
end
|
|
37
|
-
|
|
38
|
-
def on_numblock(node)
|
|
39
|
-
on_numblock_body_of_reduce(node) do |body|
|
|
40
|
-
void_next = body.each_node(:next).find do |n|
|
|
41
|
-
n.children.empty? && parent_numblock_node(n) == node
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
add_offense(void_next) if void_next
|
|
45
|
-
end
|
|
46
|
-
end
|
|
33
|
+
alias on_numblock on_block
|
|
47
34
|
|
|
48
35
|
private
|
|
49
36
|
|
|
50
37
|
# @!method on_block_body_of_reduce(node)
|
|
51
38
|
def_node_matcher :on_block_body_of_reduce, <<~PATTERN
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def_node_matcher :on_numblock_body_of_reduce, <<~PATTERN
|
|
57
|
-
(numblock (send _recv {:reduce :inject} !sym) _argscount $(begin ...))
|
|
39
|
+
{
|
|
40
|
+
(block (call _recv {:reduce :inject} !sym) _blockargs $(begin ...))
|
|
41
|
+
(numblock (call _recv {:reduce :inject} !sym) _argscount $(begin ...))
|
|
42
|
+
}
|
|
58
43
|
PATTERN
|
|
59
44
|
|
|
60
45
|
def parent_block_node(node)
|
|
61
|
-
node.each_ancestor(:
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def parent_numblock_node(node)
|
|
65
|
-
node.each_ancestor(:numblock).first
|
|
46
|
+
node.each_ancestor(:any_block).first
|
|
66
47
|
end
|
|
67
48
|
end
|
|
68
49
|
end
|
|
@@ -11,17 +11,13 @@ module RuboCop
|
|
|
11
11
|
# @example
|
|
12
12
|
#
|
|
13
13
|
# # bad
|
|
14
|
-
#
|
|
15
14
|
# @some_variable ||= begin
|
|
16
15
|
# return some_value if some_condition_is_met
|
|
17
16
|
#
|
|
18
17
|
# do_something
|
|
19
18
|
# end
|
|
20
19
|
#
|
|
21
|
-
# @example
|
|
22
|
-
#
|
|
23
20
|
# # good
|
|
24
|
-
#
|
|
25
21
|
# @some_variable ||= begin
|
|
26
22
|
# if some_condition_is_met
|
|
27
23
|
# some_value
|
|
@@ -31,7 +27,6 @@ module RuboCop
|
|
|
31
27
|
# end
|
|
32
28
|
#
|
|
33
29
|
# # good
|
|
34
|
-
#
|
|
35
30
|
# some_variable = if some_condition_is_met
|
|
36
31
|
# return if another_condition_is_met
|
|
37
32
|
#
|
|
@@ -50,8 +45,8 @@ module RuboCop
|
|
|
50
45
|
end
|
|
51
46
|
end
|
|
52
47
|
end
|
|
53
|
-
alias on_or_asgn
|
|
54
|
-
alias on_op_asgn
|
|
48
|
+
alias on_or_asgn on_lvasgn
|
|
49
|
+
alias on_op_asgn on_lvasgn
|
|
55
50
|
end
|
|
56
51
|
end
|
|
57
52
|
end
|
|
@@ -59,12 +59,12 @@ module RuboCop
|
|
|
59
59
|
|
|
60
60
|
# @!method send_exist_node(node)
|
|
61
61
|
def_node_search :send_exist_node, <<~PATTERN
|
|
62
|
-
$(send (const nil? {:FileTest :File :Dir :Shell}) {:exist? :exists?} ...)
|
|
62
|
+
$(send (const {cbase nil?} {:FileTest :File :Dir :Shell}) {:exist? :exists?} ...)
|
|
63
63
|
PATTERN
|
|
64
64
|
|
|
65
65
|
# @!method receiver_and_method_name(node)
|
|
66
66
|
def_node_matcher :receiver_and_method_name, <<~PATTERN
|
|
67
|
-
(send (const nil? $_) $_ ...)
|
|
67
|
+
(send (const {cbase nil?} $_) $_ ...)
|
|
68
68
|
PATTERN
|
|
69
69
|
|
|
70
70
|
# @!method force?(node)
|
|
@@ -78,6 +78,7 @@ module RuboCop
|
|
|
78
78
|
PATTERN
|
|
79
79
|
|
|
80
80
|
def on_send(node)
|
|
81
|
+
return unless node.receiver&.const_type?
|
|
81
82
|
return unless if_node_child?(node)
|
|
82
83
|
return if explicit_not_force?(node)
|
|
83
84
|
return unless (exist_node = send_exist_node(node.parent).first)
|
|
@@ -95,7 +96,7 @@ module RuboCop
|
|
|
95
96
|
end
|
|
96
97
|
|
|
97
98
|
def allowable_use_with_if?(if_node)
|
|
98
|
-
if_node.condition.
|
|
99
|
+
if_node.condition.operator_keyword? || if_node.else_branch
|
|
99
100
|
end
|
|
100
101
|
|
|
101
102
|
def register_offense(node, exist_node)
|
|
@@ -115,6 +116,7 @@ module RuboCop
|
|
|
115
116
|
|
|
116
117
|
def message_remove_file_exist_check(node)
|
|
117
118
|
receiver, method_name = receiver_and_method_name(node)
|
|
119
|
+
|
|
118
120
|
format(MSG_REMOVE_FILE_EXIST_CHECK, receiver: receiver, method_name: method_name)
|
|
119
121
|
end
|
|
120
122
|
|
|
@@ -134,6 +136,7 @@ module RuboCop
|
|
|
134
136
|
|
|
135
137
|
corrector.replace(node.child_nodes.first.loc.name, 'FileUtils')
|
|
136
138
|
corrector.replace(node.loc.selector, replacement_method(node))
|
|
139
|
+
corrector.insert_before(node.last_argument, 'mode: ') if require_mode_keyword?(node)
|
|
137
140
|
end
|
|
138
141
|
|
|
139
142
|
def replacement_method(node)
|
|
@@ -152,6 +155,12 @@ module RuboCop
|
|
|
152
155
|
force_method_name?(node) || force_option?(node)
|
|
153
156
|
end
|
|
154
157
|
|
|
158
|
+
def require_mode_keyword?(node)
|
|
159
|
+
return false unless node.receiver.const_name == 'Dir'
|
|
160
|
+
|
|
161
|
+
replacement_method(node) == 'mkdir_p' && node.arguments.length == 2
|
|
162
|
+
end
|
|
163
|
+
|
|
155
164
|
def force_option?(node)
|
|
156
165
|
node.arguments.any? { |arg| force?(arg) }
|
|
157
166
|
end
|
|
@@ -59,11 +59,13 @@ module RuboCop
|
|
|
59
59
|
#
|
|
60
60
|
class NonDeterministicRequireOrder < Base
|
|
61
61
|
extend AutoCorrector
|
|
62
|
+
extend TargetRubyVersion
|
|
62
63
|
|
|
63
64
|
MSG = 'Sort files before requiring them.'
|
|
64
65
|
|
|
66
|
+
maximum_target_ruby_version 2.7
|
|
67
|
+
|
|
65
68
|
def on_block(node)
|
|
66
|
-
return if target_ruby_version >= 3.0
|
|
67
69
|
return unless node.body
|
|
68
70
|
return unless unsorted_dir_loop?(node.send_node)
|
|
69
71
|
|
|
@@ -75,7 +77,6 @@ module RuboCop
|
|
|
75
77
|
end
|
|
76
78
|
|
|
77
79
|
def on_numblock(node)
|
|
78
|
-
return if target_ruby_version >= 3.0
|
|
79
80
|
return unless node.body
|
|
80
81
|
return unless unsorted_dir_loop?(node.send_node)
|
|
81
82
|
|
|
@@ -87,14 +88,13 @@ module RuboCop
|
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
def on_block_pass(node)
|
|
90
|
-
return if target_ruby_version >= 3.0
|
|
91
91
|
return unless method_require?(node)
|
|
92
92
|
return unless unsorted_dir_pass?(node.parent)
|
|
93
93
|
|
|
94
94
|
parent_node = node.parent
|
|
95
95
|
|
|
96
96
|
add_offense(parent_node) do |corrector|
|
|
97
|
-
if parent_node.
|
|
97
|
+
if parent_node.last_argument&.block_pass_type?
|
|
98
98
|
correct_block_pass(corrector, parent_node)
|
|
99
99
|
else
|
|
100
100
|
correct_block(corrector, parent_node)
|
|
@@ -116,7 +116,7 @@ module RuboCop
|
|
|
116
116
|
|
|
117
117
|
def correct_block_pass(corrector, node)
|
|
118
118
|
if unsorted_dir_glob_pass?(node)
|
|
119
|
-
block_arg = node.
|
|
119
|
+
block_arg = node.last_argument
|
|
120
120
|
|
|
121
121
|
corrector.remove(last_arg_range(node))
|
|
122
122
|
corrector.insert_after(node, ".sort.each(#{block_arg.source})")
|
|
@@ -130,9 +130,7 @@ module RuboCop
|
|
|
130
130
|
# @return [Parser::Source::Range]
|
|
131
131
|
#
|
|
132
132
|
def last_arg_range(node)
|
|
133
|
-
node.arguments.
|
|
134
|
-
begin_pos: node.arguments[-2].source_range.end_pos
|
|
135
|
-
)
|
|
133
|
+
node.last_argument.source_range.join(node.arguments[-2].source_range.end)
|
|
136
134
|
end
|
|
137
135
|
|
|
138
136
|
def unsorted_dir_loop?(node)
|
|
@@ -46,7 +46,7 @@ module RuboCop
|
|
|
46
46
|
def on_return(return_node)
|
|
47
47
|
return if return_value?(return_node)
|
|
48
48
|
|
|
49
|
-
return_node.each_ancestor(:
|
|
49
|
+
return_node.each_ancestor(:any_block, :any_def) do |node|
|
|
50
50
|
break if scoped_node?(node)
|
|
51
51
|
|
|
52
52
|
# if a proc is passed to `Module#define_method` or
|
|
@@ -54,7 +54,7 @@ module RuboCop
|
|
|
54
54
|
# non-local exit error
|
|
55
55
|
break if define_method?(node.send_node)
|
|
56
56
|
|
|
57
|
-
next
|
|
57
|
+
next if node.argument_list.empty?
|
|
58
58
|
|
|
59
59
|
if chained_send?(node.send_node)
|
|
60
60
|
add_offense(return_node.loc.keyword)
|
|
@@ -66,7 +66,7 @@ module RuboCop
|
|
|
66
66
|
private
|
|
67
67
|
|
|
68
68
|
def scoped_node?(node)
|
|
69
|
-
node.
|
|
69
|
+
node.any_def_type? || node.lambda?
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def return_value?(return_node)
|
|
@@ -9,7 +9,7 @@ module RuboCop
|
|
|
9
9
|
#
|
|
10
10
|
# Conversion with `Integer`, `Float`, etc. will raise an `ArgumentError`
|
|
11
11
|
# if given input that is not numeric (eg. an empty string), whereas
|
|
12
|
-
# `to_i`, etc. will try to convert regardless of input (
|
|
12
|
+
# `to_i`, etc. will try to convert regardless of input (``''.to_i => 0``).
|
|
13
13
|
# As such, this cop is disabled by default because it's not necessarily
|
|
14
14
|
# always correct to raise if a value is not numeric.
|
|
15
15
|
#
|
|
@@ -74,7 +74,6 @@ module RuboCop
|
|
|
74
74
|
extend AutoCorrector
|
|
75
75
|
include AllowedMethods
|
|
76
76
|
include AllowedPattern
|
|
77
|
-
include IgnoredNode
|
|
78
77
|
|
|
79
78
|
CONVERSION_METHOD_CLASS_MAPPING = {
|
|
80
79
|
to_i: "#{Integer.name}(%<number_object>s, 10)",
|
|
@@ -91,19 +90,24 @@ module RuboCop
|
|
|
91
90
|
|
|
92
91
|
# @!method to_method(node)
|
|
93
92
|
def_node_matcher :to_method, <<~PATTERN
|
|
94
|
-
(
|
|
93
|
+
(call $_ ${#{METHODS}})
|
|
95
94
|
PATTERN
|
|
96
95
|
|
|
97
96
|
# @!method to_method_symbol(node)
|
|
98
97
|
def_node_matcher :to_method_symbol, <<~PATTERN
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
(call _ $_ ${
|
|
99
|
+
{
|
|
100
|
+
(sym ${#{METHODS}})
|
|
101
|
+
(block_pass (sym ${#{METHODS}}))
|
|
102
|
+
}
|
|
103
|
+
} ...)
|
|
101
104
|
PATTERN
|
|
102
105
|
|
|
103
106
|
def on_send(node)
|
|
104
107
|
handle_conversion_method(node)
|
|
105
108
|
handle_as_symbol(node)
|
|
106
109
|
end
|
|
110
|
+
alias on_csend on_send
|
|
107
111
|
|
|
108
112
|
private
|
|
109
113
|
|
|
@@ -33,8 +33,7 @@ module RuboCop
|
|
|
33
33
|
NUMBERED_PARAMETER_RANGE = (1..9).freeze
|
|
34
34
|
|
|
35
35
|
def on_lvasgn(node)
|
|
36
|
-
|
|
37
|
-
return unless /\A_(\d+)\z/ =~ lhs
|
|
36
|
+
return unless /\A_(\d+)\z/ =~ node.name
|
|
38
37
|
|
|
39
38
|
number = Regexp.last_match(1).to_i
|
|
40
39
|
template = NUMBERED_PARAMETER_RANGE.include?(number) ? NUM_PARAM_MSG : LVAR_MSG
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Lint
|
|
6
|
+
# Certain numeric operations have a constant result, usually 0 or 1.
|
|
7
|
+
# Multiplying a number by 0 will always return 0.
|
|
8
|
+
# Dividing a number by itself or raising it to the power of 0 will always return 1.
|
|
9
|
+
# As such, they can be replaced with that result.
|
|
10
|
+
# These are probably leftover from debugging, or are mistakes.
|
|
11
|
+
# Other numeric operations that are similarly leftover from debugging or mistakes
|
|
12
|
+
# are handled by `Lint/UselessNumericOperation`.
|
|
13
|
+
#
|
|
14
|
+
# NOTE: This cop doesn't detect offenses for the `-` and `%` operator because it
|
|
15
|
+
# can't determine the type of `x`. If `x` is an `Array` or `String`, it doesn't perform
|
|
16
|
+
# a numeric operation.
|
|
17
|
+
#
|
|
18
|
+
# @example
|
|
19
|
+
#
|
|
20
|
+
# # bad
|
|
21
|
+
# x * 0
|
|
22
|
+
#
|
|
23
|
+
# # good
|
|
24
|
+
# 0
|
|
25
|
+
#
|
|
26
|
+
# # bad
|
|
27
|
+
# x *= 0
|
|
28
|
+
#
|
|
29
|
+
# # good
|
|
30
|
+
# x = 0
|
|
31
|
+
#
|
|
32
|
+
# # bad
|
|
33
|
+
# x / x
|
|
34
|
+
# x ** 0
|
|
35
|
+
#
|
|
36
|
+
# # good
|
|
37
|
+
# 1
|
|
38
|
+
#
|
|
39
|
+
# # bad
|
|
40
|
+
# x /= x
|
|
41
|
+
# x **= 0
|
|
42
|
+
#
|
|
43
|
+
# # good
|
|
44
|
+
# x = 1
|
|
45
|
+
#
|
|
46
|
+
class NumericOperationWithConstantResult < Base
|
|
47
|
+
extend AutoCorrector
|
|
48
|
+
|
|
49
|
+
MSG = 'Numeric operation with a constant result detected.'
|
|
50
|
+
RESTRICT_ON_SEND = %i[* / **].freeze
|
|
51
|
+
|
|
52
|
+
# @!method operation_with_constant_result?(node)
|
|
53
|
+
def_node_matcher :operation_with_constant_result?,
|
|
54
|
+
'(call (call nil? $_lhs) $_operation ({int | call nil?} $_rhs))'
|
|
55
|
+
|
|
56
|
+
# @!method abbreviated_assignment_with_constant_result?(node)
|
|
57
|
+
def_node_matcher :abbreviated_assignment_with_constant_result?,
|
|
58
|
+
'(op-asgn (lvasgn $_lhs) $_operation ({int lvar} $_rhs))'
|
|
59
|
+
|
|
60
|
+
def on_send(node)
|
|
61
|
+
return unless (lhs, operation, rhs = operation_with_constant_result?(node))
|
|
62
|
+
return unless (result = constant_result?(lhs, operation, rhs))
|
|
63
|
+
|
|
64
|
+
add_offense(node) do |corrector|
|
|
65
|
+
corrector.replace(node, result.to_s)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
alias on_csend on_send
|
|
69
|
+
|
|
70
|
+
def on_op_asgn(node)
|
|
71
|
+
return unless (lhs, operation, rhs = abbreviated_assignment_with_constant_result?(node))
|
|
72
|
+
return unless (result = constant_result?(lhs, operation, rhs))
|
|
73
|
+
|
|
74
|
+
add_offense(node) do |corrector|
|
|
75
|
+
corrector.replace(node, "#{lhs} = #{result}")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def constant_result?(lhs, operation, rhs)
|
|
82
|
+
if rhs.to_s == '0'
|
|
83
|
+
return 0 if operation == :*
|
|
84
|
+
return 1 if operation == :**
|
|
85
|
+
elsif rhs == lhs
|
|
86
|
+
return 1 if operation == :/
|
|
87
|
+
end
|
|
88
|
+
# If we weren't able to find any matches, return false so we can bail out.
|
|
89
|
+
false
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -27,11 +27,10 @@ module RuboCop
|
|
|
27
27
|
MSG = 'Avoid using or-assignment with constants.'
|
|
28
28
|
|
|
29
29
|
def on_or_asgn(node)
|
|
30
|
-
|
|
31
|
-
return unless lhs&.casgn_type?
|
|
30
|
+
return unless node.lhs&.casgn_type?
|
|
32
31
|
|
|
33
32
|
add_offense(node.loc.operator) do |corrector|
|
|
34
|
-
next if node.each_ancestor(:
|
|
33
|
+
next if node.each_ancestor(:any_def).any?
|
|
35
34
|
|
|
36
35
|
corrector.replace(node.loc.operator, '=')
|
|
37
36
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Lint
|
|
6
|
-
# Looks for references of Regexp captures that are out of range
|
|
6
|
+
# Looks for references of `Regexp` captures that are out of range
|
|
7
7
|
# and thus always returns nil.
|
|
8
8
|
#
|
|
9
9
|
# @safety
|
|
@@ -61,6 +61,7 @@ module RuboCop
|
|
|
61
61
|
check_regexp(node.receiver)
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
|
+
alias after_csend after_send
|
|
64
65
|
|
|
65
66
|
def on_when(node)
|
|
66
67
|
regexp_conditions = node.conditions.select(&:regexp_type?)
|
|
@@ -75,7 +76,7 @@ module RuboCop
|
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def on_nth_ref(node)
|
|
78
|
-
backref
|
|
79
|
+
backref = node.children.first
|
|
79
80
|
return if @valid_ref.nil? || backref <= @valid_ref
|
|
80
81
|
|
|
81
82
|
message = format(
|
|
@@ -37,25 +37,20 @@ module RuboCop
|
|
|
37
37
|
private
|
|
38
38
|
|
|
39
39
|
def valid_context?(node)
|
|
40
|
-
unless node.arguments.one? &&
|
|
41
|
-
|
|
42
|
-
end
|
|
43
|
-
return true if first_argument_block_type?(node.first_argument)
|
|
40
|
+
return true unless node.arguments.one? && node.first_argument.parenthesized_call?
|
|
41
|
+
return true if node.first_argument.any_block_type?
|
|
44
42
|
|
|
45
43
|
node.operator_method? || node.setter_method? || chained_calls?(node) ||
|
|
46
44
|
valid_first_argument?(node.first_argument)
|
|
47
45
|
end
|
|
48
46
|
|
|
49
|
-
def first_argument_block_type?(first_arg)
|
|
50
|
-
first_arg.block_type? || first_arg.numblock_type?
|
|
51
|
-
end
|
|
52
|
-
|
|
53
47
|
def valid_first_argument?(first_arg)
|
|
54
|
-
first_arg.operator_keyword? || first_arg.hash_type? || ternary_expression?(first_arg)
|
|
48
|
+
first_arg.operator_keyword? || first_arg.hash_type? || ternary_expression?(first_arg) ||
|
|
49
|
+
compound_range?(first_arg)
|
|
55
50
|
end
|
|
56
51
|
|
|
57
|
-
def
|
|
58
|
-
|
|
52
|
+
def compound_range?(first_arg)
|
|
53
|
+
first_arg.range_type? && first_arg.parenthesized_call?
|
|
59
54
|
end
|
|
60
55
|
|
|
61
56
|
def chained_calls?(node)
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Lint
|
|
6
|
-
# Checks for `raise` or `fail` statements which
|
|
7
|
-
#
|
|
6
|
+
# Checks for `raise` or `fail` statements which raise `Exception` or
|
|
7
|
+
# `Exception.new`. Use `StandardError` or a specific exception class instead.
|
|
8
8
|
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
9
|
+
# If you have defined your own namespaced `Exception` class, it is possible
|
|
10
|
+
# to configure the cop to allow it by setting `AllowedImplicitNamespaces` to
|
|
11
|
+
# an array with the names of the namespaces to allow. By default, this is set to
|
|
12
|
+
# `['Gem']`, which allows `Gem::Exception` to be raised without an explicit namespace.
|
|
13
|
+
# If not allowed, a false positive may be registered if `raise Exception` is called
|
|
14
|
+
# within the namespace.
|
|
15
|
+
#
|
|
16
|
+
# Alternatively, use a fully qualified name with `raise`/`fail`
|
|
17
|
+
# (eg. `raise Namespace::Exception`).
|
|
15
18
|
#
|
|
16
19
|
# @safety
|
|
17
20
|
# This cop is unsafe because it will change the exception class being
|
|
@@ -20,15 +23,31 @@ module RuboCop
|
|
|
20
23
|
# @example
|
|
21
24
|
# # bad
|
|
22
25
|
# raise Exception, 'Error message here'
|
|
26
|
+
# raise Exception.new('Error message here')
|
|
23
27
|
#
|
|
24
28
|
# # good
|
|
25
29
|
# raise StandardError, 'Error message here'
|
|
30
|
+
# raise MyError.new, 'Error message here'
|
|
31
|
+
#
|
|
32
|
+
# @example AllowedImplicitNamespaces: ['Gem'] (default)
|
|
33
|
+
# # bad - `Foo` is not an allowed implicit namespace
|
|
34
|
+
# module Foo
|
|
35
|
+
# def self.foo
|
|
36
|
+
# raise Exception # This is qualified to `Foo::Exception`.
|
|
37
|
+
# end
|
|
38
|
+
# end
|
|
26
39
|
#
|
|
27
|
-
# @example AllowedImplicitNamespaces: ['Gem']
|
|
28
40
|
# # good
|
|
29
41
|
# module Gem
|
|
30
42
|
# def self.foo
|
|
31
|
-
# raise Exception # This
|
|
43
|
+
# raise Exception # This is qualified to `Gem::Exception`.
|
|
44
|
+
# end
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
# # good
|
|
48
|
+
# module Foo
|
|
49
|
+
# def self.foo
|
|
50
|
+
# raise Foo::Exception
|
|
32
51
|
# end
|
|
33
52
|
# end
|
|
34
53
|
class RaiseException < Base
|
|
@@ -9,16 +9,12 @@ module RuboCop
|
|
|
9
9
|
# @example
|
|
10
10
|
#
|
|
11
11
|
# # bad
|
|
12
|
-
#
|
|
13
12
|
# rand 1
|
|
14
13
|
# Kernel.rand(-1)
|
|
15
14
|
# rand 1.0
|
|
16
15
|
# rand(-1.0)
|
|
17
16
|
#
|
|
18
|
-
# @example
|
|
19
|
-
#
|
|
20
17
|
# # good
|
|
21
|
-
#
|
|
22
18
|
# 0 # just use 0 instead
|
|
23
19
|
class RandOne < Base
|
|
24
20
|
MSG = '`%<method>s` always returns `0`. Perhaps you meant `rand(2)` or `rand`?'
|
|
@@ -14,14 +14,16 @@ module RuboCop
|
|
|
14
14
|
#
|
|
15
15
|
# When comment enables all cops at once `rubocop:enable all`
|
|
16
16
|
# that cop checks whether any cop was actually enabled.
|
|
17
|
+
#
|
|
17
18
|
# @example
|
|
19
|
+
#
|
|
18
20
|
# # bad
|
|
19
21
|
# foo = 1
|
|
20
22
|
# # rubocop:enable Layout/LineLength
|
|
21
23
|
#
|
|
22
24
|
# # good
|
|
23
25
|
# foo = 1
|
|
24
|
-
#
|
|
26
|
+
#
|
|
25
27
|
# # bad
|
|
26
28
|
# # rubocop:disable Style/StringLiterals
|
|
27
29
|
# foo = "1"
|
|
@@ -109,7 +111,7 @@ module RuboCop
|
|
|
109
111
|
range_between(start + begin_pos - 1, start + end_pos)
|
|
110
112
|
end
|
|
111
113
|
|
|
112
|
-
# If the list of cops is comma-separated, but without
|
|
114
|
+
# If the list of cops is comma-separated, but without an empty space after the comma,
|
|
113
115
|
# we should **not** remove the prepending empty space, thus begin_pos += 1
|
|
114
116
|
def range_with_comma_after(comment, start, begin_pos, end_pos)
|
|
115
117
|
begin_pos += 1 if comment.source[end_pos + 1] != ' '
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Lint
|
|
6
|
-
# Checks for redundant quantifiers inside Regexp literals.
|
|
6
|
+
# Checks for redundant quantifiers inside `Regexp` literals.
|
|
7
7
|
#
|
|
8
8
|
# It is always allowed when interpolation is used in a regexp literal,
|
|
9
9
|
# because it's unknown what kind of string will be expanded as a result:
|
|
@@ -73,7 +73,7 @@ module RuboCop
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def redundant_group?(expr)
|
|
76
|
-
expr.is?(:passive, :group) && expr.
|
|
76
|
+
expr.is?(:passive, :group) && expr.one? { |child| child.type != :free_space }
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
def redundantly_quantifiable?(node)
|
|
@@ -17,17 +17,12 @@ module RuboCop
|
|
|
17
17
|
# * 2.0+ ... `enumerator`
|
|
18
18
|
# * 2.1+ ... `thread`
|
|
19
19
|
# * 2.2+ ... Add `rational` and `complex` above
|
|
20
|
-
# * 2.5+ ... Add `pp` above
|
|
21
20
|
# * 2.7+ ... Add `ruby2_keywords` above
|
|
22
21
|
# * 3.1+ ... Add `fiber` above
|
|
23
22
|
# * 3.2+ ... `set`
|
|
24
23
|
#
|
|
25
24
|
# This cop target those features.
|
|
26
25
|
#
|
|
27
|
-
# @safety
|
|
28
|
-
# This cop's autocorrection is unsafe because if `require 'pp'` is removed from one file,
|
|
29
|
-
# `NameError` can be encountered when another file uses `PP.pp`.
|
|
30
|
-
#
|
|
31
26
|
# @example
|
|
32
27
|
# # bad
|
|
33
28
|
# require 'unloaded_feature'
|
|
@@ -42,10 +37,6 @@ module RuboCop
|
|
|
42
37
|
MSG = 'Remove unnecessary `require` statement.'
|
|
43
38
|
RESTRICT_ON_SEND = %i[require].freeze
|
|
44
39
|
RUBY_22_LOADED_FEATURES = %w[rational complex].freeze
|
|
45
|
-
PRETTY_PRINT_METHODS = %i[
|
|
46
|
-
pretty_inspect pretty_print pretty_print_cycle
|
|
47
|
-
pretty_print_inspect pretty_print_instance_variables
|
|
48
|
-
].freeze
|
|
49
40
|
|
|
50
41
|
# @!method redundant_require_statement?(node)
|
|
51
42
|
def_node_matcher :redundant_require_statement?, <<~PATTERN
|
|
@@ -53,11 +44,6 @@ module RuboCop
|
|
|
53
44
|
(str #redundant_feature?))
|
|
54
45
|
PATTERN
|
|
55
46
|
|
|
56
|
-
# @!method pp_const?(node)
|
|
57
|
-
def_node_matcher :pp_const?, <<~PATTERN
|
|
58
|
-
(const {nil? cbase} :PP)
|
|
59
|
-
PATTERN
|
|
60
|
-
|
|
61
47
|
def on_send(node)
|
|
62
48
|
return unless redundant_require_statement?(node)
|
|
63
49
|
|
|
@@ -81,18 +67,11 @@ module RuboCop
|
|
|
81
67
|
feature_name == 'enumerator' ||
|
|
82
68
|
(target_ruby_version >= 2.1 && feature_name == 'thread') ||
|
|
83
69
|
(target_ruby_version >= 2.2 && RUBY_22_LOADED_FEATURES.include?(feature_name)) ||
|
|
84
|
-
(target_ruby_version >= 2.5 && feature_name == 'pp' && !need_to_require_pp?) ||
|
|
85
70
|
(target_ruby_version >= 2.7 && feature_name == 'ruby2_keywords') ||
|
|
86
71
|
(target_ruby_version >= 3.1 && feature_name == 'fiber') ||
|
|
87
72
|
(target_ruby_version >= 3.2 && feature_name == 'set')
|
|
88
73
|
end
|
|
89
74
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
90
|
-
|
|
91
|
-
def need_to_require_pp?
|
|
92
|
-
processed_source.ast.each_descendant(:send).any? do |node|
|
|
93
|
-
pp_const?(node.receiver) || PRETTY_PRINT_METHODS.include?(node.method_name)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
75
|
end
|
|
97
76
|
end
|
|
98
77
|
end
|