rubocop 1.67.0 → 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 +23 -19
- data/config/default.yml +384 -72
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +8 -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 +19 -4
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +52 -10
- data/lib/rubocop/config_loader.rb +56 -48
- data/lib/rubocop/config_loader_resolver.rb +36 -10
- 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 +53 -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 +1 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +8 -16
- 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 +1 -1
- 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/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 +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/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 +3 -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 +1 -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 +8 -11
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +8 -7
- 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 +158 -10
- 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 +19 -46
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +14 -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 +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 +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 +4 -1
- 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 -3
- 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 +1 -1
- 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/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 +125 -10
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +24 -6
- 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 +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 +2 -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_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 +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +113 -9
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
- 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 +39 -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 +52 -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 +3 -1
- 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 +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 -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 +1 -1
- 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 +49 -0
- 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 +27 -10
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- 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_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_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +8 -3
- 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 +21 -5
- 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 +185 -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/bitwise_predicate.rb +107 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +44 -26
- data/lib/rubocop/cop/style/case_like_if.rb +9 -12
- data/lib/rubocop/cop/style/class_and_module_children.rb +52 -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 +49 -31
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- 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 +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 +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 +8 -4
- 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 -3
- 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 +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 +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.rb +18 -0
- 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/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 +1 -9
- 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 +5 -6
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +41 -38
- 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 +3 -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_regexp_argument.rb +8 -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 +3 -3
- 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 +21 -6
- 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 +68 -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 +66 -19
- 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 +4 -4
- 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 +12 -5
- 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 +45 -11
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +20 -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 +190 -0
- data/lib/rubocop/lsp/logger.rb +2 -2
- data/lib/rubocop/lsp/routes.rb +66 -26
- data/lib/rubocop/lsp/runtime.rb +18 -50
- data/lib/rubocop/lsp/server.rb +2 -4
- data/lib/rubocop/lsp/stdin_runner.rb +69 -0
- data/lib/rubocop/magic_comment.rb +11 -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 +4 -1
- data/lib/rubocop/result_cache.rb +27 -25
- 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 +31 -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 +44 -2
- data/lib/ruby_lsp/rubocop/addon.rb +90 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +99 -0
- metadata +91 -21
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module InternalAffairs
|
|
6
|
+
# Checks for cops that define `on_send` without define `on_csend`.
|
|
7
|
+
#
|
|
8
|
+
# Although in some cases it can be predetermined that safe navigation
|
|
9
|
+
# will never be used with the code checked by a specific cop, in general
|
|
10
|
+
# it is good practice to handle safe navigation methods if handling any
|
|
11
|
+
# `send` node.
|
|
12
|
+
#
|
|
13
|
+
# NOTE: It is expected to disable this cop for cops that check for method calls
|
|
14
|
+
# on receivers that cannot be nil (`self`, a literal, a constant), and
|
|
15
|
+
# method calls that will never have a receiver (ruby keywords like `raise`,
|
|
16
|
+
# macros like `attr_reader`, DSL methods, etc.), and other checks that wouldn't
|
|
17
|
+
# make sense to support safe navigation.
|
|
18
|
+
#
|
|
19
|
+
# @example
|
|
20
|
+
# # bad
|
|
21
|
+
# class MyCop < RuboCop::Cop:Base
|
|
22
|
+
# def on_send(node)
|
|
23
|
+
# # ...
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# # good - explicit method definition
|
|
28
|
+
# class MyCop < RuboCop::Cop:Base
|
|
29
|
+
# def on_send(node)
|
|
30
|
+
# # ...
|
|
31
|
+
# end
|
|
32
|
+
#
|
|
33
|
+
# def on_csend(node)
|
|
34
|
+
# # ...
|
|
35
|
+
# end
|
|
36
|
+
# end
|
|
37
|
+
#
|
|
38
|
+
# # good - alias
|
|
39
|
+
# class MyCop < RuboCop::Cop:Base
|
|
40
|
+
# def on_send(node)
|
|
41
|
+
# # ...
|
|
42
|
+
# end
|
|
43
|
+
# alias on_csend on_send
|
|
44
|
+
# end
|
|
45
|
+
#
|
|
46
|
+
# # good - alias_method
|
|
47
|
+
# class MyCop < RuboCop::Cop:Base
|
|
48
|
+
# def on_send(node)
|
|
49
|
+
# # ...
|
|
50
|
+
# end
|
|
51
|
+
# alias_method :on_csend, :on_send
|
|
52
|
+
# end
|
|
53
|
+
class OnSendWithoutOnCSend < Base
|
|
54
|
+
RESTRICT_ON_SEND = %i[alias_method].freeze
|
|
55
|
+
MSG = 'Cop defines `on_send` but not `on_csend`.'
|
|
56
|
+
|
|
57
|
+
def on_new_investigation
|
|
58
|
+
@on_send_definition = nil
|
|
59
|
+
@on_csend_definition = nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def on_investigation_end
|
|
63
|
+
return unless @on_send_definition && !@on_csend_definition
|
|
64
|
+
|
|
65
|
+
add_offense(@on_send_definition)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def on_def(node)
|
|
69
|
+
@on_send_definition = node if node.method?(:on_send)
|
|
70
|
+
@on_csend_definition = node if node.method?(:on_csend)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def on_alias(node)
|
|
74
|
+
@on_send_definition = node if node.new_identifier.value == :on_send
|
|
75
|
+
@on_csend_definition = node if node.new_identifier.value == :on_csend
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def on_send(node) # rubocop:disable InternalAffairs/OnSendWithoutOnCSend
|
|
79
|
+
return unless (new_identifier = node.first_argument)
|
|
80
|
+
return unless new_identifier.basic_literal?
|
|
81
|
+
|
|
82
|
+
new_identifier = new_identifier.value
|
|
83
|
+
|
|
84
|
+
@on_send_definition = node if new_identifier == :on_send
|
|
85
|
+
@on_csend_definition = node if new_identifier == :on_csend
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module InternalAffairs
|
|
6
|
+
# Enforces the use of `node.operator_keyword?` instead of `node.and_type? || node.or_type?`.
|
|
7
|
+
#
|
|
8
|
+
# @example
|
|
9
|
+
# # bad
|
|
10
|
+
# node.and_type? || node.or_type?
|
|
11
|
+
# node.or_type? || node.and_type?
|
|
12
|
+
#
|
|
13
|
+
# # good
|
|
14
|
+
# node.operator_keyword?
|
|
15
|
+
#
|
|
16
|
+
class OperatorKeyword < Base
|
|
17
|
+
extend AutoCorrector
|
|
18
|
+
|
|
19
|
+
MSG = 'Use `%<prefer>s`.'
|
|
20
|
+
PREFERRED_METHOD = 'operator_keyword?'
|
|
21
|
+
|
|
22
|
+
# @!method and_or_type(node)
|
|
23
|
+
def_node_matcher :and_or_type, <<~PATTERN
|
|
24
|
+
{
|
|
25
|
+
(or $(send _node :and_type?) $(send _node :or_type?))
|
|
26
|
+
(or $(send _node :or_type?) $(send _node :and_type?))
|
|
27
|
+
(or
|
|
28
|
+
(or _ $(send _node :and_type?)) $(send _node :or_type?))
|
|
29
|
+
(or
|
|
30
|
+
(or _ $(send _node :or_type?)) $(send _node :and_type?))
|
|
31
|
+
}
|
|
32
|
+
PATTERN
|
|
33
|
+
|
|
34
|
+
def on_or(node)
|
|
35
|
+
return unless (lhs, rhs = and_or_type(node))
|
|
36
|
+
|
|
37
|
+
begin_range = lhs.receiver&.source_range || lhs.loc.selector
|
|
38
|
+
offense = begin_range.join(rhs.source_range.end)
|
|
39
|
+
prefer = lhs.receiver ? "#{lhs.receiver.source}.#{PREFERRED_METHOD}" : PREFERRED_METHOD
|
|
40
|
+
|
|
41
|
+
add_offense(offense, message: format(MSG, prefer: prefer)) do |corrector|
|
|
42
|
+
corrector.replace(offense, prefer)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'lint_roller'
|
|
4
|
+
|
|
5
|
+
module RuboCop
|
|
6
|
+
module InternalAffairs
|
|
7
|
+
# A Plugin for `InternalAffairs` department, which has internal cops.
|
|
8
|
+
class Plugin < LintRoller::Plugin
|
|
9
|
+
def about
|
|
10
|
+
LintRoller::About.new(
|
|
11
|
+
name: 'rubocop-internal_affairs',
|
|
12
|
+
version: Version::STRING,
|
|
13
|
+
homepage: 'https://github.com/rubocop/rubocop/tree/master/lib/rubocop/cop/internal_affairs',
|
|
14
|
+
description: 'A collection of RuboCop cops to check for internal affairs.'
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def supported?(context)
|
|
19
|
+
context.engine == :rubocop
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def rules(_context)
|
|
23
|
+
require_relative '../internal_affairs'
|
|
24
|
+
|
|
25
|
+
LintRoller::Rules.new(
|
|
26
|
+
type: :path,
|
|
27
|
+
config_format: :rubocop,
|
|
28
|
+
value: Pathname.new(__dir__).join('../../../../config/internal_affairs.yml')
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -38,23 +38,24 @@ module RuboCop
|
|
|
38
38
|
|
|
39
39
|
describe = find_describe_method_node(node)
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
end
|
|
41
|
+
should_append_config = describe && describe.last_argument.source != ':config'
|
|
42
|
+
additional_message = ' and specify `:config` in `describe`' if should_append_config
|
|
44
43
|
|
|
45
44
|
message = format(MSG, additional_message: additional_message)
|
|
46
45
|
|
|
47
46
|
add_offense(node, message: message) do |corrector|
|
|
48
47
|
corrector.remove(range_by_whole_lines(node.source_range, include_final_newline: true))
|
|
49
48
|
|
|
50
|
-
corrector.insert_after(describe.last_argument, ', :config')
|
|
49
|
+
corrector.insert_after(describe.last_argument, ', :config') if should_append_config
|
|
51
50
|
end
|
|
52
51
|
end
|
|
53
52
|
|
|
54
53
|
private
|
|
55
54
|
|
|
56
55
|
def find_describe_method_node(block_node)
|
|
57
|
-
block_node.ancestors.find
|
|
56
|
+
block_node.ancestors.find do |node|
|
|
57
|
+
node.block_type? && node.method?(:describe)
|
|
58
|
+
end&.send_node
|
|
58
59
|
end
|
|
59
60
|
end
|
|
60
61
|
end
|
|
@@ -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
|
|
|
@@ -189,7 +189,7 @@ module RuboCop
|
|
|
189
189
|
end
|
|
190
190
|
|
|
191
191
|
def offense_location(node)
|
|
192
|
-
if node.loc
|
|
192
|
+
if node.loc?(:end)
|
|
193
193
|
node.loc.end
|
|
194
194
|
else
|
|
195
195
|
node
|
|
@@ -200,7 +200,7 @@ module RuboCop
|
|
|
200
200
|
parent = node.parent
|
|
201
201
|
return false unless parent
|
|
202
202
|
|
|
203
|
-
parent.begin_type? &&
|
|
203
|
+
parent.begin_type? && same_line?(node, node.right_sibling)
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
# SimpleCov excludes code from the coverage report by wrapping it in `# :nocov:`:
|