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
|
@@ -10,6 +10,8 @@ module RuboCop
|
|
|
10
10
|
# condition, an explicit `return` statement, etc. In other contexts, the second operand should
|
|
11
11
|
# be indented regardless of enforced style.
|
|
12
12
|
#
|
|
13
|
+
# In both styles, operators should be aligned when an assignment begins on the next line.
|
|
14
|
+
#
|
|
13
15
|
# @example EnforcedStyle: aligned (default)
|
|
14
16
|
# # bad
|
|
15
17
|
# if a +
|
|
@@ -76,9 +78,8 @@ module RuboCop
|
|
|
76
78
|
end
|
|
77
79
|
|
|
78
80
|
def check_and_or(node)
|
|
79
|
-
lhs, rhs
|
|
80
|
-
range
|
|
81
|
-
check(range, node, lhs, rhs.source_range)
|
|
81
|
+
range = offending_range(node, node.lhs, node.rhs.source_range, style)
|
|
82
|
+
check(range, node, node.lhs, node.rhs.source_range)
|
|
82
83
|
end
|
|
83
84
|
|
|
84
85
|
def offending_range(node, lhs, rhs, given_style)
|
|
@@ -101,10 +102,12 @@ module RuboCop
|
|
|
101
102
|
return true if begins_its_line?(assignment_rhs.source_range)
|
|
102
103
|
end
|
|
103
104
|
|
|
104
|
-
given_style == :aligned
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
return false unless given_style == :aligned
|
|
106
|
+
return true if kw_node_with_special_indentation(node) || assignment_node
|
|
107
|
+
|
|
108
|
+
node = argument_in_method_call(node, :with_or_without_parentheses)
|
|
109
|
+
|
|
110
|
+
node.respond_to?(:def_modifier?) && !node.def_modifier?
|
|
108
111
|
end
|
|
109
112
|
|
|
110
113
|
def message(node, lhs, rhs)
|
|
@@ -119,7 +122,7 @@ module RuboCop
|
|
|
119
122
|
end
|
|
120
123
|
|
|
121
124
|
def right_hand_side(send_node)
|
|
122
|
-
send_node.first_argument
|
|
125
|
+
send_node.first_argument&.source_range
|
|
123
126
|
end
|
|
124
127
|
end
|
|
125
128
|
end
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
#
|
|
7
|
-
# definition are aligned.
|
|
6
|
+
# Check that the parameters on a multi-line method call or definition are aligned.
|
|
8
7
|
#
|
|
9
|
-
# To set the alignment of the first argument, use the
|
|
10
|
-
# FirstParameterIndentation.
|
|
8
|
+
# To set the alignment of the first argument, use the
|
|
9
|
+
# `Layout/FirstParameterIndentation` cop.
|
|
11
10
|
#
|
|
12
11
|
# @example EnforcedStyle: with_first_parameter (default)
|
|
13
12
|
# # good
|
|
@@ -6,25 +6,29 @@ module RuboCop
|
|
|
6
6
|
# Checks whether certain expressions, e.g. method calls, that could fit
|
|
7
7
|
# completely on a single line, are broken up into multiple lines unnecessarily.
|
|
8
8
|
#
|
|
9
|
-
# @example
|
|
9
|
+
# @example
|
|
10
10
|
# # bad
|
|
11
11
|
# foo(
|
|
12
12
|
# a,
|
|
13
13
|
# b
|
|
14
14
|
# )
|
|
15
15
|
#
|
|
16
|
+
# # good
|
|
17
|
+
# foo(a, b)
|
|
18
|
+
#
|
|
19
|
+
# # bad
|
|
16
20
|
# puts 'string that fits on ' \
|
|
17
21
|
# 'a single line'
|
|
18
22
|
#
|
|
23
|
+
# # good
|
|
24
|
+
# puts 'string that fits on a single line'
|
|
25
|
+
#
|
|
26
|
+
# # bad
|
|
19
27
|
# things
|
|
20
28
|
# .select { |thing| thing.cond? }
|
|
21
29
|
# .join('-')
|
|
22
30
|
#
|
|
23
31
|
# # good
|
|
24
|
-
# foo(a, b)
|
|
25
|
-
#
|
|
26
|
-
# puts 'string that fits on a single line'
|
|
27
|
-
#
|
|
28
32
|
# things.select { |thing| thing.cond? }.join('-')
|
|
29
33
|
#
|
|
30
34
|
# @example InspectBlocks: false (default)
|
|
@@ -44,6 +48,7 @@ module RuboCop
|
|
|
44
48
|
#
|
|
45
49
|
class RedundantLineBreak < Base
|
|
46
50
|
include CheckAssignment
|
|
51
|
+
include CheckSingleLineSuitability
|
|
47
52
|
extend AutoCorrector
|
|
48
53
|
|
|
49
54
|
MSG = 'Redundant line break detected.'
|
|
@@ -84,8 +89,8 @@ module RuboCop
|
|
|
84
89
|
end
|
|
85
90
|
|
|
86
91
|
def offense?(node)
|
|
87
|
-
return false
|
|
88
|
-
return require_backslash?(node) if node.
|
|
92
|
+
return false unless node.multiline? && suitable_as_single_line?(node)
|
|
93
|
+
return require_backslash?(node) if node.operator_keyword?
|
|
89
94
|
|
|
90
95
|
!index_access_call_chained?(node) && !configured_to_not_be_inspected?(node)
|
|
91
96
|
end
|
|
@@ -102,58 +107,26 @@ module RuboCop
|
|
|
102
107
|
|
|
103
108
|
def configured_to_not_be_inspected?(node)
|
|
104
109
|
return true if other_cop_takes_precedence?(node)
|
|
110
|
+
return false if cop_config['InspectBlocks']
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
any_descendant?(node, :block, &:multiline?))
|
|
112
|
+
node.any_block_type? || any_descendant?(node, :any_block, &:multiline?)
|
|
108
113
|
end
|
|
109
114
|
|
|
110
115
|
def other_cop_takes_precedence?(node)
|
|
111
|
-
single_line_block_chain_enabled? && any_descendant?(node, :
|
|
116
|
+
single_line_block_chain_enabled? && any_descendant?(node, :any_block) do |block_node|
|
|
112
117
|
block_node.parent.send_type? && block_node.parent.loc.dot && !block_node.multiline?
|
|
113
118
|
end
|
|
114
119
|
end
|
|
115
120
|
|
|
116
121
|
def single_line_block_chain_enabled?
|
|
117
|
-
@config.
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def suitable_as_single_line?(node)
|
|
121
|
-
!comment_within?(node) &&
|
|
122
|
-
node.each_descendant(:if, :case, :kwbegin, :def, :defs).none? &&
|
|
123
|
-
node.each_descendant(:dstr, :str).none? { |n| n.heredoc? || n.value.include?("\n") } &&
|
|
124
|
-
node.each_descendant(:begin, :sym).none? { |b| !b.single_line? }
|
|
122
|
+
@config.cop_enabled?('Layout/SingleLineBlockChain')
|
|
125
123
|
end
|
|
126
124
|
|
|
127
125
|
def convertible_block?(node)
|
|
128
|
-
parent = node.parent
|
|
129
|
-
parent&.block_type? && node == parent.send_node &&
|
|
130
|
-
(node.parenthesized? || !node.arguments?)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def comment_within?(node)
|
|
134
|
-
comment_line_numbers = processed_source.comments.map { |comment| comment.loc.line }
|
|
135
|
-
|
|
136
|
-
comment_line_numbers.any? do |comment_line_number|
|
|
137
|
-
comment_line_number >= node.first_line && comment_line_number <= node.last_line
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def too_long?(node)
|
|
142
|
-
lines = processed_source.lines[(node.first_line - 1)...node.last_line]
|
|
143
|
-
to_single_line(lines.join("\n")).length > max_line_length
|
|
144
|
-
end
|
|
126
|
+
return false unless (parent = node.parent)
|
|
145
127
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
.gsub(/" *\\\n\s*'/, %q(" + ')) # Double quote, backslash, and then single quote
|
|
149
|
-
.gsub(/' *\\\n\s*"/, %q(' + ")) # Single quote, backslash, and then double quote
|
|
150
|
-
.gsub(/(["']) *\\\n\s*\1/, '') # Double or single quote, backslash, then same quote
|
|
151
|
-
.gsub(/\n\s*(?=(&)?\.\w)/, '') # Extra space within method chaining which includes `&.`
|
|
152
|
-
.gsub(/\s*\\?\n\s*/, ' ') # Any other line break, with or without backslash
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
def max_line_length
|
|
156
|
-
config.for_cop('Layout/LineLength')['Max']
|
|
128
|
+
parent.any_block_type? && node == parent.send_node &&
|
|
129
|
+
(node.parenthesized? || !node.arguments?)
|
|
157
130
|
end
|
|
158
131
|
end
|
|
159
132
|
end
|
|
@@ -29,8 +29,7 @@ module RuboCop
|
|
|
29
29
|
MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
|
|
30
30
|
'aligned with `%<beginning>s` at ' \
|
|
31
31
|
'%<begin_loc_line>d, %<begin_loc_column>d.'
|
|
32
|
-
ANCESTOR_TYPES = %i[kwbegin
|
|
33
|
-
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS = %i[def defs].freeze
|
|
32
|
+
ANCESTOR_TYPES = %i[kwbegin any_def class module any_block].freeze
|
|
34
33
|
ALTERNATIVE_ACCESS_MODIFIERS = %i[public_class_method private_class_method].freeze
|
|
35
34
|
|
|
36
35
|
def on_resbody(node)
|
|
@@ -92,17 +91,17 @@ module RuboCop
|
|
|
92
91
|
)
|
|
93
92
|
end
|
|
94
93
|
|
|
94
|
+
# rubocop:disable Metrics/AbcSize
|
|
95
95
|
def alignment_source(node, starting_loc)
|
|
96
96
|
ending_loc =
|
|
97
97
|
case node.type
|
|
98
|
-
when :block, :numblock, :kwbegin
|
|
98
|
+
when :block, :numblock, :itblock, :kwbegin
|
|
99
99
|
node.loc.begin
|
|
100
100
|
when :def, :defs, :class, :module,
|
|
101
101
|
:lvasgn, :ivasgn, :cvasgn, :gvasgn, :casgn
|
|
102
102
|
node.loc.name
|
|
103
103
|
when :masgn
|
|
104
|
-
|
|
105
|
-
mlhs_node.source_range
|
|
104
|
+
node.lhs.source_range
|
|
106
105
|
else
|
|
107
106
|
# It is a wrapper with receiver of object attribute or access modifier.
|
|
108
107
|
node.receiver&.source_range || node.child_nodes.first.loc.name
|
|
@@ -110,6 +109,7 @@ module RuboCop
|
|
|
110
109
|
|
|
111
110
|
range_between(starting_loc.begin_pos, ending_loc.end_pos).source
|
|
112
111
|
end
|
|
112
|
+
# rubocop:enable Metrics/AbcSize
|
|
113
113
|
|
|
114
114
|
# We will use ancestor or wrapper with access modifier.
|
|
115
115
|
|
|
@@ -161,8 +161,7 @@ module RuboCop
|
|
|
161
161
|
end
|
|
162
162
|
|
|
163
163
|
def access_modifier_node(node)
|
|
164
|
-
return nil unless
|
|
165
|
-
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS.include?(node.type)
|
|
164
|
+
return nil unless node.any_def_type?
|
|
166
165
|
|
|
167
166
|
access_modifier_node = node.ancestors.first
|
|
168
167
|
return nil unless access_modifier?(access_modifier_node)
|
|
@@ -195,6 +194,14 @@ module RuboCop
|
|
|
195
194
|
def alignment_location(alignment_node)
|
|
196
195
|
if begin_end_alignment_style == 'start_of_line'
|
|
197
196
|
start_line_range(alignment_node)
|
|
197
|
+
elsif alignment_node.any_block_type?
|
|
198
|
+
# If the alignment node is a block, the `rescue`/`ensure` keyword should
|
|
199
|
+
# be aligned to the start of the block. It is possible that the block's
|
|
200
|
+
# `send_node` spans multiple lines, in which case it should align to the
|
|
201
|
+
# start of the last line.
|
|
202
|
+
send_node = alignment_node.send_node
|
|
203
|
+
range = processed_source.buffer.line_range(send_node.last_line)
|
|
204
|
+
range.adjust(begin_pos: range.source =~ /\S/)
|
|
198
205
|
else
|
|
199
206
|
alignment_node.source_range
|
|
200
207
|
end
|
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
|
39
39
|
|
|
40
40
|
def offending_range(node)
|
|
41
41
|
receiver = node.receiver
|
|
42
|
-
return unless receiver&.
|
|
42
|
+
return unless receiver&.any_block_type?
|
|
43
43
|
|
|
44
44
|
receiver_location = receiver.loc
|
|
45
45
|
closing_block_delimiter_line_num = receiver_location.end.line
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# Checks for colon (
|
|
6
|
+
# Checks for colon (`:`) not followed by some kind of space.
|
|
7
7
|
# N.B. this cop does not handle spaces after a ternary operator, which are
|
|
8
|
-
# instead handled by Layout/SpaceAroundOperators
|
|
8
|
+
# instead handled by `Layout/SpaceAroundOperators`.
|
|
9
9
|
#
|
|
10
10
|
# @example
|
|
11
11
|
# # bad
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# Checks for semicolon (
|
|
6
|
+
# Checks for semicolon (`;`) not followed by some kind of space.
|
|
7
7
|
#
|
|
8
8
|
# @example
|
|
9
9
|
# # bad
|
|
@@ -23,6 +23,16 @@ module RuboCop
|
|
|
23
23
|
def kind(token)
|
|
24
24
|
'semicolon' if token.semicolon?
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
def space_missing?(token1, token2)
|
|
28
|
+
super && !semicolon_sequence?(token1, token2)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def semicolon_sequence?(token, next_token)
|
|
34
|
+
token.semicolon? && next_token.semicolon?
|
|
35
|
+
end
|
|
26
36
|
end
|
|
27
37
|
end
|
|
28
38
|
end
|
|
@@ -16,6 +16,8 @@ module RuboCop
|
|
|
16
16
|
#
|
|
17
17
|
# something = 123if test
|
|
18
18
|
#
|
|
19
|
+
# return(foo + bar)
|
|
20
|
+
#
|
|
19
21
|
# # good
|
|
20
22
|
# something 'test' do |x|
|
|
21
23
|
# end
|
|
@@ -24,6 +26,9 @@ module RuboCop
|
|
|
24
26
|
# end
|
|
25
27
|
#
|
|
26
28
|
# something = 123 if test
|
|
29
|
+
#
|
|
30
|
+
# return (foo + bar)
|
|
31
|
+
#
|
|
27
32
|
class SpaceAroundKeyword < Base
|
|
28
33
|
extend AutoCorrector
|
|
29
34
|
|
|
@@ -33,9 +38,10 @@ module RuboCop
|
|
|
33
38
|
DO = 'do'
|
|
34
39
|
SAFE_NAVIGATION = '&.'
|
|
35
40
|
NAMESPACE_OPERATOR = '::'
|
|
36
|
-
ACCEPT_LEFT_PAREN = %w[break defined? next not rescue
|
|
41
|
+
ACCEPT_LEFT_PAREN = %w[break defined? next not rescue super yield].freeze
|
|
37
42
|
ACCEPT_LEFT_SQUARE_BRACKET = %w[super yield].freeze
|
|
38
43
|
ACCEPT_NAMESPACE_OPERATOR = 'super'
|
|
44
|
+
RESTRICT_ON_SEND = %i[!].freeze
|
|
39
45
|
|
|
40
46
|
def on_and(node)
|
|
41
47
|
check(node, [:operator].freeze) if node.keyword?
|
|
@@ -256,7 +262,7 @@ module RuboCop
|
|
|
256
262
|
# regular dotted method calls bind more tightly than operators
|
|
257
263
|
# so we need to climb up the AST past them
|
|
258
264
|
node.each_ancestor do |ancestor|
|
|
259
|
-
return true if ancestor.
|
|
265
|
+
return true if ancestor.operator_keyword? || ancestor.range_type?
|
|
260
266
|
return false unless ancestor.send_type?
|
|
261
267
|
return true if ancestor.operator_method?
|
|
262
268
|
end
|
|
@@ -99,51 +99,50 @@ module RuboCop
|
|
|
99
99
|
def on_resbody(node)
|
|
100
100
|
return unless node.loc.assoc
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
check_operator(:resbody, node.loc.assoc, variable)
|
|
102
|
+
check_operator(:resbody, node.loc.assoc, node.exception_variable)
|
|
105
103
|
end
|
|
106
104
|
|
|
107
105
|
def on_send(node)
|
|
108
106
|
return if rational_literal?(node)
|
|
109
107
|
|
|
110
108
|
if node.setter_method?
|
|
111
|
-
|
|
109
|
+
on_setter_method(node)
|
|
112
110
|
elsif regular_operator?(node)
|
|
113
111
|
check_operator(:send, node.loc.selector, node.first_argument)
|
|
114
112
|
end
|
|
115
113
|
end
|
|
116
114
|
|
|
117
115
|
def on_assignment(node)
|
|
118
|
-
|
|
116
|
+
rhs = node.rhs
|
|
119
117
|
|
|
120
118
|
return unless rhs
|
|
121
119
|
|
|
122
|
-
|
|
120
|
+
type = node.op_asgn_type? ? :special_asgn : :assignment
|
|
121
|
+
check_operator(type, node.loc.operator, rhs)
|
|
123
122
|
end
|
|
124
123
|
|
|
125
|
-
def
|
|
126
|
-
|
|
124
|
+
def on_class(node)
|
|
125
|
+
rhs = node.parent_class
|
|
127
126
|
|
|
128
|
-
return unless
|
|
127
|
+
return unless rhs
|
|
129
128
|
|
|
130
|
-
check_operator(:
|
|
129
|
+
check_operator(:class, node.loc.operator, rhs)
|
|
131
130
|
end
|
|
132
131
|
|
|
133
132
|
def on_binary(node)
|
|
134
|
-
|
|
133
|
+
rhs = node.rhs
|
|
135
134
|
|
|
136
135
|
return unless rhs
|
|
137
136
|
|
|
138
137
|
check_operator(:binary, node.loc.operator, rhs)
|
|
139
138
|
end
|
|
140
139
|
|
|
141
|
-
def
|
|
142
|
-
|
|
140
|
+
def on_setter_method(node)
|
|
141
|
+
rhs = node.first_argument
|
|
143
142
|
|
|
144
|
-
return unless
|
|
143
|
+
return unless rhs
|
|
145
144
|
|
|
146
|
-
check_operator(:special_asgn, node.loc.operator,
|
|
145
|
+
check_operator(:special_asgn, node.loc.operator, node.first_argument)
|
|
147
146
|
end
|
|
148
147
|
|
|
149
148
|
def on_match_pattern(node)
|
|
@@ -152,17 +151,25 @@ module RuboCop
|
|
|
152
151
|
check_operator(:match_pattern, node.loc.operator, node)
|
|
153
152
|
end
|
|
154
153
|
|
|
154
|
+
def on_match_alt(node)
|
|
155
|
+
check_operator(:match_alt, node.loc.operator, node)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def on_match_as(node)
|
|
159
|
+
check_operator(:match_as, node.loc.operator, node)
|
|
160
|
+
end
|
|
161
|
+
|
|
155
162
|
alias on_or on_binary
|
|
156
163
|
alias on_and on_binary
|
|
157
164
|
alias on_lvasgn on_assignment
|
|
165
|
+
alias on_casgn on_assignment
|
|
158
166
|
alias on_masgn on_assignment
|
|
159
167
|
alias on_ivasgn on_assignment
|
|
160
168
|
alias on_cvasgn on_assignment
|
|
161
169
|
alias on_gvasgn on_assignment
|
|
162
|
-
alias on_class on_binary
|
|
163
170
|
alias on_or_asgn on_assignment
|
|
164
171
|
alias on_and_asgn on_assignment
|
|
165
|
-
alias on_op_asgn
|
|
172
|
+
alias on_op_asgn on_assignment
|
|
166
173
|
|
|
167
174
|
private
|
|
168
175
|
|
|
@@ -243,12 +250,12 @@ module RuboCop
|
|
|
243
250
|
return !aligned_with_operator?(operator) unless type == :assignment
|
|
244
251
|
|
|
245
252
|
token = Token.new(operator, nil, operator.source)
|
|
246
|
-
align_preceding =
|
|
253
|
+
align_preceding = aligned_with_preceding_equals_operator(token)
|
|
247
254
|
|
|
248
255
|
return false if align_preceding == :yes ||
|
|
249
|
-
|
|
256
|
+
aligned_with_subsequent_equals_operator(token) == :none
|
|
250
257
|
|
|
251
|
-
|
|
258
|
+
aligned_with_subsequent_equals_operator(token) != :yes
|
|
252
259
|
end
|
|
253
260
|
|
|
254
261
|
def excess_trailing_space?(right_operand, with_space)
|
|
@@ -261,7 +268,10 @@ module RuboCop
|
|
|
261
268
|
end
|
|
262
269
|
|
|
263
270
|
def hash_table_style?
|
|
264
|
-
|
|
271
|
+
return false unless align_hash_cop_config
|
|
272
|
+
|
|
273
|
+
enforced_styles = Array(align_hash_cop_config['EnforcedHashRocketStyle'])
|
|
274
|
+
enforced_styles.include?('table')
|
|
265
275
|
end
|
|
266
276
|
|
|
267
277
|
def space_around_exponent_operator?
|
|
@@ -22,51 +22,18 @@ module RuboCop
|
|
|
22
22
|
RESTRICT_ON_SEND = %i[[] []=].freeze
|
|
23
23
|
|
|
24
24
|
def on_send(node)
|
|
25
|
-
return
|
|
25
|
+
return if node.loc.dot
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
receiver_end_pos = node.receiver.source_range.end_pos
|
|
28
|
+
selector_begin_pos = node.loc.selector.begin_pos
|
|
29
|
+
return if receiver_end_pos >= selector_begin_pos
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
31
|
+
range = range_between(receiver_end_pos, selector_begin_pos)
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
receiver_end_pos = node.receiver.source_range.end_pos
|
|
38
|
-
selector_begin_pos = node.loc.selector.begin_pos
|
|
39
|
-
return if receiver_end_pos >= selector_begin_pos
|
|
40
|
-
return if dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
|
41
|
-
|
|
42
|
-
range_between(receiver_end_pos, selector_begin_pos)
|
|
43
|
-
elsif node.method?(:[]=)
|
|
44
|
-
offense_range_for_assignment(node, begin_pos)
|
|
33
|
+
add_offense(range) do |corrector|
|
|
34
|
+
corrector.remove(range)
|
|
45
35
|
end
|
|
46
36
|
end
|
|
47
|
-
|
|
48
|
-
def dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
|
49
|
-
return false unless node.loc.respond_to?(:dot) && (dot = node.loc.dot)
|
|
50
|
-
|
|
51
|
-
dot.begin_pos == receiver_end_pos && dot.end_pos == selector_begin_pos
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def offense_range_for_assignment(node, begin_pos)
|
|
55
|
-
end_pos = node.receiver.source_range.end_pos
|
|
56
|
-
|
|
57
|
-
return if begin_pos - end_pos == 1 ||
|
|
58
|
-
(range = range_between(end_pos, begin_pos - 1)).source.start_with?('[')
|
|
59
|
-
|
|
60
|
-
range
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def register_offense(range)
|
|
64
|
-
add_offense(range) { |corrector| corrector.remove(range) }
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def reference_variable_with_brackets?(node)
|
|
68
|
-
node.receiver&.variable? && node.method?(:[]) && node.arguments.size == 1
|
|
69
|
-
end
|
|
70
37
|
end
|
|
71
38
|
end
|
|
72
39
|
end
|
|
@@ -6,15 +6,19 @@ module RuboCop
|
|
|
6
6
|
# Checks that brackets used for array literals have or don't have
|
|
7
7
|
# surrounding space depending on configuration.
|
|
8
8
|
#
|
|
9
|
+
# Array pattern matching is handled in the same way.
|
|
10
|
+
#
|
|
9
11
|
# @example EnforcedStyle: no_space (default)
|
|
10
12
|
# # The `no_space` style enforces that array literals have
|
|
11
13
|
# # no surrounding space.
|
|
12
14
|
#
|
|
13
15
|
# # bad
|
|
14
16
|
# array = [ a, b, c, d ]
|
|
17
|
+
# array = [ a, [ b, c ]]
|
|
15
18
|
#
|
|
16
19
|
# # good
|
|
17
20
|
# array = [a, b, c, d]
|
|
21
|
+
# array = [a, [b, c]]
|
|
18
22
|
#
|
|
19
23
|
# @example EnforcedStyle: space
|
|
20
24
|
# # The `space` style enforces that array literals have
|
|
@@ -22,9 +26,11 @@ module RuboCop
|
|
|
22
26
|
#
|
|
23
27
|
# # bad
|
|
24
28
|
# array = [a, b, c, d]
|
|
29
|
+
# array = [ a, [ b, c ]]
|
|
25
30
|
#
|
|
26
31
|
# # good
|
|
27
32
|
# array = [ a, b, c, d ]
|
|
33
|
+
# array = [ a, [ b, c ] ]
|
|
28
34
|
#
|
|
29
35
|
# @example EnforcedStyle: compact
|
|
30
36
|
# # The `compact` style normally requires a space inside
|
|
@@ -32,6 +38,7 @@ module RuboCop
|
|
|
32
38
|
# # or right brackets are collapsed together in nested arrays.
|
|
33
39
|
#
|
|
34
40
|
# # bad
|
|
41
|
+
# array = [a, b, c, d]
|
|
35
42
|
# array = [ a, [ b, c ] ]
|
|
36
43
|
# array = [
|
|
37
44
|
# [ a ],
|
|
@@ -39,6 +46,7 @@ module RuboCop
|
|
|
39
46
|
# ]
|
|
40
47
|
#
|
|
41
48
|
# # good
|
|
49
|
+
# array = [ a, b, c, d ]
|
|
42
50
|
# array = [ a, [ b, c ]]
|
|
43
51
|
# array = [[ a ],
|
|
44
52
|
# [ b, c ]]
|
|
@@ -76,9 +84,11 @@ module RuboCop
|
|
|
76
84
|
EMPTY_MSG = '%<command>s space inside empty array brackets.'
|
|
77
85
|
|
|
78
86
|
def on_array(node)
|
|
79
|
-
return
|
|
87
|
+
return if node.array_type? && !node.square_brackets?
|
|
80
88
|
|
|
89
|
+
node = find_node_with_brackets(node)
|
|
81
90
|
tokens, left, right = array_brackets(node)
|
|
91
|
+
return unless left && right
|
|
82
92
|
|
|
83
93
|
if empty_brackets?(left, right, tokens: tokens)
|
|
84
94
|
return empty_offenses(node, left, right, EMPTY_MSG)
|
|
@@ -89,9 +99,14 @@ module RuboCop
|
|
|
89
99
|
|
|
90
100
|
issue_offenses(node, left, right, start_ok, end_ok)
|
|
91
101
|
end
|
|
102
|
+
alias on_array_pattern on_array
|
|
92
103
|
|
|
93
104
|
private
|
|
94
105
|
|
|
106
|
+
def find_node_with_brackets(node)
|
|
107
|
+
node.ancestors.find(&:const_pattern_type?) || node
|
|
108
|
+
end
|
|
109
|
+
|
|
95
110
|
def autocorrect(corrector, node)
|
|
96
111
|
tokens, left, right = array_brackets(node)
|
|
97
112
|
|
|
@@ -109,7 +124,7 @@ module RuboCop
|
|
|
109
124
|
def array_brackets(node)
|
|
110
125
|
tokens = processed_source.tokens_within(node)
|
|
111
126
|
|
|
112
|
-
left = tokens.find(&:
|
|
127
|
+
left = tokens.find(&:left_bracket?)
|
|
113
128
|
right = tokens.reverse_each.find(&:right_bracket?)
|
|
114
129
|
|
|
115
130
|
[tokens, left, right]
|
|
@@ -182,7 +197,7 @@ module RuboCop
|
|
|
182
197
|
if side == :right
|
|
183
198
|
processed_source.tokens_within(node)[i].right_bracket?
|
|
184
199
|
else
|
|
185
|
-
processed_source.tokens_within(node)[i].
|
|
200
|
+
processed_source.tokens_within(node)[i].left_bracket?
|
|
186
201
|
end
|
|
187
202
|
end
|
|
188
203
|
|