rubocop 1.41.1 → 1.57.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +6 -4
- data/config/default.yml +243 -48
- data/config/obsoletion.yml +5 -0
- data/lib/rubocop/cli/command/auto_generate_config.rb +7 -0
- data/lib/rubocop/cli/command/execute_runner.rb +7 -2
- data/lib/rubocop/cli/command/lsp.rb +19 -0
- data/lib/rubocop/cli.rb +59 -10
- data/lib/rubocop/comment_config.rb +19 -0
- data/lib/rubocop/config.rb +14 -10
- data/lib/rubocop/config_finder.rb +2 -2
- data/lib/rubocop/config_loader.rb +20 -23
- data/lib/rubocop/config_loader_resolver.rb +5 -1
- data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
- data/lib/rubocop/config_obsoletion.rb +2 -2
- data/lib/rubocop/cop/autocorrect_logic.rb +31 -13
- data/lib/rubocop/cop/base.rb +96 -73
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -0
- data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_version.rb +2 -2
- data/lib/rubocop/cop/bundler/ordered_gems.rb +9 -1
- data/lib/rubocop/cop/commissioner.rb +8 -2
- data/lib/rubocop/cop/cop.rb +53 -33
- data/lib/rubocop/cop/corrector.rb +31 -11
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +2 -7
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/dependency_version.rb +19 -21
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -1
- data/lib/rubocop/cop/gemspec/development_dependencies.rb +107 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +9 -1
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +37 -13
- data/lib/rubocop/cop/internal_affairs/example_description.rb +42 -21
- data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +3 -3
- data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/location_expression.rb +37 -0
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +6 -6
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb +42 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +11 -3
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +66 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -0
- data/lib/rubocop/cop/internal_affairs.rb +3 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_end_newline.rb +7 -15
- data/lib/rubocop/cop/layout/class_structure.rb +44 -26
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +2 -3
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +2 -6
- data/lib/rubocop/cop/layout/comment_indentation.rb +3 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -5
- data/lib/rubocop/cop/layout/empty_comment.rb +3 -3
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +42 -9
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +28 -5
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -0
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -0
- data/lib/rubocop/cop/layout/end_alignment.rb +9 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +6 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +8 -3
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +25 -34
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +7 -19
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +42 -52
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +38 -55
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +10 -4
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +11 -11
- data/lib/rubocop/cop/layout/indentation_style.rb +5 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +3 -3
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/leading_comment_space.rb +2 -2
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +18 -12
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +17 -13
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -0
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +8 -27
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +7 -26
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +4 -21
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18 -3
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +6 -30
- data/lib/rubocop/cop/layout/redundant_line_break.rb +20 -11
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +9 -1
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_operators.rb +4 -2
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +11 -13
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +3 -1
- data/lib/rubocop/cop/layout/space_inside_parens.rb +3 -3
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +4 -4
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +5 -4
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -3
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +13 -1
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +4 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +22 -25
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +62 -112
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -1
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -2
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +47 -22
- data/lib/rubocop/cop/lint/else_layout.rb +3 -7
- data/lib/rubocop/cop/lint/empty_block.rb +2 -2
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +4 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -4
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +14 -7
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +16 -18
- data/lib/rubocop/cop/lint/identity_comparison.rb +0 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -3
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +9 -0
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +47 -5
- data/lib/rubocop/cop/lint/missing_super.rb +63 -5
- data/lib/rubocop/cop/lint/mixed_case_range.rb +111 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +4 -9
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +10 -7
- data/lib/rubocop/cop/lint/number_conversion.rb +5 -0
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +2 -2
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -0
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +0 -1
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +16 -1
- data/lib/rubocop/cop/lint/percent_string_array.rb +1 -1
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +11 -5
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +5 -5
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +21 -2
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +20 -4
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +35 -15
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +2 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +3 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +3 -3
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +11 -4
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +1 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -2
- data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -12
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +7 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
- data/lib/rubocop/cop/lint/suppressed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +4 -0
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +18 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +23 -9
- data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +10 -7
- data/lib/rubocop/cop/lint/useless_assignment.rb +94 -10
- data/lib/rubocop/cop/lint/useless_method_definition.rb +12 -4
- data/lib/rubocop/cop/lint/useless_rescue.rb +89 -0
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +14 -4
- data/lib/rubocop/cop/lint/useless_times.rb +1 -1
- data/lib/rubocop/cop/lint/void.rb +79 -16
- data/lib/rubocop/cop/metrics/block_length.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +3 -2
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +76 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +27 -0
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -8
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +33 -5
- data/lib/rubocop/cop/migration/department_name.rb +3 -3
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +3 -1
- data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +13 -7
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +62 -23
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +3 -3
- data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
- data/lib/rubocop/cop/mixin/line_length_help.rb +3 -1
- data/lib/rubocop/cop/mixin/min_branches_count.rb +40 -0
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +0 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -2
- 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 +6 -8
- data/lib/rubocop/cop/mixin/range_help.rb +1 -6
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +4 -3
- data/lib/rubocop/cop/mixin/string_help.rb +4 -2
- data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -3
- data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -3
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +5 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
- data/lib/rubocop/cop/naming/inclusive_language.rb +23 -4
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +25 -10
- data/lib/rubocop/cop/naming/method_name.rb +3 -3
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -4
- data/lib/rubocop/cop/naming/variable_name.rb +6 -1
- data/lib/rubocop/cop/registry.rb +37 -30
- data/lib/rubocop/cop/security/compound_hash.rb +2 -1
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -11
- data/lib/rubocop/cop/style/accessor_grouping.rb +43 -17
- data/lib/rubocop/cop/style/alias.rb +9 -8
- data/lib/rubocop/cop/style/arguments_forwarding.rb +280 -62
- data/lib/rubocop/cop/style/array_intersect.rb +14 -6
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +11 -1
- data/lib/rubocop/cop/style/begin_block.rb +1 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +3 -3
- data/lib/rubocop/cop/style/block_delimiters.rb +22 -6
- data/lib/rubocop/cop/style/case_like_if.rb +20 -3
- data/lib/rubocop/cop/style/class_and_module_children.rb +5 -12
- data/lib/rubocop/cop/style/class_equality_comparison.rb +58 -40
- data/lib/rubocop/cop/style/collection_compact.rb +20 -7
- data/lib/rubocop/cop/style/collection_methods.rb +2 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
- data/lib/rubocop/cop/style/combinable_loops.rb +30 -8
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +2 -2
- data/lib/rubocop/cop/style/comparable_clamp.rb +125 -0
- data/lib/rubocop/cop/style/concat_array_literals.rb +32 -4
- data/lib/rubocop/cop/style/conditional_assignment.rb +11 -15
- data/lib/rubocop/cop/style/copyright.rb +6 -3
- data/lib/rubocop/cop/style/data_inheritance.rb +75 -0
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/dir_empty.rb +54 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +3 -3
- data/lib/rubocop/cop/style/documentation.rb +12 -6
- data/lib/rubocop/cop/style/documentation_method.rb +10 -4
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_with_object.rb +1 -1
- data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +8 -8
- data/lib/rubocop/cop/style/exact_regexp_match.rb +68 -0
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
- data/lib/rubocop/cop/style/file_empty.rb +71 -0
- data/lib/rubocop/cop/style/file_read.rb +3 -3
- data/lib/rubocop/cop/style/file_write.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +1 -1
- data/lib/rubocop/cop/style/format_string.rb +24 -3
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +4 -2
- data/lib/rubocop/cop/style/guard_clause.rb +40 -8
- data/lib/rubocop/cop/style/hash_conversion.rb +10 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -10
- data/lib/rubocop/cop/style/hash_except.rb +23 -12
- data/lib/rubocop/cop/style/hash_like_case.rb +3 -9
- data/lib/rubocop/cop/style/hash_syntax.rb +16 -9
- 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 +36 -3
- data/lib/rubocop/cop/style/if_inside_else.rb +6 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +111 -15
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +2 -2
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +5 -5
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +118 -0
- data/lib/rubocop/cop/style/lambda.rb +3 -3
- data/lib/rubocop/cop/style/lambda_call.rb +5 -0
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +2 -2
- data/lib/rubocop/cop/style/map_to_hash.rb +4 -1
- data/lib/rubocop/cop/style/map_to_set.rb +64 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +35 -24
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +44 -37
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +2 -0
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -4
- data/lib/rubocop/cop/style/min_max.rb +3 -3
- data/lib/rubocop/cop/style/min_max_comparison.rb +83 -0
- data/lib/rubocop/cop/style/missing_else.rb +13 -1
- data/lib/rubocop/cop/style/mixin_grouping.rb +5 -5
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +0 -4
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +7 -4
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +19 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +14 -0
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +13 -12
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -11
- data/lib/rubocop/cop/style/nil_lambda.rb +2 -2
- data/lib/rubocop/cop/style/numbered_parameters_limit.rb +11 -3
- data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
- data/lib/rubocop/cop/style/one_line_conditional.rb +3 -6
- data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
- data/lib/rubocop/cop/style/operator_method_call.rb +22 -2
- data/lib/rubocop/cop/style/parallel_assignment.rb +29 -19
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -3
- 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/redundant_argument.rb +6 -1
- data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +10 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +18 -3
- data/lib/rubocop/cop/style/redundant_conditional.rb +2 -14
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +38 -0
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +96 -9
- data/lib/rubocop/cop/style/redundant_exception.rb +32 -12
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +6 -4
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +117 -0
- data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +58 -0
- data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +183 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +26 -8
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +100 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +7 -8
- data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +13 -4
- data/lib/rubocop/cop/style/redundant_return.rb +7 -2
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +8 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +4 -4
- data/lib/rubocop/cop/style/redundant_string_escape.rb +9 -6
- data/lib/rubocop/cop/style/regexp_literal.rb +11 -2
- data/lib/rubocop/cop/style/require_order.rb +16 -17
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -3
- data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
- data/lib/rubocop/cop/style/return_nil.rb +6 -2
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +95 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +2 -2
- data/lib/rubocop/cop/style/select_by_regexp.rb +20 -6
- data/lib/rubocop/cop/style/self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/semicolon.rb +35 -5
- data/lib/rubocop/cop/style/signal_exception.rb +9 -7
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +65 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +9 -5
- data/lib/rubocop/cop/style/special_global_vars.rb +3 -4
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_hash_keys.rb +4 -1
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +35 -15
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -4
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -0
- data/lib/rubocop/cop/style/unpack_first.rb +3 -3
- data/lib/rubocop/cop/style/word_array.rb +54 -1
- data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +17 -8
- data/lib/rubocop/cop/style/yoda_expression.rb +91 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +40 -19
- data/lib/rubocop/cop/team.rb +60 -52
- data/lib/rubocop/cop/util.rb +14 -5
- data/lib/rubocop/cop/utils/regexp_ranges.rb +113 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +45 -4
- data/lib/rubocop/cop/variable_force/scope.rb +3 -3
- data/lib/rubocop/cop/variable_force/variable.rb +5 -3
- data/lib/rubocop/cop/variable_force/variable_table.rb +5 -3
- data/lib/rubocop/cop/variable_force.rb +2 -4
- data/lib/rubocop/cops_documentation_generator.rb +11 -4
- data/lib/rubocop/directive_comment.rb +3 -3
- data/lib/rubocop/ext/comment.rb +18 -0
- data/lib/rubocop/ext/regexp_node.rb +1 -1
- data/lib/rubocop/ext/regexp_parser.rb +5 -2
- data/lib/rubocop/file_finder.rb +4 -7
- data/lib/rubocop/formatter/junit_formatter.rb +4 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +1 -1
- data/lib/rubocop/formatter.rb +0 -1
- data/lib/rubocop/lsp/logger.rb +22 -0
- data/lib/rubocop/lsp/routes.rb +246 -0
- data/lib/rubocop/lsp/runtime.rb +99 -0
- data/lib/rubocop/lsp/server.rb +68 -0
- data/lib/rubocop/lsp/severity.rb +27 -0
- data/lib/rubocop/magic_comment.rb +12 -10
- data/lib/rubocop/options.rb +37 -3
- data/lib/rubocop/path_util.rb +17 -7
- data/lib/rubocop/result_cache.rb +7 -3
- data/lib/rubocop/rspec/cop_helper.rb +2 -2
- data/lib/rubocop/rspec/expect_offense.rb +6 -4
- data/lib/rubocop/rspec/shared_contexts.rb +6 -3
- data/lib/rubocop/rspec/support.rb +1 -0
- data/lib/rubocop/runner.rb +55 -10
- data/lib/rubocop/server/cache.rb +12 -4
- data/lib/rubocop/server/cli.rb +37 -18
- data/lib/rubocop/server/client_command/exec.rb +4 -3
- data/lib/rubocop/server/client_command/start.rb +6 -1
- data/lib/rubocop/server/core.rb +24 -9
- data/lib/rubocop/server/helper.rb +1 -1
- data/lib/rubocop/server/server_command/exec.rb +1 -1
- data/lib/rubocop/string_interpreter.rb +3 -3
- data/lib/rubocop/target_finder.rb +7 -3
- data/lib/rubocop/target_ruby.rb +13 -9
- data/lib/rubocop/version.rb +10 -6
- data/lib/rubocop.rb +31 -0
- metadata +84 -37
@@ -48,11 +48,15 @@ module RuboCop
|
|
48
48
|
|
49
49
|
MSG = 'Redundant line break detected.'
|
50
50
|
|
51
|
+
def on_lvasgn(node)
|
52
|
+
super unless end_with_percent_blank_string?(processed_source)
|
53
|
+
end
|
54
|
+
|
51
55
|
def on_send(node)
|
52
56
|
# Include "the whole expression".
|
53
|
-
node = node.parent while
|
54
|
-
|
55
|
-
node.parent
|
57
|
+
node = node.parent while node.parent&.send_type? ||
|
58
|
+
convertible_block?(node) ||
|
59
|
+
node.parent.is_a?(RuboCop::AST::BinaryOperatorNode)
|
56
60
|
|
57
61
|
return unless offense?(node) && !part_of_ignored_node?(node)
|
58
62
|
|
@@ -61,6 +65,10 @@ module RuboCop
|
|
61
65
|
|
62
66
|
private
|
63
67
|
|
68
|
+
def end_with_percent_blank_string?(processed_source)
|
69
|
+
processed_source.buffer.source.end_with?("%\n\n")
|
70
|
+
end
|
71
|
+
|
64
72
|
def check_assignment(node, _rhs)
|
65
73
|
return unless offense?(node)
|
66
74
|
|
@@ -69,15 +77,14 @@ module RuboCop
|
|
69
77
|
|
70
78
|
def register_offense(node)
|
71
79
|
add_offense(node) do |corrector|
|
72
|
-
corrector.replace(node
|
80
|
+
corrector.replace(node, to_single_line(node.source).strip)
|
73
81
|
end
|
74
82
|
ignore_node(node)
|
75
83
|
end
|
76
84
|
|
77
85
|
def offense?(node)
|
78
|
-
|
79
|
-
|
80
|
-
node.multiline? && !too_long?(node) && suitable_as_single_line?(node)
|
86
|
+
node.multiline? && !too_long?(node) && suitable_as_single_line?(node) &&
|
87
|
+
!configured_to_not_be_inspected?(node)
|
81
88
|
end
|
82
89
|
|
83
90
|
def configured_to_not_be_inspected?(node)
|
@@ -99,9 +106,9 @@ module RuboCop
|
|
99
106
|
|
100
107
|
def suitable_as_single_line?(node)
|
101
108
|
!comment_within?(node) &&
|
102
|
-
node.each_descendant(:if, :case, :kwbegin, :def).none? &&
|
103
|
-
node.each_descendant(:dstr, :str).none?
|
104
|
-
node.each_descendant(:begin).none? { |b| !b.single_line? }
|
109
|
+
node.each_descendant(:if, :case, :kwbegin, :def, :defs).none? &&
|
110
|
+
node.each_descendant(:dstr, :str).none? { |n| n.heredoc? || n.value.include?("\n") } &&
|
111
|
+
node.each_descendant(:begin, :sym).none? { |b| !b.single_line? }
|
105
112
|
end
|
106
113
|
|
107
114
|
def convertible_block?(node)
|
@@ -111,7 +118,9 @@ module RuboCop
|
|
111
118
|
end
|
112
119
|
|
113
120
|
def comment_within?(node)
|
114
|
-
processed_source.comments.map
|
121
|
+
comment_line_numbers = processed_source.comments.map { |comment| comment.loc.line }
|
122
|
+
|
123
|
+
comment_line_numbers.any? do |comment_line_number|
|
115
124
|
comment_line_number >= node.first_line && comment_line_number <= node.last_line
|
116
125
|
end
|
117
126
|
end
|
@@ -102,7 +102,7 @@ module RuboCop
|
|
102
102
|
node.loc.name
|
103
103
|
when :masgn
|
104
104
|
mlhs_node, = *node
|
105
|
-
mlhs_node.
|
105
|
+
mlhs_node.source_range
|
106
106
|
else
|
107
107
|
# It is a wrapper with access modifier.
|
108
108
|
node.child_nodes.first.loc.name
|
@@ -196,7 +196,7 @@ module RuboCop
|
|
196
196
|
if begin_end_alignment_style == 'start_of_line'
|
197
197
|
start_line_range(alignment_node)
|
198
198
|
else
|
199
|
-
alignment_node.
|
199
|
+
alignment_node.source_range
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
@@ -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
|
@@ -241,7 +241,7 @@ module RuboCop
|
|
241
241
|
end
|
242
242
|
|
243
243
|
def accept_namespace_operator?(range)
|
244
|
-
|
244
|
+
range.source == ACCEPT_NAMESPACE_OPERATOR
|
245
245
|
end
|
246
246
|
|
247
247
|
def safe_navigation_call?(range, pos)
|
@@ -256,7 +256,7 @@ module RuboCop
|
|
256
256
|
# regular dotted method calls bind more tightly than operators
|
257
257
|
# so we need to climb up the AST past them
|
258
258
|
node.each_ancestor do |ancestor|
|
259
|
-
return true if ancestor.and_type? || ancestor.or_type?
|
259
|
+
return true if ancestor.and_type? || ancestor.or_type? || ancestor.range_type?
|
260
260
|
return false unless ancestor.send_type?
|
261
261
|
return true if ancestor.operator_method?
|
262
262
|
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
|
@@ -153,7 +153,9 @@ module RuboCop
|
|
153
153
|
private
|
154
154
|
|
155
155
|
def regular_operator?(send_node)
|
156
|
-
|
156
|
+
return false if send_node.unary_operation? || send_node.dot? || send_node.double_colon?
|
157
|
+
|
158
|
+
operator_with_regular_syntax?(send_node)
|
157
159
|
end
|
158
160
|
|
159
161
|
def operator_with_regular_syntax?(send_node)
|
@@ -177,7 +179,7 @@ module RuboCop
|
|
177
179
|
end
|
178
180
|
|
179
181
|
def autocorrect(corrector, range)
|
180
|
-
if
|
182
|
+
if range.source.include?('**') && !space_around_exponent_operator?
|
181
183
|
corrector.replace(range, '**')
|
182
184
|
elsif range.source.end_with?("\n")
|
183
185
|
corrector.replace(range, " #{range.source.strip}\n")
|
@@ -34,6 +34,7 @@ module RuboCop
|
|
34
34
|
|
35
35
|
def on_send(node)
|
36
36
|
return unless regular_method_call_with_arguments?(node)
|
37
|
+
return if node.parenthesized?
|
37
38
|
|
38
39
|
first_arg = node.first_argument.source_range
|
39
40
|
first_arg_with_space = range_with_surrounding_space(first_arg, side: :left)
|
@@ -52,7 +53,6 @@ module RuboCop
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def expect_params_after_method_name?(node)
|
55
|
-
return false if node.parenthesized?
|
56
56
|
return true if no_space_between_method_name_and_first_argument?(node)
|
57
57
|
|
58
58
|
first_arg = node.first_argument
|
@@ -78,8 +78,11 @@ module RuboCop
|
|
78
78
|
def on_array(node)
|
79
79
|
return unless node.square_brackets?
|
80
80
|
|
81
|
-
left, right = array_brackets(node)
|
82
|
-
|
81
|
+
tokens, left, right = array_brackets(node)
|
82
|
+
|
83
|
+
if empty_brackets?(left, right, tokens: tokens)
|
84
|
+
return empty_offenses(node, left, right, EMPTY_MSG)
|
85
|
+
end
|
83
86
|
|
84
87
|
start_ok = next_to_newline?(node, left)
|
85
88
|
end_ok = node.single_line? ? false : end_has_own_line?(right)
|
@@ -90,9 +93,9 @@ module RuboCop
|
|
90
93
|
private
|
91
94
|
|
92
95
|
def autocorrect(corrector, node)
|
93
|
-
left, right = array_brackets(node)
|
96
|
+
tokens, left, right = array_brackets(node)
|
94
97
|
|
95
|
-
if empty_brackets?(left, right)
|
98
|
+
if empty_brackets?(left, right, tokens: tokens)
|
96
99
|
SpaceCorrector.empty_corrections(processed_source, corrector, empty_config, left, right)
|
97
100
|
elsif style == :no_space
|
98
101
|
SpaceCorrector.remove_space(processed_source, corrector, left, right)
|
@@ -104,15 +107,12 @@ module RuboCop
|
|
104
107
|
end
|
105
108
|
|
106
109
|
def array_brackets(node)
|
107
|
-
|
108
|
-
end
|
110
|
+
tokens = processed_source.tokens_within(node)
|
109
111
|
|
110
|
-
|
111
|
-
|
112
|
-
end
|
112
|
+
left = tokens.find(&:left_array_bracket?)
|
113
|
+
right = tokens.reverse_each.find(&:right_bracket?)
|
113
114
|
|
114
|
-
|
115
|
-
processed_source.tokens_within(node).reverse.find(&:right_bracket?)
|
115
|
+
[tokens, left, right]
|
116
116
|
end
|
117
117
|
|
118
118
|
def empty_config
|
@@ -178,8 +178,6 @@ module RuboCop
|
|
178
178
|
def multi_dimensional_array?(node, token, side: :right)
|
179
179
|
offset = side == :right ? -1 : +1
|
180
180
|
i = index_for(node, token) + offset
|
181
|
-
# TODO: change this type check once
|
182
|
-
# https://github.com/rubocop/rubocop-ast/pull/240 is merged
|
183
181
|
i += offset while processed_source.tokens_within(node)[i].new_line?
|
184
182
|
if side == :right
|
185
183
|
processed_source.tokens_within(node)[i].right_bracket?
|
@@ -146,7 +146,7 @@ module RuboCop
|
|
146
146
|
if single_line && /\S$/.match?(inner)
|
147
147
|
no_space(right_brace.begin_pos, right_brace.end_pos, 'Space missing inside }.')
|
148
148
|
else
|
149
|
-
column = node.
|
149
|
+
column = node.source_range.column
|
150
150
|
return if multiline_block?(left_brace, right_brace) &&
|
151
151
|
aligned_braces?(inner, right_brace, column)
|
152
152
|
|
@@ -236,6 +236,8 @@ module RuboCop
|
|
236
236
|
end
|
237
237
|
|
238
238
|
def offense(begin_pos, end_pos, msg, style_param = 'EnforcedStyle')
|
239
|
+
return if begin_pos > end_pos
|
240
|
+
|
239
241
|
range = range_between(begin_pos, end_pos)
|
240
242
|
add_offense(range, message: msg) do |corrector|
|
241
243
|
case range.source
|
@@ -91,7 +91,7 @@ module RuboCop
|
|
91
91
|
if !left_parens?(token1, token2) && !right_parens?(token1, token2)
|
92
92
|
correct_missing_space(token1, token2)
|
93
93
|
else
|
94
|
-
|
94
|
+
correct_extraneous_space_between_consecutive_parens(token1, token2)
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
@@ -112,7 +112,7 @@ module RuboCop
|
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
|
-
def
|
115
|
+
def correct_extraneous_space_between_consecutive_parens(token1, token2)
|
116
116
|
return if range_between(token1.end_pos, token2.begin_pos).source != ' '
|
117
117
|
|
118
118
|
range = range_between(token1.end_pos, token2.begin_pos)
|
@@ -168,7 +168,7 @@ module RuboCop
|
|
168
168
|
# follows, and that the rules for space inside don't apply.
|
169
169
|
return true if token2.comment?
|
170
170
|
|
171
|
-
|
171
|
+
!same_line?(token1, token2) || token1.space_after?
|
172
172
|
end
|
173
173
|
end
|
174
174
|
end
|
@@ -74,7 +74,7 @@ module RuboCop
|
|
74
74
|
|
75
75
|
right_token = closing_bracket(tokens, left_token)
|
76
76
|
|
77
|
-
if empty_brackets?(left_token, right_token)
|
77
|
+
if empty_brackets?(left_token, right_token, tokens: tokens)
|
78
78
|
return empty_offenses(node, left_token, right_token, EMPTY_MSG)
|
79
79
|
end
|
80
80
|
|
@@ -90,9 +90,9 @@ module RuboCop
|
|
90
90
|
private
|
91
91
|
|
92
92
|
def autocorrect(corrector, node)
|
93
|
-
left, right = reference_brackets(node)
|
93
|
+
tokens, left, right = reference_brackets(node)
|
94
94
|
|
95
|
-
if empty_brackets?(left, right)
|
95
|
+
if empty_brackets?(left, right, tokens: tokens)
|
96
96
|
SpaceCorrector.empty_corrections(processed_source, corrector, empty_config, left, right)
|
97
97
|
elsif style == :no_space
|
98
98
|
SpaceCorrector.remove_space(processed_source, corrector, left, right)
|
@@ -104,7 +104,7 @@ module RuboCop
|
|
104
104
|
def reference_brackets(node)
|
105
105
|
tokens = processed_source.tokens_within(node)
|
106
106
|
left = left_ref_bracket(node, tokens)
|
107
|
-
[left, closing_bracket(tokens, left)]
|
107
|
+
[tokens, left, closing_bracket(tokens, left)]
|
108
108
|
end
|
109
109
|
|
110
110
|
def left_ref_bracket(node, tokens)
|
@@ -31,13 +31,14 @@ module RuboCop
|
|
31
31
|
def on_interpolation(begin_node)
|
32
32
|
return if begin_node.multiline?
|
33
33
|
|
34
|
-
|
35
|
-
|
34
|
+
tokens = processed_source.tokens_within(begin_node)
|
35
|
+
left, right = delimiters(begin_node)
|
36
|
+
return if empty_brackets?(left, right, tokens: tokens)
|
36
37
|
|
37
38
|
if style == :no_space
|
38
|
-
no_space_offenses(begin_node,
|
39
|
+
no_space_offenses(begin_node, left, right, NO_SPACE_MSG)
|
39
40
|
else
|
40
|
-
space_offenses(begin_node,
|
41
|
+
space_offenses(begin_node, left, right, SPACE_MSG)
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
@@ -51,6 +51,7 @@ module RuboCop
|
|
51
51
|
# there could be good reasons why it needs to end with a certain
|
52
52
|
# number of newlines.
|
53
53
|
return if ends_in_end?(processed_source)
|
54
|
+
return if end_with_percent_blank_string?(processed_source)
|
54
55
|
|
55
56
|
whitespace_at_end = buffer.source[/\s*\Z/]
|
56
57
|
blank_lines = whitespace_at_end.count("\n") - 1
|
@@ -86,6 +87,10 @@ module RuboCop
|
|
86
87
|
extra&.strip&.start_with?('__END__')
|
87
88
|
end
|
88
89
|
|
90
|
+
def end_with_percent_blank_string?(processed_source)
|
91
|
+
processed_source.buffer.source.end_with?("%\n\n")
|
92
|
+
end
|
93
|
+
|
89
94
|
def message(wanted_blank_lines, blank_lines)
|
90
95
|
case blank_lines
|
91
96
|
when -1
|
@@ -47,7 +47,6 @@ module RuboCop
|
|
47
47
|
MSG = 'Trailing whitespace detected.'
|
48
48
|
|
49
49
|
def on_new_investigation
|
50
|
-
@heredocs = extract_heredocs(processed_source.ast)
|
51
50
|
processed_source.lines.each_with_index do |line, index|
|
52
51
|
next unless line.end_with?(' ', "\t")
|
53
52
|
|
@@ -94,7 +93,7 @@ module RuboCop
|
|
94
93
|
end
|
95
94
|
|
96
95
|
def static?(heredoc)
|
97
|
-
heredoc.
|
96
|
+
heredoc.source.end_with? "'"
|
98
97
|
end
|
99
98
|
|
100
99
|
def skip_heredoc?
|
@@ -102,10 +101,14 @@ module RuboCop
|
|
102
101
|
end
|
103
102
|
|
104
103
|
def find_heredoc(line_number)
|
105
|
-
|
104
|
+
heredocs.each { |node, r| return node if r.include?(line_number) }
|
106
105
|
nil
|
107
106
|
end
|
108
107
|
|
108
|
+
def heredocs
|
109
|
+
@heredocs ||= extract_heredocs(processed_source.ast)
|
110
|
+
end
|
111
|
+
|
109
112
|
def extract_heredocs(ast)
|
110
113
|
return [] unless ast
|
111
114
|
|
@@ -52,6 +52,8 @@ module RuboCop
|
|
52
52
|
# expect { do_something }.to not_change { object.attribute }
|
53
53
|
#
|
54
54
|
class AmbiguousBlockAssociation < Base
|
55
|
+
extend AutoCorrector
|
56
|
+
|
55
57
|
include AllowedMethods
|
56
58
|
include AllowedPattern
|
57
59
|
|
@@ -68,7 +70,9 @@ module RuboCop
|
|
68
70
|
|
69
71
|
message = message(node)
|
70
72
|
|
71
|
-
add_offense(node, message: message)
|
73
|
+
add_offense(node, message: message) do |corrector|
|
74
|
+
wrap_in_parentheses(corrector, node)
|
75
|
+
end
|
72
76
|
end
|
73
77
|
alias on_csend on_send
|
74
78
|
|
@@ -89,6 +93,14 @@ module RuboCop
|
|
89
93
|
|
90
94
|
format(MSG, param: block_param.source, method: block_param.send_node.source)
|
91
95
|
end
|
96
|
+
|
97
|
+
def wrap_in_parentheses(corrector, node)
|
98
|
+
range = node.loc.selector.end.join(node.first_argument.source_range.begin)
|
99
|
+
|
100
|
+
corrector.remove(range)
|
101
|
+
corrector.insert_before(range, '(')
|
102
|
+
corrector.insert_after(node.last_argument, ')')
|
103
|
+
end
|
92
104
|
end
|
93
105
|
end
|
94
106
|
end
|
@@ -38,6 +38,10 @@ module RuboCop
|
|
38
38
|
'a whitespace to the right of the `%<operator>s` if it ' \
|
39
39
|
'should be %<possible>s.'
|
40
40
|
|
41
|
+
def self.autocorrect_incompatible_with
|
42
|
+
[Naming::BlockForwarding]
|
43
|
+
end
|
44
|
+
|
41
45
|
def on_new_investigation
|
42
46
|
processed_source.diagnostics.each do |diagnostic|
|
43
47
|
next unless diagnostic.reason == :ambiguous_prefix
|
@@ -68,7 +68,7 @@ module RuboCop
|
|
68
68
|
MSG = 'Remove debugger entry point `%<source>s`.'
|
69
69
|
|
70
70
|
def on_send(node)
|
71
|
-
return
|
71
|
+
return if !debugger_method?(node) || assumed_usage_context?(node)
|
72
72
|
|
73
73
|
add_offense(node)
|
74
74
|
end
|
@@ -82,44 +82,41 @@ module RuboCop
|
|
82
82
|
def debugger_methods
|
83
83
|
@debugger_methods ||= begin
|
84
84
|
config = cop_config.fetch('DebuggerMethods', [])
|
85
|
-
|
86
|
-
values.map do |v|
|
87
|
-
next unless v
|
88
|
-
|
89
|
-
*receiver, method_name = v.split('.')
|
90
|
-
{
|
91
|
-
receiver: receiver.empty? ? nil : receiver.map(&:to_sym),
|
92
|
-
method_name: method_name.to_sym
|
93
|
-
}
|
94
|
-
end.compact
|
85
|
+
config.is_a?(Array) ? config : config.values.flatten
|
95
86
|
end
|
96
87
|
end
|
97
88
|
|
98
89
|
def debugger_method?(send_node)
|
99
|
-
|
90
|
+
return false if send_node.parent&.send_type? && send_node.parent.receiver == send_node
|
91
|
+
|
92
|
+
debugger_methods.include?(chained_method_name(send_node))
|
93
|
+
end
|
100
94
|
|
101
|
-
|
102
|
-
|
95
|
+
def assumed_usage_context?(node)
|
96
|
+
# Basically, debugger methods are not used as a method argument without arguments.
|
97
|
+
return false unless node.arguments.empty? && node.each_ancestor(:send, :csend).any?
|
98
|
+
return true if assumed_argument?(node)
|
103
99
|
|
104
|
-
|
105
|
-
|
106
|
-
else
|
107
|
-
method[:receiver] == receiver_chain(send_node)
|
108
|
-
end
|
100
|
+
node.each_ancestor.none? do |ancestor|
|
101
|
+
ancestor.block_type? || ancestor.numblock_type? || ancestor.lambda_or_proc?
|
109
102
|
end
|
110
103
|
end
|
111
104
|
|
112
|
-
def
|
113
|
-
|
105
|
+
def chained_method_name(send_node)
|
106
|
+
chained_method_name = send_node.method_name.to_s
|
114
107
|
receiver = send_node.receiver
|
115
|
-
|
116
108
|
while receiver
|
117
|
-
name = receiver.send_type? ? receiver.method_name : receiver.const_name
|
118
|
-
|
109
|
+
name = receiver.send_type? ? receiver.method_name : receiver.const_name
|
110
|
+
chained_method_name = "#{name}.#{chained_method_name}"
|
119
111
|
receiver = receiver.receiver
|
120
112
|
end
|
113
|
+
chained_method_name
|
114
|
+
end
|
115
|
+
|
116
|
+
def assumed_argument?(node)
|
117
|
+
parent = node.parent
|
121
118
|
|
122
|
-
|
119
|
+
parent.call_type? || parent.literal? || parent.pair_type?
|
123
120
|
end
|
124
121
|
end
|
125
122
|
end
|