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
|
@@ -7,6 +7,9 @@ module RuboCop
|
|
|
7
7
|
# can be combined into a single loop. It is very likely that combining them
|
|
8
8
|
# will make the code more efficient and more concise.
|
|
9
9
|
#
|
|
10
|
+
# NOTE: Autocorrection is not applied when the block variable names differ in separate loops,
|
|
11
|
+
# as it is impossible to determine which variable name should be prioritized.
|
|
12
|
+
#
|
|
10
13
|
# @safety
|
|
11
14
|
# The cop is unsafe, because the first loop might modify state that the
|
|
12
15
|
# second loop depends on; these two aren't combinable.
|
|
@@ -59,10 +62,9 @@ module RuboCop
|
|
|
59
62
|
class CombinableLoops < Base
|
|
60
63
|
extend AutoCorrector
|
|
61
64
|
|
|
62
|
-
include RangeHelp
|
|
63
|
-
|
|
64
65
|
MSG = 'Combine this loop with the previous loop.'
|
|
65
66
|
|
|
67
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
66
68
|
def on_block(node)
|
|
67
69
|
return unless node.parent&.begin_type?
|
|
68
70
|
return unless collection_looping_method?(node)
|
|
@@ -70,11 +72,15 @@ module RuboCop
|
|
|
70
72
|
return unless node.body && node.left_sibling.body
|
|
71
73
|
|
|
72
74
|
add_offense(node) do |corrector|
|
|
75
|
+
next unless node.arguments == node.left_sibling.arguments
|
|
76
|
+
|
|
73
77
|
combine_with_left_sibling(corrector, node)
|
|
74
78
|
end
|
|
75
79
|
end
|
|
80
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
76
81
|
|
|
77
82
|
alias on_numblock on_block
|
|
83
|
+
alias on_itblock on_block
|
|
78
84
|
|
|
79
85
|
def on_for(node)
|
|
80
86
|
return unless node.parent&.begin_type?
|
|
@@ -93,7 +99,7 @@ module RuboCop
|
|
|
93
99
|
end
|
|
94
100
|
|
|
95
101
|
def same_collection_looping_block?(node, sibling)
|
|
96
|
-
return false if sibling.nil? ||
|
|
102
|
+
return false if sibling.nil? || !sibling.any_block_type?
|
|
97
103
|
|
|
98
104
|
sibling.method?(node.method_name) &&
|
|
99
105
|
sibling.receiver == node.receiver &&
|
|
@@ -105,11 +111,19 @@ module RuboCop
|
|
|
105
111
|
end
|
|
106
112
|
|
|
107
113
|
def combine_with_left_sibling(corrector, node)
|
|
108
|
-
corrector.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
)
|
|
112
|
-
|
|
114
|
+
corrector.remove(node.left_sibling.body.source_range.end.join(node.left_sibling.loc.end))
|
|
115
|
+
corrector.remove(node.source_range.begin.join(node.body.source_range.begin))
|
|
116
|
+
|
|
117
|
+
correct_end_of_block(corrector, node)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def correct_end_of_block(corrector, node)
|
|
121
|
+
return unless node.left_sibling.respond_to?(:braces?)
|
|
122
|
+
return if node.right_sibling&.any_block_type?
|
|
123
|
+
|
|
124
|
+
end_of_block = node.left_sibling.braces? ? '}' : ' end'
|
|
125
|
+
corrector.remove(node.loc.end)
|
|
126
|
+
corrector.insert_before(node.source_range.end, end_of_block)
|
|
113
127
|
end
|
|
114
128
|
end
|
|
115
129
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../../directive_comment'
|
|
4
|
+
|
|
3
5
|
module RuboCop
|
|
4
6
|
module Cop
|
|
5
7
|
module Style
|
|
@@ -7,8 +9,8 @@ module RuboCop
|
|
|
7
9
|
# These keywords are: `class`, `module`, `def`, `begin`, `end`.
|
|
8
10
|
#
|
|
9
11
|
# Note that some comments
|
|
10
|
-
# (`:nodoc:`, `:yields:`, `rubocop:disable` and `rubocop:todo`)
|
|
11
|
-
# are allowed.
|
|
12
|
+
# (`:nodoc:`, `:yields:`, `rubocop:disable` and `rubocop:todo`),
|
|
13
|
+
# RBS::Inline annotation, and Steep annotation (`steep:ignore`) are allowed.
|
|
12
14
|
#
|
|
13
15
|
# Autocorrection removes comments from `end` keyword and keeps comments
|
|
14
16
|
# for `class`, `module`, `def` and `begin` above the keyword.
|
|
@@ -49,11 +51,17 @@ module RuboCop
|
|
|
49
51
|
KEYWORDS = %w[begin class def end module].freeze
|
|
50
52
|
KEYWORD_REGEXES = KEYWORDS.map { |w| /^\s*#{w}\s/ }.freeze
|
|
51
53
|
|
|
52
|
-
ALLOWED_COMMENTS = %w[:nodoc: :yields:
|
|
53
|
-
ALLOWED_COMMENT_REGEXES = ALLOWED_COMMENTS.map { |c| /#\s*#{c}/ }
|
|
54
|
+
ALLOWED_COMMENTS = %w[:nodoc: :yields:].freeze
|
|
55
|
+
ALLOWED_COMMENT_REGEXES = (ALLOWED_COMMENTS.map { |c| /#\s*#{c}/ } +
|
|
56
|
+
[DirectiveComment::DIRECTIVE_COMMENT_REGEXP]).freeze
|
|
54
57
|
|
|
55
58
|
REGEXP = /(?<keyword>\S+).*#/.freeze
|
|
56
59
|
|
|
60
|
+
SUBCLASS_DEFINITION = /\A\s*class\s+(\w|::)+\s*<\s*(\w|::)+/.freeze
|
|
61
|
+
METHOD_OR_END_DEFINITIONS = /\A\s*(def\s|end)/.freeze
|
|
62
|
+
|
|
63
|
+
STEEP_REGEXP = /#\ssteep:ignore(\s|\z)/.freeze
|
|
64
|
+
|
|
57
65
|
def on_new_investigation
|
|
58
66
|
processed_source.comments.each do |comment|
|
|
59
67
|
next unless offensive?(comment) && (match = source_line(comment).match(REGEXP))
|
|
@@ -79,6 +87,9 @@ module RuboCop
|
|
|
79
87
|
|
|
80
88
|
def offensive?(comment)
|
|
81
89
|
line = source_line(comment)
|
|
90
|
+
return false if rbs_inline_annotation?(line, comment)
|
|
91
|
+
return false if steep_annotation?(comment)
|
|
92
|
+
|
|
82
93
|
KEYWORD_REGEXES.any? { |r| r.match?(line) } &&
|
|
83
94
|
ALLOWED_COMMENT_REGEXES.none? { |r| r.match?(line) }
|
|
84
95
|
end
|
|
@@ -86,6 +97,21 @@ module RuboCop
|
|
|
86
97
|
def source_line(comment)
|
|
87
98
|
comment.source_range.source_line
|
|
88
99
|
end
|
|
100
|
+
|
|
101
|
+
def rbs_inline_annotation?(line, comment)
|
|
102
|
+
case line
|
|
103
|
+
when SUBCLASS_DEFINITION
|
|
104
|
+
comment.text.start_with?(/#\[.+\]/)
|
|
105
|
+
when METHOD_OR_END_DEFINITIONS
|
|
106
|
+
comment.text.start_with?('#:')
|
|
107
|
+
else
|
|
108
|
+
false
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def steep_annotation?(comment)
|
|
113
|
+
comment.text.match?(STEEP_REGEXP)
|
|
114
|
+
end
|
|
89
115
|
end
|
|
90
116
|
end
|
|
91
117
|
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Style
|
|
6
|
+
# Checks for logical comparison which can be replaced with `Comparable#between?`.
|
|
7
|
+
#
|
|
8
|
+
# NOTE: `Comparable#between?` is on average slightly slower than logical comparison,
|
|
9
|
+
# although the difference generally isn't observable. If you require maximum
|
|
10
|
+
# performance, consider using logical comparison.
|
|
11
|
+
#
|
|
12
|
+
# @safety
|
|
13
|
+
# This cop is unsafe because the receiver may not respond to `between?`.
|
|
14
|
+
#
|
|
15
|
+
# @example
|
|
16
|
+
#
|
|
17
|
+
# # bad
|
|
18
|
+
# x >= min && x <= max
|
|
19
|
+
#
|
|
20
|
+
# # bad
|
|
21
|
+
# x <= max && x >= min
|
|
22
|
+
#
|
|
23
|
+
# # good
|
|
24
|
+
# x.between?(min, max)
|
|
25
|
+
#
|
|
26
|
+
class ComparableBetween < Base
|
|
27
|
+
extend AutoCorrector
|
|
28
|
+
|
|
29
|
+
MSG = 'Prefer `%<prefer>s` over logical comparison.'
|
|
30
|
+
|
|
31
|
+
# @!method logical_comparison_between_by_min_first?(node)
|
|
32
|
+
def_node_matcher :logical_comparison_between_by_min_first?, <<~PATTERN
|
|
33
|
+
(and
|
|
34
|
+
(send
|
|
35
|
+
{$_value :>= $_min | $_min :<= $_value})
|
|
36
|
+
(send
|
|
37
|
+
{$_value :<= $_max | $_max :>= $_value}))
|
|
38
|
+
PATTERN
|
|
39
|
+
|
|
40
|
+
# @!method logical_comparison_between_by_max_first?(node)
|
|
41
|
+
def_node_matcher :logical_comparison_between_by_max_first?, <<~PATTERN
|
|
42
|
+
(and
|
|
43
|
+
(send
|
|
44
|
+
{$_value :<= $_max | $_max :>= $_value})
|
|
45
|
+
(send
|
|
46
|
+
{$_value :>= $_min | $_min :<= $_value}))
|
|
47
|
+
PATTERN
|
|
48
|
+
|
|
49
|
+
def on_and(node)
|
|
50
|
+
logical_comparison_between_by_min_first?(node) do |*args|
|
|
51
|
+
min_and_value, max_and_value = args.each_slice(2).to_a
|
|
52
|
+
|
|
53
|
+
register_offense(node, min_and_value, max_and_value)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
logical_comparison_between_by_max_first?(node) do |*args|
|
|
57
|
+
max_and_value, min_and_value = args.each_slice(2).to_a
|
|
58
|
+
|
|
59
|
+
register_offense(node, min_and_value, max_and_value)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def register_offense(node, min_and_value, max_and_value)
|
|
66
|
+
value = (min_and_value & max_and_value).first
|
|
67
|
+
min = min_and_value.find { _1 != value } || value
|
|
68
|
+
max = max_and_value.find { _1 != value } || value
|
|
69
|
+
|
|
70
|
+
prefer = "#{value.source}.between?(#{min.source}, #{max.source})"
|
|
71
|
+
add_offense(node, message: format(MSG, prefer: prefer)) do |corrector|
|
|
72
|
+
corrector.replace(node, prefer)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -63,6 +63,7 @@ module RuboCop
|
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
# rubocop:enable Metrics
|
|
66
|
+
alias on_csend on_send
|
|
66
67
|
|
|
67
68
|
private
|
|
68
69
|
|
|
@@ -85,7 +86,7 @@ module RuboCop
|
|
|
85
86
|
|
|
86
87
|
def percent_literals_includes_only_basic_literals?(node)
|
|
87
88
|
node.arguments.select(&:percent_literal?).all? do |arg|
|
|
88
|
-
arg.children.all? { |child| child.
|
|
89
|
+
arg.children.all? { |child| child.type?(:str, :sym) }
|
|
89
90
|
end
|
|
90
91
|
end
|
|
91
92
|
end
|
|
@@ -33,24 +33,20 @@ module RuboCop
|
|
|
33
33
|
branch.begin_type? ? Array(branch).last : branch
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
# rubocop:disable Metrics/AbcSize
|
|
37
36
|
def lhs(node)
|
|
38
37
|
case node.type
|
|
39
38
|
when :send
|
|
40
39
|
lhs_for_send(node)
|
|
41
|
-
when :op_asgn
|
|
42
|
-
"#{node.
|
|
43
|
-
when :and_asgn, :or_asgn
|
|
44
|
-
"#{node.children[0].source} #{node.loc.operator.source} "
|
|
40
|
+
when :op_asgn, :and_asgn, :or_asgn
|
|
41
|
+
"#{node.assignment_node.source} #{node.operator}= "
|
|
45
42
|
when :casgn
|
|
46
43
|
lhs_for_casgn(node)
|
|
47
44
|
when *ConditionalAssignment::VARIABLE_ASSIGNMENT_TYPES
|
|
48
|
-
"#{node.
|
|
45
|
+
"#{node.name} = "
|
|
49
46
|
else
|
|
50
47
|
node.source
|
|
51
48
|
end
|
|
52
49
|
end
|
|
53
|
-
# rubocop:enable Metrics/AbcSize
|
|
54
50
|
|
|
55
51
|
def indent(cop, source)
|
|
56
52
|
conf = cop.config.for_cop(END_ALIGNMENT)
|
|
@@ -73,7 +69,7 @@ module RuboCop
|
|
|
73
69
|
elsif_branches << node.if_branch
|
|
74
70
|
|
|
75
71
|
else_branch = node.else_branch
|
|
76
|
-
if else_branch&.if_type? && else_branch
|
|
72
|
+
if else_branch&.if_type? && else_branch.elsif?
|
|
77
73
|
expand_elsif(else_branch, elsif_branches)
|
|
78
74
|
else
|
|
79
75
|
elsif_branches << else_branch
|
|
@@ -94,11 +90,12 @@ module RuboCop
|
|
|
94
90
|
end
|
|
95
91
|
|
|
96
92
|
def lhs_for_casgn(node)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
93
|
+
if node.namespace.nil?
|
|
94
|
+
"#{node.name} = "
|
|
95
|
+
elsif node.namespace.cbase_type?
|
|
96
|
+
"::#{node.name} = "
|
|
100
97
|
else
|
|
101
|
-
"#{namespace.
|
|
98
|
+
"#{node.namespace.const_name}::#{node.name} = "
|
|
102
99
|
end
|
|
103
100
|
end
|
|
104
101
|
|
|
@@ -110,13 +107,13 @@ module RuboCop
|
|
|
110
107
|
parent = node.parent
|
|
111
108
|
return true unless parent
|
|
112
109
|
|
|
113
|
-
!
|
|
110
|
+
!parent.type?(:mlhs, :resbody)
|
|
114
111
|
end
|
|
115
112
|
end
|
|
116
113
|
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
# condition can be used instead.
|
|
114
|
+
# Checks for `if` and `case` statements where each branch is used for
|
|
115
|
+
# both the assignment and comparison of the same variable
|
|
116
|
+
# when using the return of the condition can be used instead.
|
|
120
117
|
#
|
|
121
118
|
# @example EnforcedStyle: assign_to_condition (default)
|
|
122
119
|
# # bad
|
|
@@ -210,11 +207,10 @@ module RuboCop
|
|
|
210
207
|
class ConditionalAssignment < Base
|
|
211
208
|
include ConditionalAssignmentHelper
|
|
212
209
|
include ConfigurableEnforcedStyle
|
|
213
|
-
include IgnoredNode
|
|
214
210
|
extend AutoCorrector
|
|
215
211
|
|
|
216
212
|
MSG = 'Use the return of the conditional for variable assignment and comparison.'
|
|
217
|
-
ASSIGN_TO_CONDITION_MSG = 'Assign variables inside of conditionals'
|
|
213
|
+
ASSIGN_TO_CONDITION_MSG = 'Assign variables inside of conditionals.'
|
|
218
214
|
VARIABLE_ASSIGNMENT_TYPES = %i[casgn cvasgn gvasgn ivasgn lvasgn].freeze
|
|
219
215
|
ASSIGNMENT_TYPES = VARIABLE_ASSIGNMENT_TYPES + %i[and_asgn or_asgn op_asgn masgn].freeze
|
|
220
216
|
LINE_LENGTH = 'Layout/LineLength'
|
|
@@ -233,7 +229,7 @@ module RuboCop
|
|
|
233
229
|
PATTERN
|
|
234
230
|
|
|
235
231
|
ASSIGNMENT_TYPES.each do |type|
|
|
236
|
-
define_method "on_#{type}" do |node|
|
|
232
|
+
define_method :"on_#{type}" do |node|
|
|
237
233
|
return if part_of_ignored_node?(node)
|
|
238
234
|
return if node.parent&.shorthand_asgn?
|
|
239
235
|
|
|
@@ -313,22 +309,25 @@ module RuboCop
|
|
|
313
309
|
end
|
|
314
310
|
|
|
315
311
|
def allowed_single_line?(branches)
|
|
316
|
-
single_line_conditions_only? && branches.any?(&:begin_type?)
|
|
312
|
+
single_line_conditions_only? && branches.compact.any?(&:begin_type?)
|
|
317
313
|
end
|
|
318
314
|
|
|
319
315
|
def assignment_node(node)
|
|
320
|
-
|
|
316
|
+
assignment = node.send_type? ? node.last_argument : node.expression
|
|
317
|
+
return unless assignment
|
|
321
318
|
|
|
322
319
|
# ignore pseudo-assignments without rhs in for nodes
|
|
323
320
|
return if node.parent&.for_type?
|
|
324
321
|
|
|
325
|
-
|
|
322
|
+
if assignment.begin_type? && assignment.children.one?
|
|
323
|
+
assignment = assignment.children.first
|
|
324
|
+
end
|
|
326
325
|
|
|
327
326
|
assignment
|
|
328
327
|
end
|
|
329
328
|
|
|
330
329
|
def move_assignment_outside_condition(corrector, node)
|
|
331
|
-
if node.
|
|
330
|
+
if node.type?(:case, :case_match)
|
|
332
331
|
CaseCorrector.correct(corrector, self, node)
|
|
333
332
|
elsif node.ternary?
|
|
334
333
|
TernaryCorrector.correct(corrector, node)
|
|
@@ -338,11 +337,11 @@ module RuboCop
|
|
|
338
337
|
end
|
|
339
338
|
|
|
340
339
|
def move_assignment_inside_condition(corrector, node)
|
|
341
|
-
|
|
340
|
+
condition = node.send_type? ? node.last_argument : node.expression
|
|
342
341
|
|
|
343
342
|
if ternary_condition?(condition)
|
|
344
343
|
TernaryCorrector.move_assignment_inside_condition(corrector, node)
|
|
345
|
-
elsif condition.
|
|
344
|
+
elsif condition.type?(:case, :case_match)
|
|
346
345
|
CaseCorrector.move_assignment_inside_condition(corrector, node)
|
|
347
346
|
elsif condition.if_type?
|
|
348
347
|
IfCorrector.move_assignment_inside_condition(corrector, node)
|
|
@@ -438,31 +437,47 @@ module RuboCop
|
|
|
438
437
|
# Helper module to provide common methods to ConditionalAssignment
|
|
439
438
|
# correctors
|
|
440
439
|
module ConditionalCorrectorHelper
|
|
440
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
441
441
|
def remove_whitespace_in_branches(corrector, branch, condition, column)
|
|
442
442
|
branch.each_node do |child|
|
|
443
443
|
next if child.source_range.nil?
|
|
444
|
+
next if child.parent.dstr_type?
|
|
444
445
|
|
|
445
446
|
white_space = white_space_range(child, column)
|
|
446
|
-
corrector.remove(white_space) if white_space
|
|
447
|
+
corrector.remove(white_space) if white_space
|
|
447
448
|
end
|
|
448
449
|
|
|
449
|
-
|
|
450
|
-
corrector.remove_preceding(loc, loc.column - column)
|
|
450
|
+
if condition.loc.else && !same_line?(condition.else_branch, condition)
|
|
451
|
+
corrector.remove_preceding(condition.loc.else, condition.loc.else.column - column)
|
|
451
452
|
end
|
|
453
|
+
|
|
454
|
+
return unless condition.loc.end && !same_line?(
|
|
455
|
+
condition.branches.last.parent.else_branch, condition.loc.end
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
corrector.remove_preceding(condition.loc.end, condition.loc.end.column - column)
|
|
459
|
+
end
|
|
460
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
461
|
+
|
|
462
|
+
def same_line?(node1, node2)
|
|
463
|
+
RuboCop::Cop::Util.same_line?(node1, node2)
|
|
452
464
|
end
|
|
453
465
|
|
|
454
466
|
def white_space_range(node, column)
|
|
455
467
|
expression = node.source_range
|
|
456
|
-
|
|
468
|
+
end_pos = expression.begin_pos
|
|
469
|
+
begin_pos = end_pos - (expression.column - column - 2)
|
|
470
|
+
|
|
471
|
+
return nil if begin_pos > end_pos
|
|
457
472
|
|
|
458
|
-
Parser::Source::Range.new(expression.source_buffer, begin_pos,
|
|
473
|
+
white_space = Parser::Source::Range.new(expression.source_buffer, begin_pos, end_pos)
|
|
474
|
+
white_space if white_space.source.strip.empty?
|
|
459
475
|
end
|
|
460
476
|
|
|
461
477
|
def assignment(node)
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
condition.source_range.begin_pos)
|
|
478
|
+
condition = node.send_type? ? node.last_argument : node.expression
|
|
479
|
+
|
|
480
|
+
node.source_range.begin.join(condition.source_range.begin)
|
|
466
481
|
end
|
|
467
482
|
|
|
468
483
|
def correct_if_branches(corrector, cop, node)
|
|
@@ -507,7 +522,7 @@ module RuboCop
|
|
|
507
522
|
end
|
|
508
523
|
|
|
509
524
|
def move_assignment_inside_condition(corrector, node)
|
|
510
|
-
|
|
525
|
+
rhs = node.send_type? ? node.last_argument : node.expression
|
|
511
526
|
if_branch, else_branch = extract_branches(node)
|
|
512
527
|
assignment = assignment(node)
|
|
513
528
|
|
|
@@ -534,12 +549,12 @@ module RuboCop
|
|
|
534
549
|
end
|
|
535
550
|
|
|
536
551
|
def element_assignment?(node)
|
|
537
|
-
node.send_type? && node.
|
|
552
|
+
node.send_type? && !node.method?(:[]=)
|
|
538
553
|
end
|
|
539
554
|
|
|
540
555
|
def extract_branches(node)
|
|
541
|
-
|
|
542
|
-
condition
|
|
556
|
+
rhs = node.send_type? ? node.last_argument : node.expression
|
|
557
|
+
condition = rhs.children.first if rhs.begin_type? && rhs.children.one?
|
|
543
558
|
_condition, if_branch, else_branch = *(condition || rhs)
|
|
544
559
|
|
|
545
560
|
[if_branch, else_branch]
|
|
@@ -568,7 +583,7 @@ module RuboCop
|
|
|
568
583
|
|
|
569
584
|
def move_assignment_inside_condition(corrector, node)
|
|
570
585
|
column = node.source_range.column
|
|
571
|
-
|
|
586
|
+
condition = node.send_type? ? node.last_argument : node.expression
|
|
572
587
|
assignment = assignment(node)
|
|
573
588
|
|
|
574
589
|
corrector.remove(assignment)
|
|
@@ -596,6 +611,8 @@ module RuboCop
|
|
|
596
611
|
|
|
597
612
|
return unless (branch_else = branch.parent.loc.else)
|
|
598
613
|
|
|
614
|
+
return if same_line?(branch_else, condition)
|
|
615
|
+
|
|
599
616
|
corrector.remove_preceding(branch_else, branch_else.column - column)
|
|
600
617
|
end
|
|
601
618
|
end
|
|
@@ -619,7 +636,7 @@ module RuboCop
|
|
|
619
636
|
|
|
620
637
|
def move_assignment_inside_condition(corrector, node)
|
|
621
638
|
column = node.source_range.column
|
|
622
|
-
|
|
639
|
+
condition = node.send_type? ? node.last_argument : node.expression
|
|
623
640
|
assignment = assignment(node)
|
|
624
641
|
|
|
625
642
|
corrector.remove(assignment)
|
|
@@ -48,13 +48,17 @@ module RuboCop
|
|
|
48
48
|
MSG = 'Explicitly make `%<constant_name>s` public or private using ' \
|
|
49
49
|
'either `#public_constant` or `#private_constant`.'
|
|
50
50
|
|
|
51
|
+
# @!method visibility_declaration_for(node)
|
|
52
|
+
def_node_matcher :visibility_declaration_for, <<~PATTERN
|
|
53
|
+
(send nil? {:public_constant :private_constant} $...)
|
|
54
|
+
PATTERN
|
|
55
|
+
|
|
51
56
|
def on_casgn(node)
|
|
52
57
|
return unless class_or_module_scope?(node)
|
|
53
58
|
return if visibility_declaration?(node)
|
|
54
59
|
return if ignore_modules? && module?(node)
|
|
55
60
|
|
|
56
|
-
message
|
|
57
|
-
add_offense(node, message: message)
|
|
61
|
+
add_offense(node, message: format(MSG, constant_name: node.name))
|
|
58
62
|
end
|
|
59
63
|
|
|
60
64
|
private
|
|
@@ -64,13 +68,7 @@ module RuboCop
|
|
|
64
68
|
end
|
|
65
69
|
|
|
66
70
|
def module?(node)
|
|
67
|
-
node.
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def message(node)
|
|
71
|
-
_namespace, constant_name, _value = *node
|
|
72
|
-
|
|
73
|
-
format(MSG, constant_name: constant_name)
|
|
71
|
+
node.expression.class_constructor?
|
|
74
72
|
end
|
|
75
73
|
|
|
76
74
|
def class_or_module_scope?(node)
|
|
@@ -84,22 +82,20 @@ module RuboCop
|
|
|
84
82
|
end
|
|
85
83
|
end
|
|
86
84
|
|
|
85
|
+
# rubocop:disable Metrics/AbcSize
|
|
87
86
|
def visibility_declaration?(node)
|
|
88
|
-
_namespace, constant_name, _value = *node
|
|
89
|
-
|
|
90
87
|
node.parent.each_child_node(:send).any? do |child|
|
|
91
|
-
visibility_declaration_for
|
|
92
|
-
end
|
|
93
|
-
end
|
|
88
|
+
next false unless (arguments = visibility_declaration_for(child))
|
|
94
89
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
90
|
+
arguments = arguments.first.children.first.to_a if arguments.first&.splat_type?
|
|
91
|
+
constant_values = arguments.map do |argument|
|
|
92
|
+
argument.value.to_sym if argument.respond_to?(:value)
|
|
93
|
+
end
|
|
99
94
|
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
constant_values.include?(node.name)
|
|
96
|
+
end
|
|
102
97
|
end
|
|
98
|
+
# rubocop:enable Metrics/AbcSize
|
|
103
99
|
end
|
|
104
100
|
end
|
|
105
101
|
end
|
|
@@ -28,18 +28,27 @@ module RuboCop
|
|
|
28
28
|
def on_new_investigation
|
|
29
29
|
return if notice.empty? || notice_found?(processed_source)
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
verify_autocorrect_notice!
|
|
32
|
+
message = format(MSG, notice: notice)
|
|
33
|
+
if processed_source.blank?
|
|
34
|
+
add_global_offense(message)
|
|
35
|
+
else
|
|
36
|
+
offense_range = source_range(processed_source.buffer, 1, 0)
|
|
37
|
+
add_offense(offense_range, message: message) do |corrector|
|
|
38
|
+
autocorrect(corrector)
|
|
39
|
+
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
private
|
|
42
44
|
|
|
45
|
+
def autocorrect(corrector)
|
|
46
|
+
token = insert_notice_before(processed_source)
|
|
47
|
+
range = token.nil? ? range_between(0, 0) : token.pos
|
|
48
|
+
|
|
49
|
+
corrector.insert_before(range, "#{autocorrect_notice}\n")
|
|
50
|
+
end
|
|
51
|
+
|
|
43
52
|
def notice
|
|
44
53
|
cop_config['Notice']
|
|
45
54
|
end
|
|
@@ -48,17 +57,16 @@ module RuboCop
|
|
|
48
57
|
cop_config['AutocorrectNotice']
|
|
49
58
|
end
|
|
50
59
|
|
|
51
|
-
def offense_range
|
|
52
|
-
source_range(processed_source.buffer, 1, 0)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
60
|
def verify_autocorrect_notice!
|
|
56
|
-
|
|
61
|
+
if autocorrect_notice.nil? || autocorrect_notice.empty?
|
|
62
|
+
raise Warning, "#{cop_name}: #{AUTOCORRECT_EMPTY_WARNING}"
|
|
63
|
+
end
|
|
57
64
|
|
|
58
65
|
regex = Regexp.new(notice)
|
|
59
|
-
return if autocorrect_notice
|
|
66
|
+
return if autocorrect_notice.gsub(/^# */, '').match?(regex)
|
|
60
67
|
|
|
61
|
-
|
|
68
|
+
message = "AutocorrectNotice '#{autocorrect_notice}' must match Notice /#{notice}/"
|
|
69
|
+
raise Warning, "#{cop_name}: #{message}"
|
|
62
70
|
end
|
|
63
71
|
|
|
64
72
|
def insert_notice_before(processed_source)
|
|
@@ -72,26 +80,28 @@ module RuboCop
|
|
|
72
80
|
return false if token_index >= processed_source.tokens.size
|
|
73
81
|
|
|
74
82
|
token = processed_source.tokens[token_index]
|
|
75
|
-
token.comment? &&
|
|
83
|
+
token.comment? && /\A#!.*\z/.match?(token.text)
|
|
76
84
|
end
|
|
77
85
|
|
|
78
86
|
def encoding_token?(processed_source, token_index)
|
|
79
87
|
return false if token_index >= processed_source.tokens.size
|
|
80
88
|
|
|
81
89
|
token = processed_source.tokens[token_index]
|
|
82
|
-
token.comment? &&
|
|
90
|
+
token.comment? && /\A#.*coding\s?[:=]\s?(?:UTF|utf)-8/.match?(token.text)
|
|
83
91
|
end
|
|
84
92
|
|
|
85
93
|
def notice_found?(processed_source)
|
|
86
|
-
|
|
87
|
-
|
|
94
|
+
notice_regexp = Regexp.new(notice.lines.map(&:strip).join)
|
|
95
|
+
multiline_notice = +''
|
|
88
96
|
processed_source.tokens.each do |token|
|
|
89
97
|
break unless token.comment?
|
|
90
98
|
|
|
91
|
-
|
|
92
|
-
|
|
99
|
+
multiline_notice << token.text.sub(/\A# */, '')
|
|
100
|
+
|
|
101
|
+
break if notice_regexp.match?(token.text)
|
|
93
102
|
end
|
|
94
|
-
|
|
103
|
+
|
|
104
|
+
multiline_notice.match?(notice_regexp)
|
|
95
105
|
end
|
|
96
106
|
end
|
|
97
107
|
end
|