rubocop 1.26.1 → 1.32.0
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/README.md +6 -4
- data/config/default.yml +170 -31
- data/config/obsoletion.yml +12 -1
- data/exe/rubocop +15 -7
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +19 -4
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/cli/command/suggest_extensions.rb +4 -4
- data/lib/rubocop/cli.rb +2 -0
- data/lib/rubocop/config.rb +5 -1
- data/lib/rubocop/config_loader.rb +3 -1
- data/lib/rubocop/config_loader_resolver.rb +1 -1
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +3 -1
- data/lib/rubocop/config_validator.rb +21 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +8 -2
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +6 -2
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -7
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +5 -5
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -2
- data/lib/rubocop/cop/corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +4 -2
- data/lib/rubocop/cop/correctors/if_then_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +7 -1
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/dependency_version.rb +156 -0
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +92 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +5 -12
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +20 -20
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +5 -1
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +96 -0
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +80 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -5
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -1
- 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/useless_restrict_on_send.rb +60 -0
- data/lib/rubocop/cop/internal_affairs.rb +3 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +22 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +17 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/comment_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/condition_position.rb +1 -1
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_comment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +25 -4
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +5 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +10 -10
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +10 -10
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +28 -28
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +21 -14
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +52 -13
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +2 -0
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +11 -9
- data/lib/rubocop/cop/layout/initial_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +1 -1
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +112 -0
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +130 -0
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/line_length.rb +7 -5
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -2
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -2
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +45 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/redundant_line_break.rb +4 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +3 -3
- data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +10 -10
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +8 -6
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +1 -1
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +9 -9
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +3 -3
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +10 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +7 -7
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -5
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +51 -0
- data/lib/rubocop/cop/lint/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +11 -5
- data/lib/rubocop/cop/lint/deprecated_constants.rb +1 -1
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_require.rb +11 -2
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +3 -3
- data/lib/rubocop/cop/lint/empty_block.rb +1 -1
- data/lib/rubocop/cop/lint/empty_class.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +4 -2
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
- data/lib/rubocop/cop/lint/empty_file.rb +1 -1
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +4 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +4 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +11 -4
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +2 -2
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +10 -3
- data/lib/rubocop/cop/lint/literal_as_condition.rb +6 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/loop.rb +2 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/missing_super.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +157 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +5 -5
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +11 -5
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +2 -2
- 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/raise_exception.rb +2 -2
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +6 -6
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +10 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
- 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 +51 -0
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +3 -3
- data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +57 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/return_in_void_context.rb +6 -18
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +38 -1
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +1 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +11 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +3 -3
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +2 -3
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/to_json.rb +1 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +2 -2
- data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +3 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +5 -5
- data/lib/rubocop/cop/lint/unused_block_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +1 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +2 -3
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -2
- data/lib/rubocop/cop/lint/useless_times.rb +2 -2
- data/lib/rubocop/cop/lint/void.rb +1 -1
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +2 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +1 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -1
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -3
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +22 -3
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +40 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +4 -0
- data/lib/rubocop/cop/mixin/comments_help.rb +24 -2
- data/lib/rubocop/cop/mixin/def_node.rb +2 -7
- data/lib/rubocop/cop/mixin/duplication.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +8 -4
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +34 -12
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +60 -1
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +2 -2
- data/lib/rubocop/cop/mixin/range_help.rb +7 -3
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -1
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +4 -4
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -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 +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
- data/lib/rubocop/cop/naming/inclusive_language.rb +3 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +6 -6
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +11 -3
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_name.rb +10 -1
- data/lib/rubocop/cop/naming/variable_number.rb +28 -18
- data/lib/rubocop/cop/offense.rb +1 -1
- data/lib/rubocop/cop/security/compound_hash.rb +105 -0
- data/lib/rubocop/cop/security/eval.rb +1 -1
- data/lib/rubocop/cop/security/json_load.rb +1 -1
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -1
- data/lib/rubocop/cop/security/yaml_load.rb +2 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +4 -4
- data/lib/rubocop/cop/style/alias.rb +4 -4
- data/lib/rubocop/cop/style/and_or.rb +12 -12
- data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -1
- data/lib/rubocop/cop/style/array_coercion.rb +1 -1
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +1 -1
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
- data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +9 -2
- data/lib/rubocop/cop/style/case_equality.rb +1 -1
- data/lib/rubocop/cop/style/case_like_if.rb +2 -2
- data/lib/rubocop/cop/style/character_literal.rb +1 -1
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/class_check.rb +1 -1
- data/lib/rubocop/cop/style/class_equality_comparison.rb +23 -1
- data/lib/rubocop/cop/style/class_methods.rb +1 -1
- data/lib/rubocop/cop/style/class_methods_definitions.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +1 -1
- data/lib/rubocop/cop/style/collection_compact.rb +4 -4
- data/lib/rubocop/cop/style/collection_methods.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/combinable_loops.rb +1 -1
- 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 +4 -4
- data/lib/rubocop/cop/style/conditional_assignment.rb +2 -1
- data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
- data/lib/rubocop/cop/style/date_time.rb +2 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +4 -1
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +60 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- 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 +3 -4
- data/lib/rubocop/cop/style/empty_else.rb +40 -3
- data/lib/rubocop/cop/style/empty_heredoc.rb +59 -0
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_literal.rb +2 -2
- data/lib/rubocop/cop/style/empty_method.rb +17 -2
- data/lib/rubocop/cop/style/encoding.rb +2 -2
- data/lib/rubocop/cop/style/end_block.rb +1 -1
- data/lib/rubocop/cop/style/endless_method.rb +1 -1
- data/lib/rubocop/cop/style/env_home.rb +56 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
- data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -2
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/fetch_env_var.rb +132 -0
- data/lib/rubocop/cop/style/file_write.rb +12 -0
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +1 -1
- data/lib/rubocop/cop/style/format_string.rb +1 -1
- data/lib/rubocop/cop/style/format_string_token.rb +54 -17
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +6 -3
- data/lib/rubocop/cop/style/global_std_stream.rb +1 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -1
- data/lib/rubocop/cop/style/guard_clause.rb +51 -4
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +1 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_except.rb +89 -9
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -1
- data/lib/rubocop/cop/style/hash_transform_values.rb +4 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +4 -4
- data/lib/rubocop/cop/style/if_unless_modifier.rb +5 -4
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +4 -2
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +3 -3
- data/lib/rubocop/cop/style/in_pattern_then.rb +1 -1
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +1 -1
- data/lib/rubocop/cop/style/lambda_call.rb +1 -1
- data/lib/rubocop/cop/style/line_end_concatenation.rb +2 -2
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +136 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +3 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +5 -5
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +13 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/min_max.rb +1 -1
- data/lib/rubocop/cop/style/missing_else.rb +24 -24
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
- data/lib/rubocop/cop/style/mixin_grouping.rb +2 -2
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +3 -3
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -2
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +2 -4
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +37 -11
- data/lib/rubocop/cop/style/multiline_when_then.rb +2 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -1
- data/lib/rubocop/cop/style/nested_file_dirname.rb +1 -1
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -2
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +20 -8
- data/lib/rubocop/cop/style/next.rb +1 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
- data/lib/rubocop/cop/style/nil_lambda.rb +2 -2
- data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
- data/lib/rubocop/cop/style/not.rb +2 -2
- data/lib/rubocop/cop/style/numbered_parameters.rb +1 -1
- data/lib/rubocop/cop/style/numbered_parameters_limit.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +30 -8
- data/lib/rubocop/cop/style/object_then.rb +69 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -1
- data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -2
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +2 -2
- data/lib/rubocop/cop/style/or_assignment.rb +1 -1
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
- 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/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +10 -4
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -2
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +17 -6
- data/lib/rubocop/cop/style/redundant_capital_w.rb +2 -3
- data/lib/rubocop/cop/style/redundant_condition.rb +113 -12
- data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -1
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_initialize.rb +154 -0
- data/lib/rubocop/cop/style/redundant_interpolation.rb +22 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +3 -2
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +8 -3
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +2 -2
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +3 -4
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/rescue_standard_error.rb +13 -13
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +17 -9
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +28 -4
- data/lib/rubocop/cop/style/send.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +1 -1
- data/lib/rubocop/cop/style/single_argument_dig.rb +5 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +2 -2
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +35 -16
- data/lib/rubocop/cop/style/special_global_vars.rb +66 -8
- data/lib/rubocop/cop/style/static_class.rb +1 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_chars.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +6 -7
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/strip.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +4 -4
- data/lib/rubocop/cop/style/swap_values.rb +2 -2
- data/lib/rubocop/cop/style/symbol_array.rb +8 -5
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +37 -5
- data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -3
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -1
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +11 -9
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +5 -2
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +3 -4
- data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
- data/lib/rubocop/cop/team.rb +2 -2
- data/lib/rubocop/cop/util.rb +2 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cops_documentation_generator.rb +19 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +10 -7
- data/lib/rubocop/formatter/formatter_set.rb +20 -18
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +15 -2
- data/lib/rubocop/formatter/html_formatter.rb +2 -10
- data/lib/rubocop/formatter/markdown_formatter.rb +78 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +8 -2
- data/lib/rubocop/formatter/simple_text_formatter.rb +9 -8
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -2
- data/lib/rubocop/formatter.rb +31 -0
- data/lib/rubocop/magic_comment.rb +31 -5
- data/lib/rubocop/options.rb +103 -34
- data/lib/rubocop/rake_task.rb +34 -9
- data/lib/rubocop/result_cache.rb +13 -4
- data/lib/rubocop/rspec/cop_helper.rb +2 -2
- data/lib/rubocop/rspec/expect_offense.rb +3 -3
- data/lib/rubocop/rspec/parallel_formatter.rb +1 -1
- data/lib/rubocop/rspec/shared_contexts.rb +31 -11
- data/lib/rubocop/rspec/support.rb +14 -0
- data/lib/rubocop/runner.rb +37 -7
- data/lib/rubocop/server/cache.rb +109 -0
- data/lib/rubocop/server/cli.rb +104 -0
- data/lib/rubocop/server/client_command/base.rb +44 -0
- data/lib/rubocop/server/client_command/exec.rb +59 -0
- data/lib/rubocop/server/client_command/restart.rb +25 -0
- data/lib/rubocop/server/client_command/start.rb +43 -0
- data/lib/rubocop/server/client_command/status.rb +28 -0
- data/lib/rubocop/server/client_command/stop.rb +31 -0
- data/lib/rubocop/server/client_command.rb +26 -0
- data/lib/rubocop/server/core.rb +79 -0
- data/lib/rubocop/server/errors.rb +23 -0
- data/lib/rubocop/server/helper.rb +34 -0
- data/lib/rubocop/server/server_command/base.rb +50 -0
- data/lib/rubocop/server/server_command/exec.rb +34 -0
- data/lib/rubocop/server/server_command/stop.rb +24 -0
- data/lib/rubocop/server/server_command.rb +21 -0
- data/lib/rubocop/server/socket_reader.rb +65 -0
- data/lib/rubocop/server.rb +53 -0
- data/lib/rubocop/string_interpreter.rb +4 -4
- data/lib/rubocop/target_ruby.rb +14 -6
- data/lib/rubocop/version.rb +15 -8
- data/lib/rubocop.rb +20 -27
- metadata +68 -10
- data/lib/rubocop/cop/gemspec/date_assignment.rb +0 -49
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +0 -29
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# Checks that the backslash of a line continuation is separated from
|
7
|
+
# preceding text by exactly one space (default) or zero spaces.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: space (default)
|
10
|
+
# # bad
|
11
|
+
# 'a'\
|
12
|
+
# 'b' \
|
13
|
+
# 'c'
|
14
|
+
#
|
15
|
+
# # good
|
16
|
+
# 'a' \
|
17
|
+
# 'b' \
|
18
|
+
# 'c'
|
19
|
+
#
|
20
|
+
# @example EnforcedStyle: no_space
|
21
|
+
# # bad
|
22
|
+
# 'a' \
|
23
|
+
# 'b' \
|
24
|
+
# 'c'
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# 'a'\
|
28
|
+
# 'b'\
|
29
|
+
# 'c'
|
30
|
+
class LineContinuationSpacing < Base
|
31
|
+
include RangeHelp
|
32
|
+
extend AutoCorrector
|
33
|
+
|
34
|
+
def on_new_investigation
|
35
|
+
last_line = last_line(processed_source)
|
36
|
+
|
37
|
+
@ignored_ranges = string_literal_ranges(processed_source.ast) +
|
38
|
+
comment_ranges(processed_source.comments)
|
39
|
+
|
40
|
+
processed_source.raw_source.lines.each_with_index do |line, index|
|
41
|
+
break if index >= last_line
|
42
|
+
|
43
|
+
line_number = index + 1
|
44
|
+
investigate(line, line_number)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def investigate(line, line_number)
|
51
|
+
offensive_spacing = find_offensive_spacing(line)
|
52
|
+
return unless offensive_spacing
|
53
|
+
|
54
|
+
range = source_range(
|
55
|
+
processed_source.buffer,
|
56
|
+
line_number,
|
57
|
+
line.length - offensive_spacing.length - 1,
|
58
|
+
offensive_spacing.length
|
59
|
+
)
|
60
|
+
|
61
|
+
return if ignore_range?(range)
|
62
|
+
|
63
|
+
add_offense(range) { |corrector| autocorrect(corrector, range) }
|
64
|
+
end
|
65
|
+
|
66
|
+
def find_offensive_spacing(line)
|
67
|
+
if no_space_style?
|
68
|
+
line[/\s+\\$/, 0]
|
69
|
+
elsif space_style?
|
70
|
+
line[/((?<!\s)|\s{2,})\\$/, 0]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def message(_range)
|
75
|
+
if no_space_style?
|
76
|
+
'Use zero spaces in front of backslash.'
|
77
|
+
elsif space_style?
|
78
|
+
'Use one space in front of backslash.'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def autocorrect(corrector, range)
|
83
|
+
correction = if no_space_style?
|
84
|
+
'\\'
|
85
|
+
elsif space_style?
|
86
|
+
' \\'
|
87
|
+
end
|
88
|
+
corrector.replace(range, correction)
|
89
|
+
end
|
90
|
+
|
91
|
+
def string_literal_ranges(ast)
|
92
|
+
# which lines start inside a string literal?
|
93
|
+
return [] if ast.nil?
|
94
|
+
|
95
|
+
ast.each_node(:str, :dstr).each_with_object(Set.new) do |str, ranges|
|
96
|
+
loc = str.location
|
97
|
+
|
98
|
+
if str.heredoc?
|
99
|
+
ranges << loc.heredoc_body
|
100
|
+
elsif loc.respond_to?(:begin) && loc.begin
|
101
|
+
ranges << loc.expression
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def comment_ranges(comments)
|
107
|
+
comments.map(&:loc).map(&:expression)
|
108
|
+
end
|
109
|
+
|
110
|
+
def last_line(processed_source)
|
111
|
+
last_token = processed_source.tokens.last
|
112
|
+
|
113
|
+
last_token ? last_token.line : processed_source.lines.length
|
114
|
+
end
|
115
|
+
|
116
|
+
def ignore_range?(backtick_range)
|
117
|
+
@ignored_ranges.any? { |range| range.contains?(backtick_range) }
|
118
|
+
end
|
119
|
+
|
120
|
+
def no_space_style?
|
121
|
+
cop_config['EnforcedStyle'] == 'no_space'
|
122
|
+
end
|
123
|
+
|
124
|
+
def space_style?
|
125
|
+
cop_config['EnforcedStyle'] == 'space'
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks the indentation of the next line after a line that ends with a string
|
7
7
|
# literal and a backslash.
|
8
8
|
#
|
9
9
|
# If `EnforcedStyle: aligned` is set, the concatenated string parts shall be aligned with the
|
@@ -110,7 +110,7 @@ module RuboCop
|
|
110
110
|
|
111
111
|
def check_aligned(children, start_index)
|
112
112
|
base_column = children[start_index - 1].loc.column
|
113
|
-
children[start_index
|
113
|
+
children[start_index..].each do |child|
|
114
114
|
@column_delta = base_column - child.loc.column
|
115
115
|
add_offense_and_correction(child, MSG_ALIGN) if @column_delta != 0
|
116
116
|
base_column = child.loc.column
|
@@ -5,7 +5,7 @@ require 'uri'
|
|
5
5
|
module RuboCop
|
6
6
|
module Cop
|
7
7
|
module Layout
|
8
|
-
#
|
8
|
+
# Checks the length of lines in the source code.
|
9
9
|
# The maximum length is configurable.
|
10
10
|
# The tab size is configured in the `IndentationWidth`
|
11
11
|
# of the `Layout/IndentationStyle` cop.
|
@@ -37,6 +37,7 @@ module RuboCop
|
|
37
37
|
# * MultilineHashBraceLayout
|
38
38
|
# * MultilineHashKeyLineBreaks
|
39
39
|
# * MultilineMethodArgumentLineBreaks
|
40
|
+
# * MultilineMethodParameterLineBreaks
|
40
41
|
# * ParameterAlignment
|
41
42
|
#
|
42
43
|
# Together, these cops will pretty print hashes, arrays,
|
@@ -60,7 +61,7 @@ module RuboCop
|
|
60
61
|
# }
|
61
62
|
class LineLength < Base
|
62
63
|
include CheckLineBreakable
|
63
|
-
include
|
64
|
+
include AllowedPattern
|
64
65
|
include RangeHelp
|
65
66
|
include LineLengthHelp
|
66
67
|
extend AutoCorrector
|
@@ -79,6 +80,7 @@ module RuboCop
|
|
79
80
|
alias on_array on_potential_breakable_node
|
80
81
|
alias on_hash on_potential_breakable_node
|
81
82
|
alias on_send on_potential_breakable_node
|
83
|
+
alias on_def on_potential_breakable_node
|
82
84
|
|
83
85
|
def on_new_investigation
|
84
86
|
check_for_breakable_semicolons(processed_source)
|
@@ -163,7 +165,7 @@ module RuboCop
|
|
163
165
|
|
164
166
|
def check_line(line, line_index)
|
165
167
|
return if line_length(line) <= max
|
166
|
-
return if
|
168
|
+
return if allowed_line?(line, line_index)
|
167
169
|
|
168
170
|
if ignore_cop_directives? && directive_on_source_line?(line_index)
|
169
171
|
return check_directive_line(line, line_index)
|
@@ -173,8 +175,8 @@ module RuboCop
|
|
173
175
|
register_offense(excess_range(nil, line, line_index), line, line_index)
|
174
176
|
end
|
175
177
|
|
176
|
-
def
|
177
|
-
|
178
|
+
def allowed_line?(line, line_index)
|
179
|
+
matches_allowed_pattern?(line) ||
|
178
180
|
shebang?(line, line_index) ||
|
179
181
|
(heredocs && line_in_permitted_heredoc?(line_index.succ))
|
180
182
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks that the closing brace in an array literal is either
|
7
7
|
# on the same line as the last array element or on a new line.
|
8
8
|
#
|
9
9
|
# When using the `symmetrical` (default) style:
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks whether the multiline do end blocks have a newline
|
7
7
|
# after the start of the block. Additionally, it checks whether the block
|
8
8
|
# arguments, if any, are on the same line as the start of the
|
9
9
|
# block. Putting block arguments on separate lines, because the whole
|
@@ -117,7 +117,7 @@ module RuboCop
|
|
117
117
|
|
118
118
|
def autocorrect_arguments(corrector, node)
|
119
119
|
end_pos = range_with_surrounding_space(
|
120
|
-
|
120
|
+
node.arguments.source_range,
|
121
121
|
side: :right,
|
122
122
|
newlines: false
|
123
123
|
).end_pos
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks that the closing brace in a hash literal is either
|
7
7
|
# on the same line as the last hash element, or a new line.
|
8
8
|
#
|
9
9
|
# When using the `symmetrical` (default) style:
|
@@ -3,10 +3,10 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Ensures that each argument in a multi-line method call
|
7
7
|
# starts on a separate line.
|
8
8
|
#
|
9
|
-
# NOTE:
|
9
|
+
# NOTE: This cop does not move the first argument, if you want that to
|
10
10
|
# be on a separate line, see `Layout/FirstMethodArgumentLineBreak`.
|
11
11
|
#
|
12
12
|
# @example
|
@@ -22,6 +22,9 @@ module RuboCop
|
|
22
22
|
# b,
|
23
23
|
# c
|
24
24
|
# )
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# foo(a, b, c)
|
25
28
|
class MultilineMethodArgumentLineBreaks < Base
|
26
29
|
include MultilineElementLineBreaks
|
27
30
|
extend AutoCorrector
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks that the closing brace in a method call is either
|
7
7
|
# on the same line as the last method argument, or a new line.
|
8
8
|
#
|
9
9
|
# When using the `symmetrical` (default) style:
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks the indentation of the method name part in method calls
|
7
7
|
# that span more than one line.
|
8
8
|
#
|
9
9
|
# @example EnforcedStyle: aligned (default)
|
@@ -56,8 +56,8 @@ module RuboCop
|
|
56
56
|
return unless style == :aligned && cop_config['IndentationWidth']
|
57
57
|
|
58
58
|
raise ValidationError,
|
59
|
-
'The `Layout/MultilineMethodCallIndentation`' \
|
60
|
-
'
|
59
|
+
'The `Layout/MultilineMethodCallIndentation` ' \
|
60
|
+
'cop only accepts an `IndentationWidth` ' \
|
61
61
|
'configuration parameter when ' \
|
62
62
|
'`EnforcedStyle` is `indented`.'
|
63
63
|
end
|
@@ -201,14 +201,31 @@ module RuboCop
|
|
201
201
|
def semantic_alignment_node(node)
|
202
202
|
return if argument_in_method_call(node, :with_parentheses)
|
203
203
|
|
204
|
+
dot_right_above = get_dot_right_above(node)
|
205
|
+
return dot_right_above if dot_right_above
|
206
|
+
|
207
|
+
node = first_call_has_a_dot(node)
|
208
|
+
return if node.loc.dot.line != node.first_line
|
209
|
+
|
210
|
+
node
|
211
|
+
end
|
212
|
+
|
213
|
+
def get_dot_right_above(node)
|
214
|
+
node.each_ancestor.find do |a|
|
215
|
+
dot = a.loc.respond_to?(:dot) && a.loc.dot
|
216
|
+
next unless dot
|
217
|
+
|
218
|
+
dot.line == node.loc.dot.line - 1 && dot.column == node.loc.dot.column
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def first_call_has_a_dot(node)
|
204
223
|
# descend to root of method chain
|
205
224
|
node = node.receiver while node.receiver
|
206
225
|
# ascend to first call which has a dot
|
207
226
|
node = node.parent
|
208
227
|
node = node.parent until node.loc.respond_to?(:dot) && node.loc.dot
|
209
228
|
|
210
|
-
return if node.loc.dot.line != node.first_line
|
211
|
-
|
212
229
|
node
|
213
230
|
end
|
214
231
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks that the closing brace in a method definition is either
|
7
7
|
# on the same line as the last method parameter, or a new line.
|
8
8
|
#
|
9
9
|
# When using the `symmetrical` (default) style:
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# Ensures that each parameter in a multi-line method definition
|
7
|
+
# starts on a separate line.
|
8
|
+
#
|
9
|
+
# NOTE: This cop does not move the first argument, if you want that to
|
10
|
+
# be on a separate line, see `Layout/FirstMethodParameterLineBreak`.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
#
|
14
|
+
# # bad
|
15
|
+
# def foo(a, b,
|
16
|
+
# c
|
17
|
+
# )
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# def foo(
|
22
|
+
# a,
|
23
|
+
# b,
|
24
|
+
# c
|
25
|
+
# )
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# # good
|
29
|
+
# def foo(a, b, c)
|
30
|
+
# end
|
31
|
+
class MultilineMethodParameterLineBreaks < Base
|
32
|
+
include MultilineElementLineBreaks
|
33
|
+
extend AutoCorrector
|
34
|
+
|
35
|
+
MSG = 'Each parameter in a multi-line method definition must start on a separate line.'
|
36
|
+
|
37
|
+
def on_def(node)
|
38
|
+
return if node.arguments.empty?
|
39
|
+
|
40
|
+
check_line_breaks(node, node.arguments)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks the indentation of the right hand side operand in binary operations that
|
7
7
|
# span more than one line.
|
8
8
|
#
|
9
9
|
# The `aligned` style checks that operators are aligned if they are part of an `if` or `while`
|
@@ -57,8 +57,8 @@ module RuboCop
|
|
57
57
|
def validate_config
|
58
58
|
return unless style == :aligned && cop_config['IndentationWidth']
|
59
59
|
|
60
|
-
raise ValidationError, 'The `Layout/MultilineOperationIndentation`' \
|
61
|
-
'
|
60
|
+
raise ValidationError, 'The `Layout/MultilineOperationIndentation` ' \
|
61
|
+
'cop only accepts an `IndentationWidth` ' \
|
62
62
|
'configuration parameter when ' \
|
63
63
|
'`EnforcedStyle` is `indented`.'
|
64
64
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
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
9
|
# @example any configuration
|
@@ -105,10 +105,9 @@ module RuboCop
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def convertible_block?(node)
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
send_node.parenthesized? || !send_node.arguments?
|
108
|
+
parent = node.parent
|
109
|
+
parent&.block_type? && node == parent.send_node &&
|
110
|
+
(node.parenthesized? || !node.arguments?)
|
112
111
|
end
|
113
112
|
|
114
113
|
def comment_within?(node)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks if method calls are chained onto single line blocks. It considers that a
|
7
7
|
# line break before the dot improves the readability of the code.
|
8
8
|
#
|
9
9
|
# @example
|
@@ -113,7 +113,7 @@ module RuboCop
|
|
113
113
|
def last_end_pos_inside_pipes(arguments, range)
|
114
114
|
pos = range.end_pos
|
115
115
|
num = pos - arguments.source_range.begin_pos
|
116
|
-
trailing_comma_index = arguments.source[num
|
116
|
+
trailing_comma_index = arguments.source[num..].index(',')
|
117
117
|
|
118
118
|
trailing_comma_index ? pos + trailing_comma_index + 1 : pos
|
119
119
|
end
|
@@ -127,7 +127,7 @@ module RuboCop
|
|
127
127
|
|
128
128
|
expr = arg.source_range
|
129
129
|
check_no_space(
|
130
|
-
range_with_surrounding_space(
|
130
|
+
range_with_surrounding_space(expr, side: :left).begin_pos,
|
131
131
|
expr.begin_pos - 1,
|
132
132
|
'Extra space before'
|
133
133
|
)
|
@@ -161,7 +161,7 @@ module RuboCop
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def check_operator(type, operator, right_operand)
|
164
|
-
with_space = range_with_surrounding_space(
|
164
|
+
with_space = range_with_surrounding_space(operator)
|
165
165
|
return if with_space.source.start_with?("\n")
|
166
166
|
|
167
167
|
offense(type, operator, with_space, right_operand) do |msg|
|
@@ -57,15 +57,15 @@ module RuboCop
|
|
57
57
|
return if node.keywords?
|
58
58
|
|
59
59
|
# Do not register an offense for multi-line braces when specifying
|
60
|
-
# `EnforcedStyle: no_space`. It will conflict with
|
60
|
+
# `EnforcedStyle: no_space`. It will conflict with autocorrection
|
61
61
|
# by `EnforcedStyle: line_count_based` of `Style/BlockDelimiters` cop.
|
62
|
-
# That means preventing
|
62
|
+
# That means preventing autocorrection to incorrect autocorrected
|
63
63
|
# code.
|
64
64
|
# See: https://github.com/rubocop/rubocop/issues/7534
|
65
65
|
return if conflict_with_block_delimiters?(node)
|
66
66
|
|
67
67
|
left_brace = node.loc.begin
|
68
|
-
space_plus_brace = range_with_surrounding_space(
|
68
|
+
space_plus_brace = range_with_surrounding_space(left_brace)
|
69
69
|
used_style =
|
70
70
|
space_plus_brace.source.start_with?('{') ? :no_space : :space
|
71
71
|
|
@@ -37,6 +37,7 @@ module RuboCop
|
|
37
37
|
receiver_end_pos = node.receiver.source_range.end_pos
|
38
38
|
selector_begin_pos = node.loc.selector.begin_pos
|
39
39
|
return if receiver_end_pos >= selector_begin_pos
|
40
|
+
return if dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
40
41
|
|
41
42
|
range_between(receiver_end_pos, selector_begin_pos)
|
42
43
|
elsif node.method?(:[]=)
|
@@ -44,6 +45,12 @@ module RuboCop
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
48
|
+
def dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
49
|
+
return false unless node.loc.respond_to?(:dot) && (dot = node.loc.dot)
|
50
|
+
|
51
|
+
dot.begin_pos == receiver_end_pos && dot.end_pos == selector_begin_pos
|
52
|
+
end
|
53
|
+
|
47
54
|
def offense_range_for_assignment(node, begin_pos)
|
48
55
|
end_pos = node.receiver.source_range.end_pos
|
49
56
|
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
36
36
|
return unless regular_method_call_with_arguments?(node)
|
37
37
|
|
38
38
|
first_arg = node.first_argument.source_range
|
39
|
-
first_arg_with_space = range_with_surrounding_space(
|
39
|
+
first_arg_with_space = range_with_surrounding_space(first_arg, side: :left)
|
40
40
|
space = range_between(first_arg_with_space.begin_pos, first_arg.begin_pos)
|
41
41
|
return if space.length == 1
|
42
42
|
return unless expect_params_after_method_name?(node)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
#
|
6
|
+
# Checks for spaces between `->` and opening parameter
|
7
7
|
# parenthesis (`(`) in lambda literals.
|
8
8
|
#
|
9
9
|
# @example EnforcedStyle: require_no_space (default)
|
@@ -6,16 +6,6 @@ module RuboCop
|
|
6
6
|
# Checks that brackets used for array literals have or don't have
|
7
7
|
# surrounding space depending on configuration.
|
8
8
|
#
|
9
|
-
# @example EnforcedStyle: space
|
10
|
-
# # The `space` style enforces that array literals have
|
11
|
-
# # surrounding space.
|
12
|
-
#
|
13
|
-
# # bad
|
14
|
-
# array = [a, b, c, d]
|
15
|
-
#
|
16
|
-
# # good
|
17
|
-
# array = [ a, b, c, d ]
|
18
|
-
#
|
19
9
|
# @example EnforcedStyle: no_space (default)
|
20
10
|
# # The `no_space` style enforces that array literals have
|
21
11
|
# # no surrounding space.
|
@@ -26,6 +16,16 @@ module RuboCop
|
|
26
16
|
# # good
|
27
17
|
# array = [a, b, c, d]
|
28
18
|
#
|
19
|
+
# @example EnforcedStyle: space
|
20
|
+
# # The `space` style enforces that array literals have
|
21
|
+
# # surrounding space.
|
22
|
+
#
|
23
|
+
# # bad
|
24
|
+
# array = [a, b, c, d]
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# array = [ a, b, c, d ]
|
28
|
+
#
|
29
29
|
# @example EnforcedStyle: compact
|
30
30
|
# # The `compact` style normally requires a space inside
|
31
31
|
# # array brackets, with the exception that successive left
|