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
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for multiple expressions placed on the same line.
|
7
7
|
# It also checks for lines terminated with a semicolon.
|
8
8
|
#
|
9
9
|
# This cop has `AllowAsExpressionSeparator` configuration option.
|
@@ -64,12 +64,14 @@ module RuboCop
|
|
64
64
|
# Make the obvious check first
|
65
65
|
return unless processed_source.raw_source.include?(';')
|
66
66
|
|
67
|
-
each_semicolon
|
67
|
+
each_semicolon do |line, column, token_before_semicolon|
|
68
|
+
register_semicolon(line, column, false, token_before_semicolon)
|
69
|
+
end
|
68
70
|
end
|
69
71
|
|
70
72
|
def each_semicolon
|
71
73
|
tokens_for_lines.each do |line, tokens|
|
72
|
-
yield line, tokens.last.column if tokens.last.semicolon?
|
74
|
+
yield line, tokens.last.column, tokens[-2] if tokens.last.semicolon?
|
73
75
|
yield line, tokens.first.column if tokens.first.semicolon?
|
74
76
|
end
|
75
77
|
end
|
@@ -78,13 +80,21 @@ module RuboCop
|
|
78
80
|
processed_source.tokens.group_by(&:line)
|
79
81
|
end
|
80
82
|
|
81
|
-
def register_semicolon(line, column, after_expression)
|
83
|
+
def register_semicolon(line, column, after_expression, token_before_semicolon = nil)
|
82
84
|
range = source_range(processed_source.buffer, line, column)
|
83
85
|
|
84
86
|
add_offense(range) do |corrector|
|
85
87
|
if after_expression
|
86
88
|
corrector.replace(range, "\n")
|
87
89
|
else
|
90
|
+
# Prevents becoming one range instance with subsequent line when endless range
|
91
|
+
# without parentheses.
|
92
|
+
# See: https://github.com/rubocop/rubocop/issues/10791
|
93
|
+
if token_before_semicolon&.regexp_dots?
|
94
|
+
range_node = find_range_node(token_before_semicolon)
|
95
|
+
corrector.wrap(range_node, '(', ')') if range_node
|
96
|
+
end
|
97
|
+
|
88
98
|
corrector.remove(range)
|
89
99
|
end
|
90
100
|
end
|
@@ -103,6 +113,20 @@ module RuboCop
|
|
103
113
|
yield Regexp.last_match.begin(0)
|
104
114
|
end
|
105
115
|
end
|
116
|
+
|
117
|
+
def find_range_node(token_before_semicolon)
|
118
|
+
range_nodes.detect do |range_node|
|
119
|
+
range_node.source_range.contains?(token_before_semicolon.pos)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def range_nodes
|
124
|
+
return @range_nodes if instance_variable_defined?(:@range_nodes)
|
125
|
+
|
126
|
+
ast = processed_source.ast
|
127
|
+
@range_nodes = ast.range_type? ? [ast] : []
|
128
|
+
@range_nodes.concat(ast.each_descendant(:irange, :erange).to_a)
|
129
|
+
end
|
106
130
|
end
|
107
131
|
end
|
108
132
|
end
|
@@ -44,15 +44,20 @@ module RuboCop
|
|
44
44
|
|
45
45
|
expression = single_argument_dig?(node)
|
46
46
|
return unless expression
|
47
|
+
return if expression.forwarded_args_type?
|
47
48
|
|
48
49
|
receiver = node.receiver.source
|
49
50
|
argument = expression.source
|
50
51
|
|
51
52
|
message = format(MSG, receiver: receiver, argument: argument, original: node.source)
|
52
53
|
add_offense(node, message: message) do |corrector|
|
54
|
+
next if part_of_ignored_node?(node)
|
55
|
+
|
53
56
|
correct_access = "#{receiver}[#{argument}]"
|
54
57
|
corrector.replace(node, correct_access)
|
55
58
|
end
|
59
|
+
|
60
|
+
ignore_node(node)
|
56
61
|
end
|
57
62
|
end
|
58
63
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks whether the block parameters of a single-line
|
7
7
|
# method accepting a block match the names specified via configuration.
|
8
8
|
#
|
9
9
|
# For instance one can configure `reduce`(`inject`) to use |a, e| as
|
@@ -3,13 +3,13 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for single-line method definitions that contain a body.
|
7
7
|
# It will accept single-line methods with no body.
|
8
8
|
#
|
9
9
|
# Endless methods added in Ruby 3.0 are also accepted by this cop.
|
10
10
|
#
|
11
11
|
# If `Style/EndlessMethod` is enabled with `EnforcedStyle: allow_single_line` or
|
12
|
-
# `allow_always`, single-line methods will be
|
12
|
+
# `allow_always`, single-line methods will be autocorrected to endless
|
13
13
|
# methods if there is only one statement in the body.
|
14
14
|
#
|
15
15
|
# @example
|
@@ -110,9 +110,12 @@ module RuboCop
|
|
110
110
|
def autocorrect_outer_condition_basic(corrector, node, if_branch)
|
111
111
|
correct_from_unless_to_if(corrector, node) if node.unless?
|
112
112
|
|
113
|
+
outer_condition = node.condition
|
114
|
+
correct_outer_condition(corrector, outer_condition)
|
115
|
+
|
113
116
|
and_operator = if_branch.unless? ? ' && !' : ' && '
|
114
117
|
if if_branch.modifier_form?
|
115
|
-
correct_for_guard_condition_style(corrector,
|
118
|
+
correct_for_guard_condition_style(corrector, outer_condition, if_branch, and_operator)
|
116
119
|
else
|
117
120
|
correct_for_basic_condition_style(corrector, node, if_branch, and_operator)
|
118
121
|
correct_for_comment(corrector, node, if_branch)
|
@@ -127,24 +130,15 @@ module RuboCop
|
|
127
130
|
def correct_from_unless_to_if(corrector, node, is_modify_form: false)
|
128
131
|
corrector.replace(node.loc.keyword, 'if')
|
129
132
|
|
130
|
-
|
131
|
-
if (condition.send_type? && condition.comparison_method? && !condition.parenthesized?) ||
|
132
|
-
(is_modify_form && wrap_condition?(condition))
|
133
|
-
corrector.wrap(node.condition, '!(', ')')
|
134
|
-
else
|
135
|
-
corrector.insert_before(node.condition, '!')
|
136
|
-
end
|
133
|
+
insert_bang(corrector, node, is_modify_form)
|
137
134
|
end
|
138
135
|
|
139
|
-
def correct_for_guard_condition_style(corrector,
|
140
|
-
outer_condition = node.condition
|
141
|
-
correct_outer_condition(corrector, outer_condition)
|
142
|
-
|
136
|
+
def correct_for_guard_condition_style(corrector, outer_condition, if_branch, and_operator)
|
143
137
|
condition = if_branch.condition
|
144
138
|
corrector.insert_after(outer_condition, "#{and_operator}#{replace_condition(condition)}")
|
145
139
|
|
146
140
|
range = range_between(if_branch.loc.keyword.begin_pos, condition.source_range.end_pos)
|
147
|
-
corrector.remove(range_with_surrounding_space(range
|
141
|
+
corrector.remove(range_with_surrounding_space(range, newlines: false))
|
148
142
|
corrector.remove(if_branch.loc.keyword)
|
149
143
|
end
|
150
144
|
|
@@ -163,7 +157,7 @@ module RuboCop
|
|
163
157
|
"#{'!' if node.unless?}#{replace_condition(node.condition)} && ")
|
164
158
|
|
165
159
|
corrector.remove(node.condition.loc.expression)
|
166
|
-
corrector.remove(range_with_surrounding_space(
|
160
|
+
corrector.remove(range_with_surrounding_space(node.loc.keyword, newlines: false))
|
167
161
|
corrector.replace(if_branch.loc.keyword, 'if')
|
168
162
|
end
|
169
163
|
|
@@ -177,7 +171,7 @@ module RuboCop
|
|
177
171
|
end
|
178
172
|
|
179
173
|
def correct_outer_condition(corrector, condition)
|
180
|
-
return unless
|
174
|
+
return unless require_parentheses?(condition)
|
181
175
|
|
182
176
|
end_pos = condition.loc.selector.end_pos
|
183
177
|
begin_pos = condition.first_argument.source_range.begin_pos
|
@@ -187,7 +181,32 @@ module RuboCop
|
|
187
181
|
corrector.insert_after(condition.last_argument.source_range, ')')
|
188
182
|
end
|
189
183
|
|
190
|
-
def
|
184
|
+
def insert_bang(corrector, node, is_modify_form)
|
185
|
+
condition = node.condition
|
186
|
+
|
187
|
+
if (condition.send_type? && condition.comparison_method? && !condition.parenthesized?) ||
|
188
|
+
(is_modify_form && wrap_condition?(condition))
|
189
|
+
corrector.wrap(node.condition, '!(', ')')
|
190
|
+
elsif condition.and_type?
|
191
|
+
insert_bang_for_and(corrector, node)
|
192
|
+
else
|
193
|
+
corrector.insert_before(condition, '!')
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
def insert_bang_for_and(corrector, node)
|
198
|
+
lhs, rhs = *node
|
199
|
+
|
200
|
+
if lhs.and_type?
|
201
|
+
insert_bang_for_and(corrector, lhs)
|
202
|
+
corrector.insert_before(rhs, '!') if rhs
|
203
|
+
else
|
204
|
+
corrector.insert_before(lhs, '!')
|
205
|
+
corrector.insert_before(rhs, '!')
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def require_parentheses?(condition)
|
191
210
|
condition.send_type? && !condition.arguments.empty? && !condition.parenthesized? &&
|
192
211
|
!condition.comparison_method?
|
193
212
|
end
|
@@ -57,6 +57,34 @@ module RuboCop
|
|
57
57
|
# puts $=
|
58
58
|
# puts $*
|
59
59
|
#
|
60
|
+
# @example EnforcedStyle: use_builtin_english_names
|
61
|
+
#
|
62
|
+
# Like `use_perl_names` but allows builtin global vars.
|
63
|
+
#
|
64
|
+
# # good
|
65
|
+
# puts $LOAD_PATH
|
66
|
+
# puts $LOADED_FEATURES
|
67
|
+
# puts $PROGRAM_NAME
|
68
|
+
# puts ARGV
|
69
|
+
# puts $:
|
70
|
+
# puts $"
|
71
|
+
# puts $0
|
72
|
+
# puts $!
|
73
|
+
# puts $@
|
74
|
+
# puts $;
|
75
|
+
# puts $,
|
76
|
+
# puts $/
|
77
|
+
# puts $\
|
78
|
+
# puts $.
|
79
|
+
# puts $_
|
80
|
+
# puts $>
|
81
|
+
# puts $<
|
82
|
+
# puts $$
|
83
|
+
# puts $?
|
84
|
+
# puts $~
|
85
|
+
# puts $=
|
86
|
+
# puts $*
|
87
|
+
#
|
60
88
|
class SpecialGlobalVars < Base
|
61
89
|
include ConfigurableEnforcedStyle
|
62
90
|
include RangeHelp
|
@@ -91,18 +119,37 @@ module RuboCop
|
|
91
119
|
:$* => %i[$ARGV ARGV]
|
92
120
|
}
|
93
121
|
|
122
|
+
# Anything *not* in this set is provided by the English library.
|
123
|
+
NON_ENGLISH_VARS = Set.new(%i[$LOAD_PATH $LOADED_FEATURES $PROGRAM_NAME ARGV]).freeze
|
124
|
+
|
94
125
|
PERL_VARS = ENGLISH_VARS.flat_map { |k, vs| vs.map { |v| [v, [k]] } }.to_h
|
95
126
|
|
96
127
|
ENGLISH_VARS.merge!(ENGLISH_VARS.flat_map { |_, vs| vs.map { |v| [v, [v]] } }.to_h)
|
97
128
|
PERL_VARS.merge!(PERL_VARS.flat_map { |_, vs| vs.map { |v| [v, [v]] } }.to_h)
|
129
|
+
BUILTIN_VARS = PERL_VARS.merge(
|
130
|
+
NON_ENGLISH_VARS
|
131
|
+
.select { |v| v.to_s.start_with?('$') }
|
132
|
+
.flat_map { |v| [[v, [v]], PERL_VARS[v].flat_map { |a| [a, [v]] }] }
|
133
|
+
.to_h
|
134
|
+
)
|
135
|
+
|
98
136
|
ENGLISH_VARS.each_value(&:freeze).freeze
|
99
137
|
PERL_VARS.each_value(&:freeze).freeze
|
138
|
+
BUILTIN_VARS.each_value(&:freeze).freeze
|
100
139
|
|
101
|
-
|
102
|
-
|
140
|
+
STYLE_VARS_MAP = {
|
141
|
+
use_english_names: ENGLISH_VARS,
|
142
|
+
use_perl_names: PERL_VARS,
|
143
|
+
use_builtin_english_names: BUILTIN_VARS
|
144
|
+
}.freeze
|
103
145
|
|
104
146
|
LIBRARY_NAME = 'English'
|
105
147
|
|
148
|
+
def on_new_investigation
|
149
|
+
super
|
150
|
+
@required_english = false
|
151
|
+
end
|
152
|
+
|
106
153
|
def on_gvar(node)
|
107
154
|
global_var, = *node
|
108
155
|
|
@@ -111,7 +158,7 @@ module RuboCop
|
|
111
158
|
if preferred.include?(global_var)
|
112
159
|
correct_style_detected
|
113
160
|
else
|
114
|
-
|
161
|
+
style_detected(matching_styles(global_var))
|
115
162
|
|
116
163
|
add_offense(node, message: message(global_var)) do |corrector|
|
117
164
|
autocorrect(corrector, node, global_var)
|
@@ -130,7 +177,11 @@ module RuboCop
|
|
130
177
|
def autocorrect(corrector, node, global_var)
|
131
178
|
node = node.parent while node.parent&.begin_type? && node.parent.children.one?
|
132
179
|
|
133
|
-
|
180
|
+
if should_require_english?(global_var)
|
181
|
+
ensure_required(corrector, node, LIBRARY_NAME)
|
182
|
+
|
183
|
+
@required_english = true
|
184
|
+
end
|
134
185
|
|
135
186
|
corrector.replace(node, replacement(node, global_var))
|
136
187
|
end
|
@@ -175,11 +226,17 @@ module RuboCop
|
|
175
226
|
end
|
176
227
|
|
177
228
|
def preferred_names(global)
|
178
|
-
|
179
|
-
|
180
|
-
else
|
181
|
-
PERL_VARS[global]
|
229
|
+
vars = STYLE_VARS_MAP.fetch(style) do
|
230
|
+
raise ArgumentError, "Invalid style: #{style.inspect}"
|
182
231
|
end
|
232
|
+
|
233
|
+
vars[global]
|
234
|
+
end
|
235
|
+
|
236
|
+
def matching_styles(global)
|
237
|
+
STYLE_VARS_MAP.map do |style, vars|
|
238
|
+
style if vars.values.flatten(1).include? global
|
239
|
+
end.compact
|
183
240
|
end
|
184
241
|
|
185
242
|
def english_name_replacement(preferred_name, node)
|
@@ -195,6 +252,7 @@ module RuboCop
|
|
195
252
|
def should_require_english?(global_var)
|
196
253
|
style == :use_english_names &&
|
197
254
|
add_require_english? &&
|
255
|
+
!@required_english &&
|
198
256
|
!NON_ENGLISH_VARS.include?(preferred_names(global_var).first)
|
199
257
|
end
|
200
258
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for places where classes with only class methods can be
|
7
7
|
# replaced with a module. Classes should be used only when it makes sense to create
|
8
8
|
# instances out of them.
|
9
9
|
#
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Identifies places where `$stderr.puts` can be replaced by
|
7
7
|
# `warn`. The latter has the advantage of easily being disabled by,
|
8
8
|
# the `-W0` interpreter flag or setting `$VERBOSE` to `nil`.
|
9
9
|
#
|
@@ -8,7 +8,7 @@ module RuboCop
|
|
8
8
|
# @safety
|
9
9
|
# This cop is unsafe because it cannot be guaranteed that the receiver
|
10
10
|
# is actually a string. If another class has a `split` method with
|
11
|
-
# different
|
11
|
+
# different behavior, it would be registered as a false positive.
|
12
12
|
#
|
13
13
|
# @example
|
14
14
|
# # bad
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for places where string concatenation
|
7
7
|
# can be replaced with string interpolation.
|
8
8
|
#
|
9
9
|
# The cop can autocorrect simple cases but will skip autocorrecting
|
@@ -76,7 +76,7 @@ module RuboCop
|
|
76
76
|
|
77
77
|
topmost_plus_node = find_topmost_plus_node(node)
|
78
78
|
parts = collect_parts(topmost_plus_node)
|
79
|
-
return
|
79
|
+
return if mode == :conservative && !parts.first.str_type?
|
80
80
|
|
81
81
|
register_offense(topmost_plus_node, parts)
|
82
82
|
end
|
@@ -95,11 +95,6 @@ module RuboCop
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
-
def offensive_for_mode?(receiver_node)
|
99
|
-
mode = cop_config['Mode'].to_sym
|
100
|
-
mode == :aggressive || (mode == :conservative && receiver_node.str_type?)
|
101
|
-
end
|
102
|
-
|
103
98
|
def line_end_concatenation?(node)
|
104
99
|
# If the concatenation happens at the end of the line,
|
105
100
|
# and both the receiver and argument are strings, allow
|
@@ -173,6 +168,10 @@ module RuboCop
|
|
173
168
|
def single_quoted?(str_node)
|
174
169
|
str_node.source.start_with?("'")
|
175
170
|
end
|
171
|
+
|
172
|
+
def mode
|
173
|
+
cop_config['Mode'].to_sym
|
174
|
+
end
|
176
175
|
end
|
177
176
|
end
|
178
177
|
end
|
@@ -3,10 +3,10 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for inheritance from Struct.new.
|
7
7
|
#
|
8
8
|
# @safety
|
9
|
-
#
|
9
|
+
# Autocorrection is unsafe because it will change the inheritance
|
10
10
|
# tree (e.g. return value of `Module#ancestors`) of the constant.
|
11
11
|
#
|
12
12
|
# @example
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
return unless struct_constructor?(node.parent_class)
|
35
35
|
|
36
36
|
add_offense(node.parent_class.source_range) do |corrector|
|
37
|
-
corrector.remove(range_with_surrounding_space(
|
37
|
+
corrector.remove(range_with_surrounding_space(node.loc.keyword, newlines: false))
|
38
38
|
corrector.replace(node.loc.operator, '=')
|
39
39
|
|
40
40
|
correct_parent(node.parent_class, corrector)
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
|
52
52
|
def correct_parent(parent, corrector)
|
53
53
|
if parent.block_type?
|
54
|
-
corrector.remove(range_with_surrounding_space(
|
54
|
+
corrector.remove(range_with_surrounding_space(parent.loc.end, newlines: false))
|
55
55
|
elsif (class_node = parent.parent).body.nil?
|
56
56
|
corrector.remove(range_for_empty_class_body(class_node, parent))
|
57
57
|
else
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Enforces the use of shorthand-style swapping of 2 variables.
|
7
7
|
#
|
8
8
|
# @safety
|
9
9
|
# Autocorrection is unsafe, because the temporary variable used to
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
include RangeHelp
|
23
23
|
extend AutoCorrector
|
24
24
|
|
25
|
-
MSG = 'Replace this and assignments at lines %<x_line>d '\
|
25
|
+
MSG = 'Replace this and assignments at lines %<x_line>d ' \
|
26
26
|
'and %<y_line>d with `%<replacement>s`.'
|
27
27
|
|
28
28
|
SIMPLE_ASSIGNMENT_TYPES = %i[lvasgn ivasgn cvasgn gvasgn casgn].to_set.freeze
|
@@ -3,11 +3,12 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Checks for array literals made up of symbols that are not
|
7
7
|
# using the %i() syntax.
|
8
8
|
#
|
9
9
|
# Alternatively, it checks for symbol arrays using the %i() syntax on
|
10
|
-
# projects which do not want to use that syntax
|
10
|
+
# projects which do not want to use that syntax, perhaps because they
|
11
|
+
# support a version of Ruby lower than 2.0.
|
11
12
|
#
|
12
13
|
# Configuration option: MinSize
|
13
14
|
# If set, arrays with fewer elements than this value will not trigger the
|
@@ -33,9 +34,12 @@ module RuboCop
|
|
33
34
|
include ConfigurableEnforcedStyle
|
34
35
|
include PercentArray
|
35
36
|
extend AutoCorrector
|
37
|
+
extend TargetRubyVersion
|
38
|
+
|
39
|
+
minimum_target_ruby_version 2.0
|
36
40
|
|
37
41
|
PERCENT_MSG = 'Use `%i` or `%I` for an array of symbols.'
|
38
|
-
ARRAY_MSG = 'Use
|
42
|
+
ARRAY_MSG = 'Use %<prefer>s for an array of symbols.'
|
39
43
|
|
40
44
|
class << self
|
41
45
|
attr_accessor :largest_brackets
|
@@ -70,8 +74,7 @@ module RuboCop
|
|
70
74
|
to_symbol_literal(c.value.to_s)
|
71
75
|
end
|
72
76
|
end
|
73
|
-
|
74
|
-
"[#{syms.join(', ')}]"
|
77
|
+
build_bracketed_array_with_appropriate_whitespace(elements: syms, node: node)
|
75
78
|
end
|
76
79
|
|
77
80
|
def to_symbol_literal(string)
|
@@ -7,6 +7,8 @@ module RuboCop
|
|
7
7
|
#
|
8
8
|
# If you prefer a style that allows block for method with arguments,
|
9
9
|
# please set `true` to `AllowMethodsWithArguments`.
|
10
|
+
# respond_to , and `define_method?` methods are ignored by default.
|
11
|
+
# These are customizable with `IgnoredMethods` option.
|
10
12
|
#
|
11
13
|
# @safety
|
12
14
|
# This cop is unsafe because `proc`s and blocks work differently
|
@@ -52,7 +54,30 @@ module RuboCop
|
|
52
54
|
# @example AllowMethodsWithArguments: true
|
53
55
|
# # good
|
54
56
|
# something.do_something(foo) { |o| o.bar }
|
57
|
+
#
|
58
|
+
# @example AllowComments: false (default)
|
59
|
+
# # bad
|
60
|
+
# something.do_something do |s| # some comment
|
61
|
+
# # some comment
|
62
|
+
# s.upcase # some comment
|
63
|
+
# # some comment
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# @example AllowComments: true
|
67
|
+
# # good - if there are comment in either position
|
68
|
+
# something.do_something do |s| # some comment
|
69
|
+
# # some comment
|
70
|
+
# s.upcase # some comment
|
71
|
+
# # some comment
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# @example IgnoredMethods: [respond_to, define_method] (default)
|
75
|
+
# # good
|
76
|
+
# respond_to { |foo| foo.bar }
|
77
|
+
# define_method(:foo) { |foo| foo.bar }
|
78
|
+
#
|
55
79
|
class SymbolProc < Base
|
80
|
+
include CommentsHelp
|
56
81
|
include RangeHelp
|
57
82
|
include IgnoredMethods
|
58
83
|
extend AutoCorrector
|
@@ -64,7 +89,7 @@ module RuboCop
|
|
64
89
|
def_node_matcher :proc_node?, '(send (const {nil? cbase} :Proc) :new)'
|
65
90
|
|
66
91
|
# @!method symbol_proc_receiver?(node)
|
67
|
-
def_node_matcher :symbol_proc_receiver?, '{(
|
92
|
+
def_node_matcher :symbol_proc_receiver?, '{(call ...) (super ...) zsuper}'
|
68
93
|
|
69
94
|
# @!method symbol_proc?(node)
|
70
95
|
def_node_matcher :symbol_proc?, <<~PATTERN
|
@@ -78,6 +103,7 @@ module RuboCop
|
|
78
103
|
[Layout::SpaceBeforeBlockBraces]
|
79
104
|
end
|
80
105
|
|
106
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
81
107
|
def on_block(node)
|
82
108
|
symbol_proc?(node) do |dispatch_node, arguments_node, method_name|
|
83
109
|
# TODO: Rails-specific handling that we should probably make
|
@@ -86,12 +112,14 @@ module RuboCop
|
|
86
112
|
return if proc_node?(dispatch_node)
|
87
113
|
return if %i[lambda proc].include?(dispatch_node.method_name)
|
88
114
|
return if ignored_method?(dispatch_node.method_name)
|
89
|
-
return if allow_if_method_has_argument?(node)
|
115
|
+
return if allow_if_method_has_argument?(node.send_node)
|
90
116
|
return if node.block_type? && destructuring_block_argument?(arguments_node)
|
117
|
+
return if allow_comments? && contains_comments?(node)
|
91
118
|
|
92
119
|
register_offense(node, method_name, dispatch_node.method_name)
|
93
120
|
end
|
94
121
|
end
|
122
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
95
123
|
alias on_numblock on_block
|
96
124
|
|
97
125
|
def destructuring_block_argument?(argument_node)
|
@@ -132,7 +160,7 @@ module RuboCop
|
|
132
160
|
|
133
161
|
def block_range_with_space(node)
|
134
162
|
block_range = range_between(begin_pos_for_replacement(node), node.loc.end.end_pos)
|
135
|
-
range_with_surrounding_space(
|
163
|
+
range_with_surrounding_space(block_range, side: :left)
|
136
164
|
end
|
137
165
|
|
138
166
|
def begin_pos_for_replacement(node)
|
@@ -145,8 +173,12 @@ module RuboCop
|
|
145
173
|
end
|
146
174
|
end
|
147
175
|
|
148
|
-
def allow_if_method_has_argument?(
|
149
|
-
!!cop_config.fetch('AllowMethodsWithArguments', false) && !
|
176
|
+
def allow_if_method_has_argument?(send_node)
|
177
|
+
!!cop_config.fetch('AllowMethodsWithArguments', false) && !send_node.arguments.count.zero?
|
178
|
+
end
|
179
|
+
|
180
|
+
def allow_comments?
|
181
|
+
cop_config.fetch('AllowComments', false)
|
150
182
|
end
|
151
183
|
end
|
152
184
|
end
|