rubocop 1.65.1 → 1.75.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 +72 -72
- data/config/default.yml +299 -55
- data/config/internal_affairs.yml +31 -0
- data/config/obsoletion.yml +3 -1
- data/exe/rubocop +4 -3
- data/lib/rubocop/cached_data.rb +12 -4
- data/lib/rubocop/cli/command/auto_generate_config.rb +6 -7
- data/lib/rubocop/cli/command/execute_runner.rb +4 -4
- data/lib/rubocop/cli/command/lsp.rb +2 -2
- 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 +1 -1
- data/lib/rubocop/comment_config.rb +3 -3
- data/lib/rubocop/config.rb +57 -11
- data/lib/rubocop/config_loader.rb +66 -17
- data/lib/rubocop/config_loader_resolver.rb +39 -14
- 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_validator.rb +27 -15
- data/lib/rubocop/cop/autocorrect_logic.rb +36 -19
- data/lib/rubocop/cop/base.rb +17 -3
- 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/gem_version.rb +1 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/cop.rb +8 -0
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -12
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/documentation.rb +18 -1
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
- 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_description.rb +0 -4
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +8 -4
- 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 +2 -2
- 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 +230 -0
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +91 -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_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +11 -2
- data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +23 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +0 -5
- data/lib/rubocop/cop/internal_affairs.rb +7 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
- 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 +32 -13
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/class_structure.rb +9 -9
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +4 -4
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +9 -12
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +30 -4
- 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_exception_handling_keywords.rb +12 -8
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +3 -8
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -10
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +8 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +12 -12
- data/lib/rubocop/cop/layout/leading_comment_space.rb +83 -1
- 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 +135 -16
- 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 +3 -4
- 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 +6 -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 +2 -1
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +23 -21
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_brackets.rb +5 -5
- 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 +11 -1
- 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 +5 -3
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +4 -1
- 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/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
- 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_reassignment.rb +148 -0
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +84 -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 +3 -2
- 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 +46 -19
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -58
- 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/ensure_return.rb +1 -4
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -7
- data/lib/rubocop/cop/lint/float_comparison.rb +21 -17
- 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/implicit_string_concatenation.rb +13 -5
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +8 -14
- data/lib/rubocop/cop/lint/literal_as_condition.rb +118 -9
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +49 -8
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
- 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 +93 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
- data/lib/rubocop/cop/lint/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 +1 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +13 -8
- 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/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +3 -7
- 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 +109 -41
- data/lib/rubocop/cop/lint/self_assignment.rb +8 -10
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +8 -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 +2 -2
- 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_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +5 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +20 -11
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -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 +78 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2 -2
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
- data/lib/rubocop/cop/lint/void.rb +40 -14
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/block_length.rb +7 -5
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +15 -14
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
- data/lib/rubocop/cop/metrics/method_length.rb +15 -6
- data/lib/rubocop/cop/metrics/module_length.rb +7 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +3 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +2 -2
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/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/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 +22 -11
- 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 +12 -6
- 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/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
- data/lib/rubocop/cop/mixin/range_help.rb +15 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +11 -5
- data/lib/rubocop/cop/mixin/string_help.rb +2 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +21 -5
- data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +20 -16
- data/lib/rubocop/cop/naming/constant_name.rb +6 -7
- data/lib/rubocop/cop/naming/file_name.rb +0 -2
- data/lib/rubocop/cop/naming/inclusive_language.rb +12 -3
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +12 -13
- data/lib/rubocop/cop/naming/method_name.rb +64 -8
- data/lib/rubocop/cop/naming/predicate_name.rb +46 -2
- 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 +4 -5
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/compound_hash.rb +2 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +96 -28
- data/lib/rubocop/cop/style/accessor_grouping.rb +29 -7
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/and_or.rb +1 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +94 -30
- data/lib/rubocop/cop/style/array_first_last.rb +18 -2
- data/lib/rubocop/cop/style/array_intersect.rb +42 -30
- data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +51 -20
- data/lib/rubocop/cop/style/case_like_if.rb +8 -11
- 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_compact.rb +10 -10
- data/lib/rubocop/cop/style/collection_methods.rb +2 -1
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +10 -2
- data/lib/rubocop/cop/style/commented_keyword.rb +25 -2
- 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 +40 -28
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/data_inheritance.rb +8 -1
- 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 +4 -4
- 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 +10 -7
- data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
- data/lib/rubocop/cop/style/empty_literal.rb +35 -22
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/endless_method.rb +150 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +5 -5
- 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 +16 -3
- data/lib/rubocop/cop/style/exponential_notation.rb +3 -3
- data/lib/rubocop/cop/style/fetch_env_var.rb +2 -1
- 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 +20 -4
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +12 -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 +11 -5
- 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 +26 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +11 -15
- data/lib/rubocop/cop/style/if_unless_modifier.rb +25 -5
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +3 -4
- data/lib/rubocop/cop/style/if_with_semicolon.rb +60 -6
- data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +15 -12
- 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 +36 -0
- data/lib/rubocop/cop/style/it_block_parameter.rb +100 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
- data/lib/rubocop/cop/style/lambda.rb +2 -1
- data/lib/rubocop/cop/style/lambda_call.rb +10 -4
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
- data/lib/rubocop/cop/style/map_into_array.rb +75 -14
- data/lib/rubocop/cop/style/map_to_hash.rb +1 -1
- data/lib/rubocop/cop/style/map_to_set.rb +3 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +38 -23
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +10 -13
- 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/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 +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +53 -60
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/next.rb +44 -0
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +2 -2
- data/lib/rubocop/cop/style/object_then.rb +15 -15
- data/lib/rubocop/cop/style/one_line_conditional.rb +30 -5
- data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
- data/lib/rubocop/cop/style/operator_method_call.rb +25 -7
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +14 -22
- 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 -3
- 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_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +6 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +97 -24
- 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_format.rb +257 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +3 -3
- data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +56 -20
- data/lib/rubocop/cop/style/redundant_parentheses.rb +57 -27
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +8 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +9 -15
- 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/require_order.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +18 -4
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +54 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +123 -54
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +14 -8
- data/lib/rubocop/cop/style/self_assignment.rb +11 -17
- data/lib/rubocop/cop/style/semicolon.rb +2 -2
- 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 +6 -7
- data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +42 -106
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +15 -15
- 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 +9 -2
- 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_proc.rb +2 -0
- data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
- data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +11 -2
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
- data/lib/rubocop/cop/style/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 +14 -3
- data/lib/rubocop/cop/util.rb +12 -5
- data/lib/rubocop/cop/utils/format_string.rb +10 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +18 -3
- 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 +5 -11
- data/lib/rubocop/cops_documentation_generator.rb +117 -53
- data/lib/rubocop/directive_comment.rb +45 -11
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/file_finder.rb +9 -4
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -2
- data/lib/rubocop/formatter/formatter_set.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/junit_formatter.rb +70 -23
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/lockfile.rb +6 -4
- data/lib/rubocop/lsp/diagnostic.rb +189 -0
- data/lib/rubocop/lsp/logger.rb +2 -2
- data/lib/rubocop/lsp/routes.rb +7 -23
- data/lib/rubocop/lsp/runtime.rb +19 -49
- data/lib/rubocop/lsp/server.rb +0 -3
- data/lib/rubocop/lsp/stdin_runner.rb +85 -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/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/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +15 -21
- data/lib/rubocop/rspec/cop_helper.rb +13 -1
- data/lib/rubocop/rspec/expect_offense.rb +7 -2
- data/lib/rubocop/rspec/shared_contexts.rb +40 -3
- data/lib/rubocop/rspec/support.rb +4 -2
- data/lib/rubocop/runner.rb +27 -13
- data/lib/rubocop/server/cache.rb +52 -11
- data/lib/rubocop/server/cli.rb +2 -2
- data/lib/rubocop/server/core.rb +1 -0
- data/lib/rubocop/target_finder.rb +7 -2
- data/lib/rubocop/target_ruby.rb +36 -17
- data/lib/rubocop/version.rb +54 -11
- data/lib/rubocop/yaml_duplication_checker.rb +20 -26
- data/lib/rubocop.rb +36 -2
- data/lib/ruby_lsp/rubocop/addon.rb +75 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +65 -0
- metadata +83 -40
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
@@ -83,17 +83,18 @@ module RuboCop
|
|
83
83
|
end
|
84
84
|
|
85
85
|
alias on_numblock on_block
|
86
|
+
alias on_itblock on_block
|
86
87
|
|
87
|
-
def on_send(node)
|
88
|
-
return unless node.bare_access_modifier? &&
|
89
|
-
|
88
|
+
def on_send(node)
|
89
|
+
return unless node.bare_access_modifier? && !node.block_literal?
|
90
|
+
return if same_line?(node, node.right_sibling)
|
90
91
|
return if expected_empty_lines?(node)
|
91
92
|
|
92
93
|
message = message(node)
|
93
94
|
add_offense(node, message: message) do |corrector|
|
94
95
|
line = range_by_whole_lines(node.source_range)
|
95
96
|
|
96
|
-
corrector.insert_before(line, "\n")
|
97
|
+
corrector.insert_before(line, "\n") if should_insert_line_before?(node)
|
97
98
|
|
98
99
|
correct_next_line_if_denied_style(corrector, node, line)
|
99
100
|
end
|
@@ -122,6 +123,8 @@ module RuboCop
|
|
122
123
|
end
|
123
124
|
|
124
125
|
def correct_next_line_if_denied_style(corrector, node, line)
|
126
|
+
return unless should_insert_line_after?(node)
|
127
|
+
|
125
128
|
case style
|
126
129
|
when :around
|
127
130
|
corrector.insert_after(line, "\n") unless next_line_empty?(node.last_line)
|
@@ -205,6 +208,29 @@ module RuboCop
|
|
205
208
|
format(MSG_BEFORE_FOR_ONLY_BEFORE, modifier: modifier)
|
206
209
|
end
|
207
210
|
end
|
211
|
+
|
212
|
+
def should_insert_line_before?(node)
|
213
|
+
return false if previous_line_empty?(node.first_line)
|
214
|
+
return true unless inside_block?(node) && no_empty_lines_around_block_body?
|
215
|
+
return true unless node.parent.begin_type?
|
216
|
+
|
217
|
+
node.parent.children.first != node
|
218
|
+
end
|
219
|
+
|
220
|
+
def should_insert_line_after?(node)
|
221
|
+
return true unless inside_block?(node) && no_empty_lines_around_block_body?
|
222
|
+
|
223
|
+
node.parent.children.last != node
|
224
|
+
end
|
225
|
+
|
226
|
+
def inside_block?(node)
|
227
|
+
node.parent.block_type? || (node.parent.begin_type? && node.parent.parent&.block_type?)
|
228
|
+
end
|
229
|
+
|
230
|
+
def no_empty_lines_around_block_body?
|
231
|
+
config.for_enabled_cop('Layout/EmptyLinesAroundBlockBody')['EnforcedStyle'] ==
|
232
|
+
'no_empty_lines'
|
233
|
+
end
|
208
234
|
end
|
209
235
|
end
|
210
236
|
end
|
@@ -8,19 +8,18 @@ module RuboCop
|
|
8
8
|
#
|
9
9
|
# @example
|
10
10
|
#
|
11
|
-
# #
|
12
|
-
#
|
11
|
+
# # bad
|
13
12
|
# begin
|
13
|
+
#
|
14
14
|
# # ...
|
15
|
-
# end
|
16
15
|
#
|
17
|
-
#
|
16
|
+
# end
|
18
17
|
#
|
18
|
+
# # good
|
19
19
|
# begin
|
20
|
-
#
|
21
20
|
# # ...
|
22
|
-
#
|
23
21
|
# end
|
22
|
+
#
|
24
23
|
class EmptyLinesAroundBeginBody < Base
|
25
24
|
include EmptyLinesAroundBody
|
26
25
|
extend AutoCorrector
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
6
6
|
# Checks if empty lines exist around the bodies of `begin`
|
7
7
|
# sections. This cop doesn't check empty lines at `begin` body
|
8
8
|
# beginning/end and around method definition body.
|
9
|
-
# `
|
9
|
+
# `Layout/EmptyLinesAroundBeginBody` or `Layout/EmptyLinesAroundMethodBody`
|
10
10
|
# can be used for this purpose.
|
11
11
|
#
|
12
12
|
# @example
|
@@ -72,8 +72,7 @@ module RuboCop
|
|
72
72
|
alias on_numblock on_def
|
73
73
|
|
74
74
|
def on_kwbegin(node)
|
75
|
-
|
76
|
-
check_body(body, node.loc.line)
|
75
|
+
check_body(node.children.first, node.loc.line)
|
77
76
|
end
|
78
77
|
|
79
78
|
private
|
@@ -83,7 +82,7 @@ module RuboCop
|
|
83
82
|
|
84
83
|
locations.each do |loc|
|
85
84
|
line = loc.line
|
86
|
-
next if line == line_of_def_or_kwbegin ||
|
85
|
+
next if line == line_of_def_or_kwbegin || last_body_and_end_on_same_line?(body)
|
87
86
|
|
88
87
|
keyword = loc.source
|
89
88
|
# below the keyword
|
@@ -93,8 +92,13 @@ module RuboCop
|
|
93
92
|
end
|
94
93
|
end
|
95
94
|
|
96
|
-
def
|
97
|
-
|
95
|
+
def last_body_and_end_on_same_line?(body)
|
96
|
+
end_keyword_line = body.parent.loc.end.line
|
97
|
+
return body.loc.last_line == end_keyword_line unless body.rescue_type?
|
98
|
+
|
99
|
+
last_body_line = body.else? ? body.loc.else.line : body.resbody_branches.last.loc.line
|
100
|
+
|
101
|
+
last_body_line == end_keyword_line
|
98
102
|
end
|
99
103
|
|
100
104
|
def message(location, keyword)
|
@@ -123,10 +127,10 @@ module RuboCop
|
|
123
127
|
end
|
124
128
|
|
125
129
|
def keyword_locations_in_ensure(node)
|
126
|
-
|
130
|
+
rescue_body_without_ensure = node.children.first
|
127
131
|
[
|
128
132
|
node.loc.keyword,
|
129
|
-
*keyword_locations(
|
133
|
+
*keyword_locations(rescue_body_without_ensure)
|
130
134
|
]
|
131
135
|
end
|
132
136
|
end
|
@@ -27,7 +27,14 @@ module RuboCop
|
|
27
27
|
KIND = 'method'
|
28
28
|
|
29
29
|
def on_def(node)
|
30
|
-
|
30
|
+
if node.endless?
|
31
|
+
return unless offending_endless_method?(node)
|
32
|
+
|
33
|
+
register_offense_for_endless_method(node)
|
34
|
+
else
|
35
|
+
first_line = node.arguments.source_range&.last_line
|
36
|
+
check(node, node.body, adjusted_first_line: first_line)
|
37
|
+
end
|
31
38
|
end
|
32
39
|
alias on_defs on_def
|
33
40
|
|
@@ -36,6 +43,21 @@ module RuboCop
|
|
36
43
|
def style
|
37
44
|
:no_empty_lines
|
38
45
|
end
|
46
|
+
|
47
|
+
def offending_endless_method?(node)
|
48
|
+
node.body.first_line > node.loc.assignment.line + 1 &&
|
49
|
+
processed_source.lines[node.loc.assignment.line].empty?
|
50
|
+
end
|
51
|
+
|
52
|
+
def register_offense_for_endless_method(node)
|
53
|
+
range = processed_source.buffer.line_range(node.loc.assignment.line + 1).resize(1)
|
54
|
+
|
55
|
+
msg = message(MSG_EXTRA, 'beginning')
|
56
|
+
|
57
|
+
add_offense(range, message: msg) do |corrector|
|
58
|
+
corrector.remove(range)
|
59
|
+
end
|
60
|
+
end
|
39
61
|
end
|
40
62
|
end
|
41
63
|
end
|
@@ -182,7 +182,7 @@ module RuboCop
|
|
182
182
|
end
|
183
183
|
|
184
184
|
def alignment_node_for_variable_style(node)
|
185
|
-
if
|
185
|
+
if node.type?(:case, :case_match) && node.argument? &&
|
186
186
|
same_line?(node, node.parent)
|
187
187
|
return node.parent
|
188
188
|
end
|
@@ -70,7 +70,7 @@ module RuboCop
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def check_assignment(token)
|
73
|
-
return unless
|
73
|
+
return unless aligned_with_preceding_equals_operator(token) == :no
|
74
74
|
|
75
75
|
message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
|
76
76
|
add_offense(token.pos, message: message) do |corrector|
|
@@ -225,7 +225,7 @@ module RuboCop
|
|
225
225
|
|
226
226
|
def base_range(send_node, arg_node)
|
227
227
|
parent = send_node.parent
|
228
|
-
start_node = if parent
|
228
|
+
start_node = if parent&.type?(:splat, :kwsplat)
|
229
229
|
send_node.parent
|
230
230
|
else
|
231
231
|
send_node
|
@@ -269,17 +269,12 @@ module RuboCop
|
|
269
269
|
end
|
270
270
|
|
271
271
|
def enforce_first_argument_with_fixed_indentation?
|
272
|
-
|
273
|
-
|
272
|
+
argument_alignment_config = config.for_enabled_cop('Layout/ArgumentAlignment')
|
274
273
|
argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
275
274
|
end
|
276
275
|
|
277
276
|
def enable_layout_first_method_argument_line_break?
|
278
|
-
config.
|
279
|
-
end
|
280
|
-
|
281
|
-
def argument_alignment_config
|
282
|
-
config.for_cop('Layout/ArgumentAlignment')
|
277
|
+
config.cop_enabled?('Layout/FirstMethodArgumentLineBreak')
|
283
278
|
end
|
284
279
|
end
|
285
280
|
end
|
@@ -51,7 +51,6 @@ module RuboCop
|
|
51
51
|
# # defined inside a method call.
|
52
52
|
#
|
53
53
|
# # bad
|
54
|
-
# # consistent
|
55
54
|
# array = [
|
56
55
|
# :value
|
57
56
|
# ]
|
@@ -72,13 +71,11 @@ module RuboCop
|
|
72
71
|
# # brackets are indented to the same position.
|
73
72
|
#
|
74
73
|
# # bad
|
75
|
-
# # align_brackets
|
76
74
|
# and_now_for_something = [
|
77
75
|
# :completely_different
|
78
76
|
# ]
|
79
77
|
#
|
80
78
|
# # good
|
81
|
-
# # align_brackets
|
82
79
|
# and_now_for_something = [
|
83
80
|
# :completely_different
|
84
81
|
# ]
|
@@ -183,13 +180,8 @@ module RuboCop
|
|
183
180
|
end
|
184
181
|
|
185
182
|
def enforce_first_argument_with_fixed_indentation?
|
186
|
-
|
187
|
-
|
188
|
-
array_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
189
|
-
end
|
190
|
-
|
191
|
-
def array_alignment_config
|
192
|
-
config.for_cop('Layout/ArrayAlignment')
|
183
|
+
argument_alignment_config = config.for_enabled_cop('Layout/ArrayAlignment')
|
184
|
+
argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
193
185
|
end
|
194
186
|
end
|
195
187
|
end
|
@@ -7,7 +7,7 @@ module RuboCop
|
|
7
7
|
# where the opening brace and the first key are on separate lines. The
|
8
8
|
# other keys' indentations are handled by the HashAlignment cop.
|
9
9
|
#
|
10
|
-
# By default, Hash literals that are arguments in a method call with
|
10
|
+
# By default, `Hash` literals that are arguments in a method call with
|
11
11
|
# parentheses, and where the opening curly brace of the hash is on the
|
12
12
|
# same line as the opening parenthesis of the method call, shall have
|
13
13
|
# their first key indented one step (two spaces) more than the position
|
@@ -225,14 +225,9 @@ module RuboCop
|
|
225
225
|
end
|
226
226
|
|
227
227
|
def enforce_first_argument_with_fixed_indentation?
|
228
|
-
|
229
|
-
|
228
|
+
argument_alignment_config = config.for_enabled_cop('Layout/ArgumentAlignment')
|
230
229
|
argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
231
230
|
end
|
232
|
-
|
233
|
-
def argument_alignment_config
|
234
|
-
config.for_cop('Layout/ArgumentAlignment')
|
235
|
-
end
|
236
231
|
end
|
237
232
|
end
|
238
233
|
end
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
|
52
52
|
def on_hash(node)
|
53
53
|
# node.loc.begin tells us whether the hash opens with a {
|
54
|
-
# If it doesn't,
|
54
|
+
# If it doesn't, Layout/FirstMethodArgumentLineBreak will handle it
|
55
55
|
return unless node.loc.begin
|
56
56
|
|
57
57
|
check_children_line_break(node, node.children, ignore_last: ignore_last_element?)
|
@@ -63,13 +63,21 @@ module RuboCop
|
|
63
63
|
# }
|
64
64
|
# )
|
65
65
|
#
|
66
|
+
# @example AllowedMethods: ['some_method']
|
67
|
+
#
|
68
|
+
# # good
|
69
|
+
# some_method(foo, bar,
|
70
|
+
# baz)
|
66
71
|
class FirstMethodArgumentLineBreak < Base
|
67
72
|
include FirstElementLineBreak
|
73
|
+
include AllowedMethods
|
68
74
|
extend AutoCorrector
|
69
75
|
|
70
76
|
MSG = 'Add a line break before the first argument of a multi-line method argument list.'
|
71
77
|
|
72
78
|
def on_send(node)
|
79
|
+
return if allowed_method?(node.method_name)
|
80
|
+
|
73
81
|
args = node.arguments.dup
|
74
82
|
|
75
83
|
# If there is a trailing hash arg without explicit braces, like this:
|
@@ -5,10 +5,10 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# Checks the indentation of the first parameter in a method
|
7
7
|
# definition. Parameters after the first one are checked by
|
8
|
-
# Layout/ParameterAlignment
|
8
|
+
# `Layout/ParameterAlignment`, not by this cop.
|
9
9
|
#
|
10
10
|
# For indenting the first argument of method _calls_, check out
|
11
|
-
# Layout/FirstArgumentIndentation
|
11
|
+
# `Layout/FirstArgumentIndentation`, which supports options related to
|
12
12
|
# nesting that are irrelevant for method _definitions_.
|
13
13
|
#
|
14
14
|
# @example
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
# * ignore_implicit (without curly braces)
|
20
20
|
#
|
21
21
|
# Alternatively you can specify multiple allowed styles. That's done by
|
22
|
-
# passing a list of styles to
|
22
|
+
# passing a list of styles to EnforcedHashRocketStyle and EnforcedColonStyle.
|
23
23
|
#
|
24
24
|
# @example EnforcedHashRocketStyle: key (default)
|
25
25
|
# # bad
|
@@ -202,6 +202,7 @@ module RuboCop
|
|
202
202
|
|
203
203
|
ignore_node(last_argument)
|
204
204
|
end
|
205
|
+
alias on_csend on_send
|
205
206
|
alias on_super on_send
|
206
207
|
alias on_yield on_send
|
207
208
|
|
@@ -227,6 +228,7 @@ module RuboCop
|
|
227
228
|
left_sibling = argument_before_hash(node)
|
228
229
|
parent_loc = node.parent.loc
|
229
230
|
selector = left_sibling || parent_loc.selector || parent_loc.expression
|
231
|
+
|
230
232
|
same_line?(selector, node.pairs.first)
|
231
233
|
end
|
232
234
|
|
@@ -248,7 +250,7 @@ module RuboCop
|
|
248
250
|
reset!
|
249
251
|
|
250
252
|
alignment_for(first_pair).each do |alignment|
|
251
|
-
delta = alignment.deltas_for_first_pair(first_pair
|
253
|
+
delta = alignment.deltas_for_first_pair(first_pair)
|
252
254
|
check_delta delta, node: first_pair, alignment: alignment
|
253
255
|
end
|
254
256
|
|
@@ -382,13 +384,13 @@ module RuboCop
|
|
382
384
|
end
|
383
385
|
|
384
386
|
def enforce_first_argument_with_fixed_indentation?
|
385
|
-
|
386
|
-
|
387
|
+
argument_alignment_config = config.for_enabled_cop('Layout/ArgumentAlignment')
|
387
388
|
argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
388
389
|
end
|
389
390
|
|
390
|
-
def
|
391
|
-
|
391
|
+
def same_line?(node1, node2)
|
392
|
+
# Override `Util#same_line?`
|
393
|
+
super || node1.last_line == line(node2)
|
392
394
|
end
|
393
395
|
end
|
394
396
|
end
|
@@ -75,6 +75,7 @@ module RuboCop
|
|
75
75
|
autocorrect(corrector, outermost_send)
|
76
76
|
end
|
77
77
|
end
|
78
|
+
alias on_csend on_send
|
78
79
|
|
79
80
|
private
|
80
81
|
|
@@ -161,7 +162,7 @@ module RuboCop
|
|
161
162
|
|
162
163
|
def end_keyword_before_closing_parenthesis?(parenthesized_send_node)
|
163
164
|
parenthesized_send_node.ancestors.any? do |ancestor|
|
164
|
-
ancestor.
|
165
|
+
ancestor.loc_is?(:end, 'end')
|
165
166
|
end
|
166
167
|
end
|
167
168
|
|
@@ -3,13 +3,12 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
# Checks for indentation that doesn't use the specified number
|
7
|
-
#
|
6
|
+
# Checks for indentation that doesn't use the specified number of spaces.
|
7
|
+
# The indentation width can be configured using the `Width` setting. The default width is 2.
|
8
8
|
#
|
9
|
-
# See also the IndentationConsistency cop which is the companion to this
|
10
|
-
# one.
|
9
|
+
# See also the `Layout/IndentationConsistency` cop which is the companion to this one.
|
11
10
|
#
|
12
|
-
# @example
|
11
|
+
# @example Width: 2 (default)
|
13
12
|
# # bad
|
14
13
|
# class A
|
15
14
|
# def test
|
@@ -59,16 +58,17 @@ module RuboCop
|
|
59
58
|
PATTERN
|
60
59
|
|
61
60
|
def on_rescue(node)
|
62
|
-
|
63
|
-
check_indentation(node.loc.else, else_node)
|
61
|
+
check_indentation(node.loc.else, node.else_branch)
|
64
62
|
end
|
65
63
|
|
66
|
-
def
|
64
|
+
def on_resbody(node)
|
67
65
|
check_indentation(node.loc.keyword, node.body)
|
68
66
|
end
|
67
|
+
alias on_for on_resbody
|
69
68
|
|
70
|
-
|
71
|
-
|
69
|
+
def on_ensure(node)
|
70
|
+
check_indentation(node.loc.keyword, node.branch)
|
71
|
+
end
|
72
72
|
|
73
73
|
def on_kwbegin(node)
|
74
74
|
# Check indentation against end keyword but only if it's first on its
|
@@ -91,6 +91,7 @@ module RuboCop
|
|
91
91
|
end
|
92
92
|
|
93
93
|
alias on_numblock on_block
|
94
|
+
alias on_itblock on_block
|
94
95
|
|
95
96
|
def on_class(node)
|
96
97
|
base = node.loc.keyword
|
@@ -326,8 +327,7 @@ module RuboCop
|
|
326
327
|
if body_node.rescue_type?
|
327
328
|
check_rescue?(body_node)
|
328
329
|
elsif body_node.ensure_type?
|
329
|
-
block_body, = *body_node
|
330
|
-
|
330
|
+
block_body, = *body_node # rubocop:disable InternalAffairs/NodeDestructuring
|
331
331
|
if block_body&.rescue_type?
|
332
332
|
check_rescue?(block_body)
|
333
333
|
else
|
@@ -49,18 +49,70 @@ module RuboCop
|
|
49
49
|
# #ruby=2.7.0
|
50
50
|
# #ruby-gemset=myproject
|
51
51
|
#
|
52
|
+
# @example AllowRBSInlineAnnotation: false (default)
|
53
|
+
#
|
54
|
+
# # bad
|
55
|
+
#
|
56
|
+
# include Enumerable #[Integer]
|
57
|
+
#
|
58
|
+
# attr_reader :name #: String
|
59
|
+
# attr_reader :age #: Integer?
|
60
|
+
#
|
61
|
+
# #: (
|
62
|
+
# #| Integer,
|
63
|
+
# #| String
|
64
|
+
# #| ) -> void
|
65
|
+
# def foo; end
|
66
|
+
#
|
67
|
+
# @example AllowRBSInlineAnnotation: true
|
68
|
+
#
|
69
|
+
# # good
|
70
|
+
#
|
71
|
+
# include Enumerable #[Integer]
|
72
|
+
#
|
73
|
+
# attr_reader :name #: String
|
74
|
+
# attr_reader :age #: Integer?
|
75
|
+
#
|
76
|
+
# #: (
|
77
|
+
# #| Integer,
|
78
|
+
# #| String
|
79
|
+
# #| ) -> void
|
80
|
+
# def foo; end
|
81
|
+
#
|
82
|
+
# @example AllowSteepAnnotation: false (default)
|
83
|
+
#
|
84
|
+
# # bad
|
85
|
+
# [1, 2, 3].each_with_object([]) do |n, list| #$ Array[Integer]
|
86
|
+
# list << n
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# name = 'John' #: String
|
90
|
+
#
|
91
|
+
# @example AllowSteepAnnotation: true
|
92
|
+
#
|
93
|
+
# # good
|
94
|
+
#
|
95
|
+
# [1, 2, 3].each_with_object([]) do |n, list| #$ Array[Integer]
|
96
|
+
# list << n
|
97
|
+
# end
|
98
|
+
#
|
99
|
+
# name = 'John' #: String
|
100
|
+
#
|
52
101
|
class LeadingCommentSpace < Base
|
53
102
|
include RangeHelp
|
54
103
|
extend AutoCorrector
|
55
104
|
|
56
105
|
MSG = 'Missing space after `#`.'
|
57
106
|
|
58
|
-
def on_new_investigation
|
107
|
+
def on_new_investigation # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
59
108
|
processed_source.comments.each do |comment|
|
60
109
|
next unless /\A(?!#\+\+|#--)(#+[^#\s=])/.match?(comment.text)
|
61
110
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
111
|
+
next if shebang_continuation?(comment)
|
62
112
|
next if doxygen_comment_style?(comment)
|
63
113
|
next if gemfile_ruby_comment?(comment)
|
114
|
+
next if rbs_inline_annotation?(comment)
|
115
|
+
next if steep_annotation?(comment)
|
64
116
|
|
65
117
|
add_offense(comment) do |corrector|
|
66
118
|
expr = comment.source_range
|
@@ -84,6 +136,20 @@ module RuboCop
|
|
84
136
|
comment.text.start_with?('#!')
|
85
137
|
end
|
86
138
|
|
139
|
+
def shebang_continuation?(comment)
|
140
|
+
return false unless shebang?(comment)
|
141
|
+
return true if comment.loc.line == 1
|
142
|
+
|
143
|
+
previous_line_comment = processed_source.comment_at_line(comment.loc.line - 1)
|
144
|
+
return false unless previous_line_comment
|
145
|
+
|
146
|
+
# If the comment is a shebang but not on the first line, check if the previous
|
147
|
+
# line has a shebang comment that wasn't marked as an offense; if so, this comment
|
148
|
+
# continues the shebang and is acceptable.
|
149
|
+
shebang?(previous_line_comment) &&
|
150
|
+
!current_offense_locations.include?(previous_line_comment.source_range)
|
151
|
+
end
|
152
|
+
|
87
153
|
def rackup_options?(comment)
|
88
154
|
comment.text.start_with?('#\\')
|
89
155
|
end
|
@@ -115,6 +181,22 @@ module RuboCop
|
|
115
181
|
def gemfile_ruby_comment?(comment)
|
116
182
|
allow_gemfile_ruby_comment? && ruby_comment_in_gemfile?(comment)
|
117
183
|
end
|
184
|
+
|
185
|
+
def allow_rbs_inline_annotation?
|
186
|
+
cop_config['AllowRBSInlineAnnotation']
|
187
|
+
end
|
188
|
+
|
189
|
+
def rbs_inline_annotation?(comment)
|
190
|
+
allow_rbs_inline_annotation? && comment.text.start_with?(/#:|#\[.+\]|#\|/)
|
191
|
+
end
|
192
|
+
|
193
|
+
def allow_steep_annotation?
|
194
|
+
cop_config['AllowSteepAnnotation']
|
195
|
+
end
|
196
|
+
|
197
|
+
def steep_annotation?(comment)
|
198
|
+
allow_steep_annotation? && comment.text.start_with?(/#[$:]/)
|
199
|
+
end
|
118
200
|
end
|
119
201
|
end
|
120
202
|
end
|
@@ -51,6 +51,15 @@ module RuboCop
|
|
51
51
|
private_constant :LINE_1_ENDING, :LINE_2_BEGINNING,
|
52
52
|
:LEADING_STYLE_OFFENSE, :TRAILING_STYLE_OFFENSE
|
53
53
|
|
54
|
+
# When both cops are activated and run in the same iteration of the correction loop,
|
55
|
+
# `Style/StringLiterals` undoes the moving of spaces that
|
56
|
+
# `Layout/LineContinuationLeadingSpace` performs. This is because `Style/StringLiterals`
|
57
|
+
# takes the original string content and transforms it, rather than just modifying the
|
58
|
+
# delimiters, in order to handle escaping for quotes within the string.
|
59
|
+
def self.autocorrect_incompatible_with
|
60
|
+
[Style::StringLiterals]
|
61
|
+
end
|
62
|
+
|
54
63
|
def on_dstr(node)
|
55
64
|
# Quick check if we possibly have line continuations.
|
56
65
|
return unless node.source.include?('\\')
|
@@ -129,9 +138,9 @@ module RuboCop
|
|
129
138
|
|
130
139
|
def message(_range)
|
131
140
|
if enforced_style_leading?
|
132
|
-
'Move trailing spaces to the start of next line.'
|
141
|
+
'Move trailing spaces to the start of the next line.'
|
133
142
|
else
|
134
|
-
'Move leading spaces to the end of previous line.'
|
143
|
+
'Move leading spaces to the end of the previous line.'
|
135
144
|
end
|
136
145
|
end
|
137
146
|
|
@@ -101,7 +101,7 @@ module RuboCop
|
|
101
101
|
ranges << loc.expression
|
102
102
|
elsif literal.heredoc?
|
103
103
|
ranges << loc.heredoc_body
|
104
|
-
elsif loc.respond_to?(:begin) && loc.begin
|
104
|
+
elsif (loc.respond_to?(:begin) && loc.begin) || ignored_parent?(literal)
|
105
105
|
ranges << loc.expression
|
106
106
|
end
|
107
107
|
end
|
@@ -127,6 +127,12 @@ module RuboCop
|
|
127
127
|
comment_ranges(processed_source.comments)
|
128
128
|
end
|
129
129
|
|
130
|
+
def ignored_parent?(node)
|
131
|
+
return false unless node.parent
|
132
|
+
|
133
|
+
node.parent.type?(:regexp, :xstr)
|
134
|
+
end
|
135
|
+
|
130
136
|
def no_space_style?
|
131
137
|
cop_config['EnforcedStyle'] == 'no_space'
|
132
138
|
end
|
@@ -102,7 +102,7 @@ module RuboCop
|
|
102
102
|
|
103
103
|
def strings_concatenated_with_backslash?(dstr_node)
|
104
104
|
dstr_node.multiline? &&
|
105
|
-
dstr_node.children.all? { |c| c.
|
105
|
+
dstr_node.children.all? { |c| c.type?(:str, :dstr) } &&
|
106
106
|
dstr_node.children.none?(&:multiline?)
|
107
107
|
end
|
108
108
|
|
@@ -127,7 +127,7 @@ module RuboCop
|
|
127
127
|
|
128
128
|
def base_column(child)
|
129
129
|
grandparent = child.parent.parent
|
130
|
-
if grandparent&.
|
130
|
+
if grandparent&.pair_type?
|
131
131
|
grandparent.loc.column
|
132
132
|
else
|
133
133
|
child.source_range.source_line =~ /\S/
|