rubocop 1.57.1 → 1.81.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +92 -89
- data/assets/output.css.erb +159 -0
- data/assets/output.html.erb +1 -160
- data/config/default.yml +540 -86
- data/config/internal_affairs.yml +31 -0
- data/config/obsoletion.yml +8 -3
- data/exe/rubocop +1 -7
- data/lib/rubocop/cached_data.rb +21 -5
- data/lib/rubocop/cli/command/auto_generate_config.rb +30 -17
- data/lib/rubocop/cli/command/execute_runner.rb +4 -4
- data/lib/rubocop/cli/command/lsp.rb +4 -4
- data/lib/rubocop/cli/command/show_cops.rb +24 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
- data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +28 -4
- data/lib/rubocop/comment_config.rb +3 -3
- data/lib/rubocop/config.rb +92 -22
- data/lib/rubocop/config_finder.rb +12 -2
- data/lib/rubocop/config_loader.rb +71 -58
- data/lib/rubocop/config_loader_resolver.rb +48 -17
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +56 -9
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/config_validator.rb +39 -20
- data/lib/rubocop/cop/autocorrect_logic.rb +57 -27
- data/lib/rubocop/cop/base.rb +79 -18
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/gem_version.rb +4 -5
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/cop.rb +30 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +8 -16
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +13 -16
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +6 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/documentation.rb +32 -5
- data/lib/rubocop/cop/exclude_limit.rb +1 -1
- data/lib/rubocop/cop/force.rb +12 -0
- data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/dependency_version.rb +3 -5
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -4
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +39 -17
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +13 -8
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
- data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +124 -30
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +233 -0
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +11 -2
- data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +23 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +0 -5
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +9 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +3 -10
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +32 -13
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +45 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +0 -4
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +4 -4
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +36 -21
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +12 -8
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +16 -4
- data/lib/rubocop/cop/layout/extra_spacing.rb +5 -11
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -11
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +19 -10
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/hash_alignment.rb +8 -11
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +13 -13
- data/lib/rubocop/cop/layout/leading_comment_space.rb +83 -1
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +12 -3
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/line_length.rb +177 -29
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +11 -8
- data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
- data/lib/rubocop/cop/layout/redundant_line_break.rb +32 -46
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +16 -9
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +80 -37
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
- data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
- data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -5
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
- data/lib/rubocop/cop/legacy/corrector.rb +12 -2
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_range.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -9
- data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -14
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +4 -3
- data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +90 -0
- data/lib/rubocop/cop/lint/debugger.rb +30 -8
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -2
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -13
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +0 -4
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +110 -32
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
- data/lib/rubocop/cop/lint/else_layout.rb +0 -2
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -58
- data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
- data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -5
- data/lib/rubocop/cop/lint/empty_when.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +2 -10
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +24 -23
- data/lib/rubocop/cop/lint/float_comparison.rb +58 -15
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -12
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -4
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +126 -11
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +49 -12
- data/lib/rubocop/cop/lint/loop.rb +6 -12
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -2
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_case_range.rb +14 -12
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -12
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -25
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -7
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +6 -8
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +9 -5
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
- data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/rand_one.rb +0 -4
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +4 -2
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +164 -12
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +9 -8
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -6
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +9 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -2
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +2 -9
- data/lib/rubocop/cop/lint/rescue_type.rb +5 -11
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +20 -9
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
- data/lib/rubocop/cop/lint/script_permission.rb +3 -3
- data/lib/rubocop/cop/lint/self_assignment.rb +72 -10
- data/lib/rubocop/cop/lint/shadowed_argument.rb +8 -7
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +19 -11
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +8 -3
- data/lib/rubocop/cop/lint/syntax.rb +10 -4
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +2 -4
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +4 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +56 -9
- data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -8
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +36 -10
- data/lib/rubocop/cop/lint/useless_assignment.rb +21 -16
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
- data/lib/rubocop/cop/lint/useless_or.rb +98 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -29
- data/lib/rubocop/cop/lint/useless_times.rb +2 -2
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +92 -18
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
- data/lib/rubocop/cop/metrics/block_length.rb +7 -5
- data/lib/rubocop/cop/metrics/block_nesting.rb +20 -8
- data/lib/rubocop/cop/metrics/class_length.rb +21 -15
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
- data/lib/rubocop/cop/metrics/method_length.rb +15 -6
- data/lib/rubocop/cop/metrics/module_length.rb +7 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +8 -9
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +8 -4
- data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/code_length.rb +12 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +23 -14
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
- data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -12
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +45 -35
- data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
- data/lib/rubocop/cop/mixin/line_length_help.rb +34 -12
- data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -9
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
- data/lib/rubocop/cop/mixin/range_help.rb +15 -4
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +11 -5
- data/lib/rubocop/cop/mixin/string_help.rb +2 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +21 -5
- data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +39 -8
- data/lib/rubocop/cop/naming/constant_name.rb +7 -9
- data/lib/rubocop/cop/naming/file_name.rb +4 -6
- data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +13 -14
- data/lib/rubocop/cop/naming/method_name.rb +185 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
- data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +14 -13
- data/lib/rubocop/cop/naming/variable_name.rb +50 -6
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/offense.rb +4 -5
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/compound_hash.rb +4 -2
- data/lib/rubocop/cop/security/eval.rb +2 -1
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/open.rb +3 -2
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +172 -32
- data/lib/rubocop/cop/style/accessor_grouping.rb +43 -9
- data/lib/rubocop/cop/style/alias.rb +2 -1
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/and_or.rb +1 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +228 -36
- data/lib/rubocop/cop/style/array_first_last.rb +80 -0
- data/lib/rubocop/cop/style/array_intersect.rb +115 -39
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
- data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +52 -21
- data/lib/rubocop/cop/style/case_like_if.rb +14 -17
- data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
- data/lib/rubocop/cop/style/class_check.rb +1 -0
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +3 -3
- data/lib/rubocop/cop/style/collection_compact.rb +25 -15
- data/lib/rubocop/cop/style/collection_methods.rb +2 -1
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +22 -8
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +30 -4
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/concat_array_literals.rb +2 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +57 -40
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/copyright.rb +31 -21
- data/lib/rubocop/cop/style/data_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/date_time.rb +5 -4
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -7
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/documentation.rb +25 -25
- data/lib/rubocop/cop/style/documentation_method.rb +20 -0
- data/lib/rubocop/cop/style/double_negation.rb +5 -5
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +11 -15
- data/lib/rubocop/cop/style/each_with_object.rb +3 -4
- data/lib/rubocop/cop/style/empty_else.rb +10 -7
- data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
- data/lib/rubocop/cop/style/empty_literal.rb +36 -23
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
- data/lib/rubocop/cop/style/endless_method.rb +163 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +23 -31
- data/lib/rubocop/cop/style/exact_regexp_match.rb +6 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +19 -6
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
- data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
- data/lib/rubocop/cop/style/file_null.rb +89 -0
- data/lib/rubocop/cop/style/file_read.rb +2 -5
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/file_write.rb +2 -5
- data/lib/rubocop/cop/style/float_division.rb +8 -4
- data/lib/rubocop/cop/style/for.rb +3 -1
- data/lib/rubocop/cop/style/format_string.rb +9 -9
- data/lib/rubocop/cop/style/format_string_token.rb +38 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +20 -4
- data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
- data/lib/rubocop/cop/style/hash_each_methods.rb +110 -12
- data/lib/rubocop/cop/style/hash_except.rb +38 -146
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_slice.rb +80 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +35 -7
- data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +37 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +11 -15
- data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +8 -8
- data/lib/rubocop/cop/style/if_with_semicolon.rb +60 -6
- data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -18
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +48 -6
- data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
- data/lib/rubocop/cop/style/it_assignment.rb +93 -0
- data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
- data/lib/rubocop/cop/style/lambda.rb +2 -1
- data/lib/rubocop/cop/style/lambda_call.rb +10 -4
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +82 -50
- data/lib/rubocop/cop/style/map_into_array.rb +236 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +29 -10
- data/lib/rubocop/cop/style/map_to_set.rb +4 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +52 -25
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +21 -5
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +30 -13
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +35 -5
- data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -9
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +5 -3
- data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +53 -60
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/next.rb +45 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +11 -7
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
- data/lib/rubocop/cop/style/object_then.rb +16 -14
- data/lib/rubocop/cop/style/one_line_conditional.rb +48 -15
- data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
- data/lib/rubocop/cop/style/operator_method_call.rb +27 -9
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +47 -45
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +2 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
- data/lib/rubocop/cop/style/raise_args.rb +19 -14
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +29 -3
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +11 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +41 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +97 -25
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +19 -7
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +17 -14
- data/lib/rubocop/cop/style/redundant_each.rb +7 -4
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +4 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +5 -4
- data/lib/rubocop/cop/style/redundant_format.rb +283 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
- data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +72 -19
- data/lib/rubocop/cop/style/redundant_parentheses.rb +149 -49
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +12 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +16 -24
- data/lib/rubocop/cop/style/redundant_return.rb +9 -3
- data/lib/rubocop/cop/style/redundant_self.rb +32 -20
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +10 -9
- data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
- data/lib/rubocop/cop/style/redundant_string_escape.rb +3 -3
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/require_order.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +18 -4
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +54 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +163 -62
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/sample.rb +3 -4
- data/lib/rubocop/cop/style/select_by_regexp.rb +20 -13
- data/lib/rubocop/cop/style/self_assignment.rb +12 -18
- data/lib/rubocop/cop/style/semicolon.rb +30 -7
- data/lib/rubocop/cop/style/send.rb +4 -4
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +18 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
- data/lib/rubocop/cop/style/slicing_with_range.rb +105 -10
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +72 -87
- data/lib/rubocop/cop/style/special_global_vars.rb +2 -3
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_chars.rb +1 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +21 -17
- data/lib/rubocop/cop/style/string_literals.rb +1 -1
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/strip.rb +7 -4
- data/lib/rubocop/cop/style/struct_inheritance.rb +9 -2
- data/lib/rubocop/cop/style/super_arguments.rb +221 -0
- data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +78 -6
- data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
- data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +56 -2
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/unpack_first.rb +11 -14
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/while_until_do.rb +0 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
- data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
- data/lib/rubocop/cop/team.rb +28 -4
- data/lib/rubocop/cop/util.rb +19 -6
- data/lib/rubocop/cop/utils/format_string.rb +20 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +24 -5
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +14 -3
- data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
- data/lib/rubocop/cop/variable_force.rb +43 -20
- data/lib/rubocop/cops_documentation_generator.rb +135 -58
- data/lib/rubocop/core_ext/string.rb +2 -6
- data/lib/rubocop/directive_comment.rb +54 -18
- data/lib/rubocop/ext/regexp_node.rb +17 -35
- data/lib/rubocop/ext/regexp_parser.rb +4 -21
- data/lib/rubocop/file_finder.rb +9 -4
- data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
- data/lib/rubocop/formatter/disabled_config_formatter.rb +43 -14
- data/lib/rubocop/formatter/formatter_set.rb +8 -2
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +38 -15
- data/lib/rubocop/formatter/json_formatter.rb +0 -1
- data/lib/rubocop/formatter/junit_formatter.rb +70 -23
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +13 -3
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/formatter/tap_formatter.rb +3 -7
- data/lib/rubocop/formatter.rb +1 -1
- data/lib/rubocop/lockfile.rb +58 -7
- data/lib/rubocop/lsp/diagnostic.rb +190 -0
- data/lib/rubocop/lsp/logger.rb +3 -3
- data/lib/rubocop/lsp/routes.rb +77 -40
- data/lib/rubocop/lsp/runtime.rb +20 -50
- data/lib/rubocop/lsp/server.rb +6 -4
- data/lib/rubocop/lsp/severity.rb +1 -1
- data/lib/rubocop/lsp/stdin_runner.rb +69 -0
- data/lib/rubocop/lsp.rb +36 -0
- data/lib/rubocop/magic_comment.rb +12 -4
- data/lib/rubocop/options.rb +43 -22
- data/lib/rubocop/path_util.rb +21 -10
- data/lib/rubocop/pending_cops_reporter.rb +56 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
- data/lib/rubocop/plugin/load_error.rb +26 -0
- data/lib/rubocop/plugin/loader.rb +100 -0
- data/lib/rubocop/plugin/not_supported_error.rb +29 -0
- data/lib/rubocop/plugin.rb +46 -0
- data/lib/rubocop/rake_task.rb +5 -2
- data/lib/rubocop/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +29 -34
- data/lib/rubocop/rspec/cop_helper.rb +20 -2
- data/lib/rubocop/rspec/expect_offense.rb +31 -12
- data/lib/rubocop/rspec/shared_contexts.rb +112 -18
- data/lib/rubocop/rspec/support.rb +7 -2
- data/lib/rubocop/runner.rb +40 -13
- data/lib/rubocop/server/cache.rb +63 -11
- data/lib/rubocop/server/cli.rb +2 -2
- data/lib/rubocop/server/client_command/base.rb +10 -0
- data/lib/rubocop/server/client_command/exec.rb +3 -3
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/server/core.rb +5 -0
- data/lib/rubocop/server/server_command/exec.rb +0 -1
- data/lib/rubocop/target_finder.rb +93 -82
- data/lib/rubocop/target_ruby.rb +111 -81
- data/lib/rubocop/version.rb +67 -9
- data/lib/rubocop/yaml_duplication_checker.rb +20 -26
- data/lib/rubocop.rb +61 -3
- data/lib/ruby_lsp/rubocop/addon.rb +90 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +103 -51
- data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
- /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Lint
|
|
6
|
-
# Checks for useless
|
|
6
|
+
# Checks for useless ``rescue``s, which only reraise rescued exceptions.
|
|
7
7
|
#
|
|
8
8
|
# @example
|
|
9
9
|
# # bad
|
|
@@ -75,7 +75,7 @@ module RuboCop
|
|
|
75
75
|
def use_exception_variable_in_ensure?(resbody_node)
|
|
76
76
|
return false unless (exception_variable = resbody_node.exception_variable)
|
|
77
77
|
return false unless (ensure_node = resbody_node.each_ancestor(:ensure).first)
|
|
78
|
-
return false unless (ensure_body = ensure_node.
|
|
78
|
+
return false unless (ensure_body = ensure_node.branch)
|
|
79
79
|
|
|
80
80
|
ensure_body.each_descendant(:lvar).map(&:source).include?(exception_variable.source)
|
|
81
81
|
end
|
|
@@ -72,7 +72,7 @@ module RuboCop
|
|
|
72
72
|
def_node_matcher :method_definition, <<~PATTERN
|
|
73
73
|
{
|
|
74
74
|
(def %1 ...)
|
|
75
|
-
(
|
|
75
|
+
(any_block (send _ :define_method (sym %1)) ...)
|
|
76
76
|
}
|
|
77
77
|
PATTERN
|
|
78
78
|
|
|
@@ -89,7 +89,7 @@ module RuboCop
|
|
|
89
89
|
private
|
|
90
90
|
|
|
91
91
|
def inspect_def(node, def_node)
|
|
92
|
-
return if allowed_arguments(def_node.arguments)
|
|
92
|
+
return if allowed_arguments?(def_node.arguments)
|
|
93
93
|
|
|
94
94
|
add_offense(node.loc.selector, message: format(MSG, method_name: def_node.method_name))
|
|
95
95
|
end
|
|
@@ -101,21 +101,21 @@ module RuboCop
|
|
|
101
101
|
definition = find_method_definition(node, method_name)
|
|
102
102
|
|
|
103
103
|
return unless definition
|
|
104
|
-
return if allowed_arguments(definition.arguments)
|
|
104
|
+
return if allowed_arguments?(definition.arguments)
|
|
105
105
|
|
|
106
106
|
add_offense(node, message: format(MSG, method_name: method_name))
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
def find_method_definition(node, method_name)
|
|
110
110
|
node.each_ancestor.lazy.map do |ancestor|
|
|
111
|
-
ancestor.each_child_node(:def, :
|
|
111
|
+
ancestor.each_child_node(:def, :any_block).find do |child|
|
|
112
112
|
method_definition(child, method_name)
|
|
113
113
|
end
|
|
114
114
|
end.find(&:itself)
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
# `ruby2_keywords` is only allowed if there's a `restarg` and no keyword arguments
|
|
118
|
-
def allowed_arguments(arguments)
|
|
118
|
+
def allowed_arguments?(arguments)
|
|
119
119
|
return false if arguments.empty?
|
|
120
120
|
|
|
121
121
|
arguments.each_child_node(:restarg).any? &&
|
|
@@ -17,16 +17,12 @@ module RuboCop
|
|
|
17
17
|
# @example
|
|
18
18
|
#
|
|
19
19
|
# # bad
|
|
20
|
-
#
|
|
21
20
|
# def something
|
|
22
21
|
# x = Something.new
|
|
23
22
|
# x.attr = 5
|
|
24
23
|
# end
|
|
25
24
|
#
|
|
26
|
-
# @example
|
|
27
|
-
#
|
|
28
25
|
# # good
|
|
29
|
-
#
|
|
30
26
|
# def something
|
|
31
27
|
# x = Something.new
|
|
32
28
|
# x.attr = 5
|
|
@@ -106,24 +102,18 @@ module RuboCop
|
|
|
106
102
|
when :op_asgn
|
|
107
103
|
process_binary_operator_assignment(node)
|
|
108
104
|
when *ASSIGNMENT_TYPES
|
|
109
|
-
|
|
110
|
-
process_assignment(node, rhs_node) if rhs_node
|
|
105
|
+
process_assignment(node, node.rhs) if node.rhs
|
|
111
106
|
end
|
|
112
107
|
end
|
|
113
108
|
|
|
114
109
|
def process_multiple_assignment(masgn_node)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
mlhs_node.children.each_with_index do |lhs_node, index|
|
|
110
|
+
masgn_node.assignments.each_with_index do |lhs_node, index|
|
|
118
111
|
next unless ASSIGNMENT_TYPES.include?(lhs_node.type)
|
|
119
112
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if mrhs_node.array_type? && rhs_node
|
|
124
|
-
process_assignment(lhs_variable_name, rhs_node)
|
|
113
|
+
if masgn_node.rhs.array_type? && (rhs_node = masgn_node.rhs.children[index])
|
|
114
|
+
process_assignment(lhs_node, rhs_node)
|
|
125
115
|
else
|
|
126
|
-
@local[
|
|
116
|
+
@local[lhs_node.name] = true
|
|
127
117
|
end
|
|
128
118
|
end
|
|
129
119
|
|
|
@@ -131,33 +121,28 @@ module RuboCop
|
|
|
131
121
|
end
|
|
132
122
|
|
|
133
123
|
def process_logical_operator_assignment(asgn_node)
|
|
134
|
-
|
|
135
|
-
return unless ASSIGNMENT_TYPES.include?(lhs_node.type)
|
|
124
|
+
return unless ASSIGNMENT_TYPES.include?(asgn_node.lhs.type)
|
|
136
125
|
|
|
137
|
-
process_assignment(
|
|
126
|
+
process_assignment(asgn_node.lhs, asgn_node.rhs)
|
|
138
127
|
|
|
139
128
|
throw :skip_children
|
|
140
129
|
end
|
|
141
130
|
|
|
142
131
|
def process_binary_operator_assignment(op_asgn_node)
|
|
143
|
-
lhs_node
|
|
132
|
+
lhs_node = op_asgn_node.lhs
|
|
144
133
|
return unless ASSIGNMENT_TYPES.include?(lhs_node.type)
|
|
145
134
|
|
|
146
|
-
|
|
147
|
-
@local[lhs_variable_name] = true
|
|
135
|
+
@local[lhs_node.name] = true
|
|
148
136
|
|
|
149
137
|
throw :skip_children
|
|
150
138
|
end
|
|
151
139
|
|
|
152
140
|
def process_assignment(asgn_node, rhs_node)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
else
|
|
159
|
-
constructor?(rhs_node)
|
|
160
|
-
end
|
|
141
|
+
@local[asgn_node.name] = if rhs_node.variable?
|
|
142
|
+
@local[rhs_node.name]
|
|
143
|
+
else
|
|
144
|
+
constructor?(rhs_node)
|
|
145
|
+
end
|
|
161
146
|
end
|
|
162
147
|
|
|
163
148
|
def constructor?(node)
|
|
@@ -4,7 +4,7 @@ module RuboCop
|
|
|
4
4
|
module Cop
|
|
5
5
|
module Lint
|
|
6
6
|
# Checks for uses of `Integer#times` that will never yield
|
|
7
|
-
# (when the integer
|
|
7
|
+
# (when the integer ``<= 0``) or that will only ever yield once
|
|
8
8
|
# (`1.times`).
|
|
9
9
|
#
|
|
10
10
|
# @safety
|
|
@@ -64,7 +64,7 @@ module RuboCop
|
|
|
64
64
|
remove_node(corrector, node)
|
|
65
65
|
elsif !proc_name.empty?
|
|
66
66
|
autocorrect_block_pass(corrector, node, proc_name)
|
|
67
|
-
|
|
67
|
+
elsif node.block_type?
|
|
68
68
|
autocorrect_block(corrector, node)
|
|
69
69
|
end
|
|
70
70
|
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Lint
|
|
6
|
+
module Utils
|
|
7
|
+
# Utility class that checks if the receiver can't be nil.
|
|
8
|
+
class NilReceiverChecker
|
|
9
|
+
NIL_METHODS = (nil.methods + %i[!]).to_set.freeze
|
|
10
|
+
|
|
11
|
+
def initialize(receiver, additional_nil_methods)
|
|
12
|
+
@receiver = receiver
|
|
13
|
+
@additional_nil_methods = additional_nil_methods
|
|
14
|
+
@checked_nodes = {}.compare_by_identity
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def cant_be_nil?
|
|
18
|
+
sole_condition_of_parent_if?(@receiver) || _cant_be_nil?(@receiver.parent, @receiver)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
# rubocop:disable Metrics
|
|
24
|
+
def _cant_be_nil?(node, receiver)
|
|
25
|
+
return false unless node
|
|
26
|
+
|
|
27
|
+
# For some nodes, we check their parent and then some children for these parents.
|
|
28
|
+
# This is added to avoid infinite loops.
|
|
29
|
+
return false if @checked_nodes.key?(node)
|
|
30
|
+
|
|
31
|
+
@checked_nodes[node] = true
|
|
32
|
+
|
|
33
|
+
case node.type
|
|
34
|
+
when :def, :class, :module, :sclass
|
|
35
|
+
return false
|
|
36
|
+
when :send
|
|
37
|
+
return non_nil_method?(node.method_name) if node.receiver == receiver
|
|
38
|
+
|
|
39
|
+
node.arguments.each do |argument|
|
|
40
|
+
return true if _cant_be_nil?(argument, receiver)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
return true if _cant_be_nil?(node.receiver, receiver)
|
|
44
|
+
when :begin
|
|
45
|
+
return true if _cant_be_nil?(node.children.first, receiver)
|
|
46
|
+
when :if, :case
|
|
47
|
+
return true if _cant_be_nil?(node.condition, receiver)
|
|
48
|
+
when :and, :or
|
|
49
|
+
return true if _cant_be_nil?(node.lhs, receiver)
|
|
50
|
+
when :pair
|
|
51
|
+
if _cant_be_nil?(node.key, receiver) ||
|
|
52
|
+
_cant_be_nil?(node.value, receiver)
|
|
53
|
+
return true
|
|
54
|
+
end
|
|
55
|
+
when :when
|
|
56
|
+
node.each_condition do |condition|
|
|
57
|
+
return true if _cant_be_nil?(condition, receiver)
|
|
58
|
+
end
|
|
59
|
+
when :lvasgn, :ivasgn, :cvasgn, :gvasgn, :casgn
|
|
60
|
+
return true if _cant_be_nil?(node.expression, receiver)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Due to how `if/else` are implemented (`elsif` is a child of `if` or another `elsif`),
|
|
64
|
+
# using left_siblings will not work correctly for them.
|
|
65
|
+
if !else_branch?(node) || (node.if_type? && !node.elsif?)
|
|
66
|
+
node.left_siblings.reverse_each do |sibling|
|
|
67
|
+
next unless sibling.is_a?(AST::Node)
|
|
68
|
+
|
|
69
|
+
return true if _cant_be_nil?(sibling, receiver)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if node.parent
|
|
74
|
+
_cant_be_nil?(node.parent, receiver)
|
|
75
|
+
else
|
|
76
|
+
false
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
# rubocop:enable Metrics
|
|
80
|
+
|
|
81
|
+
def non_nil_method?(method_name)
|
|
82
|
+
!NIL_METHODS.include?(method_name) && !@additional_nil_methods.include?(method_name)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
86
|
+
def sole_condition_of_parent_if?(node)
|
|
87
|
+
parent = node.parent
|
|
88
|
+
|
|
89
|
+
while parent
|
|
90
|
+
if parent.if_type?
|
|
91
|
+
if parent.condition == node
|
|
92
|
+
return true
|
|
93
|
+
elsif parent.elsif?
|
|
94
|
+
parent = find_top_if(parent)
|
|
95
|
+
end
|
|
96
|
+
elsif else_branch?(parent)
|
|
97
|
+
# Find the top `if` for `else`.
|
|
98
|
+
parent = parent.parent
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
parent = parent&.parent
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
false
|
|
105
|
+
end
|
|
106
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
|
107
|
+
|
|
108
|
+
def else_branch?(node)
|
|
109
|
+
node.parent&.if_type? && node.parent.else_branch == node
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def find_top_if(node)
|
|
113
|
+
node = node.parent while node.elsif?
|
|
114
|
+
|
|
115
|
+
node
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -6,6 +6,22 @@ module RuboCop
|
|
|
6
6
|
# Checks for operators, variables, literals, lambda, proc and nonmutating
|
|
7
7
|
# methods used in void context.
|
|
8
8
|
#
|
|
9
|
+
# `each` blocks are allowed to prevent false positives.
|
|
10
|
+
# For example, the expression inside the `each` block below.
|
|
11
|
+
# It's not void, especially when the receiver is an `Enumerator`:
|
|
12
|
+
#
|
|
13
|
+
# [source,ruby]
|
|
14
|
+
# ----
|
|
15
|
+
# enumerator = [1, 2, 3].filter
|
|
16
|
+
# enumerator.each { |item| item >= 2 } #=> [2, 3]
|
|
17
|
+
# ----
|
|
18
|
+
#
|
|
19
|
+
# NOTE: Return values in assignment method definitions such as `def foo=(arg)` are
|
|
20
|
+
# detected because they are in a void context. However, autocorrection does not remove
|
|
21
|
+
# the return value, as that would change behavior. In such cases, whether to remove
|
|
22
|
+
# the return value or rename the method to something more appropriate should be left to
|
|
23
|
+
# the user.
|
|
24
|
+
#
|
|
9
25
|
# @example CheckForMethodsWithNoSideEffects: false (default)
|
|
10
26
|
# # bad
|
|
11
27
|
# def some_method
|
|
@@ -47,6 +63,7 @@ module RuboCop
|
|
|
47
63
|
|
|
48
64
|
OP_MSG = 'Operator `%<op>s` used in void context.'
|
|
49
65
|
VAR_MSG = 'Variable `%<var>s` used in void context.'
|
|
66
|
+
CONST_MSG = 'Constant `%<var>s` used in void context.'
|
|
50
67
|
LIT_MSG = 'Literal `%<lit>s` used in void context.'
|
|
51
68
|
SELF_MSG = '`self` used in void context.'
|
|
52
69
|
EXPRESSION_MSG = '`%<expression>s` used in void context.'
|
|
@@ -55,7 +72,6 @@ module RuboCop
|
|
|
55
72
|
BINARY_OPERATORS = %i[* / % + - == === != < > <= >= <=>].freeze
|
|
56
73
|
UNARY_OPERATORS = %i[+@ -@ ~ !].freeze
|
|
57
74
|
OPERATORS = (BINARY_OPERATORS + UNARY_OPERATORS).freeze
|
|
58
|
-
VOID_CONTEXT_TYPES = %i[def for block].freeze
|
|
59
75
|
NONMUTATING_METHODS_WITH_BANG_VERSION = %i[capitalize chomp chop compact
|
|
60
76
|
delete_prefix delete_suffix downcase
|
|
61
77
|
encode flatten gsub lstrip merge next
|
|
@@ -72,26 +88,41 @@ module RuboCop
|
|
|
72
88
|
return unless node.body && !node.body.begin_type?
|
|
73
89
|
return unless in_void_context?(node.body)
|
|
74
90
|
|
|
91
|
+
check_void_op(node.body) { node.method?(:each) }
|
|
75
92
|
check_expression(node.body)
|
|
76
93
|
end
|
|
77
|
-
|
|
78
94
|
alias on_numblock on_block
|
|
95
|
+
alias on_itblock on_block
|
|
79
96
|
|
|
80
97
|
def on_begin(node)
|
|
81
98
|
check_begin(node)
|
|
82
99
|
end
|
|
83
100
|
alias on_kwbegin on_begin
|
|
84
101
|
|
|
102
|
+
def on_ensure(node)
|
|
103
|
+
check_ensure(node)
|
|
104
|
+
end
|
|
105
|
+
|
|
85
106
|
private
|
|
86
107
|
|
|
87
108
|
def check_begin(node)
|
|
88
109
|
expressions = *node
|
|
89
110
|
expressions.pop unless in_void_context?(node)
|
|
90
|
-
expressions.each
|
|
111
|
+
expressions.each do |expr|
|
|
112
|
+
check_void_op(expr) do
|
|
113
|
+
block_node = node.each_ancestor(:any_block).first
|
|
114
|
+
|
|
115
|
+
block_node&.method?(:each)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
check_expression(expr)
|
|
119
|
+
end
|
|
91
120
|
end
|
|
92
121
|
|
|
93
122
|
def check_expression(expr)
|
|
94
|
-
|
|
123
|
+
expr = expr.body if expr.if_type?
|
|
124
|
+
return unless expr
|
|
125
|
+
|
|
95
126
|
check_literal(expr)
|
|
96
127
|
check_var(expr)
|
|
97
128
|
check_self(expr)
|
|
@@ -101,32 +132,43 @@ module RuboCop
|
|
|
101
132
|
check_nonmutating(expr)
|
|
102
133
|
end
|
|
103
134
|
|
|
104
|
-
|
|
105
|
-
|
|
135
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
136
|
+
def check_void_op(node, &block)
|
|
137
|
+
node = node.children.first while node&.begin_type?
|
|
138
|
+
return unless node&.call_type? && OPERATORS.include?(node.method_name)
|
|
139
|
+
if !UNARY_OPERATORS.include?(node.method_name) && node.loc.dot && node.arguments.none?
|
|
140
|
+
return
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
return if block && yield(node)
|
|
106
144
|
|
|
107
145
|
add_offense(node.loc.selector,
|
|
108
146
|
message: format(OP_MSG, op: node.method_name)) do |corrector|
|
|
109
147
|
autocorrect_void_op(corrector, node)
|
|
110
148
|
end
|
|
111
149
|
end
|
|
150
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
112
151
|
|
|
113
152
|
def check_var(node)
|
|
114
153
|
return unless node.variable? || node.const_type?
|
|
115
154
|
|
|
116
|
-
if node.const_type?
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
155
|
+
if node.const_type?
|
|
156
|
+
template = node.special_keyword? ? VAR_MSG : CONST_MSG
|
|
157
|
+
|
|
158
|
+
offense_range = node
|
|
159
|
+
message = format(template, var: node.source)
|
|
120
160
|
else
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
161
|
+
offense_range = node.loc.name
|
|
162
|
+
message = format(VAR_MSG, var: node.loc.name.source)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
add_offense(offense_range, message: message) do |corrector|
|
|
166
|
+
autocorrect_void_expression(corrector, node)
|
|
125
167
|
end
|
|
126
168
|
end
|
|
127
169
|
|
|
128
170
|
def check_literal(node)
|
|
129
|
-
return if !node
|
|
171
|
+
return if !entirely_literal?(node) || node.xstr_type? || node.range_type?
|
|
130
172
|
|
|
131
173
|
add_offense(node, message: format(LIT_MSG, lit: node.source)) do |corrector|
|
|
132
174
|
autocorrect_void_expression(corrector, node)
|
|
@@ -150,7 +192,7 @@ module RuboCop
|
|
|
150
192
|
end
|
|
151
193
|
|
|
152
194
|
def check_nonmutating(node)
|
|
153
|
-
return
|
|
195
|
+
return unless node.type?(:send, :any_block)
|
|
154
196
|
|
|
155
197
|
method_name = node.method_name
|
|
156
198
|
return unless NONMUTATING_METHODS.include?(method_name)
|
|
@@ -167,18 +209,26 @@ module RuboCop
|
|
|
167
209
|
end
|
|
168
210
|
end
|
|
169
211
|
|
|
212
|
+
def check_ensure(node)
|
|
213
|
+
return unless (body = node.branch)
|
|
214
|
+
# NOTE: the `begin` node case is already handled via `on_begin`
|
|
215
|
+
return if body.begin_type?
|
|
216
|
+
|
|
217
|
+
check_expression(body)
|
|
218
|
+
end
|
|
219
|
+
|
|
170
220
|
def in_void_context?(node)
|
|
171
221
|
parent = node.parent
|
|
172
|
-
|
|
173
222
|
return false unless parent && parent.children.last == node
|
|
174
223
|
|
|
175
|
-
|
|
224
|
+
parent.respond_to?(:void_context?) && parent.void_context?
|
|
176
225
|
end
|
|
177
226
|
|
|
178
227
|
def autocorrect_void_op(corrector, node)
|
|
179
228
|
if node.arguments.empty?
|
|
180
229
|
corrector.replace(node, node.receiver.source)
|
|
181
230
|
else
|
|
231
|
+
corrector.remove(node.loc.dot) if node.loc.dot
|
|
182
232
|
corrector.replace(
|
|
183
233
|
range_with_surrounding_space(range: node.loc.selector, side: :both,
|
|
184
234
|
newlines: false),
|
|
@@ -188,6 +238,9 @@ module RuboCop
|
|
|
188
238
|
end
|
|
189
239
|
|
|
190
240
|
def autocorrect_void_expression(corrector, node)
|
|
241
|
+
return if node.parent.if_type?
|
|
242
|
+
return if (def_node = node.each_ancestor(:any_def).first) && def_node.assignment_method?
|
|
243
|
+
|
|
191
244
|
corrector.remove(range_with_surrounding_space(range: node.source_range, side: :left))
|
|
192
245
|
end
|
|
193
246
|
|
|
@@ -199,6 +252,27 @@ module RuboCop
|
|
|
199
252
|
end
|
|
200
253
|
corrector.replace(send_node.loc.selector, suggestion)
|
|
201
254
|
end
|
|
255
|
+
|
|
256
|
+
def entirely_literal?(node)
|
|
257
|
+
case node.type
|
|
258
|
+
when :array
|
|
259
|
+
all_values_entirely_literal?(node)
|
|
260
|
+
when :hash
|
|
261
|
+
all_keys_entirely_literal?(node) && all_values_entirely_literal?(node)
|
|
262
|
+
when :send, :csend
|
|
263
|
+
node.method?(:freeze) && node.receiver && entirely_literal?(node.receiver)
|
|
264
|
+
else
|
|
265
|
+
node.literal?
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def all_keys_entirely_literal?(node)
|
|
270
|
+
node.each_key.all? { |key| entirely_literal?(key) }
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def all_values_entirely_literal?(node)
|
|
274
|
+
node.each_value.all? { |value| entirely_literal?(value) }
|
|
275
|
+
end
|
|
202
276
|
end
|
|
203
277
|
end
|
|
204
278
|
end
|
|
@@ -32,7 +32,7 @@ module RuboCop
|
|
|
32
32
|
# @param [String] cop_name for specific cop name
|
|
33
33
|
# @param [Hash] cop_config configs for specific cop, from config#for_cop
|
|
34
34
|
# @option cop_config [String] :StyleGuide Extension of base styleguide URL
|
|
35
|
-
# @option cop_config [String] :
|
|
35
|
+
# @option cop_config [String] :References Full reference URLs
|
|
36
36
|
# @option cop_config [String] :Details
|
|
37
37
|
#
|
|
38
38
|
# @param [Hash, nil] options optional
|
|
@@ -100,8 +100,12 @@ module RuboCop
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
def reference_urls
|
|
103
|
-
urls =
|
|
104
|
-
|
|
103
|
+
urls = cop_config
|
|
104
|
+
.values_at('References', 'Reference') # Support legacy Reference key
|
|
105
|
+
.flat_map { |url| Array(url) }
|
|
106
|
+
.reject(&:empty?)
|
|
107
|
+
|
|
108
|
+
urls unless urls.empty?
|
|
105
109
|
end
|
|
106
110
|
|
|
107
111
|
def extra_details?
|
|
@@ -10,9 +10,9 @@ module RuboCop
|
|
|
10
10
|
#
|
|
11
11
|
# Interpreting ABC size:
|
|
12
12
|
#
|
|
13
|
-
# *
|
|
14
|
-
# * 18..30 unsatisfactory
|
|
15
|
-
# *
|
|
13
|
+
# * ``<= 17`` satisfactory
|
|
14
|
+
# * `18..30` unsatisfactory
|
|
15
|
+
# * `>` 30 dangerous
|
|
16
16
|
#
|
|
17
17
|
# You can have repeated "attributes" calls count as a single "branch".
|
|
18
18
|
# For this purpose, attributes are any method with no argument; no attempt
|
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
|
39
39
|
class AbcSize < Base
|
|
40
40
|
include MethodComplexity
|
|
41
41
|
|
|
42
|
-
MSG = 'Assignment Branch Condition size for
|
|
42
|
+
MSG = 'Assignment Branch Condition size for `%<method>s` is too high. ' \
|
|
43
43
|
'[%<abc_vector>s %<complexity>.4g/%<max>.4g]'
|
|
44
44
|
|
|
45
45
|
private
|
|
@@ -9,8 +9,9 @@ module RuboCop
|
|
|
9
9
|
# The cop can be configured to ignore blocks passed to certain methods.
|
|
10
10
|
#
|
|
11
11
|
# You can set constructs you want to fold with `CountAsOne`.
|
|
12
|
-
#
|
|
13
|
-
#
|
|
12
|
+
#
|
|
13
|
+
# Available are: 'array', 'hash', 'heredoc', and 'method_call'.
|
|
14
|
+
# Each construct will be counted as one line regardless of its actual size.
|
|
14
15
|
#
|
|
15
16
|
# NOTE: This cop does not apply for `Struct` definitions.
|
|
16
17
|
#
|
|
@@ -18,7 +19,7 @@ module RuboCop
|
|
|
18
19
|
# for backwards compatibility. Please use `AllowedMethods` and `AllowedPatterns`
|
|
19
20
|
# instead. By default, there are no methods to allowed.
|
|
20
21
|
#
|
|
21
|
-
# @example CountAsOne: ['array', 'heredoc', 'method_call']
|
|
22
|
+
# @example CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
|
|
22
23
|
#
|
|
23
24
|
# something do
|
|
24
25
|
# array = [ # +1
|
|
@@ -26,7 +27,7 @@ module RuboCop
|
|
|
26
27
|
# 2
|
|
27
28
|
# ]
|
|
28
29
|
#
|
|
29
|
-
# hash = { # +
|
|
30
|
+
# hash = { # +1
|
|
30
31
|
# key: 'value'
|
|
31
32
|
# }
|
|
32
33
|
#
|
|
@@ -39,7 +40,7 @@ module RuboCop
|
|
|
39
40
|
# 1,
|
|
40
41
|
# 2
|
|
41
42
|
# )
|
|
42
|
-
# end #
|
|
43
|
+
# end # 4 points
|
|
43
44
|
#
|
|
44
45
|
class BlockLength < Base
|
|
45
46
|
include CodeLength
|
|
@@ -56,6 +57,7 @@ module RuboCop
|
|
|
56
57
|
check_code_length(node)
|
|
57
58
|
end
|
|
58
59
|
alias on_numblock on_block
|
|
60
|
+
alias on_itblock on_block
|
|
59
61
|
|
|
60
62
|
private
|
|
61
63
|
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Metrics
|
|
6
|
-
# Checks for excessive nesting of conditional and looping
|
|
7
|
-
# constructs.
|
|
6
|
+
# Checks for excessive nesting of conditional and looping constructs.
|
|
8
7
|
#
|
|
9
|
-
# You can configure if blocks are considered using the `CountBlocks`
|
|
10
|
-
#
|
|
11
|
-
# towards the nesting level. Set to `true` to
|
|
8
|
+
# You can configure if blocks are considered using the `CountBlocks` and `CountModifierForms`
|
|
9
|
+
# options. When both are set to `false` (the default) blocks and modifier forms are not
|
|
10
|
+
# counted towards the nesting level. Set them to `true` to include these in the nesting level
|
|
11
|
+
# calculation as well.
|
|
12
12
|
#
|
|
13
13
|
# The maximum level of nesting allowed is configurable.
|
|
14
14
|
class BlockNesting < Base
|
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
|
27
27
|
|
|
28
28
|
def check_nesting_level(node, max, current_level)
|
|
29
29
|
if consider_node?(node)
|
|
30
|
-
current_level += 1
|
|
30
|
+
current_level += 1 if count_if_block?(node)
|
|
31
31
|
if current_level > max
|
|
32
32
|
self.max = current_level
|
|
33
33
|
unless part_of_ignored_node?(node)
|
|
@@ -41,10 +41,18 @@ module RuboCop
|
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
def count_if_block?(node)
|
|
45
|
+
return true unless node.if_type?
|
|
46
|
+
return false if node.elsif?
|
|
47
|
+
return count_modifier_forms? if node.modifier_form?
|
|
48
|
+
|
|
49
|
+
true
|
|
50
|
+
end
|
|
51
|
+
|
|
44
52
|
def consider_node?(node)
|
|
45
53
|
return true if NESTING_BLOCKS.include?(node.type)
|
|
46
54
|
|
|
47
|
-
count_blocks? &&
|
|
55
|
+
count_blocks? && node.any_block_type?
|
|
48
56
|
end
|
|
49
57
|
|
|
50
58
|
def message(max)
|
|
@@ -52,7 +60,11 @@ module RuboCop
|
|
|
52
60
|
end
|
|
53
61
|
|
|
54
62
|
def count_blocks?
|
|
55
|
-
cop_config
|
|
63
|
+
cop_config.fetch('CountBlocks', false)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def count_modifier_forms?
|
|
67
|
+
cop_config.fetch('CountModifierForms', false)
|
|
56
68
|
end
|
|
57
69
|
end
|
|
58
70
|
end
|