rubocop 1.67.0 → 1.82.1
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 +23 -19
- data/config/default.yml +403 -75
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +12 -3
- data/exe/rubocop +1 -8
- data/lib/rubocop/cached_data.rb +12 -4
- data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
- data/lib/rubocop/cli/command/execute_runner.rb +4 -4
- data/lib/rubocop/cli/command/show_cops.rb +24 -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 +21 -5
- data/lib/rubocop/comment_config.rb +64 -19
- data/lib/rubocop/config.rb +52 -10
- data/lib/rubocop/config_loader.rb +58 -49
- data/lib/rubocop/config_loader_resolver.rb +43 -16
- 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 +46 -2
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/config_validator.rb +25 -14
- data/lib/rubocop/cop/autocorrect_logic.rb +57 -28
- data/lib/rubocop/cop/base.rb +7 -1
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -3
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +9 -19
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +37 -15
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -3
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +10 -5
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +142 -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/node_first_or_last_argument.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +5 -5
- 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_source_range.rb +3 -1
- 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 +13 -2
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +7 -16
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -9
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- 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/def_end_alignment.rb +1 -1
- 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_line_after_guard_clause.rb +6 -3
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +34 -20
- 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 +4 -5
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +5 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -9
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
- 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_parameter_indentation.rb +2 -2
- 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 +1 -4
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +20 -8
- data/lib/rubocop/cop/layout/leading_comment_space.rb +57 -2
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +11 -2
- 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 +163 -11
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +3 -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 +9 -5
- 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 +19 -46
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +16 -7
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +3 -11
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +12 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +9 -3
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +31 -21
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
- 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 +7 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +51 -4
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
- 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 +3 -5
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +7 -3
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +5 -5
- data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -23
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +6 -43
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
- data/lib/rubocop/cop/lint/else_layout.rb +19 -0
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +14 -64
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- 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 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +0 -6
- data/lib/rubocop/cop/lint/float_comparison.rb +51 -18
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -4
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- 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 +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +129 -10
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +25 -7
- 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 +5 -8
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -6
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +6 -2
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +12 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
- 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 +1 -5
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +23 -9
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -23
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +113 -9
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -8
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +3 -0
- 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_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +2 -5
- data/lib/rubocop/cop/lint/rescue_type.rb +4 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -1
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +5 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +47 -15
- data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -1
- 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 +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +4 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.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/unmodified_reduce_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +54 -2
- data/lib/rubocop/cop/lint/unreachable_loop.rb +6 -6
- 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/useless_access_modifier.rb +34 -8
- data/lib/rubocop/cop/lint/useless_assignment.rb +47 -17
- 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 -0
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +3 -1
- data/lib/rubocop/cop/lint/useless_or.rb +111 -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 -25
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +23 -12
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +1 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +9 -9
- 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 +9 -1
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +5 -4
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +3 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +3 -3
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
- 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 +47 -0
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +8 -3
- 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 +4 -3
- 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 +22 -22
- 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 +48 -12
- data/lib/rubocop/cop/mixin/method_complexity.rb +3 -2
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +8 -10
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
- data/lib/rubocop/cop/mixin/ordered_gem_node.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/space_after_punctuation.rb +5 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -8
- data/lib/rubocop/cop/mixin/string_help.rb +2 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +28 -9
- data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +20 -16
- data/lib/rubocop/cop/naming/constant_name.rb +6 -7
- data/lib/rubocop/cop/naming/file_name.rb +2 -4
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +12 -13
- 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_name.rb → predicate_prefix.rb} +48 -4
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +6 -14
- 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 +2 -3
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/compound_hash.rb +2 -0
- 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 +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +114 -34
- data/lib/rubocop/cop/style/accessor_grouping.rb +32 -6
- 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 +57 -44
- data/lib/rubocop/cop/style/array_first_last.rb +18 -2
- 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/bare_percent_literals.rb +1 -2
- data/lib/rubocop/cop/style/bitwise_predicate.rb +107 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +44 -26
- data/lib/rubocop/cop/style/case_equality.rb +11 -13
- data/lib/rubocop/cop/style/case_like_if.rb +9 -12
- data/lib/rubocop/cop/style/class_and_module_children.rb +53 -11
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- 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 +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +20 -3
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +50 -42
- data/lib/rubocop/cop/style/constant_visibility.rb +19 -23
- data/lib/rubocop/cop/style/data_inheritance.rb +7 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -5
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +5 -5
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +4 -7
- data/lib/rubocop/cop/style/each_with_object.rb +2 -3
- data/lib/rubocop/cop/style/empty_else.rb +4 -2
- data/lib/rubocop/cop/style/empty_literal.rb +5 -1
- data/lib/rubocop/cop/style/empty_method.rb +0 -6
- 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 +4 -4
- data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -3
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +17 -4
- 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_touch.rb +75 -0
- data/lib/rubocop/cop/style/float_division.rb +23 -5
- data/lib/rubocop/cop/style/for.rb +1 -1
- 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 +3 -0
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +17 -14
- data/lib/rubocop/cop/style/hash_conversion.rb +16 -9
- data/lib/rubocop/cop/style/hash_each_methods.rb +6 -8
- data/lib/rubocop/cop/style/hash_except.rb +35 -147
- 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 +9 -3
- 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 +25 -6
- data/lib/rubocop/cop/style/if_inside_else.rb +10 -14
- data/lib/rubocop/cop/style/if_unless_modifier.rb +39 -12
- 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 +3 -4
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -9
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +16 -13
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
- 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 +1 -0
- 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/map_into_array.rb +11 -3
- data/lib/rubocop/cop/style/map_to_hash.rb +13 -4
- data/lib/rubocop/cop/style/map_to_set.rb +4 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +28 -20
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +12 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +35 -4
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -11
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/missing_else.rb +2 -0
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
- data/lib/rubocop/cop/style/module_member_existence_check.rb +74 -0
- 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 +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +3 -13
- data/lib/rubocop/cop/style/multiple_comparison.rb +52 -51
- 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_parenthesized_calls.rb +1 -1
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/next.rb +44 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +15 -15
- data/lib/rubocop/cop/style/one_line_conditional.rb +42 -13
- data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
- data/lib/rubocop/cop/style/operator_method_call.rb +16 -8
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +43 -40
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
- 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 +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +15 -13
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +5 -1
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +36 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +95 -23
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +16 -5
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
- data/lib/rubocop/cop/style/redundant_each.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -9
- 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_line_continuation.rb +55 -19
- data/lib/rubocop/cop/style/redundant_parentheses.rb +105 -36
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +13 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -1
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +15 -18
- 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 -10
- data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
- data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +5 -3
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +75 -16
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +5 -2
- data/lib/rubocop/cop/style/self_assignment.rb +11 -17
- data/lib/rubocop/cop/style/semicolon.rb +24 -8
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +15 -4
- data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
- data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +75 -102
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- 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/struct_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/super_arguments.rb +68 -21
- 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 +3 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +25 -4
- 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 +15 -15
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
- data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/util.rb +14 -8
- 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 +30 -19
- data/lib/rubocop/cops_documentation_generator.rb +54 -28
- data/lib/rubocop/directive_comment.rb +88 -11
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +21 -6
- data/lib/rubocop/formatter/formatter_set.rb +1 -1
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/lsp/diagnostic.rb +185 -0
- data/lib/rubocop/lsp/logger.rb +2 -2
- data/lib/rubocop/lsp/routes.rb +37 -24
- data/lib/rubocop/lsp/runtime.rb +18 -50
- data/lib/rubocop/lsp/server.rb +0 -2
- data/lib/rubocop/lsp/stdin_runner.rb +69 -0
- data/lib/rubocop/magic_comment.rb +31 -3
- data/lib/rubocop/options.rb +28 -12
- data/lib/rubocop/path_util.rb +15 -8
- 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 +7 -8
- data/lib/rubocop/result_cache.rb +61 -48
- data/lib/rubocop/rspec/cop_helper.rb +13 -1
- data/lib/rubocop/rspec/expect_offense.rb +15 -5
- data/lib/rubocop/rspec/shared_contexts.rb +38 -1
- data/lib/rubocop/rspec/support.rb +4 -2
- data/lib/rubocop/runner.rb +35 -18
- data/lib/rubocop/server/cache.rb +51 -13
- 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 +2 -1
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/target_finder.rb +14 -9
- data/lib/rubocop/target_ruby.rb +27 -3
- data/lib/rubocop/version.rb +53 -12
- data/lib/rubocop.rb +45 -2
- data/lib/ruby_lsp/rubocop/addon.rb +90 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +92 -21
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
|
47
47
|
# @!method redundant_source_range(node)
|
|
48
48
|
def_node_matcher :redundant_source_range, <<~PATTERN
|
|
49
49
|
{
|
|
50
|
-
(
|
|
50
|
+
(call $(call _ :source_range) :source)
|
|
51
51
|
(send nil? :add_offense $(send _ :source_range) ...)
|
|
52
52
|
(send _ {
|
|
53
53
|
:replace :insert_before :insert_before_multi :insert_after :insert_after_multi
|
|
@@ -59,6 +59,7 @@ module RuboCop
|
|
|
59
59
|
|
|
60
60
|
def on_send(node)
|
|
61
61
|
return unless (source_range = redundant_source_range(node))
|
|
62
|
+
return unless source_range.receiver
|
|
62
63
|
return if source_range.receiver.send_type? && source_range.receiver.method?(:buffer)
|
|
63
64
|
|
|
64
65
|
selector = source_range.loc.selector
|
|
@@ -67,6 +68,7 @@ module RuboCop
|
|
|
67
68
|
corrector.remove(source_range.loc.dot.join(selector))
|
|
68
69
|
end
|
|
69
70
|
end
|
|
71
|
+
alias on_csend on_send
|
|
70
72
|
end
|
|
71
73
|
end
|
|
72
74
|
end
|
|
@@ -34,8 +34,8 @@ module RuboCop
|
|
|
34
34
|
# @!method single_line_comparison(node)
|
|
35
35
|
def_node_matcher :single_line_comparison, <<~PATTERN
|
|
36
36
|
{
|
|
37
|
-
(send (
|
|
38
|
-
(send (
|
|
37
|
+
(send (call $_receiver {:line :first_line}) {:== :!=} (call _receiver :last_line))
|
|
38
|
+
(send (call $_receiver :last_line) {:== :!=} (call _receiver {:line :first_line}))
|
|
39
39
|
}
|
|
40
40
|
PATTERN
|
|
41
41
|
|
|
@@ -43,7 +43,8 @@ module RuboCop
|
|
|
43
43
|
return unless (receiver = single_line_comparison(node))
|
|
44
44
|
|
|
45
45
|
bang = node.method?(:!=) ? '!' : ''
|
|
46
|
-
|
|
46
|
+
dot = receiver.parent.loc.dot.source
|
|
47
|
+
preferred = "#{bang}#{extract_receiver(receiver)}#{dot}single_line?"
|
|
47
48
|
|
|
48
49
|
add_offense(node, message: format(MSG, preferred: preferred)) do |corrector|
|
|
49
50
|
corrector.replace(node, preferred)
|
|
@@ -53,7 +54,7 @@ module RuboCop
|
|
|
53
54
|
private
|
|
54
55
|
|
|
55
56
|
def extract_receiver(node)
|
|
56
|
-
node = node.receiver if node.
|
|
57
|
+
node = node.receiver if node.call_type? && %i[loc source_range].include?(node.method_name)
|
|
57
58
|
node.source
|
|
58
59
|
end
|
|
59
60
|
end
|
|
@@ -10,14 +10,25 @@ module RuboCop
|
|
|
10
10
|
extend FileFinder
|
|
11
11
|
|
|
12
12
|
ALLOWED_CONFIGURATIONS = %w[
|
|
13
|
-
Safe SafeAutoCorrect AutoCorrect
|
|
13
|
+
Safe SafeAutoCorrect AutoCorrect
|
|
14
|
+
Severity
|
|
15
|
+
StyleGuide
|
|
16
|
+
Details
|
|
17
|
+
Reference References
|
|
18
|
+
Include Exclude
|
|
14
19
|
].freeze
|
|
15
20
|
RESTRICT_ON_SEND = %i[[] fetch].freeze
|
|
16
21
|
MSG = '`%<name>s` is not defined in the configuration for `%<cop>s` ' \
|
|
17
22
|
'in `config/default.yml`.'
|
|
18
23
|
CONFIG_PATH = find_file_upwards('config/default.yml', Dir.pwd)
|
|
19
24
|
CONFIG = if CONFIG_PATH
|
|
20
|
-
|
|
25
|
+
begin
|
|
26
|
+
original_debug = ConfigLoader.debug
|
|
27
|
+
ConfigLoader.debug = false
|
|
28
|
+
ConfigLoader.load_yaml_configuration(CONFIG_PATH)
|
|
29
|
+
ensure
|
|
30
|
+
ConfigLoader.debug = original_debug
|
|
31
|
+
end
|
|
21
32
|
else
|
|
22
33
|
{}
|
|
23
34
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative 'internal_affairs/cop_description'
|
|
4
|
+
require_relative 'internal_affairs/cop_enabled'
|
|
4
5
|
require_relative 'internal_affairs/create_empty_file'
|
|
5
6
|
require_relative 'internal_affairs/empty_line_between_expect_offense_and_correction'
|
|
6
7
|
require_relative 'internal_affairs/example_description'
|
|
7
8
|
require_relative 'internal_affairs/example_heredoc_delimiter'
|
|
8
9
|
require_relative 'internal_affairs/inherit_deprecated_cop_class'
|
|
9
10
|
require_relative 'internal_affairs/lambda_or_proc'
|
|
11
|
+
require_relative 'internal_affairs/location_exists'
|
|
10
12
|
require_relative 'internal_affairs/location_expression'
|
|
11
13
|
require_relative 'internal_affairs/location_line_equality_comparison'
|
|
12
14
|
require_relative 'internal_affairs/method_name_end_with'
|
|
@@ -14,9 +16,14 @@ require_relative 'internal_affairs/method_name_equal'
|
|
|
14
16
|
require_relative 'internal_affairs/node_destructuring'
|
|
15
17
|
require_relative 'internal_affairs/node_first_or_last_argument'
|
|
16
18
|
require_relative 'internal_affairs/node_matcher_directive'
|
|
19
|
+
require_relative 'internal_affairs/node_pattern_groups'
|
|
20
|
+
require_relative 'internal_affairs/node_type_group'
|
|
21
|
+
require_relative 'internal_affairs/node_type_multiple_predicates'
|
|
17
22
|
require_relative 'internal_affairs/node_type_predicate'
|
|
18
23
|
require_relative 'internal_affairs/numblock_handler'
|
|
19
24
|
require_relative 'internal_affairs/offense_location_keyword'
|
|
25
|
+
require_relative 'internal_affairs/on_send_without_on_csend'
|
|
26
|
+
require_relative 'internal_affairs/operator_keyword'
|
|
20
27
|
require_relative 'internal_affairs/processed_source_buffer_name'
|
|
21
28
|
require_relative 'internal_affairs/redundant_context_config_parameter'
|
|
22
29
|
require_relative 'internal_affairs/redundant_described_class_as_subject'
|
|
@@ -31,19 +38,3 @@ require_relative 'internal_affairs/style_detected_api_use'
|
|
|
31
38
|
require_relative 'internal_affairs/undefined_config'
|
|
32
39
|
require_relative 'internal_affairs/useless_message_assertion'
|
|
33
40
|
require_relative 'internal_affairs/useless_restrict_on_send'
|
|
34
|
-
|
|
35
|
-
module RuboCop
|
|
36
|
-
# Patch in the InternalAffairs specific config values
|
|
37
|
-
module InternalAffairs
|
|
38
|
-
def self.inject!
|
|
39
|
-
path = File.join(ConfigLoader::RUBOCOP_HOME, 'config', 'internal_affairs.yml')
|
|
40
|
-
hash = ConfigLoader.load_yaml_configuration(path)
|
|
41
|
-
config = Config.new(hash, path)
|
|
42
|
-
puts "configuration from #{path}" if ConfigLoader.debug?
|
|
43
|
-
config = ConfigLoader.merge_with_default(config, path)
|
|
44
|
-
ConfigLoader.instance_variable_set(:@default_configuration, config)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
RuboCop::InternalAffairs.inject!
|
|
@@ -4,7 +4,7 @@ module RuboCop
|
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
6
|
# Bare access modifiers (those not applying to specific methods) should be
|
|
7
|
-
# indented as deep as method definitions, or as deep as the class
|
|
7
|
+
# indented as deep as method definitions, or as deep as the `class`/`module`
|
|
8
8
|
# keyword, depending on configuration.
|
|
9
9
|
#
|
|
10
10
|
# @example EnforcedStyle: indent (default)
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
#
|
|
7
|
-
# definition are aligned.
|
|
6
|
+
# Check that the arguments on a multi-line method call are aligned.
|
|
8
7
|
#
|
|
9
8
|
# @example EnforcedStyle: with_first_argument (default)
|
|
10
9
|
# # good
|
|
@@ -142,16 +141,10 @@ module RuboCop
|
|
|
142
141
|
end
|
|
143
142
|
|
|
144
143
|
def enforce_hash_argument_with_separator?
|
|
145
|
-
return false unless hash_argument_config['Enabled']
|
|
146
|
-
|
|
147
144
|
RuboCop::Cop::Layout::HashAlignment::SEPARATOR_ALIGNMENT_STYLES.any? do |style|
|
|
148
|
-
|
|
145
|
+
config.for_enabled_cop('Layout/HashAlignment')[style]&.include?('separator')
|
|
149
146
|
end
|
|
150
147
|
end
|
|
151
|
-
|
|
152
|
-
def hash_argument_config
|
|
153
|
-
config.for_cop('Layout/HashAlignment')
|
|
154
|
-
end
|
|
155
148
|
end
|
|
156
149
|
end
|
|
157
150
|
end
|
|
@@ -73,6 +73,7 @@ module RuboCop
|
|
|
73
73
|
# @!method block_end_align_target?(node, child)
|
|
74
74
|
def_node_matcher :block_end_align_target?, <<~PATTERN
|
|
75
75
|
{assignment?
|
|
76
|
+
any_def
|
|
76
77
|
splat
|
|
77
78
|
and
|
|
78
79
|
or
|
|
@@ -85,6 +86,7 @@ module RuboCop
|
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
alias on_numblock on_block
|
|
89
|
+
alias on_itblock on_block
|
|
88
90
|
|
|
89
91
|
def style_parameter_name
|
|
90
92
|
'EnforcedStyleAlignWith'
|
|
@@ -127,7 +129,6 @@ module RuboCop
|
|
|
127
129
|
start_loc,
|
|
128
130
|
end_loc,
|
|
129
131
|
do_source_line_column)
|
|
130
|
-
|
|
131
132
|
error_source_line_column = if style == :start_of_block
|
|
132
133
|
do_source_line_column
|
|
133
134
|
else
|
|
@@ -189,7 +190,7 @@ module RuboCop
|
|
|
189
190
|
# In offense message, we want to show the assignment LHS rather than
|
|
190
191
|
# the entire assignment.
|
|
191
192
|
def find_lhs_node(node)
|
|
192
|
-
node
|
|
193
|
+
node = node.lhs while node.type?(:op_asgn, :masgn)
|
|
193
194
|
node
|
|
194
195
|
end
|
|
195
196
|
|
|
@@ -3,25 +3,30 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# Checks if the code style follows the ExpectedOrder configuration:
|
|
6
|
+
# Checks if the code style follows the `ExpectedOrder` configuration:
|
|
7
7
|
#
|
|
8
8
|
# `Categories` allows us to map macro names into a category.
|
|
9
9
|
#
|
|
10
10
|
# Consider an example of code style that covers the following order:
|
|
11
11
|
#
|
|
12
|
-
# * Module inclusion (include
|
|
12
|
+
# * Module inclusion (`include`, `prepend`, `extend`)
|
|
13
13
|
# * Constants
|
|
14
|
-
# * Associations (has_one
|
|
15
|
-
# * Public attribute macros (attr_accessor
|
|
16
|
-
# * Other macros (validates
|
|
14
|
+
# * Associations (`has_one`, `has_many`)
|
|
15
|
+
# * Public attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
|
|
16
|
+
# * Other macros (`validates`, `validate`)
|
|
17
17
|
# * Public class methods
|
|
18
18
|
# * Initializer
|
|
19
19
|
# * Public instance methods
|
|
20
|
-
# * Protected attribute macros (attr_accessor
|
|
20
|
+
# * Protected attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
|
|
21
21
|
# * Protected instance methods
|
|
22
|
-
# * Private attribute macros (attr_accessor
|
|
22
|
+
# * Private attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
|
|
23
23
|
# * Private instance methods
|
|
24
24
|
#
|
|
25
|
+
# NOTE: Simply enabling the cop with `Enabled: true` will not use
|
|
26
|
+
# the example order shown below.
|
|
27
|
+
# To enforce the order of macros like `attr_reader`,
|
|
28
|
+
# you must define both `ExpectedOrder` *and* `Categories`.
|
|
29
|
+
#
|
|
25
30
|
# You can configure the following order:
|
|
26
31
|
#
|
|
27
32
|
# [source,yaml]
|
|
@@ -68,6 +73,36 @@ module RuboCop
|
|
|
68
73
|
# - extend
|
|
69
74
|
# ----
|
|
70
75
|
#
|
|
76
|
+
# If you only set `ExpectedOrder`
|
|
77
|
+
# without defining `Categories`,
|
|
78
|
+
# macros such as `attr_reader` or `has_many`
|
|
79
|
+
# will not be recognized as part of a category, and their order will not be validated.
|
|
80
|
+
# For example, the following will NOT raise any offenses, even if the order is incorrect:
|
|
81
|
+
#
|
|
82
|
+
# [source,yaml]
|
|
83
|
+
# ----
|
|
84
|
+
# Layout/ClassStructure:
|
|
85
|
+
# Enabled: true
|
|
86
|
+
# ExpectedOrder:
|
|
87
|
+
# - public_attribute_macros
|
|
88
|
+
# - initializer
|
|
89
|
+
# ----
|
|
90
|
+
#
|
|
91
|
+
# To make it work as expected, you must also specify `Categories` like this:
|
|
92
|
+
#
|
|
93
|
+
# [source,yaml]
|
|
94
|
+
# ----
|
|
95
|
+
# Layout/ClassStructure:
|
|
96
|
+
# ExpectedOrder:
|
|
97
|
+
# - public_attribute_macros
|
|
98
|
+
# - initializer
|
|
99
|
+
# Categories:
|
|
100
|
+
# attribute_macros:
|
|
101
|
+
# - attr_reader
|
|
102
|
+
# - attr_writer
|
|
103
|
+
# - attr_accessor
|
|
104
|
+
# ----
|
|
105
|
+
#
|
|
71
106
|
# @safety
|
|
72
107
|
# Autocorrection is unsafe because class methods and module inclusion
|
|
73
108
|
# can behave differently, based on which methods or constants have
|
|
@@ -236,7 +271,7 @@ module RuboCop
|
|
|
236
271
|
|
|
237
272
|
return [] unless class_def
|
|
238
273
|
|
|
239
|
-
if class_def.
|
|
274
|
+
if class_def.type?(:def, :send)
|
|
240
275
|
[class_def]
|
|
241
276
|
else
|
|
242
277
|
class_def.children.compact
|
|
@@ -289,7 +324,7 @@ module RuboCop
|
|
|
289
324
|
def marked_as_private_constant?(node, name)
|
|
290
325
|
return false unless node.method?(:private_constant)
|
|
291
326
|
|
|
292
|
-
node.arguments.any? { |arg|
|
|
327
|
+
node.arguments.any? { |arg| arg.type?(:sym, :str) && arg.value == name }
|
|
293
328
|
end
|
|
294
329
|
|
|
295
330
|
def end_position_for(node)
|
|
@@ -322,7 +357,7 @@ module RuboCop
|
|
|
322
357
|
end
|
|
323
358
|
|
|
324
359
|
def find_heredoc(node)
|
|
325
|
-
node.each_node(:
|
|
360
|
+
node.each_node(:any_str).find(&:heredoc?)
|
|
326
361
|
end
|
|
327
362
|
|
|
328
363
|
def buffer
|
|
@@ -155,13 +155,13 @@ module RuboCop
|
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
def all_elements_aligned?(elements)
|
|
158
|
-
elements.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
158
|
+
if elements.first.hash_type?
|
|
159
|
+
elements.first.each_child_node.map { |child| child.loc.column }
|
|
160
|
+
else
|
|
161
|
+
elements.flat_map do |e|
|
|
162
162
|
e.loc.column
|
|
163
163
|
end
|
|
164
|
-
end.uniq.
|
|
164
|
+
end.uniq.one?
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
def first_argument_line(elements)
|
|
@@ -48,7 +48,7 @@ module RuboCop
|
|
|
48
48
|
def on_send(node)
|
|
49
49
|
return unless node.def_modifier?
|
|
50
50
|
|
|
51
|
-
method_def = node.each_descendant(:
|
|
51
|
+
method_def = node.each_descendant(:any_def).first
|
|
52
52
|
expr = node.source_range
|
|
53
53
|
|
|
54
54
|
line_start = range_between(expr.begin_pos, method_def.loc.keyword.end_pos)
|
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def on_rescue(node)
|
|
52
|
-
return unless node.loc
|
|
52
|
+
return unless node.loc?(:else)
|
|
53
53
|
|
|
54
54
|
check_alignment(base_range_of_rescue(node), node.loc.else)
|
|
55
55
|
end
|
|
@@ -92,7 +92,7 @@ module RuboCop
|
|
|
92
92
|
case parent.type
|
|
93
93
|
when :def, :defs then base_for_method_definition(parent)
|
|
94
94
|
when :kwbegin then parent.loc.begin
|
|
95
|
-
when :block
|
|
95
|
+
when :block, :numblock, :itblock
|
|
96
96
|
assignment_node = assignment_node(parent)
|
|
97
97
|
if same_line?(parent, assignment_node)
|
|
98
98
|
assignment_node.source_range
|
|
@@ -131,7 +131,7 @@ module RuboCop
|
|
|
131
131
|
|
|
132
132
|
def next_sibling_parent_empty_or_else?(node)
|
|
133
133
|
next_sibling = node.right_sibling
|
|
134
|
-
return true
|
|
134
|
+
return true unless next_sibling.is_a?(AST::Node)
|
|
135
135
|
|
|
136
136
|
parent = next_sibling.parent
|
|
137
137
|
|
|
@@ -145,8 +145,10 @@ module RuboCop
|
|
|
145
145
|
next_sibling.if_type? && contains_guard_clause?(next_sibling)
|
|
146
146
|
end
|
|
147
147
|
|
|
148
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
148
149
|
def last_heredoc_argument(node)
|
|
149
150
|
n = last_heredoc_argument_node(node)
|
|
151
|
+
n = n.children.first while n.respond_to?(:begin_type?) && n.begin_type?
|
|
150
152
|
|
|
151
153
|
return n if heredoc?(n)
|
|
152
154
|
return unless n.respond_to?(:arguments)
|
|
@@ -158,6 +160,7 @@ module RuboCop
|
|
|
158
160
|
|
|
159
161
|
last_heredoc_argument(n.receiver) if n.respond_to?(:receiver)
|
|
160
162
|
end
|
|
163
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
161
164
|
|
|
162
165
|
def last_heredoc_argument_node(node)
|
|
163
166
|
return node unless node.respond_to?(:if_branch)
|
|
@@ -189,7 +192,7 @@ module RuboCop
|
|
|
189
192
|
end
|
|
190
193
|
|
|
191
194
|
def offense_location(node)
|
|
192
|
-
if node.loc
|
|
195
|
+
if node.loc?(:end)
|
|
193
196
|
node.loc.end
|
|
194
197
|
else
|
|
195
198
|
node
|
|
@@ -200,7 +203,7 @@ module RuboCop
|
|
|
200
203
|
parent = node.parent
|
|
201
204
|
return false unless parent
|
|
202
205
|
|
|
203
|
-
parent.begin_type? &&
|
|
206
|
+
parent.begin_type? && same_line?(node, node.right_sibling)
|
|
204
207
|
end
|
|
205
208
|
|
|
206
209
|
# SimpleCov excludes code from the coverage report by wrapping it in `# :nocov:`:
|
|
@@ -22,8 +22,6 @@ module RuboCop
|
|
|
22
22
|
# def b
|
|
23
23
|
# end
|
|
24
24
|
#
|
|
25
|
-
# @example
|
|
26
|
-
#
|
|
27
25
|
# # good
|
|
28
26
|
# def a
|
|
29
27
|
# end
|
|
@@ -42,8 +40,6 @@ module RuboCop
|
|
|
42
40
|
# def b
|
|
43
41
|
# end
|
|
44
42
|
#
|
|
45
|
-
# @example
|
|
46
|
-
#
|
|
47
43
|
# # good
|
|
48
44
|
# class A
|
|
49
45
|
# end
|
|
@@ -65,8 +61,6 @@ module RuboCop
|
|
|
65
61
|
# def b
|
|
66
62
|
# end
|
|
67
63
|
#
|
|
68
|
-
# @example
|
|
69
|
-
#
|
|
70
64
|
# # good
|
|
71
65
|
# module A
|
|
72
66
|
# end
|
|
@@ -82,28 +76,40 @@ module RuboCop
|
|
|
82
76
|
# # good
|
|
83
77
|
# class ErrorA < BaseError; end
|
|
84
78
|
# class ErrorB < BaseError; end
|
|
85
|
-
# class ErrorC < BaseError; end
|
|
86
79
|
#
|
|
87
80
|
# # good
|
|
88
81
|
# class ErrorA < BaseError; end
|
|
89
82
|
#
|
|
90
83
|
# class ErrorB < BaseError; end
|
|
91
84
|
#
|
|
92
|
-
#
|
|
85
|
+
# # good - DefLikeMacros: [memoize]
|
|
86
|
+
# memoize :attribute_a
|
|
87
|
+
# memoize :attribute_b
|
|
88
|
+
#
|
|
89
|
+
# # good
|
|
90
|
+
# memoize :attribute_a
|
|
91
|
+
#
|
|
92
|
+
# memoize :attribute_b
|
|
93
93
|
#
|
|
94
94
|
# @example AllowAdjacentOneLineDefs: false
|
|
95
95
|
#
|
|
96
96
|
# # bad
|
|
97
97
|
# class ErrorA < BaseError; end
|
|
98
98
|
# class ErrorB < BaseError; end
|
|
99
|
-
# class ErrorC < BaseError; end
|
|
100
99
|
#
|
|
101
100
|
# # good
|
|
102
101
|
# class ErrorA < BaseError; end
|
|
103
102
|
#
|
|
104
103
|
# class ErrorB < BaseError; end
|
|
105
104
|
#
|
|
106
|
-
#
|
|
105
|
+
# # bad - DefLikeMacros: [memoize]
|
|
106
|
+
# memoize :attribute_a
|
|
107
|
+
# memoize :attribute_b
|
|
108
|
+
#
|
|
109
|
+
# # good
|
|
110
|
+
# memoize :attribute_a
|
|
111
|
+
#
|
|
112
|
+
# memoize :attribute_b
|
|
107
113
|
#
|
|
108
114
|
class EmptyLineBetweenDefs < Base
|
|
109
115
|
include RangeHelp
|
|
@@ -162,8 +168,10 @@ module RuboCop
|
|
|
162
168
|
private
|
|
163
169
|
|
|
164
170
|
def def_location(correction_node)
|
|
165
|
-
if correction_node.
|
|
171
|
+
if correction_node.any_block_type?
|
|
166
172
|
correction_node.source_range.join(correction_node.children.first.source_range)
|
|
173
|
+
elsif correction_node.send_type?
|
|
174
|
+
correction_node.source_range
|
|
167
175
|
else
|
|
168
176
|
correction_node.loc.keyword.join(correction_node.loc.name)
|
|
169
177
|
end
|
|
@@ -181,12 +189,18 @@ module RuboCop
|
|
|
181
189
|
end
|
|
182
190
|
|
|
183
191
|
def macro_candidate?(node)
|
|
184
|
-
|
|
185
|
-
|
|
192
|
+
macro_candidate = if node.any_block_type?
|
|
193
|
+
node.send_node
|
|
194
|
+
elsif node.send_type?
|
|
195
|
+
node
|
|
196
|
+
end
|
|
197
|
+
return false unless macro_candidate
|
|
198
|
+
|
|
199
|
+
macro_candidate.macro? && empty_line_between_macros.include?(macro_candidate.method_name)
|
|
186
200
|
end
|
|
187
201
|
|
|
188
202
|
def method_candidate?(node)
|
|
189
|
-
cop_config['EmptyLineBetweenMethodDefs'] &&
|
|
203
|
+
cop_config['EmptyLineBetweenMethodDefs'] && node.any_def_type?
|
|
190
204
|
end
|
|
191
205
|
|
|
192
206
|
def class_candidate?(node)
|
|
@@ -246,7 +260,9 @@ module RuboCop
|
|
|
246
260
|
end
|
|
247
261
|
|
|
248
262
|
def def_start(node)
|
|
249
|
-
|
|
263
|
+
node = node.send_node if node.any_block_type?
|
|
264
|
+
|
|
265
|
+
if node.send_type?
|
|
250
266
|
node.source_range.line
|
|
251
267
|
else
|
|
252
268
|
node.loc.keyword.line
|
|
@@ -258,11 +274,7 @@ module RuboCop
|
|
|
258
274
|
end
|
|
259
275
|
|
|
260
276
|
def end_loc(node)
|
|
261
|
-
|
|
262
|
-
node.source_range.end
|
|
263
|
-
else
|
|
264
|
-
node.loc.end
|
|
265
|
-
end
|
|
277
|
+
node.source_range.end
|
|
266
278
|
end
|
|
267
279
|
|
|
268
280
|
def autocorrect_remove_lines(corrector, newline_pos, count)
|
|
@@ -283,6 +295,8 @@ module RuboCop
|
|
|
283
295
|
case node.type
|
|
284
296
|
when :def, :defs
|
|
285
297
|
:method
|
|
298
|
+
when :numblock, :itblock
|
|
299
|
+
:block
|
|
286
300
|
else
|
|
287
301
|
node.type
|
|
288
302
|
end
|