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
@@ -30,8 +30,9 @@ module RuboCop
|
|
30
30
|
# class Foo
|
31
31
|
# extend Qox, Bar
|
32
32
|
# end
|
33
|
-
class MixinGrouping <
|
33
|
+
class MixinGrouping < Base
|
34
34
|
include ConfigurableEnforcedStyle
|
35
|
+
extend AutoCorrector
|
35
36
|
|
36
37
|
MIXIN_METHODS = %i[extend include prepend].freeze
|
37
38
|
MSG = 'Put `%<mixin>s` mixins in %<suffix>s.'
|
@@ -47,23 +48,6 @@ module RuboCop
|
|
47
48
|
|
48
49
|
alias on_module on_class
|
49
50
|
|
50
|
-
def autocorrect(node)
|
51
|
-
range = node.loc.expression
|
52
|
-
if separated_style?
|
53
|
-
correction = separate_mixins(node)
|
54
|
-
else
|
55
|
-
mixins = sibling_mixins(node)
|
56
|
-
if node == mixins.first
|
57
|
-
correction = group_mixins(node, mixins)
|
58
|
-
else
|
59
|
-
range = range_to_remove_for_subsequent_mixin(mixins, node)
|
60
|
-
correction = ''
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
->(corrector) { corrector.replace(range, correction) }
|
65
|
-
end
|
66
|
-
|
67
51
|
private
|
68
52
|
|
69
53
|
def range_to_remove_for_subsequent_mixin(mixins, node)
|
@@ -89,13 +73,33 @@ module RuboCop
|
|
89
73
|
def check_grouped_style(send_node)
|
90
74
|
return if sibling_mixins(send_node).size == 1
|
91
75
|
|
92
|
-
|
76
|
+
message = format(MSG, mixin: send_node.method_name, suffix: 'a single statement')
|
77
|
+
|
78
|
+
add_offense(send_node, message: message) do |corrector|
|
79
|
+
range = send_node.loc.expression
|
80
|
+
mixins = sibling_mixins(send_node)
|
81
|
+
if send_node == mixins.first
|
82
|
+
correction = group_mixins(send_node, mixins)
|
83
|
+
else
|
84
|
+
range = range_to_remove_for_subsequent_mixin(mixins, send_node)
|
85
|
+
correction = ''
|
86
|
+
end
|
87
|
+
|
88
|
+
corrector.replace(range, correction)
|
89
|
+
end
|
93
90
|
end
|
94
91
|
|
95
92
|
def check_separated_style(send_node)
|
96
93
|
return if send_node.arguments.one?
|
97
94
|
|
98
|
-
|
95
|
+
message = format(MSG, mixin: send_node.method_name, suffix: 'separate statements')
|
96
|
+
|
97
|
+
add_offense(send_node, message: message) do |corrector|
|
98
|
+
range = send_node.loc.expression
|
99
|
+
correction = separate_mixins(send_node)
|
100
|
+
|
101
|
+
corrector.replace(range, correction)
|
102
|
+
end
|
99
103
|
end
|
100
104
|
|
101
105
|
def sibling_mixins(send_node)
|
@@ -107,13 +111,6 @@ module RuboCop
|
|
107
111
|
end
|
108
112
|
end
|
109
113
|
|
110
|
-
def message(send_node)
|
111
|
-
suffix =
|
112
|
-
separated_style? ? 'separate statements' : 'a single statement'
|
113
|
-
|
114
|
-
format(MSG, mixin: send_node.method_name, suffix: suffix)
|
115
|
-
end
|
116
|
-
|
117
114
|
def grouped_style?
|
118
115
|
style == :grouped
|
119
116
|
end
|
@@ -40,50 +40,31 @@ module RuboCop
|
|
40
40
|
# class C
|
41
41
|
# prepend M
|
42
42
|
# end
|
43
|
-
class MixinUsage <
|
43
|
+
class MixinUsage < Base
|
44
44
|
MSG = '`%<statement>s` is used at the top level. Use inside `class` ' \
|
45
45
|
'or `module`.'
|
46
|
+
RESTRICT_ON_SEND = %i[include extend prepend].freeze
|
46
47
|
|
47
48
|
def_node_matcher :include_statement, <<~PATTERN
|
48
49
|
(send nil? ${:include :extend :prepend}
|
49
50
|
const)
|
50
51
|
PATTERN
|
51
52
|
|
52
|
-
def_node_matcher :
|
53
|
-
{
|
53
|
+
def_node_matcher :in_top_level_scope?, <<~PATTERN
|
54
|
+
{
|
55
|
+
root? # either at the top level
|
56
|
+
^[ {kwbegin begin if def} # or wrapped within one of these
|
57
|
+
#in_top_level_scope? ] # that is in top level scope
|
58
|
+
}
|
54
59
|
PATTERN
|
55
60
|
|
56
61
|
def on_send(node)
|
57
62
|
include_statement(node) do |statement|
|
58
|
-
return
|
59
|
-
accepted_include?(node) ||
|
60
|
-
belongs_to_class_or_module?(node)
|
63
|
+
return unless in_top_level_scope?(node)
|
61
64
|
|
62
65
|
add_offense(node, message: format(MSG, statement: statement))
|
63
66
|
end
|
64
67
|
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def accepted_include?(node)
|
69
|
-
node.parent && (node.macro? || ascend_macro_scope?(node.parent))
|
70
|
-
end
|
71
|
-
|
72
|
-
def ascend_macro_scope?(ancestor)
|
73
|
-
return true if wrapped_macro_scope?(ancestor)
|
74
|
-
|
75
|
-
ancestor.parent && ascend_macro_scope?(ancestor.parent)
|
76
|
-
end
|
77
|
-
|
78
|
-
def belongs_to_class_or_module?(node)
|
79
|
-
if !node.parent
|
80
|
-
false
|
81
|
-
else
|
82
|
-
return true if node.parent.class_type? || node.parent.module_type?
|
83
|
-
|
84
|
-
belongs_to_class_or_module?(node.parent)
|
85
|
-
end
|
86
|
-
end
|
87
68
|
end
|
88
69
|
end
|
89
70
|
end
|
@@ -71,8 +71,9 @@ module RuboCop
|
|
71
71
|
#
|
72
72
|
# These offenses are not safe to auto-correct since there are different
|
73
73
|
# implications to each approach.
|
74
|
-
class ModuleFunction <
|
74
|
+
class ModuleFunction < Base
|
75
75
|
include ConfigurableEnforcedStyle
|
76
|
+
extend AutoCorrector
|
76
77
|
|
77
78
|
MODULE_FUNCTION_MSG =
|
78
79
|
'Use `module_function` instead of `extend self`.'
|
@@ -89,18 +90,14 @@ module RuboCop
|
|
89
90
|
return unless node.body&.begin_type?
|
90
91
|
|
91
92
|
each_wrong_style(node.body.children) do |child_node|
|
92
|
-
add_offense(child_node)
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
def autocorrect(node)
|
97
|
-
return if style == :forbidden
|
93
|
+
add_offense(child_node) do |corrector|
|
94
|
+
next if style == :forbidden
|
98
95
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
96
|
+
if extend_self_node?(child_node)
|
97
|
+
corrector.replace(child_node, 'module_function')
|
98
|
+
else
|
99
|
+
corrector.replace(child_node, 'extend self')
|
100
|
+
end
|
104
101
|
end
|
105
102
|
end
|
106
103
|
end
|
@@ -139,7 +136,7 @@ module RuboCop
|
|
139
136
|
end
|
140
137
|
end
|
141
138
|
|
142
|
-
def message(
|
139
|
+
def message(_range)
|
143
140
|
return FORBIDDEN_MSG if style == :forbidden
|
144
141
|
|
145
142
|
style == :module_function ? MODULE_FUNCTION_MSG : EXTEND_SELF_MSG
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
# alive_threads.map do |t|
|
23
23
|
# t.object_id
|
24
24
|
# end
|
25
|
-
class MultilineBlockChain <
|
25
|
+
class MultilineBlockChain < Base
|
26
26
|
include RangeHelp
|
27
27
|
|
28
28
|
MSG = 'Avoid multi-line chains of blocks.'
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
36
36
|
range = range_between(receiver.loc.end.begin_pos,
|
37
37
|
node.send_node.source_range.end_pos)
|
38
38
|
|
39
|
-
add_offense(
|
39
|
+
add_offense(range)
|
40
40
|
|
41
41
|
# Done. If there are more blocks in the chain, they will be
|
42
42
|
# found by subsequent calls to on_block.
|
@@ -14,9 +14,10 @@ module RuboCop
|
|
14
14
|
#
|
15
15
|
# # good
|
16
16
|
# { result: 'ok' } if cond
|
17
|
-
class MultilineIfModifier <
|
17
|
+
class MultilineIfModifier < Base
|
18
18
|
include StatementModifier
|
19
19
|
include Alignment
|
20
|
+
extend AutoCorrector
|
20
21
|
|
21
22
|
MSG = 'Favor a normal %<keyword>s-statement over a modifier' \
|
22
23
|
' clause in a multiline statement.'
|
@@ -24,21 +25,13 @@ module RuboCop
|
|
24
25
|
def on_if(node)
|
25
26
|
return unless node.modifier_form? && node.body.multiline?
|
26
27
|
|
27
|
-
add_offense(node)
|
28
|
-
end
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
28
|
+
add_offense(node, message: format(MSG, keyword: node.keyword)) do |corrector|
|
32
29
|
corrector.replace(node, to_normal_if(node))
|
33
30
|
end
|
34
31
|
end
|
35
32
|
|
36
33
|
private
|
37
34
|
|
38
|
-
def message(node)
|
39
|
-
format(MSG, keyword: node.keyword)
|
40
|
-
end
|
41
|
-
|
42
35
|
def to_normal_if(node)
|
43
36
|
indented_body = indented_body(node.body, node)
|
44
37
|
condition = "#{node.keyword} #{node.condition.source}"
|
@@ -16,9 +16,10 @@ module RuboCop
|
|
16
16
|
# if cond then a
|
17
17
|
# elsif cond then b
|
18
18
|
# end
|
19
|
-
class MultilineIfThen <
|
19
|
+
class MultilineIfThen < Base
|
20
20
|
include OnNormalIfUnless
|
21
21
|
include RangeHelp
|
22
|
+
extend AutoCorrector
|
22
23
|
|
23
24
|
NON_MODIFIER_THEN = /then\s*(#.*)?$/.freeze
|
24
25
|
|
@@ -27,15 +28,8 @@ module RuboCop
|
|
27
28
|
def on_normal_if_unless(node)
|
28
29
|
return unless non_modifier_then?(node)
|
29
30
|
|
30
|
-
add_offense(node,
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
def autocorrect(node)
|
35
|
-
lambda do |corrector|
|
36
|
-
corrector.remove(
|
37
|
-
range_with_surrounding_space(range: node.loc.begin, side: :left)
|
38
|
-
)
|
31
|
+
add_offense(node.loc.begin, message: format(MSG, keyword: node.keyword)) do |corrector|
|
32
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.begin, side: :left))
|
39
33
|
end
|
40
34
|
end
|
41
35
|
|
@@ -30,30 +30,32 @@ module RuboCop
|
|
30
30
|
# bar
|
31
31
|
# baz
|
32
32
|
# )
|
33
|
-
class MultilineMemoization <
|
33
|
+
class MultilineMemoization < Base
|
34
34
|
include ConfigurableEnforcedStyle
|
35
|
+
extend AutoCorrector
|
35
36
|
|
36
|
-
|
37
|
+
KEYWORD_MSG = 'Wrap multiline memoization blocks in `begin` and `end`.'
|
38
|
+
BRACES_MSG = 'Wrap multiline memoization blocks in `(` and `)`.'
|
37
39
|
|
38
40
|
def on_or_asgn(node)
|
39
41
|
_lhs, rhs = *node
|
40
42
|
|
41
43
|
return unless bad_rhs?(rhs)
|
42
44
|
|
43
|
-
add_offense(
|
44
|
-
end
|
45
|
-
|
46
|
-
def autocorrect(node)
|
47
|
-
lambda do |corrector|
|
45
|
+
add_offense(node.source_range) do |corrector|
|
48
46
|
if style == :keyword
|
49
|
-
keyword_autocorrect(
|
47
|
+
keyword_autocorrect(rhs, corrector)
|
50
48
|
else
|
51
|
-
corrector.replace(
|
52
|
-
corrector.replace(
|
49
|
+
corrector.replace(rhs.loc.begin, '(')
|
50
|
+
corrector.replace(rhs.loc.end, ')')
|
53
51
|
end
|
54
52
|
end
|
55
53
|
end
|
56
54
|
|
55
|
+
def message(_node)
|
56
|
+
style == :braces ? BRACES_MSG : KEYWORD_MSG
|
57
|
+
end
|
58
|
+
|
57
59
|
private
|
58
60
|
|
59
61
|
def bad_rhs?(rhs)
|
@@ -5,6 +5,9 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop checks for multi-line ternary op expressions.
|
7
7
|
#
|
8
|
+
# NOTE: `return if ... else ... end` is syntax error. If `return` is used before
|
9
|
+
# multiline ternary operator expression, it cannot be auto-corrected.
|
10
|
+
#
|
8
11
|
# @example
|
9
12
|
# # bad
|
10
13
|
# a = cond ?
|
@@ -22,18 +25,20 @@ module RuboCop
|
|
22
25
|
# else
|
23
26
|
# c
|
24
27
|
# end
|
25
|
-
class MultilineTernaryOperator <
|
28
|
+
class MultilineTernaryOperator < Base
|
29
|
+
extend AutoCorrector
|
30
|
+
|
26
31
|
MSG = 'Avoid multi-line ternary operators, ' \
|
27
32
|
'use `if` or `unless` instead.'
|
28
33
|
|
29
34
|
def on_if(node)
|
30
|
-
return unless
|
35
|
+
return unless offense?(node)
|
31
36
|
|
32
|
-
add_offense(node)
|
33
|
-
|
37
|
+
add_offense(node) do |corrector|
|
38
|
+
# `return if ... else ... end` is syntax error. If `return` is used before
|
39
|
+
# multiline ternary operator expression, it cannot be auto-corrected.
|
40
|
+
next unless offense?(node) && !node.parent.return_type?
|
34
41
|
|
35
|
-
def autocorrect(node)
|
36
|
-
lambda do |corrector|
|
37
42
|
corrector.replace(node, <<~RUBY.chop)
|
38
43
|
if #{node.condition.source}
|
39
44
|
#{node.if_branch.source}
|
@@ -43,6 +48,12 @@ module RuboCop
|
|
43
48
|
RUBY
|
44
49
|
end
|
45
50
|
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def offense?(node)
|
55
|
+
node.ternary? && node.multiline?
|
56
|
+
end
|
46
57
|
end
|
47
58
|
end
|
48
59
|
end
|
@@ -28,8 +28,9 @@ module RuboCop
|
|
28
28
|
# arg2)
|
29
29
|
# end
|
30
30
|
#
|
31
|
-
class MultilineWhenThen <
|
31
|
+
class MultilineWhenThen < Base
|
32
32
|
include RangeHelp
|
33
|
+
extend AutoCorrector
|
33
34
|
|
34
35
|
MSG = 'Do not use `then` for multiline `when` statement.'
|
35
36
|
|
@@ -43,30 +44,28 @@ module RuboCop
|
|
43
44
|
# Requires `then` for write `when` and its body on the same line.
|
44
45
|
return if require_then?(node)
|
45
46
|
|
46
|
-
#
|
47
|
+
# For arrays and hashes there's no offense
|
47
48
|
return if accept_node_type?(node.body)
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
def autocorrect(node)
|
53
|
-
lambda do |corrector|
|
50
|
+
range = node.loc.begin
|
51
|
+
add_offense(range) do |corrector|
|
54
52
|
corrector.remove(
|
55
|
-
range_with_surrounding_space(
|
56
|
-
range: node.loc.begin, side: :left, newlines: false
|
57
|
-
)
|
53
|
+
range_with_surrounding_space(range: range, side: :left, newlines: false)
|
58
54
|
)
|
59
55
|
end
|
60
56
|
end
|
61
57
|
|
58
|
+
private
|
59
|
+
|
62
60
|
def require_then?(when_node)
|
61
|
+
return true if when_node.conditions.count >= 2
|
63
62
|
return false unless when_node.body
|
64
63
|
|
65
64
|
when_node.loc.line == when_node.body.loc.line
|
66
65
|
end
|
67
66
|
|
68
67
|
def accept_node_type?(node)
|
69
|
-
node&.
|
68
|
+
node&.array_type? || node&.hash_type?
|
70
69
|
end
|
71
70
|
end
|
72
71
|
end
|
@@ -14,7 +14,7 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# a = 'a'
|
16
16
|
# foo if ['a', 'b', 'c'].include?(a)
|
17
|
-
class MultipleComparison <
|
17
|
+
class MultipleComparison < Base
|
18
18
|
MSG = 'Avoid comparing a variable with multiple items ' \
|
19
19
|
'in a conditional, use `Array#include?` instead.'
|
20
20
|
|
@@ -50,9 +50,10 @@ module RuboCop
|
|
50
50
|
# puts 1
|
51
51
|
# end
|
52
52
|
# end.freeze
|
53
|
-
class MutableConstant <
|
53
|
+
class MutableConstant < Base
|
54
54
|
include FrozenStringLiteral
|
55
55
|
include ConfigurableEnforcedStyle
|
56
|
+
extend AutoCorrector
|
56
57
|
|
57
58
|
MSG = 'Freeze mutable objects assigned to constants.'
|
58
59
|
|
@@ -69,23 +70,6 @@ module RuboCop
|
|
69
70
|
on_assignment(value)
|
70
71
|
end
|
71
72
|
|
72
|
-
def autocorrect(node)
|
73
|
-
expr = node.source_range
|
74
|
-
|
75
|
-
lambda do |corrector|
|
76
|
-
splat_value = splat_value(node)
|
77
|
-
if splat_value
|
78
|
-
correct_splat_expansion(corrector, expr, splat_value)
|
79
|
-
elsif node.array_type? && !node.bracketed?
|
80
|
-
corrector.wrap(expr, '[', ']')
|
81
|
-
elsif requires_parentheses?(node)
|
82
|
-
corrector.wrap(expr, '(', ')')
|
83
|
-
end
|
84
|
-
|
85
|
-
corrector.insert_after(expr, '.freeze')
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
73
|
private
|
90
74
|
|
91
75
|
def on_assignment(value)
|
@@ -101,7 +85,9 @@ module RuboCop
|
|
101
85
|
return if operation_produces_immutable_object?(value)
|
102
86
|
return if frozen_string_literal?(value)
|
103
87
|
|
104
|
-
add_offense(value)
|
88
|
+
add_offense(value) do |corrector|
|
89
|
+
autocorrect(corrector, value)
|
90
|
+
end
|
105
91
|
end
|
106
92
|
|
107
93
|
def check(value)
|
@@ -112,7 +98,24 @@ module RuboCop
|
|
112
98
|
return if FROZEN_STRING_LITERAL_TYPES.include?(value.type) &&
|
113
99
|
frozen_string_literals_enabled?
|
114
100
|
|
115
|
-
add_offense(value)
|
101
|
+
add_offense(value) do |corrector|
|
102
|
+
autocorrect(corrector, value)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def autocorrect(corrector, node)
|
107
|
+
expr = node.source_range
|
108
|
+
|
109
|
+
splat_value = splat_value(node)
|
110
|
+
if splat_value
|
111
|
+
correct_splat_expansion(corrector, expr, splat_value)
|
112
|
+
elsif node.array_type? && !node.bracketed?
|
113
|
+
corrector.wrap(expr, '[', ']')
|
114
|
+
elsif requires_parentheses?(node)
|
115
|
+
corrector.wrap(expr, '(', ')')
|
116
|
+
end
|
117
|
+
|
118
|
+
corrector.insert_after(expr, '.freeze')
|
116
119
|
end
|
117
120
|
|
118
121
|
def mutable_literal?(value)
|