rubocop 1.9.1 → 1.13.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 +15 -14
- data/assets/output.html.erb +1 -1
- data/config/default.yml +77 -17
- data/config/obsoletion.yml +4 -0
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +5 -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/execute_runner.rb +1 -1
- 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 +3 -3
- data/lib/rubocop/cop/bundler/gem_comment.rb +43 -8
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -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/date_assignment.rb +57 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -4
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
- data/lib/rubocop/cop/generator.rb +3 -6
- 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.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -4
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +3 -5
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +3 -3
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +5 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
- data/lib/rubocop/cop/layout/argument_alignment.rb +8 -9
- 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 +8 -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 +5 -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 +5 -9
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +12 -6
- 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 +24 -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 +3 -6
- 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 +21 -11
- 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_assignment_layout.rb +26 -0
- 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 +125 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
- 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 +2 -3
- data/lib/rubocop/cop/layout/space_before_brackets.rb +2 -4
- 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 +6 -11
- 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/big_decimal_new.rb +1 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
- data/lib/rubocop/cop/lint/debugger.rb +60 -14
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -4
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +16 -9
- data/lib/rubocop/cop/lint/duplicate_branch.rb +2 -3
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +6 -7
- data/lib/rubocop/cop/lint/duplicate_require.rb +3 -2
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/else_layout.rb +2 -4
- 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 +4 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +4 -6
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +1 -0
- 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 +4 -7
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -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/multiple_comparison.rb +5 -4
- data/lib/rubocop/cop/lint/nested_method_definition.rb +4 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +8 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +12 -4
- 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 +3 -2
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +2 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +10 -10
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -4
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -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 +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +2 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -7
- data/lib/rubocop/cop/lint/shadowed_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -0
- data/lib/rubocop/cop/lint/struct_new_override.rb +2 -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_enum_arguments.rb +3 -0
- 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/unified_integer.rb +1 -0
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +3 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -5
- data/lib/rubocop/cop/lint/unused_block_argument.rb +4 -8
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
- data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -3
- data/lib/rubocop/cop/lint/useless_times.rb +3 -0
- data/lib/rubocop/cop/lint/void.rb +4 -11
- 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 +3 -6
- data/lib/rubocop/cop/metrics/parameter_lists.rb +3 -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/code_length_calculator.rb +6 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +4 -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 +1 -1
- 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 +3 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +6 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -9
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -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 +2 -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 +4 -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 +6 -9
- data/lib/rubocop/cop/mixin/range_help.rb +10 -13
- data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
- data/lib/rubocop/cop/mixin/safe_assignment.rb +6 -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/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/mixin/visibility_help.rb +1 -0
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -0
- data/lib/rubocop/cop/naming/file_name.rb +7 -16
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +8 -3
- data/lib/rubocop/cop/naming/method_name.rb +4 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +2 -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 +13 -12
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +4 -5
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +6 -12
- data/lib/rubocop/cop/style/and_or.rb +3 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +4 -3
- data/lib/rubocop/cop/style/array_coercion.rb +2 -0
- data/lib/rubocop/cop/style/array_join.rb +1 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
- data/lib/rubocop/cop/style/attr.rb +2 -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_equality.rb +2 -1
- 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 +3 -6
- data/lib/rubocop/cop/style/class_equality_comparison.rb +3 -0
- data/lib/rubocop/cop/style/class_methods.rb +1 -3
- data/lib/rubocop/cop/style/collection_compact.rb +3 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +2 -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 +12 -24
- data/lib/rubocop/cop/style/constant_visibility.rb +28 -0
- data/lib/rubocop/cop/style/copyright.rb +3 -6
- data/lib/rubocop/cop/style/date_time.rb +5 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/dir.rb +1 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +30 -3
- data/lib/rubocop/cop/style/documentation_method.rb +1 -0
- data/lib/rubocop/cop/style/double_negation.rb +3 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +2 -2
- data/lib/rubocop/cop/style/each_with_object.rb +1 -0
- 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 +13 -8
- 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 +2 -3
- data/lib/rubocop/cop/style/eval_with_location.rb +91 -31
- data/lib/rubocop/cop/style/even_odd.rb +1 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +3 -5
- data/lib/rubocop/cop/style/exponential_notation.rb +6 -7
- data/lib/rubocop/cop/style/float_division.rb +4 -0
- data/lib/rubocop/cop/style/format_string.rb +2 -0
- data/lib/rubocop/cop/style/format_string_token.rb +2 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
- data/lib/rubocop/cop/style/global_std_stream.rb +1 -0
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +133 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +2 -2
- data/lib/rubocop/cop/style/hash_except.rb +1 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +2 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
- data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +4 -0
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +41 -13
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -0
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +5 -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 +2 -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 +3 -2
- data/lib/rubocop/cop/style/module_function.rb +8 -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 +22 -5
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -10
- data/lib/rubocop/cop/style/negated_if.rb +1 -2
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +16 -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_comparison.rb +3 -0
- data/lib/rubocop/cop/style/nil_lambda.rb +1 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +9 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
- data/lib/rubocop/cop/style/option_hash.rb +2 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
- data/lib/rubocop/cop/style/or_assignment.rb +4 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +12 -9
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
- 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 +2 -2
- data/lib/rubocop/cop/style/raise_args.rb +4 -8
- data/lib/rubocop/cop/style/random_with_offset.rb +8 -8
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
- data/lib/rubocop/cop/style/redundant_assignment.rb +2 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +47 -7
- 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 +5 -6
- data/lib/rubocop/cop/style/redundant_exception.rb +5 -6
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +2 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -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 +4 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +3 -5
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
- 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 +5 -7
- data/lib/rubocop/cop/style/return_nil.rb +7 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +12 -21
- data/lib/rubocop/cop/style/sample.rb +1 -0
- data/lib/rubocop/cop/style/send.rb +1 -2
- data/lib/rubocop/cop/style/signal_exception.rb +6 -7
- data/lib/rubocop/cop/style/single_argument_dig.rb +2 -2
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +16 -4
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -0
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +17 -2
- 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 +3 -6
- data/lib/rubocop/cop/style/string_chars.rb +39 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +9 -10
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -0
- data/lib/rubocop/cop/style/string_literals.rb +2 -5
- data/lib/rubocop/cop/style/strip.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +11 -0
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +29 -10
- data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +3 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
- data/lib/rubocop/cop/style/trivial_accessors.rb +3 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
- data/lib/rubocop/cop/style/unpack_first.rb +1 -0
- 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 +4 -11
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -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 +1 -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 +3 -9
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/formatter/tap_formatter.rb +4 -2
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -1
- data/lib/rubocop/options.rb +27 -41
- 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 +4 -15
- data/lib/rubocop/runner.rb +7 -14
- data/lib/rubocop/target_finder.rb +12 -16
- data/lib/rubocop/target_ruby.rb +25 -21
- data/lib/rubocop/version.rb +1 -1
- metadata +15 -9
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -32,6 +32,7 @@ module RuboCop
|
|
32
32
|
|
33
33
|
minimum_target_ruby_version 2.5
|
34
34
|
|
35
|
+
# @!method on_bad_each_with_object(node)
|
35
36
|
def_node_matcher :on_bad_each_with_object, <<~PATTERN
|
36
37
|
(block
|
37
38
|
({send csend} !#array_receiver? :each_with_object (hash))
|
@@ -43,6 +44,7 @@ module RuboCop
|
|
43
44
|
({send csend} (lvar _memo) :[]= $!`_memo $(lvar _val)))
|
44
45
|
PATTERN
|
45
46
|
|
47
|
+
# @!method on_bad_hash_brackets_map(node)
|
46
48
|
def_node_matcher :on_bad_hash_brackets_map, <<~PATTERN
|
47
49
|
(send
|
48
50
|
(const _ :Hash)
|
@@ -55,6 +57,7 @@ module RuboCop
|
|
55
57
|
(array $_ $(lvar _val))))
|
56
58
|
PATTERN
|
57
59
|
|
60
|
+
# @!method on_bad_map_to_h(node)
|
58
61
|
def_node_matcher :on_bad_map_to_h, <<~PATTERN
|
59
62
|
({send csend}
|
60
63
|
(block
|
@@ -66,6 +69,7 @@ module RuboCop
|
|
66
69
|
:to_h)
|
67
70
|
PATTERN
|
68
71
|
|
72
|
+
# @!method on_bad_to_h(node)
|
69
73
|
def_node_matcher :on_bad_to_h, <<~PATTERN
|
70
74
|
(block
|
71
75
|
({send csend} !#array_receiver? :to_h)
|
@@ -29,6 +29,7 @@ module RuboCop
|
|
29
29
|
include HashTransformMethod
|
30
30
|
extend AutoCorrector
|
31
31
|
|
32
|
+
# @!method on_bad_each_with_object(node)
|
32
33
|
def_node_matcher :on_bad_each_with_object, <<~PATTERN
|
33
34
|
(block
|
34
35
|
({send csend} !#array_receiver? :each_with_object (hash))
|
@@ -40,6 +41,7 @@ module RuboCop
|
|
40
41
|
({send csend} (lvar _memo) :[]= $(lvar _key) $!`_memo))
|
41
42
|
PATTERN
|
42
43
|
|
44
|
+
# @!method on_bad_hash_brackets_map(node)
|
43
45
|
def_node_matcher :on_bad_hash_brackets_map, <<~PATTERN
|
44
46
|
(send
|
45
47
|
(const _ :Hash)
|
@@ -52,6 +54,7 @@ module RuboCop
|
|
52
54
|
(array $(lvar _key) $_)))
|
53
55
|
PATTERN
|
54
56
|
|
57
|
+
# @!method on_bad_map_to_h(node)
|
55
58
|
def_node_matcher :on_bad_map_to_h, <<~PATTERN
|
56
59
|
({send csend}
|
57
60
|
(block
|
@@ -63,6 +66,7 @@ module RuboCop
|
|
63
66
|
:to_h)
|
64
67
|
PATTERN
|
65
68
|
|
69
|
+
# @!method on_bad_to_h(node)
|
66
70
|
def_node_matcher :on_bad_to_h, <<~PATTERN
|
67
71
|
(block
|
68
72
|
({send csend} !#array_receiver? :to_h)
|
@@ -100,9 +100,7 @@ module RuboCop
|
|
100
100
|
def check_expressions(expressions)
|
101
101
|
return unless expressions.size > 1 && expressions.uniq.one?
|
102
102
|
|
103
|
-
expressions.each
|
104
|
-
add_offense(expression)
|
105
|
-
end
|
103
|
+
expressions.each { |expression| add_offense(expression) }
|
106
104
|
end
|
107
105
|
|
108
106
|
def message(node)
|
@@ -38,13 +38,13 @@ module RuboCop
|
|
38
38
|
include StatementModifier
|
39
39
|
include LineLengthHelp
|
40
40
|
include IgnoredPattern
|
41
|
+
include RangeHelp
|
41
42
|
extend AutoCorrector
|
42
43
|
|
43
44
|
MSG_USE_MODIFIER = 'Favor modifier `%<keyword>s` usage when having a ' \
|
44
45
|
'single-line body. Another good alternative is ' \
|
45
46
|
'the usage of control flow `&&`/`||`.'
|
46
|
-
MSG_USE_NORMAL =
|
47
|
-
'Modifier form of `%<keyword>s` makes the line too long.'
|
47
|
+
MSG_USE_NORMAL = 'Modifier form of `%<keyword>s` makes the line too long.'
|
48
48
|
|
49
49
|
def self.autocorrect_incompatible_with
|
50
50
|
[Style::SoleNestedConditional]
|
@@ -67,7 +67,16 @@ module RuboCop
|
|
67
67
|
|
68
68
|
def autocorrect(corrector, node)
|
69
69
|
replacement = if node.modifier_form?
|
70
|
-
|
70
|
+
indentation = ' ' * node.source_range.column
|
71
|
+
last_argument = node.if_branch.last_argument
|
72
|
+
|
73
|
+
if last_argument.respond_to?(:heredoc?) && last_argument.heredoc?
|
74
|
+
heredoc = extract_heredoc_from(last_argument)
|
75
|
+
remove_heredoc(corrector, heredoc)
|
76
|
+
to_normal_form_with_heredoc(node, indentation, heredoc)
|
77
|
+
else
|
78
|
+
to_normal_form(node, indentation)
|
79
|
+
end
|
71
80
|
else
|
72
81
|
to_modifier_form(node)
|
73
82
|
end
|
@@ -123,8 +132,7 @@ module RuboCop
|
|
123
132
|
end
|
124
133
|
|
125
134
|
def line_length_enabled_at_line?(line)
|
126
|
-
processed_source.comment_config
|
127
|
-
.cop_enabled_at_line?('Layout/LineLength', line)
|
135
|
+
processed_source.comment_config.cop_enabled_at_line?('Layout/LineLength', line)
|
128
136
|
end
|
129
137
|
|
130
138
|
def named_capture_in_condition?(node)
|
@@ -132,10 +140,7 @@ module RuboCop
|
|
132
140
|
end
|
133
141
|
|
134
142
|
def non_eligible_node?(node)
|
135
|
-
non_simple_if_unless?(node) ||
|
136
|
-
node.chained? ||
|
137
|
-
node.nested_conditional? ||
|
138
|
-
super
|
143
|
+
non_simple_if_unless?(node) || node.chained? || node.nested_conditional? || super
|
139
144
|
end
|
140
145
|
|
141
146
|
def non_simple_if_unless?(node)
|
@@ -153,18 +158,41 @@ module RuboCop
|
|
153
158
|
node = node.parent
|
154
159
|
end
|
155
160
|
|
156
|
-
node && (sibling = node.children[index + 1]) &&
|
157
|
-
sibling.source_range.first_line == line_no
|
161
|
+
node && (sibling = node.children[index + 1]) && sibling.source_range.first_line == line_no
|
158
162
|
end
|
159
163
|
|
160
|
-
def to_normal_form(node)
|
161
|
-
indentation = ' ' * node.source_range.column
|
164
|
+
def to_normal_form(node, indentation)
|
162
165
|
<<~RUBY.chomp
|
163
166
|
#{node.keyword} #{node.condition.source}
|
164
167
|
#{indentation} #{node.body.source}
|
165
168
|
#{indentation}end
|
166
169
|
RUBY
|
167
170
|
end
|
171
|
+
|
172
|
+
def to_normal_form_with_heredoc(node, indentation, heredoc)
|
173
|
+
heredoc_body, heredoc_end = heredoc
|
174
|
+
|
175
|
+
<<~RUBY.chomp
|
176
|
+
#{node.keyword} #{node.condition.source}
|
177
|
+
#{indentation} #{node.body.source}
|
178
|
+
#{indentation} #{heredoc_body.source.chomp}
|
179
|
+
#{indentation} #{heredoc_end.source.chomp}
|
180
|
+
#{indentation}end
|
181
|
+
RUBY
|
182
|
+
end
|
183
|
+
|
184
|
+
def extract_heredoc_from(last_argument)
|
185
|
+
heredoc_body = last_argument.loc.heredoc_body
|
186
|
+
heredoc_end = last_argument.loc.heredoc_end
|
187
|
+
|
188
|
+
[heredoc_body, heredoc_end]
|
189
|
+
end
|
190
|
+
|
191
|
+
def remove_heredoc(corrector, heredoc)
|
192
|
+
heredoc.each do |range|
|
193
|
+
corrector.remove(range_by_whole_lines(range, include_final_newline: true))
|
194
|
+
end
|
195
|
+
end
|
168
196
|
end
|
169
197
|
end
|
170
198
|
end
|
@@ -34,9 +34,11 @@ module RuboCop
|
|
34
34
|
MSG = 'Remove redundant %<keyword>s with boolean literal branches.'
|
35
35
|
MSG_FOR_ELSIF = 'Use `else` instead of redundant `elsif` with boolean literal branches.'
|
36
36
|
|
37
|
+
# @!method if_with_boolean_literal_branches?(node)
|
37
38
|
def_node_matcher :if_with_boolean_literal_branches?, <<~PATTERN
|
38
39
|
(if #return_boolean_value? {(true) (false) | (false) (true)})
|
39
40
|
PATTERN
|
41
|
+
# @!method double_negative?(node)
|
40
42
|
def_node_matcher :double_negative?, '(send (send _ :!) :!)'
|
41
43
|
|
42
44
|
def on_if(node)
|
@@ -62,9 +62,7 @@ module RuboCop
|
|
62
62
|
referenced_after_loop?(var, range)
|
63
63
|
end
|
64
64
|
|
65
|
-
add_offense(node.loc.keyword)
|
66
|
-
autocorrect(corrector, node)
|
67
|
-
end
|
65
|
+
add_offense(node.loc.keyword) { |corrector| autocorrect(corrector, node) }
|
68
66
|
end
|
69
67
|
|
70
68
|
def autocorrect(corrector, node)
|
@@ -107,8 +105,7 @@ module RuboCop
|
|
107
105
|
else
|
108
106
|
indentation = body.source_range.source_line[LEADING_SPACE]
|
109
107
|
|
110
|
-
['loop do', body.source.gsub(/^/, configured_indent),
|
111
|
-
'end'].join("\n#{indentation}")
|
108
|
+
['loop do', body.source.gsub(/^/, configured_indent), 'end'].join("\n#{indentation}")
|
112
109
|
end
|
113
110
|
end
|
114
111
|
|
@@ -48,6 +48,7 @@ module RuboCop
|
|
48
48
|
[Style::Not, Style::SymbolProc]
|
49
49
|
end
|
50
50
|
|
51
|
+
# @!method inverse_candidate?(node)
|
51
52
|
def_node_matcher :inverse_candidate?, <<~PATTERN
|
52
53
|
{
|
53
54
|
(send $(send $(...) $_ $...) :!)
|
@@ -56,6 +57,7 @@ module RuboCop
|
|
56
57
|
}
|
57
58
|
PATTERN
|
58
59
|
|
60
|
+
# @!method inverse_block?(node)
|
59
61
|
def_node_matcher :inverse_block?, <<~PATTERN
|
60
62
|
(block $(send (...) $_) ... { $(send ... :!)
|
61
63
|
$(send (...) {:!= :!~} ...)
|
@@ -134,8 +136,7 @@ module RuboCop
|
|
134
136
|
end
|
135
137
|
|
136
138
|
def inverse_blocks
|
137
|
-
@inverse_blocks ||= cop_config['InverseBlocks']
|
138
|
-
.merge(cop_config['InverseBlocks'].invert)
|
139
|
+
@inverse_blocks ||= cop_config['InverseBlocks'].merge(cop_config['InverseBlocks'].invert)
|
139
140
|
end
|
140
141
|
|
141
142
|
def negated?(node)
|
@@ -158,9 +159,7 @@ module RuboCop
|
|
158
159
|
# `Integer > Numeric`.
|
159
160
|
def possible_class_hierarchy_check?(lhs, rhs, method)
|
160
161
|
CLASS_COMPARISON_METHODS.include?(method) &&
|
161
|
-
(camel_case_constant?(lhs) ||
|
162
|
-
(rhs.size == 1 &&
|
163
|
-
camel_case_constant?(rhs.first)))
|
162
|
+
(camel_case_constant?(lhs) || (rhs.size == 1 && camel_case_constant?(rhs.first)))
|
164
163
|
end
|
165
164
|
|
166
165
|
def camel_case_constant?(node)
|
@@ -172,8 +171,7 @@ module RuboCop
|
|
172
171
|
end
|
173
172
|
|
174
173
|
def remove_end_parenthesis(corrector, node, method, method_call)
|
175
|
-
return unless EQUALITY_METHODS.include?(method) ||
|
176
|
-
method_call.parent.begin_type?
|
174
|
+
return unless EQUALITY_METHODS.include?(method) || method_call.parent.begin_type?
|
177
175
|
|
178
176
|
corrector.remove(end_parentheses(node, method_call))
|
179
177
|
end
|
@@ -67,8 +67,7 @@ module RuboCop
|
|
67
67
|
|
68
68
|
def starts_with_hex_or_colon?(str)
|
69
69
|
first_char = str[0].ord
|
70
|
-
(48..58).cover?(first_char) || (65..70).cover?(first_char) ||
|
71
|
-
(97..102).cover?(first_char)
|
70
|
+
(48..58).cover?(first_char) || (65..70).cover?(first_char) || (97..102).cover?(first_char)
|
72
71
|
end
|
73
72
|
end
|
74
73
|
end
|
@@ -50,10 +50,8 @@ module RuboCop
|
|
50
50
|
include ConfigurableEnforcedStyle
|
51
51
|
extend AutoCorrector
|
52
52
|
|
53
|
-
LITERAL_MESSAGE = 'Use the `-> { ... }` lambda literal syntax for '
|
54
|
-
|
55
|
-
METHOD_MESSAGE = 'Use the `lambda` method for %<modifier>s ' \
|
56
|
-
'lambdas.'
|
53
|
+
LITERAL_MESSAGE = 'Use the `-> { ... }` lambda literal syntax for %<modifier>s lambdas.'
|
54
|
+
METHOD_MESSAGE = 'Use the `lambda` method for %<modifier>s lambdas.'
|
57
55
|
|
58
56
|
OFFENDING_SELECTORS = {
|
59
57
|
style: {
|
@@ -23,14 +23,12 @@ module RuboCop
|
|
23
23
|
include RangeHelp
|
24
24
|
extend AutoCorrector
|
25
25
|
|
26
|
-
MSG = 'Use `\\` instead of `+` or `<<` to concatenate '
|
27
|
-
'those strings.'
|
26
|
+
MSG = 'Use `\\` instead of `+` or `<<` to concatenate those strings.'
|
28
27
|
CONCAT_TOKEN_TYPES = %i[tPLUS tLSHFT].freeze
|
29
28
|
SIMPLE_STRING_TOKEN_TYPE = :tSTRING
|
30
29
|
COMPLEX_STRING_BEGIN_TOKEN = :tSTRING_BEG
|
31
30
|
COMPLEX_STRING_END_TOKEN = :tSTRING_END
|
32
|
-
HIGH_PRECEDENCE_OP_TOKEN_TYPES = %i[tSTAR2 tPERCENT tDOT
|
33
|
-
tLBRACK2].freeze
|
31
|
+
HIGH_PRECEDENCE_OP_TOKEN_TYPES = %i[tSTAR2 tPERCENT tDOT tLBRACK2].freeze
|
34
32
|
QUOTE_DELIMITERS = %w[' "].freeze
|
35
33
|
|
36
34
|
def self.autocorrect_incompatible_with
|
@@ -38,9 +36,7 @@ module RuboCop
|
|
38
36
|
end
|
39
37
|
|
40
38
|
def on_new_investigation
|
41
|
-
processed_source.tokens.each_index
|
42
|
-
check_token_set(index)
|
43
|
-
end
|
39
|
+
processed_source.tokens.each_index { |index| check_token_set(index) }
|
44
40
|
end
|
45
41
|
|
46
42
|
private
|
@@ -56,9 +52,7 @@ module RuboCop
|
|
56
52
|
|
57
53
|
return unless eligible_next_successor?(next_successor)
|
58
54
|
|
59
|
-
add_offense(operator.pos)
|
60
|
-
autocorrect(corrector, operator.pos)
|
61
|
-
end
|
55
|
+
add_offense(operator.pos) { |corrector| autocorrect(corrector, operator.pos) }
|
62
56
|
end
|
63
57
|
|
64
58
|
def autocorrect(corrector, operator_range)
|
@@ -89,8 +83,7 @@ module RuboCop
|
|
89
83
|
end
|
90
84
|
|
91
85
|
def eligible_next_successor?(next_successor)
|
92
|
-
!(next_successor &&
|
93
|
-
HIGH_PRECEDENCE_OP_TOKEN_TYPES.include?(next_successor.type))
|
86
|
+
!(next_successor && HIGH_PRECEDENCE_OP_TOKEN_TYPES.include?(next_successor.type))
|
94
87
|
end
|
95
88
|
|
96
89
|
def eligible_predecessor?(predecessor)
|
@@ -40,8 +40,12 @@ module RuboCop
|
|
40
40
|
# to `true` allows the presence of parentheses in such a method call
|
41
41
|
# even with arguments.
|
42
42
|
#
|
43
|
-
# NOTE:
|
44
|
-
#
|
43
|
+
# NOTE: Parentheses are still allowed in cases where omitting them
|
44
|
+
# results in ambiguous or syntactically incorrect code. For example,
|
45
|
+
# parentheses are required around a method with arguments when inside an
|
46
|
+
# endless method definition introduced in Ruby 3.0. Parentheses are also
|
47
|
+
# allowed when forwarding arguments with the triple-dot syntax introduced
|
48
|
+
# in Ruby 2.7 as omitting them starts an endless range.
|
45
49
|
#
|
46
50
|
# @example EnforcedStyle: require_parentheses (default)
|
47
51
|
#
|
@@ -79,6 +83,30 @@ module RuboCop
|
|
79
83
|
# # good
|
80
84
|
# foo.enforce strict: true
|
81
85
|
#
|
86
|
+
# # good
|
87
|
+
# # Allows parens for calls that won't produce valid Ruby or be ambiguous.
|
88
|
+
# model.validate strict(true)
|
89
|
+
#
|
90
|
+
# # good
|
91
|
+
# # Allows parens for calls that won't produce valid Ruby or be ambiguous.
|
92
|
+
# yield path, File.basename(path)
|
93
|
+
#
|
94
|
+
# # good
|
95
|
+
# # Operators methods calls with parens
|
96
|
+
# array&.[](index)
|
97
|
+
#
|
98
|
+
# # good
|
99
|
+
# # Operators methods without parens, if you prefer
|
100
|
+
# array.[] index
|
101
|
+
#
|
102
|
+
# # good
|
103
|
+
# # Operators methods calls with parens
|
104
|
+
# array&.[](index)
|
105
|
+
#
|
106
|
+
# # good
|
107
|
+
# # Operators methods without parens, if you prefer
|
108
|
+
# array.[] index
|
109
|
+
#
|
82
110
|
# @example IgnoreMacros: true (default)
|
83
111
|
#
|
84
112
|
# # good
|
@@ -146,6 +174,22 @@ module RuboCop
|
|
146
174
|
#
|
147
175
|
# # good
|
148
176
|
# Array 1
|
177
|
+
#
|
178
|
+
# @example AllowParenthesesInStringInterpolation: false (default)
|
179
|
+
#
|
180
|
+
# # bad
|
181
|
+
# "#{t('this.is.bad')}"
|
182
|
+
#
|
183
|
+
# # good
|
184
|
+
# "#{t 'this.is.better'}"
|
185
|
+
#
|
186
|
+
# @example AllowParenthesesInStringInterpolation: true
|
187
|
+
#
|
188
|
+
# # good
|
189
|
+
# "#{t('this.is.good')}"
|
190
|
+
#
|
191
|
+
# # good
|
192
|
+
# "#{t 'this.is.also.good'}"
|
149
193
|
class MethodCallWithArgsParentheses < Base
|
150
194
|
require_relative 'method_call_with_args_parentheses/omit_parentheses'
|
151
195
|
require_relative 'method_call_with_args_parentheses/require_parentheses'
|
@@ -158,7 +202,7 @@ module RuboCop
|
|
158
202
|
extend AutoCorrector
|
159
203
|
|
160
204
|
def self.autocorrect_incompatible_with
|
161
|
-
[Style::NestedParenthesizedCalls]
|
205
|
+
[Style::NestedParenthesizedCalls, Style::RescueModifier]
|
162
206
|
end
|
163
207
|
|
164
208
|
def on_send(node)
|
@@ -5,6 +5,7 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
class MethodCallWithArgsParentheses
|
7
7
|
# Style omit_parentheses
|
8
|
+
# rubocop:disable Metrics/ModuleLength, Metrics/CyclomaticComplexity
|
8
9
|
module OmitParentheses
|
9
10
|
TRAILING_WHITESPACE_REGEX = /\s+\Z/.freeze
|
10
11
|
OMIT_MSG = 'Omit parentheses for method calls with arguments.'
|
@@ -15,10 +16,11 @@ module RuboCop
|
|
15
16
|
def omit_parentheses(node)
|
16
17
|
return unless node.parenthesized?
|
17
18
|
return if inside_endless_method_def?(node)
|
18
|
-
return if node
|
19
|
+
return if syntax_like_method_call?(node)
|
19
20
|
return if super_call_without_arguments?(node)
|
20
21
|
return if allowed_camel_case_method_call?(node)
|
21
22
|
return if legitimate_call_with_parentheses?(node)
|
23
|
+
return if allowed_string_interpolation_method_call?(node)
|
22
24
|
|
23
25
|
add_offense(offense_range(node), message: OMIT_MSG) do |corrector|
|
24
26
|
auto_correct(corrector, node)
|
@@ -40,7 +42,11 @@ module RuboCop
|
|
40
42
|
|
41
43
|
def inside_endless_method_def?(node)
|
42
44
|
# parens are required around arguments inside an endless method
|
43
|
-
node.each_ancestor(:def).any?(&:endless?) && node.arguments.any?
|
45
|
+
node.each_ancestor(:def, :defs).any?(&:endless?) && node.arguments.any?
|
46
|
+
end
|
47
|
+
|
48
|
+
def syntax_like_method_call?(node)
|
49
|
+
node.implicit_call? || node.operator_method?
|
44
50
|
end
|
45
51
|
|
46
52
|
def super_call_without_arguments?(node)
|
@@ -49,8 +55,12 @@ module RuboCop
|
|
49
55
|
|
50
56
|
def allowed_camel_case_method_call?(node)
|
51
57
|
node.camel_case_method? &&
|
52
|
-
(node.arguments.none? ||
|
53
|
-
|
58
|
+
(node.arguments.none? || cop_config['AllowParenthesesInCamelCaseMethod'])
|
59
|
+
end
|
60
|
+
|
61
|
+
def allowed_string_interpolation_method_call?(node)
|
62
|
+
cop_config['AllowParenthesesInStringInterpolation'] &&
|
63
|
+
inside_string_interpolation?(node)
|
54
64
|
end
|
55
65
|
|
56
66
|
def parentheses_at_the_end_of_multiline_call?(node)
|
@@ -88,8 +98,7 @@ module RuboCop
|
|
88
98
|
end
|
89
99
|
|
90
100
|
def call_in_optional_arguments?(node)
|
91
|
-
node.parent &&
|
92
|
-
(node.parent.optarg_type? || node.parent.kwoptarg_type?)
|
101
|
+
node.parent && (node.parent.optarg_type? || node.parent.kwoptarg_type?)
|
93
102
|
end
|
94
103
|
|
95
104
|
def call_in_single_line_inheritance?(node)
|
@@ -101,20 +110,19 @@ module RuboCop
|
|
101
110
|
call_as_argument_or_chain?(node) ||
|
102
111
|
hash_literal_in_arguments?(node) ||
|
103
112
|
node.descendants.any? do |n|
|
104
|
-
ambigious_literal?(n) || logical_operator?(n) ||
|
113
|
+
n.forwarded_args_type? || ambigious_literal?(n) || logical_operator?(n) ||
|
105
114
|
call_with_braced_block?(n)
|
106
115
|
end
|
107
116
|
end
|
108
117
|
|
109
118
|
def call_with_braced_block?(node)
|
110
|
-
(node.send_type? || node.super_type?) &&
|
111
|
-
node.block_node && node.block_node.braces?
|
119
|
+
(node.send_type? || node.super_type?) && node.block_node && node.block_node.braces?
|
112
120
|
end
|
113
121
|
|
114
122
|
def call_as_argument_or_chain?(node)
|
115
123
|
node.parent &&
|
116
124
|
(node.parent.send_type? && !assigned_before?(node.parent, node) ||
|
117
|
-
node.parent.csend_type? || node.parent.super_type?)
|
125
|
+
node.parent.csend_type? || node.parent.super_type? || node.parent.yield_type?)
|
118
126
|
end
|
119
127
|
|
120
128
|
def hash_literal_in_arguments?(node)
|
@@ -134,13 +142,11 @@ module RuboCop
|
|
134
142
|
previous = node.descendants.first
|
135
143
|
return false unless previous&.send_type?
|
136
144
|
|
137
|
-
previous.parenthesized? ||
|
138
|
-
allowed_chained_call_with_parentheses?(previous)
|
145
|
+
previous.parenthesized? || allowed_chained_call_with_parentheses?(previous)
|
139
146
|
end
|
140
147
|
|
141
148
|
def ambigious_literal?(node)
|
142
|
-
splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) ||
|
143
|
-
unary_literal?(node)
|
149
|
+
splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) || unary_literal?(node)
|
144
150
|
end
|
145
151
|
|
146
152
|
def splat?(node)
|
@@ -169,10 +175,14 @@ module RuboCop
|
|
169
175
|
end
|
170
176
|
|
171
177
|
def assigned_before?(node, target)
|
172
|
-
node.assignment? &&
|
173
|
-
|
178
|
+
node.assignment? && node.loc.operator.begin < target.loc.begin
|
179
|
+
end
|
180
|
+
|
181
|
+
def inside_string_interpolation?(node)
|
182
|
+
node.ancestors.drop_while { |a| !a.begin_type? }.any?(&:dstr_type?)
|
174
183
|
end
|
175
184
|
end
|
185
|
+
# rubocop:enable Metrics/ModuleLength, Metrics/CyclomaticComplexity
|
176
186
|
end
|
177
187
|
end
|
178
188
|
end
|