rubocop 1.52.1 → 1.79.2
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 +93 -88
- data/assets/output.css.erb +159 -0
- data/assets/output.html.erb +1 -160
- data/config/default.yml +596 -91
- data/config/internal_affairs.yml +31 -0
- data/config/obsoletion.yml +13 -3
- data/exe/rubocop +4 -3
- data/lib/rubocop/cached_data.rb +21 -5
- data/lib/rubocop/cli/command/auto_generate_config.rb +28 -15
- data/lib/rubocop/cli/command/execute_runner.rb +4 -4
- data/lib/rubocop/cli/command/lsp.rb +19 -0
- data/lib/rubocop/cli/command/show_cops.rb +24 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
- data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +26 -3
- data/lib/rubocop/comment_config.rb +3 -3
- data/lib/rubocop/config.rb +92 -22
- data/lib/rubocop/config_finder.rb +14 -4
- data/lib/rubocop/config_loader.rb +68 -57
- data/lib/rubocop/config_loader_resolver.rb +52 -20
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
- data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +56 -9
- data/lib/rubocop/config_validator.rb +39 -20
- data/lib/rubocop/cop/autocorrect_logic.rb +57 -25
- data/lib/rubocop/cop/base.rb +80 -19
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -2
- data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +3 -3
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/gem_version.rb +6 -7
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +10 -2
- data/lib/rubocop/cop/cop.rb +30 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -12
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +6 -14
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +6 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/documentation.rb +32 -5
- data/lib/rubocop/cop/exclude_limit.rb +1 -1
- data/lib/rubocop/cop/force.rb +12 -0
- data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/dependency_version.rb +5 -7
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -4
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +39 -17
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +10 -2
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- 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 +51 -25
- 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 +6 -5
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +127 -33
- 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 +231 -0
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
- 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 +2 -5
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +9 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +3 -10
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +32 -13
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +51 -9
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +0 -4
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/dot_position.rb +2 -6
- data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +46 -13
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +33 -13
- 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 +14 -8
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +16 -4
- data/lib/rubocop/cop/layout/extra_spacing.rb +5 -11
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -11
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +19 -10
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/hash_alignment.rb +8 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +5 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +16 -16
- data/lib/rubocop/cop/layout/leading_comment_space.rb +84 -2
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +28 -11
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +8 -2
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +4 -2
- data/lib/rubocop/cop/layout/line_length.rb +168 -28
- 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 +21 -6
- 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 +40 -44
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +8 -9
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +10 -2
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_not.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 +3 -3
- data/lib/rubocop/cop/layout/space_around_operators.rb +83 -38
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
- data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
- data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
- data/lib/rubocop/cop/layout/space_inside_parens.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -5
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -3
- data/lib/rubocop/cop/legacy/corrector.rb +12 -2
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_range.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -9
- data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -14
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
- 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 +45 -10
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -2
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +3 -12
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -5
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +110 -32
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +47 -20
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
- data/lib/rubocop/cop/lint/else_layout.rb +0 -2
- data/lib/rubocop/cop/lint/empty_block.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -58
- data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
- data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +3 -5
- data/lib/rubocop/cop/lint/empty_when.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +2 -10
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +24 -23
- data/lib/rubocop/cop/lint/float_comparison.rb +58 -15
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -12
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -4
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +126 -11
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +50 -13
- data/lib/rubocop/cop/lint/loop.rb +6 -12
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/missing_super.rb +33 -7
- data/lib/rubocop/cop/lint/mixed_case_range.rb +113 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -12
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -25
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -7
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +22 -10
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +6 -8
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +13 -4
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
- data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/rand_one.rb +0 -4
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +4 -2
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -12
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +178 -10
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +9 -8
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -6
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
- data/lib/rubocop/cop/lint/redundant_with_index.rb +9 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -2
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -5
- data/lib/rubocop/cop/lint/rescue_type.rb +5 -11
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +31 -13
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
- data/lib/rubocop/cop/lint/script_permission.rb +3 -3
- data/lib/rubocop/cop/lint/self_assignment.rb +71 -10
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +26 -12
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
- data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
- data/lib/rubocop/cop/lint/suppressed_exception.rb +3 -3
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +9 -4
- data/lib/rubocop/cop/lint/syntax.rb +10 -4
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +7 -7
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +4 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +56 -9
- data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -8
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +36 -10
- data/lib/rubocop/cop/lint/useless_assignment.rb +51 -20
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
- data/lib/rubocop/cop/lint/useless_or.rb +98 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -29
- data/lib/rubocop/cop/lint/useless_times.rb +2 -2
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +88 -27
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
- data/lib/rubocop/cop/metrics/block_length.rb +8 -6
- data/lib/rubocop/cop/metrics/block_nesting.rb +20 -8
- data/lib/rubocop/cop/metrics/class_length.rb +23 -17
- 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 +16 -7
- 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 +39 -12
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
- data/lib/rubocop/cop/migration/department_name.rb +2 -2
- data/lib/rubocop/cop/mixin/alignment.rb +8 -4
- data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/code_length.rb +12 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +24 -15
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -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 +23 -12
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +45 -35
- data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
- data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
- data/lib/rubocop/cop/mixin/line_length_help.rb +34 -12
- data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +10 -11
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_literal.rb +2 -2
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +71 -35
- data/lib/rubocop/cop/mixin/range_help.rb +15 -4
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +11 -5
- data/lib/rubocop/cop/mixin/string_help.rb +5 -3
- 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 +22 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +40 -9
- data/lib/rubocop/cop/naming/constant_name.rb +7 -9
- data/lib/rubocop/cop/naming/file_name.rb +5 -7
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
- data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +16 -17
- data/lib/rubocop/cop/naming/method_name.rb +185 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +306 -0
- data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +14 -13
- data/lib/rubocop/cop/naming/variable_name.rb +50 -6
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/offense.rb +4 -5
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/compound_hash.rb +4 -2
- data/lib/rubocop/cop/security/eval.rb +2 -1
- data/lib/rubocop/cop/security/open.rb +3 -2
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +172 -32
- data/lib/rubocop/cop/style/accessor_grouping.rb +43 -9
- data/lib/rubocop/cop/style/alias.rb +11 -9
- 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 +472 -63
- data/lib/rubocop/cop/style/array_first_last.rb +80 -0
- data/lib/rubocop/cop/style/array_intersect.rb +94 -44
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
- data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
- data/lib/rubocop/cop/style/block_comments.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +56 -24
- data/lib/rubocop/cop/style/case_like_if.rb +14 -17
- data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
- data/lib/rubocop/cop/style/class_check.rb +1 -0
- data/lib/rubocop/cop/style/class_equality_comparison.rb +8 -1
- data/lib/rubocop/cop/style/class_vars.rb +3 -3
- data/lib/rubocop/cop/style/collection_compact.rb +25 -15
- data/lib/rubocop/cop/style/collection_methods.rb +4 -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 +25 -9
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +30 -4
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/concat_array_literals.rb +3 -2
- data/lib/rubocop/cop/style/conditional_assignment.rb +53 -38
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/copyright.rb +31 -21
- data/lib/rubocop/cop/style/data_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/date_time.rb +5 -4
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -7
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +1 -1
- data/lib/rubocop/cop/style/documentation.rb +25 -25
- data/lib/rubocop/cop/style/documentation_method.rb +20 -0
- data/lib/rubocop/cop/style/double_negation.rb +4 -4
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +11 -15
- data/lib/rubocop/cop/style/each_with_object.rb +3 -4
- data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
- data/lib/rubocop/cop/style/empty_else.rb +10 -7
- data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
- data/lib/rubocop/cop/style/empty_literal.rb +36 -23
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
- data/lib/rubocop/cop/style/endless_method.rb +150 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +23 -31
- data/lib/rubocop/cop/style/exact_regexp_match.rb +6 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +18 -5
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
- data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
- data/lib/rubocop/cop/style/file_null.rb +89 -0
- data/lib/rubocop/cop/style/file_read.rb +2 -5
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/file_write.rb +2 -5
- data/lib/rubocop/cop/style/float_division.rb +8 -4
- data/lib/rubocop/cop/style/for.rb +4 -2
- data/lib/rubocop/cop/style/format_string.rb +33 -12
- data/lib/rubocop/cop/style/format_string_token.rb +38 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +6 -3
- data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +46 -4
- data/lib/rubocop/cop/style/hash_conversion.rb +26 -9
- data/lib/rubocop/cop/style/hash_each_methods.rb +110 -12
- data/lib/rubocop/cop/style/hash_except.rb +38 -146
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_slice.rb +80 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +35 -7
- data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +57 -9
- data/lib/rubocop/cop/style/if_inside_else.rb +11 -15
- data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +8 -8
- data/lib/rubocop/cop/style/if_with_semicolon.rb +62 -8
- data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -18
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +49 -7
- 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 +5 -4
- data/lib/rubocop/cop/style/lambda_call.rb +14 -3
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +82 -50
- data/lib/rubocop/cop/style/map_into_array.rb +236 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +29 -10
- data/lib/rubocop/cop/style/map_to_set.rb +4 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +59 -25
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +21 -5
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +30 -13
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +35 -5
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -9
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +6 -4
- data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +53 -60
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +8 -15
- data/lib/rubocop/cop/style/next.rb +45 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
- data/lib/rubocop/cop/style/object_then.rb +16 -14
- data/lib/rubocop/cop/style/one_line_conditional.rb +31 -6
- data/lib/rubocop/cop/style/open_struct_use.rb +6 -6
- data/lib/rubocop/cop/style/operator_method_call.rb +32 -8
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +47 -45
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +2 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
- data/lib/rubocop/cop/style/raise_args.rb +19 -14
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +35 -4
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +11 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +17 -4
- data/lib/rubocop/cop/style/redundant_condition.rb +97 -25
- data/lib/rubocop/cop/style/redundant_conditional.rb +2 -10
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +50 -0
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +89 -5
- data/lib/rubocop/cop/style/redundant_each.rb +7 -4
- data/lib/rubocop/cop/style/redundant_exception.rb +33 -13
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +4 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +23 -6
- data/lib/rubocop/cop/style/redundant_format.rb +262 -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 +1 -1
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +73 -20
- data/lib/rubocop/cop/style/redundant_parentheses.rb +155 -40
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +107 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +10 -25
- data/lib/rubocop/cop/style/redundant_return.rb +16 -5
- data/lib/rubocop/cop/style/redundant_self.rb +32 -20
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +12 -5
- data/lib/rubocop/cop/style/redundant_sort.rb +11 -10
- data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
- data/lib/rubocop/cop/style/redundant_string_escape.rb +5 -3
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/require_order.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +18 -4
- data/lib/rubocop/cop/style/return_nil.rb +8 -4
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +137 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +145 -61
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/sample.rb +3 -4
- data/lib/rubocop/cop/style/select_by_regexp.rb +20 -13
- data/lib/rubocop/cop/style/self_assignment.rb +12 -18
- data/lib/rubocop/cop/style/semicolon.rb +10 -5
- data/lib/rubocop/cop/style/send.rb +4 -4
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
- data/lib/rubocop/cop/style/signal_exception.rb +3 -4
- data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +78 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
- data/lib/rubocop/cop/style/slicing_with_range.rb +105 -10
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +75 -88
- data/lib/rubocop/cop/style/special_global_vars.rb +2 -3
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_chars.rb +1 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +15 -15
- data/lib/rubocop/cop/style/string_literals.rb +1 -1
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/strip.rb +7 -4
- data/lib/rubocop/cop/style/struct_inheritance.rb +9 -2
- data/lib/rubocop/cop/style/super_arguments.rb +221 -0
- data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/symbol_array.rb +35 -15
- data/lib/rubocop/cop/style/symbol_proc.rb +78 -6
- data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
- data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +11 -2
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
- data/lib/rubocop/cop/style/unpack_first.rb +11 -14
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/while_until_do.rb +0 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -2
- data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +12 -6
- data/lib/rubocop/cop/style/yoda_expression.rb +10 -8
- data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
- data/lib/rubocop/cop/team.rb +28 -4
- data/lib/rubocop/cop/util.rb +20 -7
- data/lib/rubocop/cop/utils/format_string.rb +10 -5
- data/lib/rubocop/cop/variable_force/assignment.rb +35 -7
- 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 +40 -19
- data/lib/rubocop/cops_documentation_generator.rb +133 -56
- data/lib/rubocop/core_ext/string.rb +2 -6
- data/lib/rubocop/directive_comment.rb +54 -18
- data/lib/rubocop/ext/regexp_node.rb +17 -35
- data/lib/rubocop/ext/regexp_parser.rb +7 -21
- data/lib/rubocop/file_finder.rb +11 -9
- data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
- data/lib/rubocop/formatter/disabled_config_formatter.rb +26 -10
- data/lib/rubocop/formatter/formatter_set.rb +8 -2
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +38 -15
- data/lib/rubocop/formatter/json_formatter.rb +0 -1
- data/lib/rubocop/formatter/junit_formatter.rb +71 -24
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +13 -3
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/formatter/tap_formatter.rb +3 -7
- data/lib/rubocop/formatter.rb +1 -1
- data/lib/rubocop/lockfile.rb +58 -7
- data/lib/rubocop/lsp/diagnostic.rb +189 -0
- data/lib/rubocop/lsp/logger.rb +22 -0
- data/lib/rubocop/lsp/routes.rb +227 -0
- data/lib/rubocop/lsp/runtime.rb +69 -0
- data/lib/rubocop/lsp/server.rb +70 -0
- data/lib/rubocop/lsp/severity.rb +27 -0
- data/lib/rubocop/lsp/stdin_runner.rb +85 -0
- data/lib/rubocop/lsp.rb +36 -0
- data/lib/rubocop/magic_comment.rb +24 -14
- data/lib/rubocop/options.rb +54 -23
- data/lib/rubocop/path_util.rb +21 -10
- data/lib/rubocop/pending_cops_reporter.rb +56 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
- data/lib/rubocop/plugin/load_error.rb +26 -0
- data/lib/rubocop/plugin/loader.rb +100 -0
- data/lib/rubocop/plugin/not_supported_error.rb +29 -0
- data/lib/rubocop/plugin.rb +46 -0
- data/lib/rubocop/rake_task.rb +5 -2
- data/lib/rubocop/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +29 -30
- data/lib/rubocop/rspec/cop_helper.rb +20 -2
- data/lib/rubocop/rspec/expect_offense.rb +31 -12
- data/lib/rubocop/rspec/shared_contexts.rb +114 -21
- data/lib/rubocop/rspec/support.rb +7 -2
- data/lib/rubocop/runner.rb +40 -13
- data/lib/rubocop/server/cache.rb +63 -10
- 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 +4 -4
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/server/core.rb +5 -0
- data/lib/rubocop/server/server_command/exec.rb +0 -1
- data/lib/rubocop/string_interpreter.rb +3 -3
- data/lib/rubocop/target_finder.rb +97 -82
- data/lib/rubocop/target_ruby.rb +102 -77
- data/lib/rubocop/version.rb +67 -9
- data/lib/rubocop/yaml_duplication_checker.rb +20 -26
- data/lib/rubocop.rb +69 -2
- data/lib/ruby_lsp/rubocop/addon.rb +75 -0
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +65 -0
- metadata +136 -42
- data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
- /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
@@ -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,10 +48,15 @@ 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.'
|
50
55
|
|
56
|
+
def on_lvasgn(node)
|
57
|
+
super unless end_with_percent_blank_string?(processed_source)
|
58
|
+
end
|
59
|
+
|
51
60
|
def on_send(node)
|
52
61
|
# Include "the whole expression".
|
53
62
|
node = node.parent while node.parent&.send_type? ||
|
@@ -58,9 +67,14 @@ module RuboCop
|
|
58
67
|
|
59
68
|
register_offense(node)
|
60
69
|
end
|
70
|
+
alias on_csend on_send
|
61
71
|
|
62
72
|
private
|
63
73
|
|
74
|
+
def end_with_percent_blank_string?(processed_source)
|
75
|
+
processed_source.buffer.source.end_with?("%\n\n")
|
76
|
+
end
|
77
|
+
|
64
78
|
def check_assignment(node, _rhs)
|
65
79
|
return unless offense?(node)
|
66
80
|
|
@@ -75,62 +89,44 @@ module RuboCop
|
|
75
89
|
end
|
76
90
|
|
77
91
|
def offense?(node)
|
78
|
-
node.multiline? &&
|
79
|
-
|
92
|
+
return false unless node.multiline? && suitable_as_single_line?(node)
|
93
|
+
return require_backslash?(node) if node.operator_keyword?
|
94
|
+
|
95
|
+
!index_access_call_chained?(node) && !configured_to_not_be_inspected?(node)
|
96
|
+
end
|
97
|
+
|
98
|
+
def require_backslash?(node)
|
99
|
+
processed_source.lines[node.loc.operator.line - 1].end_with?('\\')
|
100
|
+
end
|
101
|
+
|
102
|
+
def index_access_call_chained?(node)
|
103
|
+
return false unless node.send_type? && node.method?(:[])
|
104
|
+
|
105
|
+
node.children.first.send_type? && node.children.first.method?(:[])
|
80
106
|
end
|
81
107
|
|
82
108
|
def configured_to_not_be_inspected?(node)
|
83
109
|
return true if other_cop_takes_precedence?(node)
|
110
|
+
return false if cop_config['InspectBlocks']
|
84
111
|
|
85
|
-
|
86
|
-
any_descendant?(node, :block, &:multiline?))
|
112
|
+
node.any_block_type? || any_descendant?(node, :any_block, &:multiline?)
|
87
113
|
end
|
88
114
|
|
89
115
|
def other_cop_takes_precedence?(node)
|
90
|
-
single_line_block_chain_enabled? && any_descendant?(node, :
|
116
|
+
single_line_block_chain_enabled? && any_descendant?(node, :any_block) do |block_node|
|
91
117
|
block_node.parent.send_type? && block_node.parent.loc.dot && !block_node.multiline?
|
92
118
|
end
|
93
119
|
end
|
94
120
|
|
95
121
|
def single_line_block_chain_enabled?
|
96
|
-
@config.
|
97
|
-
end
|
98
|
-
|
99
|
-
def suitable_as_single_line?(node)
|
100
|
-
!comment_within?(node) &&
|
101
|
-
node.each_descendant(:if, :case, :kwbegin, :def).none? &&
|
102
|
-
node.each_descendant(:dstr, :str).none?(&:heredoc?) &&
|
103
|
-
node.each_descendant(:begin).none? { |b| !b.single_line? }
|
122
|
+
@config.cop_enabled?('Layout/SingleLineBlockChain')
|
104
123
|
end
|
105
124
|
|
106
125
|
def convertible_block?(node)
|
107
|
-
parent = node.parent
|
108
|
-
parent&.block_type? && node == parent.send_node &&
|
109
|
-
(node.parenthesized? || !node.arguments?)
|
110
|
-
end
|
126
|
+
return false unless (parent = node.parent)
|
111
127
|
|
112
|
-
|
113
|
-
|
114
|
-
comment_line_number >= node.first_line && comment_line_number <= node.last_line
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def too_long?(node)
|
119
|
-
lines = processed_source.lines[(node.first_line - 1)...node.last_line]
|
120
|
-
to_single_line(lines.join("\n")).length > max_line_length
|
121
|
-
end
|
122
|
-
|
123
|
-
def to_single_line(source)
|
124
|
-
source
|
125
|
-
.gsub(/" *\\\n\s*'/, %q(" + ')) # Double quote, backslash, and then single quote
|
126
|
-
.gsub(/' *\\\n\s*"/, %q(' + ")) # Single quote, backslash, and then double quote
|
127
|
-
.gsub(/(["']) *\\\n\s*\1/, '') # Double or single quote, backslash, then same quote
|
128
|
-
.gsub(/\n\s*(?=\.\w)/, '') # Extra space within method chaining
|
129
|
-
.gsub(/\s*\\?\n\s*/, ' ') # Any other line break, with or without backslash
|
130
|
-
end
|
131
|
-
|
132
|
-
def max_line_length
|
133
|
-
config.for_cop('Layout/LineLength')['Max']
|
128
|
+
parent.any_block_type? && node == parent.send_node &&
|
129
|
+
(node.parenthesized? || !node.arguments?)
|
134
130
|
end
|
135
131
|
end
|
136
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,24 +91,25 @@ 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, :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
|
-
# It is a wrapper with access modifier.
|
108
|
-
node.child_nodes.first.loc.name
|
106
|
+
# It is a wrapper with receiver of object attribute or access modifier.
|
107
|
+
node.receiver&.source_range || node.child_nodes.first.loc.name
|
109
108
|
end
|
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)
|
@@ -25,16 +25,21 @@ module RuboCop
|
|
25
25
|
|
26
26
|
MSG = 'Put method call on a separate line if chained to a single line block.'
|
27
27
|
|
28
|
+
def self.autocorrect_incompatible_with
|
29
|
+
[Style::MapToHash]
|
30
|
+
end
|
31
|
+
|
28
32
|
def on_send(node)
|
29
33
|
range = offending_range(node)
|
30
34
|
add_offense(range) { |corrector| corrector.insert_before(range, "\n") } if range
|
31
35
|
end
|
36
|
+
alias on_csend on_send
|
32
37
|
|
33
38
|
private
|
34
39
|
|
35
40
|
def offending_range(node)
|
36
41
|
receiver = node.receiver
|
37
|
-
return unless receiver&.
|
42
|
+
return unless receiver&.any_block_type?
|
38
43
|
|
39
44
|
receiver_location = receiver.loc
|
40
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 comma (
|
6
|
+
# Checks for comma (`,`) not followed by some kind of space.
|
7
7
|
#
|
8
8
|
# @example
|
9
9
|
#
|
@@ -24,7 +24,15 @@ module RuboCop
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def kind(token)
|
27
|
-
'comma' if token.comma?
|
27
|
+
'comma' if token.comma? && !before_semicolon?(token)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def before_semicolon?(token)
|
33
|
+
tokens = processed_source.tokens
|
34
|
+
|
35
|
+
tokens[tokens.index(token) + 1].semicolon?
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
@@ -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
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
# foo &. bar
|
20
20
|
# foo &. bar&. buzz
|
21
21
|
# RuboCop:: Cop
|
22
|
-
# RuboCop:: Cop::
|
22
|
+
# RuboCop:: Cop:: Base
|
23
23
|
# :: RuboCop::Cop
|
24
24
|
#
|
25
25
|
# # good
|
@@ -31,7 +31,7 @@ module RuboCop
|
|
31
31
|
# foo&.bar
|
32
32
|
# foo&.bar&.buzz
|
33
33
|
# RuboCop::Cop
|
34
|
-
# RuboCop::Cop::
|
34
|
+
# RuboCop::Cop::Base
|
35
35
|
# ::RuboCop::Cop
|
36
36
|
#
|
37
37
|
class SpaceAroundMethodCallOperator < Base
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
alias on_csend on_send
|
52
52
|
|
53
53
|
def on_const(node)
|
54
|
-
return unless node.loc
|
54
|
+
return unless node.loc?(:double_colon)
|
55
55
|
|
56
56
|
check_space_after_double_colon(node)
|
57
57
|
end
|
@@ -50,6 +50,20 @@ module RuboCop
|
|
50
50
|
#
|
51
51
|
# # good
|
52
52
|
# a ** b
|
53
|
+
#
|
54
|
+
# @example EnforcedStyleForRationalLiterals: no_space (default)
|
55
|
+
# # bad
|
56
|
+
# 1 / 48r
|
57
|
+
#
|
58
|
+
# # good
|
59
|
+
# 1/48r
|
60
|
+
#
|
61
|
+
# @example EnforcedStyleForRationalLiterals: space
|
62
|
+
# # bad
|
63
|
+
# 1/48r
|
64
|
+
#
|
65
|
+
# # good
|
66
|
+
# 1 / 48r
|
53
67
|
class SpaceAroundOperators < Base
|
54
68
|
include PrecedingFollowingAlignment
|
55
69
|
include RangeHelp
|
@@ -64,7 +78,7 @@ module RuboCop
|
|
64
78
|
end
|
65
79
|
|
66
80
|
def on_sclass(node)
|
67
|
-
check_operator(:sclass, node.loc.operator, node
|
81
|
+
check_operator(:sclass, node.loc.operator, node)
|
68
82
|
end
|
69
83
|
|
70
84
|
def on_pair(node)
|
@@ -72,88 +86,97 @@ module RuboCop
|
|
72
86
|
|
73
87
|
return if hash_table_style? && !node.parent.pairs_on_same_line?
|
74
88
|
|
75
|
-
check_operator(:pair, node.loc.operator, node
|
89
|
+
check_operator(:pair, node.loc.operator, node)
|
76
90
|
end
|
77
91
|
|
78
92
|
def on_if(node)
|
79
93
|
return unless node.ternary?
|
80
94
|
|
81
|
-
check_operator(:if, node.loc.question, node.if_branch
|
82
|
-
check_operator(:if, node.loc.colon, node.else_branch
|
95
|
+
check_operator(:if, node.loc.question, node.if_branch)
|
96
|
+
check_operator(:if, node.loc.colon, node.else_branch)
|
83
97
|
end
|
84
98
|
|
85
99
|
def on_resbody(node)
|
86
100
|
return unless node.loc.assoc
|
87
101
|
|
88
|
-
|
89
|
-
|
90
|
-
check_operator(:resbody, node.loc.assoc, variable.source_range)
|
102
|
+
check_operator(:resbody, node.loc.assoc, node.exception_variable)
|
91
103
|
end
|
92
104
|
|
93
105
|
def on_send(node)
|
94
106
|
return if rational_literal?(node)
|
95
107
|
|
96
108
|
if node.setter_method?
|
97
|
-
|
109
|
+
on_setter_method(node)
|
98
110
|
elsif regular_operator?(node)
|
99
|
-
check_operator(:send, node.loc.selector, node.first_argument
|
111
|
+
check_operator(:send, node.loc.selector, node.first_argument)
|
100
112
|
end
|
101
113
|
end
|
102
114
|
|
103
115
|
def on_assignment(node)
|
104
|
-
|
116
|
+
rhs = node.rhs
|
105
117
|
|
106
118
|
return unless rhs
|
107
119
|
|
108
|
-
|
120
|
+
type = node.op_asgn_type? ? :special_asgn : :assignment
|
121
|
+
check_operator(type, node.loc.operator, rhs)
|
109
122
|
end
|
110
123
|
|
111
|
-
def
|
112
|
-
|
124
|
+
def on_class(node)
|
125
|
+
rhs = node.parent_class
|
113
126
|
|
114
|
-
return unless
|
127
|
+
return unless rhs
|
115
128
|
|
116
|
-
check_operator(:
|
129
|
+
check_operator(:class, node.loc.operator, rhs)
|
117
130
|
end
|
118
131
|
|
119
132
|
def on_binary(node)
|
120
|
-
|
133
|
+
rhs = node.rhs
|
121
134
|
|
122
135
|
return unless rhs
|
123
136
|
|
124
|
-
check_operator(:binary, node.loc.operator, rhs
|
137
|
+
check_operator(:binary, node.loc.operator, rhs)
|
125
138
|
end
|
126
139
|
|
127
|
-
def
|
128
|
-
|
140
|
+
def on_setter_method(node)
|
141
|
+
rhs = node.first_argument
|
129
142
|
|
130
|
-
return unless
|
143
|
+
return unless rhs
|
131
144
|
|
132
|
-
check_operator(:special_asgn, node.loc.operator,
|
145
|
+
check_operator(:special_asgn, node.loc.operator, node.first_argument)
|
133
146
|
end
|
134
147
|
|
135
148
|
def on_match_pattern(node)
|
136
149
|
return if target_ruby_version < 3.0
|
137
150
|
|
138
|
-
check_operator(:match_pattern, node.loc.operator, node
|
151
|
+
check_operator(:match_pattern, node.loc.operator, node)
|
152
|
+
end
|
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)
|
139
160
|
end
|
140
161
|
|
141
162
|
alias on_or on_binary
|
142
163
|
alias on_and on_binary
|
143
164
|
alias on_lvasgn on_assignment
|
165
|
+
alias on_casgn on_assignment
|
144
166
|
alias on_masgn on_assignment
|
145
167
|
alias on_ivasgn on_assignment
|
146
168
|
alias on_cvasgn on_assignment
|
147
169
|
alias on_gvasgn on_assignment
|
148
|
-
alias on_class on_binary
|
149
170
|
alias on_or_asgn on_assignment
|
150
171
|
alias on_and_asgn on_assignment
|
151
|
-
alias on_op_asgn
|
172
|
+
alias on_op_asgn on_assignment
|
152
173
|
|
153
174
|
private
|
154
175
|
|
155
176
|
def regular_operator?(send_node)
|
156
|
-
|
177
|
+
return false if send_node.unary_operation? || send_node.dot? || send_node.double_colon?
|
178
|
+
|
179
|
+
operator_with_regular_syntax?(send_node)
|
157
180
|
end
|
158
181
|
|
159
182
|
def operator_with_regular_syntax?(send_node)
|
@@ -164,9 +187,12 @@ module RuboCop
|
|
164
187
|
with_space = range_with_surrounding_space(operator)
|
165
188
|
return if with_space.source.start_with?("\n")
|
166
189
|
|
190
|
+
comment = processed_source.comment_at_line(operator.line)
|
191
|
+
return if comment && with_space.last_column == comment.loc.column
|
192
|
+
|
167
193
|
offense(type, operator, with_space, right_operand) do |msg|
|
168
194
|
add_offense(operator, message: msg) do |corrector|
|
169
|
-
autocorrect(corrector, with_space)
|
195
|
+
autocorrect(corrector, with_space, right_operand)
|
170
196
|
end
|
171
197
|
end
|
172
198
|
end
|
@@ -176,11 +202,15 @@ module RuboCop
|
|
176
202
|
yield msg if msg
|
177
203
|
end
|
178
204
|
|
179
|
-
def autocorrect(corrector, range)
|
180
|
-
|
205
|
+
def autocorrect(corrector, range, right_operand)
|
206
|
+
range_source = range.source
|
207
|
+
|
208
|
+
if range_source.include?('**') && !space_around_exponent_operator?
|
181
209
|
corrector.replace(range, '**')
|
182
|
-
elsif
|
183
|
-
corrector.replace(range,
|
210
|
+
elsif range_source.include?('/') && !space_around_slash_operator?(right_operand)
|
211
|
+
corrector.replace(range, '/')
|
212
|
+
elsif range_source.end_with?("\n")
|
213
|
+
corrector.replace(range, " #{range_source.strip}\n")
|
184
214
|
else
|
185
215
|
enclose_operator_with_space(corrector, range)
|
186
216
|
end
|
@@ -200,14 +230,14 @@ module RuboCop
|
|
200
230
|
end
|
201
231
|
|
202
232
|
def offense_message(type, operator, with_space, right_operand)
|
203
|
-
if should_not_have_surrounding_space?(operator)
|
233
|
+
if should_not_have_surrounding_space?(operator, right_operand)
|
204
234
|
return if with_space.is?(operator.source)
|
205
235
|
|
206
236
|
"Space around operator `#{operator.source}` detected."
|
207
237
|
elsif !/^\s.*\s$/.match?(with_space.source)
|
208
238
|
"Surrounding space missing for operator `#{operator.source}`."
|
209
239
|
elsif excess_leading_space?(type, operator, with_space) ||
|
210
|
-
excess_trailing_space?(right_operand, with_space)
|
240
|
+
excess_trailing_space?(right_operand.source_range, with_space)
|
211
241
|
"Operator `#{operator.source}` should be surrounded " \
|
212
242
|
'by a single space.'
|
213
243
|
end
|
@@ -220,12 +250,12 @@ module RuboCop
|
|
220
250
|
return !aligned_with_operator?(operator) unless type == :assignment
|
221
251
|
|
222
252
|
token = Token.new(operator, nil, operator.source)
|
223
|
-
align_preceding =
|
253
|
+
align_preceding = aligned_with_preceding_equals_operator(token)
|
224
254
|
|
225
255
|
return false if align_preceding == :yes ||
|
226
|
-
|
256
|
+
aligned_with_subsequent_equals_operator(token) == :none
|
227
257
|
|
228
|
-
|
258
|
+
aligned_with_subsequent_equals_operator(token) != :yes
|
229
259
|
end
|
230
260
|
|
231
261
|
def excess_trailing_space?(right_operand, with_space)
|
@@ -238,19 +268,34 @@ module RuboCop
|
|
238
268
|
end
|
239
269
|
|
240
270
|
def hash_table_style?
|
241
|
-
|
271
|
+
return false unless align_hash_cop_config
|
272
|
+
|
273
|
+
enforced_styles = Array(align_hash_cop_config['EnforcedHashRocketStyle'])
|
274
|
+
enforced_styles.include?('table')
|
242
275
|
end
|
243
276
|
|
244
277
|
def space_around_exponent_operator?
|
245
278
|
cop_config['EnforcedStyleForExponentOperator'] == 'space'
|
246
279
|
end
|
247
280
|
|
281
|
+
def space_around_slash_operator?(right_operand)
|
282
|
+
return true unless right_operand.rational_type?
|
283
|
+
|
284
|
+
cop_config['EnforcedStyleForRationalLiterals'] == 'space'
|
285
|
+
end
|
286
|
+
|
248
287
|
def force_equal_sign_alignment?
|
249
288
|
config.for_cop('Layout/ExtraSpacing')['ForceEqualSignAlignment']
|
250
289
|
end
|
251
290
|
|
252
|
-
def should_not_have_surrounding_space?(operator)
|
253
|
-
operator.is?('**')
|
291
|
+
def should_not_have_surrounding_space?(operator, right_operand)
|
292
|
+
if operator.is?('**')
|
293
|
+
!space_around_exponent_operator?
|
294
|
+
elsif operator.is?('/')
|
295
|
+
!space_around_slash_operator?(right_operand)
|
296
|
+
else
|
297
|
+
false
|
298
|
+
end
|
254
299
|
end
|
255
300
|
end
|
256
301
|
end
|
@@ -77,23 +77,33 @@ module RuboCop
|
|
77
77
|
end
|
78
78
|
|
79
79
|
alias on_numblock on_block
|
80
|
+
alias on_itblock on_block
|
80
81
|
|
81
82
|
private
|
82
83
|
|
83
84
|
def check_empty(left_brace, space_plus_brace, used_style)
|
84
|
-
|
85
|
-
|
86
|
-
|
85
|
+
if style_for_empty_braces == used_style
|
86
|
+
handle_different_styles_for_empty_braces(used_style)
|
87
|
+
return
|
88
|
+
elsif !config_to_allow_offenses.key?('Enabled')
|
89
|
+
config_to_allow_offenses['EnforcedStyleForEmptyBraces'] = used_style.to_s
|
90
|
+
end
|
87
91
|
|
88
92
|
if style_for_empty_braces == :space
|
89
|
-
|
90
|
-
|
91
|
-
end
|
93
|
+
range = left_brace
|
94
|
+
msg = MISSING_MSG
|
92
95
|
else
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
96
|
+
range = range_between(space_plus_brace.begin_pos, left_brace.begin_pos)
|
97
|
+
msg = DETECTED_MSG
|
98
|
+
end
|
99
|
+
add_offense(range, message: msg) { |corrector| autocorrect(corrector, range) }
|
100
|
+
end
|
101
|
+
|
102
|
+
def handle_different_styles_for_empty_braces(used_style)
|
103
|
+
if config_to_allow_offenses['EnforcedStyleForEmptyBraces'] &&
|
104
|
+
config_to_allow_offenses['EnforcedStyleForEmptyBraces'].to_sym != used_style
|
105
|
+
config_to_allow_offenses.clear
|
106
|
+
config_to_allow_offenses['Enabled'] = false
|
97
107
|
end
|
98
108
|
end
|
99
109
|
|