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
@@ -22,8 +22,7 @@ module RuboCop
|
|
22
22
|
class SafeNavigationWithEmpty < Base
|
23
23
|
extend AutoCorrector
|
24
24
|
|
25
|
-
MSG = 'Avoid calling `empty?` with the safe navigation operator '
|
26
|
-
'in conditionals.'
|
25
|
+
MSG = 'Avoid calling `empty?` with the safe navigation operator in conditionals.'
|
27
26
|
|
28
27
|
# @!method safe_navigation_empty_in_conditional?(node)
|
29
28
|
def_node_matcher :safe_navigation_empty_in_conditional?, <<~PATTERN
|
@@ -53,9 +53,7 @@ module RuboCop
|
|
53
53
|
|
54
54
|
def on_send(node)
|
55
55
|
send_with_mixin_argument?(node) do |method, module_name|
|
56
|
-
message = message(
|
57
|
-
method, module_name.source, bad_location(node).source
|
58
|
-
)
|
56
|
+
message = message(method, module_name.source, bad_location(node).source)
|
59
57
|
|
60
58
|
bad_location = bad_location(node)
|
61
59
|
add_offense(bad_location, message: message) do |corrector|
|
@@ -73,10 +71,7 @@ module RuboCop
|
|
73
71
|
end
|
74
72
|
|
75
73
|
def message(method, module_name, bad_method)
|
76
|
-
format(
|
77
|
-
MSG,
|
78
|
-
method: method, module_name: module_name, bad_method: bad_method
|
79
|
-
)
|
74
|
+
format(MSG, method: method, module_name: module_name, bad_method: bad_method)
|
80
75
|
end
|
81
76
|
|
82
77
|
def mixin_method?(node)
|
@@ -64,8 +64,7 @@ module RuboCop
|
|
64
64
|
# end
|
65
65
|
#
|
66
66
|
class ShadowedArgument < Base
|
67
|
-
MSG = 'Argument `%<argument>s` was shadowed by a local variable '
|
68
|
-
'before it was used.'
|
67
|
+
MSG = 'Argument `%<argument>s` was shadowed by a local variable before it was used.'
|
69
68
|
|
70
69
|
# @!method uses_var?(node)
|
71
70
|
def_node_search :uses_var?, '(lvar %)'
|
@@ -75,9 +74,7 @@ module RuboCop
|
|
75
74
|
end
|
76
75
|
|
77
76
|
def after_leaving_scope(scope, _variable_table)
|
78
|
-
scope.variables.each_value
|
79
|
-
check_argument(variable)
|
80
|
-
end
|
77
|
+
scope.variables.each_value { |variable| check_argument(variable) }
|
81
78
|
end
|
82
79
|
|
83
80
|
private
|
@@ -128,8 +125,7 @@ module RuboCop
|
|
128
125
|
next false if assignment_node.shorthand_asgn?
|
129
126
|
|
130
127
|
node_within_block_or_conditional =
|
131
|
-
node_within_block_or_conditional?(assignment_node.parent,
|
132
|
-
argument.scope.node)
|
128
|
+
node_within_block_or_conditional?(assignment_node.parent, argument.scope.node)
|
133
129
|
|
134
130
|
unless uses_var?(assignment_node, argument.name)
|
135
131
|
# It's impossible to decide whether a branch or block is executed,
|
@@ -162,10 +158,7 @@ module RuboCop
|
|
162
158
|
# Get argument references without assignments' references
|
163
159
|
#
|
164
160
|
def argument_references(argument)
|
165
|
-
assignment_references = argument
|
166
|
-
.assignments
|
167
|
-
.flat_map(&:references)
|
168
|
-
.map(&:source_range)
|
161
|
+
assignment_references = argument.assignments.flat_map(&:references).map(&:source_range)
|
169
162
|
|
170
163
|
argument.references.reject do |ref|
|
171
164
|
next false unless ref.explicit?
|
@@ -59,8 +59,7 @@ module RuboCop
|
|
59
59
|
contains_multiple_levels_of_exceptions?(group)
|
60
60
|
end
|
61
61
|
|
62
|
-
return if !rescue_group_rescues_multiple_levels &&
|
63
|
-
sorted?(rescued_groups)
|
62
|
+
return if !rescue_group_rescues_multiple_levels && sorted?(rescued_groups)
|
64
63
|
|
65
64
|
add_offense(offense_range(rescues))
|
66
65
|
end
|
@@ -74,18 +73,14 @@ module RuboCop
|
|
74
73
|
end
|
75
74
|
|
76
75
|
def rescued_groups_for(rescues)
|
77
|
-
rescues.map
|
78
|
-
evaluate_exceptions(group)
|
79
|
-
end
|
76
|
+
rescues.map { |group| evaluate_exceptions(group) }
|
80
77
|
end
|
81
78
|
|
82
79
|
def contains_multiple_levels_of_exceptions?(group)
|
83
80
|
# Always treat `Exception` as the highest level exception.
|
84
81
|
return true if group.size > 1 && group.include?(Exception)
|
85
82
|
|
86
|
-
group.combination(2).any?
|
87
|
-
compare_exceptions(a, b)
|
88
|
-
end
|
83
|
+
group.combination(2).any? { |a, b| compare_exceptions(a, b) }
|
89
84
|
end
|
90
85
|
|
91
86
|
def compare_exceptions(exception, other_exception)
|
@@ -111,6 +106,9 @@ module RuboCop
|
|
111
106
|
|
112
107
|
if rescued_exceptions.any?
|
113
108
|
rescued_exceptions.each_with_object([]) do |exception, converted|
|
109
|
+
# FIXME: Workaround `rubocop:disable` comment for JRuby.
|
110
|
+
# https://github.com/jruby/jruby/issues/6642
|
111
|
+
# rubocop:disable Style/RedundantBegin
|
114
112
|
begin
|
115
113
|
RuboCop::Util.silence_warnings do
|
116
114
|
# Avoid printing deprecation warnings about constants
|
@@ -119,6 +117,7 @@ module RuboCop
|
|
119
117
|
rescue NameError
|
120
118
|
converted << nil
|
121
119
|
end
|
120
|
+
# rubocop:enable Style/RedundantBegin
|
122
121
|
end
|
123
122
|
else
|
124
123
|
# treat an empty `rescue` as `rescue StandardError`
|
@@ -48,8 +48,7 @@ module RuboCop
|
|
48
48
|
|
49
49
|
next unless STRUCT_METHOD_NAMES.include?(member_name.to_sym)
|
50
50
|
|
51
|
-
message = format(MSG, member_name: member_name.inspect,
|
52
|
-
method_name: member_name.to_s)
|
51
|
+
message = format(MSG, member_name: member_name.inspect, method_name: member_name.to_s)
|
53
52
|
add_offense(arg, message: message)
|
54
53
|
end
|
55
54
|
end
|
@@ -64,12 +64,51 @@ module RuboCop
|
|
64
64
|
# rescue
|
65
65
|
# # do nothing
|
66
66
|
# end
|
67
|
+
#
|
68
|
+
# @example AllowNil: true (default)
|
69
|
+
#
|
70
|
+
# # good
|
71
|
+
# def some_method
|
72
|
+
# do_something
|
73
|
+
# rescue
|
74
|
+
# nil
|
75
|
+
# end
|
76
|
+
#
|
77
|
+
# # good
|
78
|
+
# begin
|
79
|
+
# do_something
|
80
|
+
# rescue
|
81
|
+
# # do nothing
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# # good
|
85
|
+
# do_something rescue nil
|
86
|
+
#
|
87
|
+
# @example AllowNil: false
|
88
|
+
#
|
89
|
+
# # bad
|
90
|
+
# def some_method
|
91
|
+
# do_something
|
92
|
+
# rescue
|
93
|
+
# nil
|
94
|
+
# end
|
95
|
+
#
|
96
|
+
# # bad
|
97
|
+
# begin
|
98
|
+
# do_something
|
99
|
+
# rescue
|
100
|
+
# nil
|
101
|
+
# end
|
102
|
+
#
|
103
|
+
# # bad
|
104
|
+
# do_something rescue nil
|
67
105
|
class SuppressedException < Base
|
68
106
|
MSG = 'Do not suppress exceptions.'
|
69
107
|
|
70
108
|
def on_resbody(node)
|
71
|
-
return if node.body
|
109
|
+
return if node.body && !nil_body?(node)
|
72
110
|
return if cop_config['AllowComments'] && comment_between_rescue_and_end?(node)
|
111
|
+
return if cop_config['AllowNil'] && nil_body?(node)
|
73
112
|
|
74
113
|
add_offense(node)
|
75
114
|
end
|
@@ -83,6 +122,10 @@ module RuboCop
|
|
83
122
|
end_line = ancestor.loc.end.line
|
84
123
|
processed_source[node.first_line...end_line].any? { |line| comment_line?(line) }
|
85
124
|
end
|
125
|
+
|
126
|
+
def nil_body?(node)
|
127
|
+
node.body&.nil_type?
|
128
|
+
end
|
86
129
|
end
|
87
130
|
end
|
88
131
|
end
|
@@ -6,6 +6,12 @@ module RuboCop
|
|
6
6
|
# This cop checks for uses of literal strings converted to
|
7
7
|
# a symbol where a literal symbol could be used instead.
|
8
8
|
#
|
9
|
+
# There are two possible styles for this cop.
|
10
|
+
# `strict` (default) will register an offense for any incorrect usage.
|
11
|
+
# `consistent` additionally requires hashes to use the same style for
|
12
|
+
# every symbol key (ie. if any symbol key needs to be quoted it requires
|
13
|
+
# all keys to be quoted).
|
14
|
+
#
|
9
15
|
# @example
|
10
16
|
# # bad
|
11
17
|
# 'string'.to_sym
|
@@ -21,10 +27,49 @@ module RuboCop
|
|
21
27
|
# :underscored_symbol
|
22
28
|
# :'hyphenated-string'
|
23
29
|
#
|
30
|
+
# @example EnforcedStyle: strict (default)
|
31
|
+
#
|
32
|
+
# # bad
|
33
|
+
# {
|
34
|
+
# 'a': 1,
|
35
|
+
# "b": 2,
|
36
|
+
# 'c-d': 3
|
37
|
+
# }
|
38
|
+
#
|
39
|
+
# # good (don't quote keys that don't require quoting)
|
40
|
+
# {
|
41
|
+
# a: 1,
|
42
|
+
# b: 2,
|
43
|
+
# 'c-d': 3
|
44
|
+
# }
|
45
|
+
#
|
46
|
+
# @example EnforcedStyle: consistent
|
47
|
+
#
|
48
|
+
# # bad
|
49
|
+
# {
|
50
|
+
# a: 1,
|
51
|
+
# 'b-c': 2
|
52
|
+
# }
|
53
|
+
#
|
54
|
+
# # good (quote all keys if any need quoting)
|
55
|
+
# {
|
56
|
+
# 'a': 1,
|
57
|
+
# 'b-c': 2
|
58
|
+
# }
|
59
|
+
#
|
60
|
+
# # good (no quoting required)
|
61
|
+
# {
|
62
|
+
# a: 1,
|
63
|
+
# b: 2
|
64
|
+
# }
|
65
|
+
#
|
24
66
|
class SymbolConversion < Base
|
25
67
|
extend AutoCorrector
|
68
|
+
include ConfigurableEnforcedStyle
|
26
69
|
|
27
70
|
MSG = 'Unnecessary symbol conversion; use `%<correction>s` instead.'
|
71
|
+
MSG_CONSISTENCY = 'Symbol hash key should be quoted for consistency; ' \
|
72
|
+
'use `%<correction>s` instead.'
|
28
73
|
RESTRICT_ON_SEND = %i[to_sym intern].freeze
|
29
74
|
|
30
75
|
def on_send(node)
|
@@ -35,7 +80,7 @@ module RuboCop
|
|
35
80
|
end
|
36
81
|
|
37
82
|
def on_sym(node)
|
38
|
-
return if properly_quoted?(node.source, node.value.inspect)
|
83
|
+
return if ignored_node?(node) || properly_quoted?(node.source, node.value.inspect)
|
39
84
|
|
40
85
|
# `alias` arguments are symbols but since a symbol that requires
|
41
86
|
# being quoted is not a valid method identifier, it can be ignored
|
@@ -51,16 +96,29 @@ module RuboCop
|
|
51
96
|
register_offense(node, correction: node.value.inspect)
|
52
97
|
end
|
53
98
|
|
99
|
+
def on_hash(node)
|
100
|
+
# For `EnforcedStyle: strict`, hash keys are evaluated in `on_sym`
|
101
|
+
return unless style == :consistent
|
102
|
+
|
103
|
+
keys = node.keys.select(&:sym_type?)
|
104
|
+
|
105
|
+
if keys.any? { |key| requires_quotes?(key) }
|
106
|
+
correct_inconsistent_hash_keys(keys)
|
107
|
+
else
|
108
|
+
# If there are no symbol keys requiring quoting,
|
109
|
+
# treat the hash like `EnforcedStyle: strict`.
|
110
|
+
keys.each { |key| correct_hash_key(key) }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
54
114
|
private
|
55
115
|
|
56
116
|
def register_offense(node, correction:, message: format(MSG, correction: correction))
|
57
|
-
add_offense(node, message: message)
|
58
|
-
corrector.replace(node, correction)
|
59
|
-
end
|
117
|
+
add_offense(node, message: message) { |corrector| corrector.replace(node, correction) }
|
60
118
|
end
|
61
119
|
|
62
120
|
def properly_quoted?(source, value)
|
63
|
-
return true if !source.match?(/['"]/) || value.end_with?('=')
|
121
|
+
return true if style == :strict && (!source.match?(/['"]/) || value.end_with?('='))
|
64
122
|
|
65
123
|
source == value ||
|
66
124
|
# `Symbol#inspect` uses double quotes, but allow single-quoted
|
@@ -68,6 +126,10 @@ module RuboCop
|
|
68
126
|
source.tr("'", '"') == value
|
69
127
|
end
|
70
128
|
|
129
|
+
def requires_quotes?(sym_node)
|
130
|
+
sym_node.value.inspect.match?(/^:".*?"|=$/)
|
131
|
+
end
|
132
|
+
|
71
133
|
def in_alias?(node)
|
72
134
|
node.parent&.alias_type?
|
73
135
|
end
|
@@ -88,7 +150,7 @@ module RuboCop
|
|
88
150
|
# will be ignored.
|
89
151
|
return unless node.value.to_s.match?(/\A[a-z0-9_]/i)
|
90
152
|
|
91
|
-
correction = node.value.inspect.
|
153
|
+
correction = node.value.inspect.delete_prefix(':')
|
92
154
|
return if properly_quoted?(node.source, correction)
|
93
155
|
|
94
156
|
register_offense(
|
@@ -97,6 +159,29 @@ module RuboCop
|
|
97
159
|
message: format(MSG, correction: "#{correction}:")
|
98
160
|
)
|
99
161
|
end
|
162
|
+
|
163
|
+
def correct_inconsistent_hash_keys(keys)
|
164
|
+
keys.each do |key|
|
165
|
+
ignore_node(key)
|
166
|
+
|
167
|
+
next if requires_quotes?(key)
|
168
|
+
next if properly_quoted?(key.source, %("#{key.value}"))
|
169
|
+
|
170
|
+
correction = "#{quote_type}#{key.value}#{quote_type}"
|
171
|
+
register_offense(
|
172
|
+
key,
|
173
|
+
correction: correction,
|
174
|
+
message: format(MSG_CONSISTENCY, correction: "#{correction}:")
|
175
|
+
)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def quote_type
|
180
|
+
# Use the `Style/StringLiterals` configuration for quoting symbols
|
181
|
+
return '"' unless config.for_cop('Style/StringLiterals')['Enabled']
|
182
|
+
|
183
|
+
config.for_cop('Style/StringLiterals')['EnforcedStyle'] == 'single_quotes' ? "'" : '"'
|
184
|
+
end
|
100
185
|
end
|
101
186
|
end
|
102
187
|
end
|
@@ -21,9 +21,7 @@ module RuboCop
|
|
21
21
|
message =
|
22
22
|
"#{diagnostic.message}\n(Using Ruby #{ruby_version} parser; " \
|
23
23
|
'configure using `TargetRubyVersion` parameter, under `AllCops`)'
|
24
|
-
add_offense(diagnostic.location,
|
25
|
-
message: message,
|
26
|
-
severity: diagnostic.level)
|
24
|
+
add_offense(diagnostic.location, message: message, severity: diagnostic.level)
|
27
25
|
end
|
28
26
|
|
29
27
|
def add_offense_from_error(error)
|
@@ -31,8 +31,7 @@ module RuboCop
|
|
31
31
|
class ToJSON < Base
|
32
32
|
extend AutoCorrector
|
33
33
|
|
34
|
-
MSG = '`#to_json` requires an optional argument to be parsable '
|
35
|
-
'via JSON.generate(obj).'
|
34
|
+
MSG = '`#to_json` requires an optional argument to be parsable via JSON.generate(obj).'
|
36
35
|
|
37
36
|
def on_def(node)
|
38
37
|
return unless node.method?(:to_json) && node.arguments.empty?
|
@@ -38,9 +38,7 @@ module RuboCop
|
|
38
38
|
|
39
39
|
trailing_comma = trailing_comma_range(node)
|
40
40
|
|
41
|
-
add_offense(trailing_comma)
|
42
|
-
corrector.remove(trailing_comma)
|
43
|
-
end
|
41
|
+
add_offense(trailing_comma) { |corrector| corrector.remove(trailing_comma) }
|
44
42
|
end
|
45
43
|
|
46
44
|
private
|
@@ -48,9 +48,7 @@ module RuboCop
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def after_leaving_scope(scope, _variable_table)
|
51
|
-
scope.variables.each_value
|
52
|
-
check_variable(variable)
|
53
|
-
end
|
51
|
+
scope.variables.each_value { |variable| check_variable(variable) }
|
54
52
|
end
|
55
53
|
|
56
54
|
def check_variable(variable)
|
@@ -81,8 +81,7 @@ module RuboCop
|
|
81
81
|
def check_if(node)
|
82
82
|
if_branch = node.if_branch
|
83
83
|
else_branch = node.else_branch
|
84
|
-
if_branch && else_branch &&
|
85
|
-
flow_expression?(if_branch) && flow_expression?(else_branch)
|
84
|
+
if_branch && else_branch && flow_expression?(if_branch) && flow_expression?(else_branch)
|
86
85
|
end
|
87
86
|
|
88
87
|
def check_case(node)
|
@@ -90,9 +89,7 @@ module RuboCop
|
|
90
89
|
return false unless else_branch
|
91
90
|
return false unless flow_expression?(else_branch)
|
92
91
|
|
93
|
-
node.when_branches.all?
|
94
|
-
branch.body && flow_expression?(branch.body)
|
95
|
-
end
|
92
|
+
node.when_branches.all? { |branch| branch.body && flow_expression?(branch.body) }
|
96
93
|
end
|
97
94
|
end
|
98
95
|
end
|
@@ -87,6 +87,7 @@ module RuboCop
|
|
87
87
|
include IgnoredPattern
|
88
88
|
|
89
89
|
MSG = 'This loop will have at most one iteration.'
|
90
|
+
CONTINUE_KEYWORDS = %i[next redo].freeze
|
90
91
|
|
91
92
|
def on_while(node)
|
92
93
|
check(node)
|
@@ -116,7 +117,10 @@ module RuboCop
|
|
116
117
|
break_statement = statements.find { |statement| break_statement?(statement) }
|
117
118
|
return unless break_statement
|
118
119
|
|
119
|
-
|
120
|
+
unless preceded_by_continue_statement?(break_statement) ||
|
121
|
+
conditional_continue_keyword?(break_statement)
|
122
|
+
add_offense(node)
|
123
|
+
end
|
120
124
|
end
|
121
125
|
|
122
126
|
def statements(node)
|
@@ -162,8 +166,7 @@ module RuboCop
|
|
162
166
|
def check_if(node)
|
163
167
|
if_branch = node.if_branch
|
164
168
|
else_branch = node.else_branch
|
165
|
-
if_branch && else_branch &&
|
166
|
-
break_statement?(if_branch) && break_statement?(else_branch)
|
169
|
+
if_branch && else_branch && break_statement?(if_branch) && break_statement?(else_branch)
|
167
170
|
end
|
168
171
|
|
169
172
|
def check_case(node)
|
@@ -171,18 +174,22 @@ module RuboCop
|
|
171
174
|
return false unless else_branch
|
172
175
|
return false unless break_statement?(else_branch)
|
173
176
|
|
174
|
-
node.when_branches.all?
|
175
|
-
branch.body && break_statement?(branch.body)
|
176
|
-
end
|
177
|
+
node.when_branches.all? { |branch| branch.body && break_statement?(branch.body) }
|
177
178
|
end
|
178
179
|
|
179
180
|
def preceded_by_continue_statement?(break_statement)
|
180
181
|
break_statement.left_siblings.any? do |sibling|
|
181
182
|
next if sibling.loop_keyword? || loop_method?(sibling)
|
182
183
|
|
183
|
-
sibling.each_descendant(
|
184
|
+
sibling.each_descendant(*CONTINUE_KEYWORDS).any?
|
184
185
|
end
|
185
186
|
end
|
187
|
+
|
188
|
+
def conditional_continue_keyword?(break_statement)
|
189
|
+
or_node = break_statement.each_descendant(:or).to_a.last
|
190
|
+
|
191
|
+
or_node && CONTINUE_KEYWORDS.include?(or_node.rhs.type)
|
192
|
+
end
|
186
193
|
end
|
187
194
|
end
|
188
195
|
end
|