rubocop 1.11.0 → 1.15.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 -3
- data/config/default.yml +58 -6
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +6 -1
- data/lib/rubocop/cached_data.rb +1 -3
- data/lib/rubocop/cli.rb +4 -6
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
- data/lib/rubocop/cli/command/show_cops.rb +1 -4
- data/lib/rubocop/cli/command/suggest_extensions.rb +3 -2
- data/lib/rubocop/comment_config.rb +45 -101
- data/lib/rubocop/config.rb +11 -26
- data/lib/rubocop/config_loader.rb +5 -11
- data/lib/rubocop/config_loader_resolver.rb +22 -14
- data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
- data/lib/rubocop/config_store.rb +1 -2
- data/lib/rubocop/config_validator.rb +5 -10
- data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
- data/lib/rubocop/cop/badge.rb +1 -2
- data/lib/rubocop/cop/base.rb +8 -6
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
- data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
- data/lib/rubocop/cop/commissioner.rb +2 -8
- data/lib/rubocop/cop/cop.rb +4 -18
- data/lib/rubocop/cop/corrector.rb +1 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +6 -12
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
- data/lib/rubocop/cop/generator.rb +1 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
- data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
- data/lib/rubocop/cop/layout/argument_alignment.rb +34 -18
- data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
- data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
- data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
- data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/class_structure.rb +4 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
- data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
- data/lib/rubocop/cop/layout/dot_position.rb +1 -3
- data/lib/rubocop/cop/layout/else_alignment.rb +10 -9
- data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -5
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +36 -20
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +18 -13
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
- data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
- data/lib/rubocop/cop/layout/indentation_width.rb +24 -12
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
- data/lib/rubocop/cop/layout/line_length.rb +4 -15
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -15
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
- data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
- data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
- data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
- data/lib/rubocop/cop/legacy/corrector.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
- data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
- data/lib/rubocop/cop/lint/else_layout.rb +1 -3
- data/lib/rubocop/cop/lint/empty_block.rb +18 -2
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
- data/lib/rubocop/cop/lint/empty_file.rb +1 -3
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
- data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
- data/lib/rubocop/cop/lint/loop.rb +1 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
- data/lib/rubocop/cop/lint/missing_super.rb +1 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +11 -5
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rand_one.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
- data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
- data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
- data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
- data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/to_json.rb +1 -2
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
- data/lib/rubocop/cop/lint/void.rb +5 -12
- data/lib/rubocop/cop/message_annotator.rb +1 -3
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -6
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
- data/lib/rubocop/cop/migration/department_name.rb +3 -7
- data/lib/rubocop/cop/mixin/alignment.rb +12 -7
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +20 -4
- data/lib/rubocop/cop/mixin/code_length.rb +1 -3
- data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
- data/lib/rubocop/cop/mixin/def_node.rb +2 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
- data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
- data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
- data/lib/rubocop/cop/mixin/match_range.rb +2 -5
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
- data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +4 -7
- data/lib/rubocop/cop/mixin/range_help.rb +10 -13
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
- data/lib/rubocop/cop/naming/file_name.rb +7 -16
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +6 -3
- data/lib/rubocop/cop/naming/method_name.rb +1 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
- data/lib/rubocop/cop/offense.rb +3 -8
- data/lib/rubocop/cop/registry.rb +12 -11
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +3 -5
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +5 -12
- data/lib/rubocop/cop/style/and_or.rb +3 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
- data/lib/rubocop/cop/style/case_like_if.rb +16 -6
- data/lib/rubocop/cop/style/character_literal.rb +2 -4
- data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
- data/lib/rubocop/cop/style/class_equality_comparison.rb +2 -0
- data/lib/rubocop/cop/style/class_methods.rb +1 -3
- data/lib/rubocop/cop/style/collection_compact.rb +1 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +4 -9
- data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
- data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
- data/lib/rubocop/cop/style/copyright.rb +3 -6
- data/lib/rubocop/cop/style/date_time.rb +2 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +25 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
- data/lib/rubocop/cop/style/empty_else.rb +3 -9
- data/lib/rubocop/cop/style/empty_literal.rb +12 -9
- data/lib/rubocop/cop/style/empty_method.rb +3 -7
- data/lib/rubocop/cop/style/end_block.rb +1 -2
- data/lib/rubocop/cop/style/endless_method.rb +1 -3
- data/lib/rubocop/cop/style/eval_with_location.rb +3 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +31 -3
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -2
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/lambda.rb +2 -4
- data/lib/rubocop/cop/style/lambda_call.rb +1 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +47 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/min_max.rb +1 -2
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
- data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
- data/lib/rubocop/cop/style/module_function.rb +3 -6
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
- data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
- data/lib/rubocop/cop/style/negated_if.rb +1 -2
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +23 -2
- data/lib/rubocop/cop/style/negated_unless.rb +1 -2
- data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
- data/lib/rubocop/cop/style/next.rb +4 -9
- data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
- data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
- data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
- data/lib/rubocop/cop/style/option_hash.rb +1 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
- data/lib/rubocop/cop/style/or_assignment.rb +2 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
- data/lib/rubocop/cop/style/proc.rb +1 -2
- data/lib/rubocop/cop/style/raise_args.rb +4 -8
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +40 -6
- data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
- data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
- data/lib/rubocop/cop/style/redundant_return.rb +6 -4
- data/lib/rubocop/cop/style/redundant_self.rb +9 -9
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
- data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
- data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
- data/lib/rubocop/cop/style/return_nil.rb +1 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
- data/lib/rubocop/cop/style/send.rb +1 -2
- data/lib/rubocop/cop/style/signal_exception.rb +3 -7
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +31 -7
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
- data/lib/rubocop/cop/style/string_chars.rb +39 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
- data/lib/rubocop/cop/style/string_literals.rb +2 -5
- data/lib/rubocop/cop/style/struct_inheritance.rb +10 -0
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
- data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
- data/lib/rubocop/cop/style/top_level_method_definition.rb +75 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -3
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
- data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +8 -2
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -3
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
- data/lib/rubocop/cop/style/word_array.rb +1 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
- data/lib/rubocop/cop/team.rb +2 -5
- data/lib/rubocop/cop/util.rb +8 -11
- data/lib/rubocop/cop/utils/format_string.rb +1 -3
- data/lib/rubocop/cop/variable_force.rb +6 -15
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
- data/lib/rubocop/cop/variable_force/branch.rb +16 -2
- data/lib/rubocop/cop/variable_force/reference.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +4 -8
- data/lib/rubocop/cop/variable_force/variable.rb +2 -4
- data/lib/rubocop/cops_documentation_generator.rb +7 -21
- data/lib/rubocop/directive_comment.rb +69 -9
- data/lib/rubocop/ext/regexp_parser.rb +3 -6
- data/lib/rubocop/file_finder.rb +1 -3
- data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
- data/lib/rubocop/formatter/html_formatter.rb +4 -10
- data/lib/rubocop/formatter/json_formatter.rb +1 -5
- data/lib/rubocop/formatter/junit_formatter.rb +23 -14
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/formatter/tap_formatter.rb +4 -2
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/options.rb +30 -50
- data/lib/rubocop/path_util.rb +1 -3
- data/lib/rubocop/rake_task.rb +3 -0
- data/lib/rubocop/remote_config.rb +4 -7
- data/lib/rubocop/result_cache.rb +5 -12
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -9
- data/lib/rubocop/rspec/shared_contexts.rb +8 -15
- data/lib/rubocop/runner.rb +7 -14
- data/lib/rubocop/target_finder.rb +19 -16
- data/lib/rubocop/target_ruby.rb +4 -8
- data/lib/rubocop/version.rb +1 -1
- metadata +13 -7
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -63,15 +63,12 @@ module RuboCop
|
|
63
63
|
PATTERN
|
64
64
|
|
65
65
|
def on_send(node)
|
66
|
-
return unless date_time?(node) ||
|
67
|
-
(to_datetime?(node) && disallow_coercion?)
|
66
|
+
return unless date_time?(node) || (to_datetime?(node) && disallow_coercion?)
|
68
67
|
return if historic_date?(node)
|
69
68
|
|
70
69
|
message = to_datetime?(node) ? COERCION_MSG : CLASS_MSG
|
71
70
|
|
72
|
-
add_offense(node, message: message)
|
73
|
-
autocorrect(corrector, node)
|
74
|
-
end
|
71
|
+
add_offense(node, message: message) { |corrector| autocorrect(corrector, node) }
|
75
72
|
end
|
76
73
|
|
77
74
|
private
|
@@ -36,8 +36,7 @@ module RuboCop
|
|
36
36
|
class DefWithParentheses < Base
|
37
37
|
extend AutoCorrector
|
38
38
|
|
39
|
-
MSG = "Omit the parentheses in defs when the method doesn't accept "
|
40
|
-
'any arguments.'
|
39
|
+
MSG = "Omit the parentheses in defs when the method doesn't accept any arguments."
|
41
40
|
|
42
41
|
def on_def(node)
|
43
42
|
return if node.single_line?
|
@@ -70,8 +70,8 @@ module RuboCop
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def directive_cops(comment)
|
73
|
-
|
74
|
-
|
73
|
+
match_captures = DirectiveComment.new(comment).match_captures
|
74
|
+
match_captures && match_captures[1] ? match_captures[1].split(',').map(&:strip) : []
|
75
75
|
end
|
76
76
|
|
77
77
|
def allowed_cops
|
@@ -60,6 +60,15 @@ module RuboCop
|
|
60
60
|
# extend Foo
|
61
61
|
# end
|
62
62
|
#
|
63
|
+
# @example AllowedConstants: ['ClassMethods']
|
64
|
+
#
|
65
|
+
# # good
|
66
|
+
# module A
|
67
|
+
# module ClassMethods
|
68
|
+
# # ...
|
69
|
+
# end
|
70
|
+
# end
|
71
|
+
#
|
63
72
|
class Documentation < Base
|
64
73
|
include DocumentationComment
|
65
74
|
|
@@ -90,14 +99,19 @@ module RuboCop
|
|
90
99
|
|
91
100
|
def check(node, body, type)
|
92
101
|
return if namespace?(body)
|
93
|
-
return if documentation_comment?(node)
|
94
|
-
return if
|
95
|
-
|
102
|
+
return if documentation_comment?(node)
|
103
|
+
return if constant_allowed?(node)
|
104
|
+
return if nodoc_self_or_outer_module?(node)
|
96
105
|
return if macro_only?(body)
|
97
106
|
|
98
107
|
add_offense(node.loc.keyword, message: format(MSG, type: type))
|
99
108
|
end
|
100
109
|
|
110
|
+
def nodoc_self_or_outer_module?(node)
|
111
|
+
nodoc_comment?(node) ||
|
112
|
+
compact_namespace?(node) && nodoc_comment?(outer_module(node).first)
|
113
|
+
end
|
114
|
+
|
101
115
|
def macro_only?(body)
|
102
116
|
body.respond_to?(:macro?) && body.macro? ||
|
103
117
|
body.respond_to?(:children) && body.children&.all? { |child| macro_only?(child) }
|
@@ -117,6 +131,10 @@ module RuboCop
|
|
117
131
|
constant_definition?(node) || constant_visibility_declaration?(node)
|
118
132
|
end
|
119
133
|
|
134
|
+
def constant_allowed?(node)
|
135
|
+
allowed_constants.include?(node.identifier.short_name)
|
136
|
+
end
|
137
|
+
|
120
138
|
def compact_namespace?(node)
|
121
139
|
/::/.match?(node.loc.name.source)
|
122
140
|
end
|
@@ -143,6 +161,10 @@ module RuboCop
|
|
143
161
|
def nodoc(node)
|
144
162
|
processed_source.ast_with_comments[node.children.first].first
|
145
163
|
end
|
164
|
+
|
165
|
+
def allowed_constants
|
166
|
+
@allowed_constants ||= cop_config.fetch('AllowedConstants', []).map(&:intern)
|
167
|
+
end
|
146
168
|
end
|
147
169
|
end
|
148
170
|
end
|
@@ -25,8 +25,7 @@ module RuboCop
|
|
25
25
|
class EachForSimpleLoop < Base
|
26
26
|
extend AutoCorrector
|
27
27
|
|
28
|
-
MSG = 'Use `Integer#times` for a simple loop which iterates a fixed '
|
29
|
-
'number of times.'
|
28
|
+
MSG = 'Use `Integer#times` for a simple loop which iterates a fixed number of times.'
|
30
29
|
|
31
30
|
def on_block(node)
|
32
31
|
return unless offending_each_range(node)
|
@@ -44,19 +44,14 @@ module RuboCop
|
|
44
44
|
def on_case(case_node)
|
45
45
|
return if case_node.condition
|
46
46
|
|
47
|
-
branch_bodies = [
|
48
|
-
*case_node.when_branches.map(&:body),
|
49
|
-
case_node.else_branch
|
50
|
-
].compact
|
47
|
+
branch_bodies = [*case_node.when_branches.map(&:body), case_node.else_branch].compact
|
51
48
|
|
52
49
|
return if branch_bodies.any? do |body|
|
53
50
|
body.return_type? ||
|
54
51
|
body.each_descendant.any?(&:return_type?)
|
55
52
|
end
|
56
53
|
|
57
|
-
add_offense(case_node.loc.keyword)
|
58
|
-
autocorrect(corrector, case_node)
|
59
|
-
end
|
54
|
+
add_offense(case_node.loc.keyword) { |corrector| autocorrect(corrector, case_node) }
|
60
55
|
end
|
61
56
|
|
62
57
|
private
|
@@ -123,17 +123,13 @@ module RuboCop
|
|
123
123
|
def empty_check(node)
|
124
124
|
return unless node.else? && !node.else_branch
|
125
125
|
|
126
|
-
add_offense(node.loc.else)
|
127
|
-
autocorrect(corrector, node)
|
128
|
-
end
|
126
|
+
add_offense(node.loc.else) { |corrector| autocorrect(corrector, node) }
|
129
127
|
end
|
130
128
|
|
131
129
|
def nil_check(node)
|
132
130
|
return unless node.else_branch&.nil_type?
|
133
131
|
|
134
|
-
add_offense(node.loc.else)
|
135
|
-
autocorrect(corrector, node)
|
136
|
-
end
|
132
|
+
add_offense(node.loc.else) { |corrector| autocorrect(corrector, node) }
|
137
133
|
end
|
138
134
|
|
139
135
|
def autocorrect(corrector, node)
|
@@ -154,9 +150,7 @@ module RuboCop
|
|
154
150
|
return node if node.case_type?
|
155
151
|
return node unless node.elsif?
|
156
152
|
|
157
|
-
node.each_ancestor(:if, :case, :when).find(-> { node })
|
158
|
-
parent.loc.end
|
159
|
-
end
|
153
|
+
node.each_ancestor(:if, :case, :when).find(-> { node }) { |parent| parent.loc.end }
|
160
154
|
end
|
161
155
|
|
162
156
|
def autocorrect_forbidden?(type)
|
@@ -37,8 +37,7 @@ module RuboCop
|
|
37
37
|
def_node_matcher :str_node, '(send (const {nil? cbase} :String) :new)'
|
38
38
|
|
39
39
|
# @!method array_with_block(node)
|
40
|
-
def_node_matcher :array_with_block,
|
41
|
-
'(block (send (const {nil? cbase} :Array) :new) args _)'
|
40
|
+
def_node_matcher :array_with_block, '(block (send (const {nil? cbase} :Array) :new) args _)'
|
42
41
|
|
43
42
|
# @!method hash_with_block(node)
|
44
43
|
def_node_matcher :hash_with_block, <<~PATTERN
|
@@ -63,7 +62,7 @@ module RuboCop
|
|
63
62
|
ARR_MSG
|
64
63
|
elsif offense_hash_node?(node)
|
65
64
|
HASH_MSG
|
66
|
-
elsif str_node(node) && !
|
65
|
+
elsif str_node(node) && !frozen_strings?
|
67
66
|
format(STR_MSG, prefer: preferred_string_literal)
|
68
67
|
end
|
69
68
|
end
|
@@ -84,20 +83,17 @@ module RuboCop
|
|
84
83
|
parent = node.parent
|
85
84
|
return false unless parent && %i[send super zsuper].include?(parent.type)
|
86
85
|
|
87
|
-
node.equal?(parent.arguments.first) &&
|
88
|
-
!parentheses?(node.parent)
|
86
|
+
node.equal?(parent.arguments.first) && !parentheses?(node.parent)
|
89
87
|
end
|
90
88
|
|
91
89
|
def replacement_range(node)
|
92
|
-
if hash_node(node) &&
|
93
|
-
first_argument_unparenthesized?(node)
|
90
|
+
if hash_node(node) && first_argument_unparenthesized?(node)
|
94
91
|
# `some_method {}` is not same as `some_method Hash.new`
|
95
92
|
# because the braces are interpreted as a block. We will have
|
96
93
|
# to rewrite the arguments to wrap them in parenthesis.
|
97
94
|
args = node.parent.arguments
|
98
95
|
|
99
|
-
range_between(args[0].source_range.begin_pos - 1,
|
100
|
-
args[-1].source_range.end_pos)
|
96
|
+
range_between(args[0].source_range.begin_pos - 1, args[-1].source_range.end_pos)
|
101
97
|
else
|
102
98
|
node.source_range
|
103
99
|
end
|
@@ -129,6 +125,13 @@ module RuboCop
|
|
129
125
|
end
|
130
126
|
end
|
131
127
|
end
|
128
|
+
|
129
|
+
def frozen_strings?
|
130
|
+
return true if frozen_string_literals_enabled?
|
131
|
+
|
132
|
+
frozen_string_cop_enabled = config.for_cop('Style/FrozenStringLiteral')['Enabled']
|
133
|
+
frozen_string_cop_enabled && !frozen_string_literals_disabled?
|
134
|
+
end
|
132
135
|
end
|
133
136
|
end
|
134
137
|
end
|
@@ -45,16 +45,13 @@ module RuboCop
|
|
45
45
|
extend AutoCorrector
|
46
46
|
|
47
47
|
MSG_COMPACT = 'Put empty method definitions on a single line.'
|
48
|
-
MSG_EXPANDED = 'Put the `end` of empty method definitions on the '
|
49
|
-
'next line.'
|
48
|
+
MSG_EXPANDED = 'Put the `end` of empty method definitions on the next line.'
|
50
49
|
|
51
50
|
def on_def(node)
|
52
51
|
return if node.body || comment_lines?(node)
|
53
52
|
return if correct_style?(node)
|
54
53
|
|
55
|
-
add_offense(node)
|
56
|
-
corrector.replace(node, corrected(node))
|
57
|
-
end
|
54
|
+
add_offense(node) { |corrector| corrector.replace(node, corrected(node)) }
|
58
55
|
end
|
59
56
|
alias on_defs on_def
|
60
57
|
|
@@ -65,8 +62,7 @@ module RuboCop
|
|
65
62
|
end
|
66
63
|
|
67
64
|
def correct_style?(node)
|
68
|
-
compact_style? && compact?(node) ||
|
69
|
-
expanded_style? && expanded?(node)
|
65
|
+
compact_style? && compact?(node) || expanded_style? && expanded?(node)
|
70
66
|
end
|
71
67
|
|
72
68
|
def corrected(node)
|
@@ -15,8 +15,7 @@ module RuboCop
|
|
15
15
|
class EndBlock < Base
|
16
16
|
extend AutoCorrector
|
17
17
|
|
18
|
-
MSG = 'Avoid the use of `END` blocks. '
|
19
|
-
'Use `Kernel#at_exit` instead.'
|
18
|
+
MSG = 'Avoid the use of `END` blocks. Use `Kernel#at_exit` instead.'
|
20
19
|
|
21
20
|
def on_postexe(node)
|
22
21
|
add_offense(node.loc.keyword) do |corrector|
|
@@ -79,9 +79,7 @@ module RuboCop
|
|
79
79
|
def handle_disallow_style(node)
|
80
80
|
return unless node.endless?
|
81
81
|
|
82
|
-
add_offense(node)
|
83
|
-
correct_to_multiline(corrector, node)
|
84
|
-
end
|
82
|
+
add_offense(node) { |corrector| correct_to_multiline(corrector, node) }
|
85
83
|
end
|
86
84
|
|
87
85
|
def correct_to_multiline(corrector, node)
|
@@ -112,13 +112,11 @@ module RuboCop
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def special_file_keyword?(node)
|
115
|
-
node.str_type? &&
|
116
|
-
node.source == '__FILE__'
|
115
|
+
node.str_type? && node.source == '__FILE__'
|
117
116
|
end
|
118
117
|
|
119
118
|
def special_line_keyword?(node)
|
120
|
-
node.int_type? &&
|
121
|
-
node.source == '__LINE__'
|
119
|
+
node.int_type? && node.source == '__LINE__'
|
122
120
|
end
|
123
121
|
|
124
122
|
def file_and_line(node)
|
@@ -224,7 +222,7 @@ module RuboCop
|
|
224
222
|
|
225
223
|
register_offense(node) do |corrector|
|
226
224
|
line_str = missing_line(node, code)
|
227
|
-
corrector.insert_after(node.
|
225
|
+
corrector.insert_after(node.last_argument.source_range.end, ", __FILE__, #{line_str}")
|
228
226
|
end
|
229
227
|
end
|
230
228
|
|
@@ -85,9 +85,7 @@ module RuboCop
|
|
85
85
|
elsif (default_dir = pathname_parent_expand_path(node))
|
86
86
|
return unless unrecommended_argument?(default_dir)
|
87
87
|
|
88
|
-
add_offense(node, message: PATHNAME_MSG)
|
89
|
-
autocorrect(corrector, node)
|
90
|
-
end
|
88
|
+
add_offense(node, message: PATHNAME_MSG) { |corrector| autocorrect(corrector, node) }
|
91
89
|
elsif (default_dir = pathname_new_parent_expand_path(node))
|
92
90
|
return unless unrecommended_argument?(default_dir)
|
93
91
|
|
@@ -106,10 +106,7 @@ module RuboCop
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def block_body_range(block_node, send_node)
|
109
|
-
range_between(
|
110
|
-
send_node.loc.expression.end_pos,
|
111
|
-
block_node.loc.end.end_pos
|
112
|
-
)
|
109
|
+
range_between(send_node.loc.expression.end_pos, block_node.loc.end.end_pos)
|
113
110
|
end
|
114
111
|
end
|
115
112
|
end
|
@@ -146,10 +146,7 @@ module RuboCop
|
|
146
146
|
next if seq.percent?
|
147
147
|
|
148
148
|
detected_style = seq.style
|
149
|
-
token = contents.begin.adjust(
|
150
|
-
begin_pos: seq.begin_pos,
|
151
|
-
end_pos: seq.end_pos
|
152
|
-
)
|
149
|
+
token = contents.begin.adjust(begin_pos: seq.begin_pos, end_pos: seq.end_pos)
|
153
150
|
|
154
151
|
yield(detected_style, token)
|
155
152
|
end
|
@@ -10,9 +10,6 @@ module RuboCop
|
|
10
10
|
# default in future Ruby. The comment will be added below a shebang and
|
11
11
|
# encoding comment.
|
12
12
|
#
|
13
|
-
# Note that the cop will ignore files where the comment exists but is set
|
14
|
-
# to `false` instead of `true`.
|
15
|
-
#
|
16
13
|
# @example EnforcedStyle: always (default)
|
17
14
|
# # The `always` style will always add the frozen string literal comment
|
18
15
|
# # to a file, regardless of the Ruby version or if `freeze` or `<<` are
|
@@ -79,8 +76,7 @@ module RuboCop
|
|
79
76
|
include RangeHelp
|
80
77
|
extend AutoCorrector
|
81
78
|
|
82
|
-
MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: '
|
83
|
-
'true`.'
|
79
|
+
MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: true`.'
|
84
80
|
MSG_MISSING = 'Missing frozen string literal comment.'
|
85
81
|
MSG_UNNECESSARY = 'Unnecessary frozen string literal comment.'
|
86
82
|
MSG_DISABLED = 'Frozen string literal comment must be set to `true`.'
|
@@ -146,17 +142,13 @@ module RuboCop
|
|
146
142
|
def missing_offense(processed_source)
|
147
143
|
range = source_range(processed_source.buffer, 0, 0)
|
148
144
|
|
149
|
-
add_offense(range, message: MSG_MISSING)
|
150
|
-
insert_comment(corrector)
|
151
|
-
end
|
145
|
+
add_offense(range, message: MSG_MISSING) { |corrector| insert_comment(corrector) }
|
152
146
|
end
|
153
147
|
|
154
148
|
def missing_true_offense(processed_source)
|
155
149
|
range = source_range(processed_source.buffer, 0, 0)
|
156
150
|
|
157
|
-
add_offense(range, message: MSG_MISSING_TRUE)
|
158
|
-
insert_comment(corrector)
|
159
|
-
end
|
151
|
+
add_offense(range, message: MSG_MISSING_TRUE) { |corrector| insert_comment(corrector) }
|
160
152
|
end
|
161
153
|
|
162
154
|
def unnecessary_comment_offense(processed_source)
|
@@ -99,12 +99,9 @@ module RuboCop
|
|
99
99
|
|
100
100
|
def register_offense(node, scope_exiting_keyword, conditional_keyword)
|
101
101
|
condition, = node.node_parts
|
102
|
-
example = [scope_exiting_keyword,
|
103
|
-
conditional_keyword,
|
104
|
-
condition.source].join(' ')
|
102
|
+
example = [scope_exiting_keyword, conditional_keyword, condition.source].join(' ')
|
105
103
|
if too_long_for_single_line?(node, example)
|
106
|
-
example = "#{conditional_keyword} #{condition.source}; "
|
107
|
-
"#{scope_exiting_keyword}; end"
|
104
|
+
example = "#{conditional_keyword} #{condition.source}; #{scope_exiting_keyword}; end"
|
108
105
|
end
|
109
106
|
|
110
107
|
add_offense(node.loc.keyword, message: format(MSG, example: example))
|
@@ -126,8 +123,7 @@ module RuboCop
|
|
126
123
|
end
|
127
124
|
|
128
125
|
def accepted_form?(node, ending: false)
|
129
|
-
accepted_if?(node, ending) || node.condition.multiline? ||
|
130
|
-
node.parent&.assignment?
|
126
|
+
accepted_if?(node, ending) || node.condition.multiline? || node.parent&.assignment?
|
131
127
|
end
|
132
128
|
|
133
129
|
def accepted_if?(node, ending)
|
@@ -61,11 +61,11 @@ module RuboCop
|
|
61
61
|
def single_argument(node)
|
62
62
|
first_argument = node.first_argument
|
63
63
|
if first_argument.hash_type?
|
64
|
-
|
65
|
-
corrector.replace(node, "{#{first_argument.source}}")
|
66
|
-
end
|
64
|
+
register_offense_for_hash(node, first_argument)
|
67
65
|
elsif first_argument.splat_type?
|
68
66
|
add_offense(node, message: MSG_SPLAT) unless allowed_splat_argument?
|
67
|
+
elsif use_zip_method_without_argument?(first_argument)
|
68
|
+
register_offense_for_zip_method(node, first_argument)
|
69
69
|
else
|
70
70
|
add_offense(node, message: MSG_TO_H) do |corrector|
|
71
71
|
replacement = first_argument.source
|
@@ -75,6 +75,31 @@ module RuboCop
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
def use_zip_method_without_argument?(first_argument)
|
79
|
+
return false unless first_argument&.send_type?
|
80
|
+
|
81
|
+
first_argument.method?(:zip) && first_argument.arguments.empty?
|
82
|
+
end
|
83
|
+
|
84
|
+
def register_offense_for_hash(node, hash_argument)
|
85
|
+
add_offense(node, message: MSG_LITERAL_HASH_ARG) do |corrector|
|
86
|
+
corrector.replace(node, "{#{hash_argument.source}}")
|
87
|
+
|
88
|
+
parent = node.parent
|
89
|
+
add_parentheses(parent, corrector) if parent&.send_type? && !parent.parenthesized?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def register_offense_for_zip_method(node, zip_method)
|
94
|
+
add_offense(node, message: MSG_TO_H) do |corrector|
|
95
|
+
if zip_method.parenthesized?
|
96
|
+
corrector.insert_before(zip_method.loc.end, '[]')
|
97
|
+
else
|
98
|
+
corrector.insert_after(zip_method, '([])')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
78
103
|
def requires_parens?(node)
|
79
104
|
node.call_type? && node.arguments.any? && !node.parenthesized?
|
80
105
|
end
|
@@ -85,6 +110,9 @@ module RuboCop
|
|
85
110
|
else
|
86
111
|
add_offense(node, message: MSG_LITERAL_MULTI_ARG) do |corrector|
|
87
112
|
corrector.replace(node, args_to_hash(node.arguments))
|
113
|
+
|
114
|
+
parent = node.parent
|
115
|
+
add_parentheses(parent, corrector) if parent&.send_type? && !parent.parenthesized?
|
88
116
|
end
|
89
117
|
end
|
90
118
|
end
|