rubocop 0.89.0 → 0.92.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 +2 -2
- data/config/default.yml +128 -14
- data/lib/rubocop.rb +30 -4
- data/lib/rubocop/cached_data.rb +1 -0
- data/lib/rubocop/cli/command.rb +1 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +9 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
- data/lib/rubocop/cli/command/show_cops.rb +2 -1
- data/lib/rubocop/cli/command/version.rb +1 -0
- data/lib/rubocop/cli/environment.rb +1 -0
- data/lib/rubocop/comment_config.rb +17 -10
- data/lib/rubocop/config.rb +1 -1
- data/lib/rubocop/config_loader.rb +21 -10
- data/lib/rubocop/config_loader_resolver.rb +1 -0
- data/lib/rubocop/config_obsoletion.rb +1 -0
- data/lib/rubocop/config_regeneration.rb +33 -0
- data/lib/rubocop/config_store.rb +3 -3
- data/lib/rubocop/config_validator.rb +4 -1
- data/lib/rubocop/cop/base.rb +23 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
- data/lib/rubocop/cop/bundler/gem_comment.rb +8 -3
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
- data/lib/rubocop/cop/commissioner.rb +47 -7
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +5 -10
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
- data/lib/rubocop/cop/documentation.rb +22 -0
- data/lib/rubocop/cop/generator.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.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 +1 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -0
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/class_structure.rb +14 -17
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +13 -15
- data/lib/rubocop/cop/layout/def_end_alignment.rb +8 -5
- data/lib/rubocop/cop/layout/dot_position.rb +21 -17
- data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +21 -18
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
- data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +18 -14
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +4 -7
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -7
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +11 -17
- data/lib/rubocop/cop/layout/extra_spacing.rb +14 -21
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
- data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +12 -10
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +41 -22
- data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +22 -17
- data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
- data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
- data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +20 -23
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +19 -37
- data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -24
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -1
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +2 -3
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -4
- data/lib/rubocop/cop/lint/duplicate_require.rb +46 -0
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +2 -15
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/empty_file.rb +50 -0
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -0
- data/lib/rubocop/cop/lint/float_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
- data/lib/rubocop/cop/lint/missing_super.rb +11 -11
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
- data/lib/rubocop/cop/lint/multiple_comparison.rb +3 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -0
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +33 -15
- data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -0
- data/lib/rubocop/cop/lint/rand_one.rb +2 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +36 -29
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
- data/lib/rubocop/cop/lint/to_json.rb +16 -5
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
- data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -6
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +10 -25
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +3 -9
- data/lib/rubocop/cop/lint/useless_method_definition.rb +70 -0
- data/lib/rubocop/cop/lint/useless_times.rb +106 -0
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +27 -16
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
- data/lib/rubocop/cop/migration/department_name.rb +2 -2
- data/lib/rubocop/cop/mixin/alignment.rb +5 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +17 -8
- data/lib/rubocop/cop/mixin/comments_help.rb +48 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +12 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +0 -2
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +31 -12
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +13 -12
- data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +16 -9
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
- data/lib/rubocop/cop/mixin/rescue_node.rb +11 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/statement_modifier.rb +12 -6
- data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
- data/lib/rubocop/cop/mixin/trailing_comma.rb +9 -11
- data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/offense.rb +1 -0
- 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/severity.rb +0 -8
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +8 -19
- data/lib/rubocop/cop/style/accessor_grouping.rb +20 -20
- data/lib/rubocop/cop/style/alias.rb +36 -33
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_coercion.rb +4 -0
- data/lib/rubocop/cop/style/array_join.rb +7 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +12 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +4 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -12
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_equality.rb +11 -3
- data/lib/rubocop/cop/style/case_like_if.rb +37 -18
- data/lib/rubocop/cop/style/class_and_module_children.rb +16 -11
- data/lib/rubocop/cop/style/class_check.rb +6 -11
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
- data/lib/rubocop/cop/style/class_vars.rb +7 -12
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +6 -7
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/combinable_loops.rb +84 -0
- data/lib/rubocop/cop/style/command_literal.rb +23 -24
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +8 -9
- data/lib/rubocop/cop/style/conditional_assignment.rb +50 -61
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +12 -12
- data/lib/rubocop/cop/style/date_time.rb +13 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +8 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +2 -4
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +3 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -17
- data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_literal.rb +18 -17
- data/lib/rubocop/cop/style/empty_method.rb +5 -8
- data/lib/rubocop/cop/style/encoding.rb +5 -9
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +6 -10
- data/lib/rubocop/cop/style/even_odd.rb +8 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -26
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +3 -1
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +18 -23
- data/lib/rubocop/cop/style/format_string_token.rb +4 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +4 -4
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +24 -5
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -7
- data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -11
- data/lib/rubocop/cop/style/hash_transform_values.rb +18 -10
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +11 -17
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +2 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +23 -23
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +20 -29
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +53 -0
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +17 -14
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +11 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +7 -6
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +12 -3
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +13 -13
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +9 -28
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
- data/lib/rubocop/cop/style/multiline_memoization.rb +12 -10
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +10 -11
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/negated_if.rb +6 -6
- data/lib/rubocop/cop/style/negated_unless.rb +6 -6
- data/lib/rubocop/cop/style/negated_while.rb +7 -15
- data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +14 -12
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
- data/lib/rubocop/cop/style/next.rb +10 -14
- data/lib/rubocop/cop/style/nil_comparison.rb +13 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +34 -26
- data/lib/rubocop/cop/style/not.rb +20 -26
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -14
- data/lib/rubocop/cop/style/one_line_conditional.rb +73 -23
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +12 -1
- data/lib/rubocop/cop/style/or_assignment.rb +13 -10
- data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
- data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -14
- data/lib/rubocop/cop/style/proc.rb +6 -6
- data/lib/rubocop/cop/style/raise_args.rb +15 -24
- data/lib/rubocop/cop/style/random_with_offset.rb +19 -19
- data/lib/rubocop/cop/style/redundant_assignment.rb +8 -18
- data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
- data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -8
- data/lib/rubocop/cop/style/redundant_freeze.rb +5 -7
- data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -15
- data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
- data/lib/rubocop/cop/style/redundant_return.rb +17 -17
- data/lib/rubocop/cop/style/redundant_self.rb +9 -11
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +12 -31
- data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
- data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
- data/lib/rubocop/cop/style/return_nil.rb +5 -5
- data/lib/rubocop/cop/style/safe_navigation.rb +22 -16
- data/lib/rubocop/cop/style/sample.rb +12 -14
- data/lib/rubocop/cop/style/self_assignment.rb +26 -22
- data/lib/rubocop/cop/style/semicolon.rb +6 -9
- data/lib/rubocop/cop/style/send.rb +4 -5
- data/lib/rubocop/cop/style/signal_exception.rb +23 -19
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +18 -17
- data/lib/rubocop/cop/style/slicing_with_range.rb +6 -8
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +5 -6
- data/lib/rubocop/cop/style/string_concatenation.rb +16 -2
- data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
- data/lib/rubocop/cop/style/string_methods.rb +7 -17
- data/lib/rubocop/cop/style/strip.rb +9 -14
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
- data/lib/rubocop/cop/style/symbol_array.rb +5 -16
- data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
- data/lib/rubocop/cop/style/ternary_parentheses.rb +22 -22
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +11 -9
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
- data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
- data/lib/rubocop/cop/style/unless_else.rb +5 -8
- data/lib/rubocop/cop/style/unpack_first.rb +5 -8
- data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
- data/lib/rubocop/cop/style/when_then.rb +4 -6
- data/lib/rubocop/cop/style/while_until_do.rb +6 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
- data/lib/rubocop/cop/style/word_array.rb +5 -23
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -18
- data/lib/rubocop/cop/team.rb +1 -0
- data/lib/rubocop/cop/util.rb +2 -1
- data/lib/rubocop/cop/utils/format_string.rb +3 -5
- data/lib/rubocop/cop/variable_force.rb +2 -0
- data/lib/rubocop/cops_documentation_generator.rb +5 -3
- data/lib/rubocop/core_ext/string.rb +2 -2
- data/lib/rubocop/directive_comment.rb +32 -0
- data/lib/rubocop/ext/regexp_node.rb +46 -0
- data/lib/rubocop/file_finder.rb +1 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +13 -6
- data/lib/rubocop/formatter/html_formatter.rb +2 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/formatter/progress_formatter.rb +2 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
- data/lib/rubocop/name_similarity.rb +1 -0
- data/lib/rubocop/options.rb +43 -20
- data/lib/rubocop/remote_config.rb +1 -0
- data/lib/rubocop/result_cache.rb +31 -13
- data/lib/rubocop/rspec/cop_helper.rb +4 -1
- data/lib/rubocop/rspec/expect_offense.rb +14 -9
- data/lib/rubocop/rspec/shared_contexts.rb +13 -5
- data/lib/rubocop/runner.rb +35 -15
- data/lib/rubocop/string_interpreter.rb +3 -0
- data/lib/rubocop/target_finder.rb +5 -1
- data/lib/rubocop/target_ruby.rb +7 -1
- data/lib/rubocop/version.rb +7 -1
- data/lib/rubocop/yaml_duplication_checker.rb +1 -0
- metadata +26 -14
- data/lib/rubocop/cop/tokens_util.rb +0 -84
@@ -62,7 +62,6 @@ module RuboCop
|
|
62
62
|
MSG_NO_MIXED_KEYS = "Don't mix styles in the same hash."
|
63
63
|
MSG_HASH_ROCKETS = 'Use hash rockets syntax.'
|
64
64
|
|
65
|
-
# rubocop:disable Metrics/PerceivedComplexity, Metrics/AbcSize
|
66
65
|
def on_hash(node)
|
67
66
|
pairs = node.pairs
|
68
67
|
|
@@ -78,7 +77,6 @@ module RuboCop
|
|
78
77
|
ruby19_check(pairs)
|
79
78
|
end
|
80
79
|
end
|
81
|
-
# rubocop:enable Metrics/PerceivedComplexity, Metrics/AbcSize
|
82
80
|
|
83
81
|
def ruby19_check(pairs)
|
84
82
|
check(pairs, '=>', MSG_19) if sym_indices?(pairs)
|
@@ -142,11 +140,12 @@ module RuboCop
|
|
142
140
|
def acceptable_19_syntax_symbol?(sym_name)
|
143
141
|
sym_name.sub!(/\A:/, '')
|
144
142
|
|
145
|
-
if cop_config['PreferHashRocketsForNonAlnumEndingSymbols']
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
143
|
+
if cop_config['PreferHashRocketsForNonAlnumEndingSymbols'] &&
|
144
|
+
# Prefer { :production? => false } over { production?: false } and
|
145
|
+
# similarly for other non-alnum final characters (except quotes,
|
146
|
+
# to prefer { "x y": 1 } over { :"x y" => 1 }).
|
147
|
+
!/[\p{Alnum}"']\z/.match?(sym_name)
|
148
|
+
return false
|
150
149
|
end
|
151
150
|
|
152
151
|
# Most hash keys can be matched against a simple regex.
|
@@ -18,28 +18,29 @@ module RuboCop
|
|
18
18
|
# @example
|
19
19
|
# # bad
|
20
20
|
# {a: 1, b: 2}.each_with_object({}) { |(k, v), h| h[foo(k)] = v }
|
21
|
-
# {a: 1, b: 2}.
|
21
|
+
# Hash[{a: 1, b: 2}.collect { |k, v| [foo(k), v] }]
|
22
|
+
# {a: 1, b: 2}.map { |k, v| [k.to_s, v] }.to_h
|
23
|
+
# {a: 1, b: 2}.to_h { |k, v| [k.to_s, v] }
|
22
24
|
#
|
23
25
|
# # good
|
24
26
|
# {a: 1, b: 2}.transform_keys { |k| foo(k) }
|
25
27
|
# {a: 1, b: 2}.transform_keys { |k| k.to_s }
|
26
|
-
class HashTransformKeys <
|
27
|
-
extend TargetRubyVersion
|
28
|
+
class HashTransformKeys < Base
|
28
29
|
include HashTransformMethod
|
30
|
+
extend TargetRubyVersion
|
31
|
+
extend AutoCorrector
|
29
32
|
|
30
33
|
minimum_target_ruby_version 2.5
|
31
34
|
|
32
35
|
def_node_matcher :on_bad_each_with_object, <<~PATTERN
|
33
36
|
(block
|
34
|
-
({send csend}
|
35
|
-
!{(send _ :each_with_index) (array ...)}
|
36
|
-
:each_with_object (hash))
|
37
|
+
({send csend} !#array_receiver? :each_with_object (hash))
|
37
38
|
(args
|
38
39
|
(mlhs
|
39
40
|
(arg $_)
|
40
41
|
(arg _val))
|
41
42
|
(arg _memo))
|
42
|
-
({send csend} (lvar _memo) :[]=
|
43
|
+
({send csend} (lvar _memo) :[]= $!`_memo $(lvar _val)))
|
43
44
|
PATTERN
|
44
45
|
|
45
46
|
def_node_matcher :on_bad_hash_brackets_map, <<~PATTERN
|
@@ -47,7 +48,7 @@ module RuboCop
|
|
47
48
|
(const _ :Hash)
|
48
49
|
:[]
|
49
50
|
(block
|
50
|
-
({send csend}
|
51
|
+
({send csend} !#array_receiver? {:map :collect})
|
51
52
|
(args
|
52
53
|
(arg $_)
|
53
54
|
(arg _val))
|
@@ -57,9 +58,7 @@ module RuboCop
|
|
57
58
|
def_node_matcher :on_bad_map_to_h, <<~PATTERN
|
58
59
|
({send csend}
|
59
60
|
(block
|
60
|
-
({send csend}
|
61
|
-
!{(send _ :each_with_index) (array ...)}
|
62
|
-
{:map :collect})
|
61
|
+
({send csend} !#array_receiver? {:map :collect})
|
63
62
|
(args
|
64
63
|
(arg $_)
|
65
64
|
(arg _val))
|
@@ -67,6 +66,15 @@ module RuboCop
|
|
67
66
|
:to_h)
|
68
67
|
PATTERN
|
69
68
|
|
69
|
+
def_node_matcher :on_bad_to_h, <<~PATTERN
|
70
|
+
(block
|
71
|
+
({send csend} !#array_receiver? :to_h)
|
72
|
+
(args
|
73
|
+
(arg $_)
|
74
|
+
(arg _val))
|
75
|
+
(array $_ $(lvar _val)))
|
76
|
+
PATTERN
|
77
|
+
|
70
78
|
private
|
71
79
|
|
72
80
|
def extract_captures(match)
|
@@ -18,25 +18,26 @@ module RuboCop
|
|
18
18
|
# @example
|
19
19
|
# # bad
|
20
20
|
# {a: 1, b: 2}.each_with_object({}) { |(k, v), h| h[k] = foo(v) }
|
21
|
-
# {a: 1, b: 2}.
|
21
|
+
# Hash[{a: 1, b: 2}.collect { |k, v| [k, foo(v)] }]
|
22
|
+
# {a: 1, b: 2}.map { |k, v| [k, v * v] }.to_h
|
23
|
+
# {a: 1, b: 2}.to_h { |k, v| [k, v * v] }
|
22
24
|
#
|
23
25
|
# # good
|
24
26
|
# {a: 1, b: 2}.transform_values { |v| foo(v) }
|
25
27
|
# {a: 1, b: 2}.transform_values { |v| v * v }
|
26
|
-
class HashTransformValues <
|
28
|
+
class HashTransformValues < Base
|
27
29
|
include HashTransformMethod
|
30
|
+
extend AutoCorrector
|
28
31
|
|
29
32
|
def_node_matcher :on_bad_each_with_object, <<~PATTERN
|
30
33
|
(block
|
31
|
-
({send csend}
|
32
|
-
!{(send _ :each_with_index) (array ...)}
|
33
|
-
:each_with_object (hash))
|
34
|
+
({send csend} !#array_receiver? :each_with_object (hash))
|
34
35
|
(args
|
35
36
|
(mlhs
|
36
37
|
(arg _key)
|
37
38
|
(arg $_))
|
38
39
|
(arg _memo))
|
39
|
-
({send csend} (lvar _memo) :[]= $(lvar _key)
|
40
|
+
({send csend} (lvar _memo) :[]= $(lvar _key) $!`_memo))
|
40
41
|
PATTERN
|
41
42
|
|
42
43
|
def_node_matcher :on_bad_hash_brackets_map, <<~PATTERN
|
@@ -44,7 +45,7 @@ module RuboCop
|
|
44
45
|
(const _ :Hash)
|
45
46
|
:[]
|
46
47
|
(block
|
47
|
-
({send csend}
|
48
|
+
({send csend} !#array_receiver? {:map :collect})
|
48
49
|
(args
|
49
50
|
(arg _key)
|
50
51
|
(arg $_))
|
@@ -54,9 +55,7 @@ module RuboCop
|
|
54
55
|
def_node_matcher :on_bad_map_to_h, <<~PATTERN
|
55
56
|
({send csend}
|
56
57
|
(block
|
57
|
-
({send csend}
|
58
|
-
!{(send _ :each_with_index) (array ...)}
|
59
|
-
{:map :collect})
|
58
|
+
({send csend} !#array_receiver? {:map :collect})
|
60
59
|
(args
|
61
60
|
(arg _key)
|
62
61
|
(arg $_))
|
@@ -64,6 +63,15 @@ module RuboCop
|
|
64
63
|
:to_h)
|
65
64
|
PATTERN
|
66
65
|
|
66
|
+
def_node_matcher :on_bad_to_h, <<~PATTERN
|
67
|
+
(block
|
68
|
+
({send csend} !#array_receiver? :to_h)
|
69
|
+
(args
|
70
|
+
(arg _key)
|
71
|
+
(arg $_))
|
72
|
+
(array $(lvar _key) $_))
|
73
|
+
PATTERN
|
74
|
+
|
67
75
|
private
|
68
76
|
|
69
77
|
def extract_captures(match)
|
@@ -58,7 +58,7 @@ module RuboCop
|
|
58
58
|
# action_b
|
59
59
|
# end
|
60
60
|
#
|
61
|
-
class IfInsideElse <
|
61
|
+
class IfInsideElse < Base
|
62
62
|
MSG = 'Convert `if` nested inside `else` to `elsif`.'
|
63
63
|
|
64
64
|
def on_if(node)
|
@@ -69,7 +69,7 @@ module RuboCop
|
|
69
69
|
return unless else_branch&.if_type? && else_branch&.if?
|
70
70
|
return if allow_if_modifier_in_else_branch?(else_branch)
|
71
71
|
|
72
|
-
add_offense(else_branch
|
72
|
+
add_offense(else_branch.loc.keyword)
|
73
73
|
end
|
74
74
|
|
75
75
|
private
|
@@ -30,10 +30,11 @@ module RuboCop
|
|
30
30
|
# if long_condition
|
31
31
|
# do_something_in_a_method_with_a_long_name(arg)
|
32
32
|
# end
|
33
|
-
class IfUnlessModifier <
|
33
|
+
class IfUnlessModifier < Base
|
34
34
|
include StatementModifier
|
35
35
|
include LineLengthHelp
|
36
36
|
include IgnoredPattern
|
37
|
+
extend AutoCorrector
|
37
38
|
|
38
39
|
MSG_USE_MODIFIER = 'Favor modifier `%<keyword>s` usage when having a ' \
|
39
40
|
'single-line body. Another good alternative is ' \
|
@@ -42,29 +43,29 @@ module RuboCop
|
|
42
43
|
'Modifier form of `%<keyword>s` makes the line too long.'
|
43
44
|
|
44
45
|
def on_if(node)
|
45
|
-
msg = if single_line_as_modifier?(node)
|
46
|
-
MSG_USE_MODIFIER
|
46
|
+
msg = if single_line_as_modifier?(node) && !named_capture_in_condition?(node)
|
47
|
+
MSG_USE_MODIFIER
|
47
48
|
elsif too_long_due_to_modifier?(node)
|
48
49
|
MSG_USE_NORMAL
|
49
50
|
end
|
50
51
|
return unless msg
|
51
52
|
|
52
|
-
add_offense(node,
|
53
|
-
|
54
|
-
|
53
|
+
add_offense(node.loc.keyword, message: format(msg, keyword: node.keyword)) do |corrector|
|
54
|
+
autocorrect(corrector, node)
|
55
|
+
end
|
55
56
|
end
|
56
57
|
|
57
|
-
|
58
|
+
private
|
59
|
+
|
60
|
+
def autocorrect(corrector, node)
|
58
61
|
replacement = if node.modifier_form?
|
59
62
|
to_normal_form(node)
|
60
63
|
else
|
61
64
|
to_modifier_form(node)
|
62
65
|
end
|
63
|
-
|
66
|
+
corrector.replace(node, replacement)
|
64
67
|
end
|
65
68
|
|
66
|
-
private
|
67
|
-
|
68
69
|
def too_long_due_to_modifier?(node)
|
69
70
|
node.modifier_form? && too_long_single_line?(node) &&
|
70
71
|
!another_statement_on_same_line?(node)
|
@@ -156,13 +157,6 @@ module RuboCop
|
|
156
157
|
#{indentation}end
|
157
158
|
RUBY
|
158
159
|
end
|
159
|
-
|
160
|
-
def first_line_comment(node)
|
161
|
-
comment =
|
162
|
-
processed_source.find_comment { |c| c.loc.line == node.loc.line }
|
163
|
-
|
164
|
-
comment ? comment.loc.expression.source : nil
|
165
|
-
end
|
166
160
|
end
|
167
161
|
end
|
168
162
|
end
|
@@ -22,20 +22,16 @@ module RuboCop
|
|
22
22
|
# if running?
|
23
23
|
# tired? ? 'stop' : 'go faster'
|
24
24
|
# end
|
25
|
-
class IfUnlessModifierOfIfUnless <
|
25
|
+
class IfUnlessModifierOfIfUnless < Base
|
26
26
|
include StatementModifier
|
27
|
+
extend AutoCorrector
|
27
28
|
|
28
29
|
MSG = 'Avoid modifier `%<keyword>s` after another conditional.'
|
29
30
|
|
30
31
|
def on_if(node)
|
31
32
|
return unless node.modifier_form? && node.body.if_type?
|
32
33
|
|
33
|
-
add_offense(node,
|
34
|
-
message: format(MSG, keyword: node.keyword))
|
35
|
-
end
|
36
|
-
|
37
|
-
def autocorrect(node)
|
38
|
-
lambda do |corrector|
|
34
|
+
add_offense(node.loc.keyword, message: format(MSG, keyword: node.keyword)) do |corrector|
|
39
35
|
keyword = node.if? ? 'if' : 'unless'
|
40
36
|
|
41
37
|
corrector.replace(node, <<~RUBY.chop)
|
@@ -13,8 +13,9 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# result = some_condition ? something : another_thing
|
15
15
|
#
|
16
|
-
class IfWithSemicolon <
|
16
|
+
class IfWithSemicolon < Base
|
17
17
|
include OnNormalIfUnless
|
18
|
+
extend AutoCorrector
|
18
19
|
|
19
20
|
MSG = 'Do not use if x; Use the ternary operator instead.'
|
20
21
|
|
@@ -24,11 +25,7 @@ module RuboCop
|
|
24
25
|
beginning = node.loc.begin
|
25
26
|
return unless beginning&.is?(';')
|
26
27
|
|
27
|
-
add_offense(node)
|
28
|
-
end
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
28
|
+
add_offense(node) do |corrector|
|
32
29
|
corrector.replace(node, correct_to_ternary(node))
|
33
30
|
end
|
34
31
|
end
|
@@ -14,9 +14,10 @@ module RuboCop
|
|
14
14
|
#
|
15
15
|
# # good
|
16
16
|
# raise ArgumentError, 'Error message here'
|
17
|
-
class ImplicitRuntimeError <
|
17
|
+
class ImplicitRuntimeError < Base
|
18
18
|
MSG = 'Use `%<method>s` with an explicit exception class and message,' \
|
19
19
|
' rather than just a message.'
|
20
|
+
RESTRICT_ON_SEND = %i[raise fail].freeze
|
20
21
|
|
21
22
|
def_node_matcher :implicit_runtime_error_raise_or_fail,
|
22
23
|
'(send nil? ${:raise :fail} {str dstr})'
|
@@ -15,13 +15,15 @@ module RuboCop
|
|
15
15
|
# loop do
|
16
16
|
# work
|
17
17
|
# end
|
18
|
-
class InfiniteLoop <
|
18
|
+
class InfiniteLoop < Base
|
19
|
+
extend AutoCorrector
|
20
|
+
|
19
21
|
LEADING_SPACE = /\A(\s*)/.freeze
|
20
22
|
|
21
23
|
MSG = 'Use `Kernel#loop` for infinite loops.'
|
22
24
|
|
23
|
-
def
|
24
|
-
|
25
|
+
def self.joining_forces
|
26
|
+
VariableForce
|
25
27
|
end
|
26
28
|
|
27
29
|
def after_leaving_scope(scope, _variable_table)
|
@@ -40,16 +42,6 @@ module RuboCop
|
|
40
42
|
alias on_while_post on_while
|
41
43
|
alias on_until_post on_until
|
42
44
|
|
43
|
-
def autocorrect(node)
|
44
|
-
if node.while_post_type? || node.until_post_type?
|
45
|
-
replace_begin_end_with_modifier(node)
|
46
|
-
elsif node.modifier_form?
|
47
|
-
replace_source(node.source_range, modifier_replacement(node))
|
48
|
-
else
|
49
|
-
replace_source(non_modifier_range(node), 'loop do')
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
45
|
private
|
54
46
|
|
55
47
|
def while_or_until(node)
|
@@ -66,7 +58,19 @@ module RuboCop
|
|
66
58
|
referenced_after_loop?(var, range)
|
67
59
|
end
|
68
60
|
|
69
|
-
add_offense(node
|
61
|
+
add_offense(node.loc.keyword) do |corrector|
|
62
|
+
autocorrect(corrector, node)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def autocorrect(corrector, node)
|
67
|
+
if node.while_post_type? || node.until_post_type?
|
68
|
+
replace_begin_end_with_modifier(corrector, node)
|
69
|
+
elsif node.modifier_form?
|
70
|
+
replace_source(corrector, node.source_range, modifier_replacement(node))
|
71
|
+
else
|
72
|
+
replace_source(corrector, non_modifier_range(node), 'loop do')
|
73
|
+
end
|
70
74
|
end
|
71
75
|
|
72
76
|
def assigned_inside_loop?(var, range)
|
@@ -83,17 +87,13 @@ module RuboCop
|
|
83
87
|
var.references.any? { |r| r.node.source_range.begin_pos > e }
|
84
88
|
end
|
85
89
|
|
86
|
-
def replace_begin_end_with_modifier(node)
|
87
|
-
|
88
|
-
|
89
|
-
corrector.remove(node.body.loc.end.end.join(node.source_range.end))
|
90
|
-
end
|
90
|
+
def replace_begin_end_with_modifier(corrector, node)
|
91
|
+
corrector.replace(node.body.loc.begin, 'loop do')
|
92
|
+
corrector.remove(node.body.loc.end.end.join(node.source_range.end))
|
91
93
|
end
|
92
94
|
|
93
|
-
def replace_source(range, replacement)
|
94
|
-
|
95
|
-
corrector.replace(range, replacement)
|
96
|
-
end
|
95
|
+
def replace_source(corrector, range, replacement)
|
96
|
+
corrector.replace(range, replacement)
|
97
97
|
end
|
98
98
|
|
99
99
|
def modifier_replacement(node)
|
@@ -17,11 +17,11 @@ module RuboCop
|
|
17
17
|
# foo.each do |f|
|
18
18
|
# f.bar # Trailing inline comment
|
19
19
|
# end
|
20
|
-
class InlineComment <
|
20
|
+
class InlineComment < Base
|
21
21
|
MSG = 'Avoid trailing inline comments.'
|
22
22
|
|
23
|
-
def
|
24
|
-
processed_source.
|
23
|
+
def on_new_investigation
|
24
|
+
processed_source.comments.each do |comment|
|
25
25
|
next if comment_line?(processed_source[comment.loc.line - 1]) ||
|
26
26
|
comment.text.match?(/\A# rubocop:(enable|disable)/)
|
27
27
|
|
@@ -33,9 +33,10 @@ module RuboCop
|
|
33
33
|
# next if f.zero?
|
34
34
|
# f != 1
|
35
35
|
# end
|
36
|
-
class InverseMethods <
|
36
|
+
class InverseMethods < Base
|
37
37
|
include IgnoredNode
|
38
38
|
include RangeHelp
|
39
|
+
extend AutoCorrector
|
39
40
|
|
40
41
|
MSG = 'Use `%<inverse>s` instead of inverting `%<method>s`.'
|
41
42
|
CLASS_COMPARISON_METHODS = %i[<= >= < >].freeze
|
@@ -70,9 +71,9 @@ module RuboCop
|
|
70
71
|
return if part_of_ignored_node?(node)
|
71
72
|
return if possible_class_hierarchy_check?(lhs, rhs, method)
|
72
73
|
|
73
|
-
add_offense(node,
|
74
|
-
|
75
|
-
|
74
|
+
add_offense(node, message: message(method, inverse_methods[method])) do |corrector|
|
75
|
+
correct_inverse_method(corrector, node)
|
76
|
+
end
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
@@ -86,40 +87,28 @@ module RuboCop
|
|
86
87
|
# offense, such as `y.reject { |key, _value| !(key =~ /c\d/) }`,
|
87
88
|
# can cause auto-correction to apply improper corrections.
|
88
89
|
ignore_node(block)
|
89
|
-
add_offense(node,
|
90
|
-
|
91
|
-
|
90
|
+
add_offense(node, message: message(method, inverse_blocks[method])) do |corrector|
|
91
|
+
correct_inverse_block(corrector, node)
|
92
|
+
end
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
95
|
-
|
96
|
-
if node.block_type?
|
97
|
-
correct_inverse_block(node)
|
98
|
-
elsif node.send_type?
|
99
|
-
correct_inverse_method(node)
|
100
|
-
end
|
101
|
-
end
|
96
|
+
private
|
102
97
|
|
103
|
-
def correct_inverse_method(node)
|
98
|
+
def correct_inverse_method(corrector, node)
|
104
99
|
method_call, _lhs, method, _rhs = inverse_candidate?(node)
|
105
100
|
return unless method_call && method
|
106
101
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
inverse_methods[method].to_s)
|
111
|
-
remove_end_parenthesis(corrector, node, method, method_call)
|
112
|
-
end
|
102
|
+
corrector.remove(not_to_receiver(node, method_call))
|
103
|
+
corrector.replace(method_call.loc.selector, inverse_methods[method].to_s)
|
104
|
+
remove_end_parenthesis(corrector, node, method, method_call)
|
113
105
|
end
|
114
106
|
|
115
|
-
def correct_inverse_block(node)
|
107
|
+
def correct_inverse_block(corrector, node)
|
116
108
|
method_call, method, block = inverse_block?(node)
|
117
109
|
|
118
|
-
|
119
|
-
|
120
|
-
inverse_blocks[method].to_s)
|
121
|
-
correct_inverse_selector(block, corrector)
|
122
|
-
end
|
110
|
+
corrector.replace(method_call.loc.selector, inverse_blocks[method].to_s)
|
111
|
+
correct_inverse_selector(block, corrector)
|
123
112
|
end
|
124
113
|
|
125
114
|
def correct_inverse_selector(block, corrector)
|
@@ -139,8 +128,6 @@ module RuboCop
|
|
139
128
|
end
|
140
129
|
end
|
141
130
|
|
142
|
-
private
|
143
|
-
|
144
131
|
def inverse_methods
|
145
132
|
@inverse_methods ||= cop_config['InverseMethods']
|
146
133
|
.merge(cop_config['InverseMethods'].invert)
|
@@ -190,6 +177,10 @@ module RuboCop
|
|
190
177
|
|
191
178
|
corrector.remove(end_parentheses(node, method_call))
|
192
179
|
end
|
180
|
+
|
181
|
+
def message(method, inverse)
|
182
|
+
format(MSG, method: method, inverse: inverse)
|
183
|
+
end
|
193
184
|
end
|
194
185
|
end
|
195
186
|
end
|