rubocop 0.49.1 → 0.50.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 +5 -3
 - data/bin/rubocop +1 -1
 - data/config/default.yml +160 -99
 - data/config/disabled.yml +4 -5
 - data/config/enabled.yml +149 -47
 - data/lib/rubocop.rb +41 -14
 - data/lib/rubocop/ast/builder.rb +4 -1
 - data/lib/rubocop/ast/node.rb +36 -42
 - data/lib/rubocop/ast/node/args_node.rb +1 -13
 - data/lib/rubocop/ast/node/array_node.rb +9 -0
 - data/lib/rubocop/ast/node/block_node.rb +9 -0
 - data/lib/rubocop/ast/node/def_node.rb +71 -0
 - data/lib/rubocop/ast/node/for_node.rb +8 -0
 - data/lib/rubocop/ast/node/if_node.rb +10 -2
 - data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
 - data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
 - data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
 - data/lib/rubocop/ast/node/mixin/parameterized_node.rb +18 -31
 - data/lib/rubocop/ast/node/regexp_node.rb +35 -0
 - data/lib/rubocop/ast/node/send_node.rb +1 -154
 - data/lib/rubocop/ast/node/super_node.rb +3 -24
 - data/lib/rubocop/ast/node/yield_node.rb +21 -0
 - data/lib/rubocop/ast/traversal.rb +6 -6
 - data/lib/rubocop/cli.rb +7 -3
 - data/lib/rubocop/config.rb +45 -8
 - data/lib/rubocop/config_loader.rb +7 -5
 - data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -3
 - data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +64 -0
 - data/lib/rubocop/cop/bundler/ordered_gems.rb +12 -12
 - data/lib/rubocop/cop/commissioner.rb +8 -2
 - data/lib/rubocop/cop/cop.rb +3 -1
 - data/lib/rubocop/cop/generator.rb +94 -21
 - data/lib/rubocop/cop/internal_affairs.rb +3 -0
 - data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +14 -3
 - data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +43 -0
 - data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +46 -0
 - data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +49 -0
 - data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -1
 - data/lib/rubocop/cop/layout/access_modifier_indentation.rb +2 -3
 - data/lib/rubocop/cop/layout/align_array.rb +2 -2
 - data/lib/rubocop/cop/layout/align_hash.rb +2 -2
 - data/lib/rubocop/cop/layout/align_parameters.rb +5 -11
 - data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
 - data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
 - data/lib/rubocop/cop/layout/dot_position.rb +9 -0
 - data/lib/rubocop/cop/layout/else_alignment.rb +30 -13
 - data/lib/rubocop/cop/layout/empty_line_between_defs.rb +4 -0
 - data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +20 -4
 - data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -3
 - data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +3 -3
 - data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +3 -3
 - data/lib/rubocop/cop/layout/first_parameter_indentation.rb +5 -2
 - data/lib/rubocop/cop/layout/indent_heredoc.rb +19 -24
 - data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -2
 - data/lib/rubocop/cop/layout/indentation_width.rb +12 -8
 - data/lib/rubocop/cop/layout/leading_comment_space.rb +33 -18
 - data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +20 -17
 - data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +3 -3
 - data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -0
 - data/lib/rubocop/cop/layout/space_after_colon.rb +7 -0
 - data/lib/rubocop/cop/layout/space_after_comma.rb +10 -0
 - data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -3
 - data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
 - data/lib/rubocop/cop/layout/space_around_block_parameters.rb +13 -4
 - data/lib/rubocop/cop/layout/space_around_keyword.rb +9 -5
 - data/lib/rubocop/cop/layout/space_before_block_braces.rb +54 -5
 - data/lib/rubocop/cop/layout/space_before_comment.rb +7 -0
 - data/lib/rubocop/cop/layout/space_before_semicolon.rb +7 -0
 - data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +1 -1
 - data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
 - data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
 - data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +8 -4
 - data/lib/rubocop/cop/layout/tab.rb +1 -1
 - data/lib/rubocop/cop/lint/ambiguous_block_association.rb +4 -2
 - data/lib/rubocop/cop/lint/assignment_in_condition.rb +15 -1
 - data/lib/rubocop/cop/lint/block_alignment.rb +15 -6
 - data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
 - data/lib/rubocop/cop/lint/condition_position.rb +5 -1
 - data/lib/rubocop/cop/lint/debugger.rb +16 -9
 - data/lib/rubocop/cop/lint/def_end_alignment.rb +4 -4
 - data/lib/rubocop/cop/lint/duplicate_case_condition.rb +3 -3
 - data/lib/rubocop/cop/lint/duplicate_methods.rb +73 -5
 - data/lib/rubocop/cop/lint/duplicated_key.rb +1 -1
 - data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
 - data/lib/rubocop/cop/lint/else_layout.rb +1 -1
 - data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
 - data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
 - data/lib/rubocop/cop/lint/empty_when.rb +1 -1
 - data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
 - data/lib/rubocop/cop/lint/float_out_of_range.rb +5 -5
 - data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +35 -40
 - data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
 - data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +18 -13
 - data/lib/rubocop/cop/lint/inherit_exception.rb +8 -7
 - data/lib/rubocop/cop/lint/interpolation_check.rb +36 -0
 - data/lib/rubocop/cop/lint/literal_in_condition.rb +3 -3
 - data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
 - data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
 - data/lib/rubocop/cop/lint/nested_method_definition.rb +5 -7
 - data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
 - data/lib/rubocop/cop/lint/percent_string_array.rb +3 -12
 - data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
 - data/lib/rubocop/cop/lint/rand_one.rb +7 -1
 - data/lib/rubocop/cop/lint/redundant_with_index.rb +77 -0
 - data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
 - data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
 - data/lib/rubocop/cop/lint/rescue_type.rb +13 -6
 - data/lib/rubocop/cop/lint/rescue_without_error_class.rb +38 -0
 - data/lib/rubocop/cop/lint/return_in_void_context.rb +63 -0
 - data/lib/rubocop/cop/lint/script_permission.rb +6 -0
 - data/lib/rubocop/cop/lint/syntax.rb +17 -20
 - data/lib/rubocop/cop/lint/unified_integer.rb +3 -2
 - data/lib/rubocop/cop/lint/unneeded_disable.rb +1 -1
 - data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +1 -1
 - data/lib/rubocop/cop/lint/unreachable_code.rb +53 -8
 - data/lib/rubocop/cop/lint/uri_escape_unescape.rb +74 -0
 - data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
 - data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -8
 - data/lib/rubocop/cop/lint/useless_setter_call.rb +10 -11
 - data/lib/rubocop/cop/lint/void.rb +29 -23
 - data/lib/rubocop/cop/metrics/line_length.rb +2 -2
 - data/lib/rubocop/cop/metrics/method_length.rb +8 -3
 - data/lib/rubocop/cop/metrics/parameter_lists.rb +5 -2
 - data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +1 -1
 - data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -2
 - data/lib/rubocop/cop/mixin/first_element_line_break.rb +12 -3
 - data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
 - data/lib/rubocop/cop/mixin/method_complexity.rb +9 -6
 - data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +68 -31
 - data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +18 -0
 - data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -1
 - data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
 - data/lib/rubocop/cop/mixin/string_help.rb +1 -1
 - data/lib/rubocop/cop/{style → naming}/accessor_method_name.rb +11 -12
 - data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +1 -1
 - data/lib/rubocop/cop/{style/op_method.rb → naming/binary_operator_parameter_name.rb} +2 -2
 - data/lib/rubocop/cop/{style → naming}/class_and_module_camel_case.rb +1 -1
 - data/lib/rubocop/cop/{style → naming}/constant_name.rb +1 -1
 - data/lib/rubocop/cop/{style → naming}/file_name.rb +8 -4
 - data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +68 -0
 - data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +58 -0
 - data/lib/rubocop/cop/{style → naming}/method_name.rb +1 -1
 - data/lib/rubocop/cop/{style → naming}/predicate_name.rb +6 -7
 - data/lib/rubocop/cop/{style → naming}/variable_name.rb +11 -15
 - data/lib/rubocop/cop/{style → naming}/variable_number.rb +1 -1
 - data/lib/rubocop/cop/performance/caller.rb +39 -11
 - data/lib/rubocop/cop/performance/casecmp.rb +4 -4
 - data/lib/rubocop/cop/performance/compare_with_block.rb +4 -4
 - data/lib/rubocop/cop/performance/double_start_end_with.rb +4 -4
 - data/lib/rubocop/cop/performance/end_with.rb +3 -3
 - data/lib/rubocop/cop/performance/fixed_size.rb +1 -1
 - data/lib/rubocop/cop/performance/hash_each_methods.rb +66 -25
 - data/lib/rubocop/cop/performance/lstrip_rstrip.rb +2 -2
 - data/lib/rubocop/cop/performance/range_include.rb +2 -2
 - data/lib/rubocop/cop/performance/redundant_block_call.rb +6 -6
 - data/lib/rubocop/cop/performance/redundant_match.rb +5 -5
 - data/lib/rubocop/cop/performance/redundant_merge.rb +39 -23
 - data/lib/rubocop/cop/performance/redundant_sort_by.rb +2 -2
 - data/lib/rubocop/cop/performance/regexp_match.rb +13 -5
 - data/lib/rubocop/cop/performance/size.rb +1 -1
 - data/lib/rubocop/cop/performance/start_with.rb +3 -3
 - data/lib/rubocop/cop/performance/times_map.rb +23 -12
 - data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
 - data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
 - data/lib/rubocop/cop/rails/active_support_aliases.rb +1 -1
 - data/lib/rubocop/cop/rails/delegate.rb +36 -7
 - data/lib/rubocop/cop/rails/delegate_allow_blank.rb +1 -1
 - data/lib/rubocop/cop/rails/enum_uniqueness.rb +2 -2
 - data/lib/rubocop/cop/rails/file_path.rb +3 -4
 - data/lib/rubocop/cop/rails/find_each.rb +1 -1
 - data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +48 -0
 - data/lib/rubocop/cop/rails/http_positional_arguments.rb +5 -5
 - data/lib/rubocop/cop/rails/not_null_column.rb +1 -1
 - data/lib/rubocop/cop/rails/pluralization_grammar.rb +2 -2
 - data/lib/rubocop/cop/rails/relative_date_constant.rb +1 -1
 - data/lib/rubocop/cop/rails/request_referer.rb +2 -2
 - data/lib/rubocop/cop/rails/reversible_migration.rb +12 -12
 - data/lib/rubocop/cop/rails/save_bang.rb +8 -6
 - data/lib/rubocop/cop/rails/scope_args.rb +1 -1
 - data/lib/rubocop/cop/security/eval.rb +2 -2
 - data/lib/rubocop/cop/security/json_load.rb +2 -2
 - data/lib/rubocop/cop/security/marshal_load.rb +2 -2
 - data/lib/rubocop/cop/security/yaml_load.rb +2 -2
 - data/lib/rubocop/cop/style/alias.rb +44 -20
 - data/lib/rubocop/cop/style/and_or.rb +48 -34
 - data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
 - data/lib/rubocop/cop/style/block_comments.rb +3 -1
 - data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
 - data/lib/rubocop/cop/style/command_literal.rb +20 -9
 - data/lib/rubocop/cop/style/conditional_assignment.rb +30 -28
 - data/lib/rubocop/cop/style/copyright.rb +10 -10
 - data/lib/rubocop/cop/style/def_with_parentheses.rb +6 -5
 - data/lib/rubocop/cop/style/dir.rb +52 -0
 - data/lib/rubocop/cop/style/documentation_method.rb +2 -6
 - data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
 - data/lib/rubocop/cop/style/empty_else.rb +3 -2
 - data/lib/rubocop/cop/style/empty_literal.rb +1 -2
 - data/lib/rubocop/cop/style/empty_method.rb +27 -17
 - data/lib/rubocop/cop/style/flip_flop.rb +2 -2
 - data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
 - data/lib/rubocop/cop/style/guard_clause.rb +4 -2
 - data/lib/rubocop/cop/style/hash_syntax.rb +10 -10
 - data/lib/rubocop/cop/style/identical_conditional_branches.rb +5 -1
 - data/lib/rubocop/cop/style/if_with_semicolon.rb +1 -1
 - data/lib/rubocop/cop/style/implicit_runtime_error.rb +4 -3
 - data/lib/rubocop/cop/style/inline_comment.rb +1 -1
 - data/lib/rubocop/cop/style/inverse_methods.rb +20 -8
 - data/lib/rubocop/cop/style/lambda.rb +19 -9
 - data/lib/rubocop/cop/style/lambda_call.rb +22 -1
 - data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +4 -20
 - data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +6 -4
 - data/lib/rubocop/cop/style/method_def_parentheses.rb +18 -26
 - data/lib/rubocop/cop/style/method_missing.rb +5 -18
 - data/lib/rubocop/cop/style/min_max.rb +67 -0
 - data/lib/rubocop/cop/style/missing_else.rb +16 -3
 - data/lib/rubocop/cop/style/mixin_grouping.rb +2 -2
 - data/lib/rubocop/cop/style/module_function.rb +8 -4
 - data/lib/rubocop/cop/style/multiline_if_modifier.rb +5 -1
 - data/lib/rubocop/cop/style/multiline_memoization.rb +25 -3
 - data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
 - data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
 - data/lib/rubocop/cop/style/mutable_constant.rb +2 -6
 - data/lib/rubocop/cop/style/negated_if.rb +8 -4
 - data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +8 -8
 - data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
 - data/lib/rubocop/cop/style/non_nil_check.rb +14 -14
 - data/lib/rubocop/cop/style/numeric_literal_prefix.rb +6 -2
 - data/lib/rubocop/cop/style/numeric_literals.rb +2 -2
 - data/lib/rubocop/cop/style/numeric_predicate.rb +8 -4
 - data/lib/rubocop/cop/style/one_line_conditional.rb +8 -3
 - data/lib/rubocop/cop/style/option_hash.rb +1 -1
 - data/lib/rubocop/cop/style/optional_arguments.rb +1 -2
 - data/lib/rubocop/cop/style/or_assignment.rb +88 -0
 - data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
 - data/lib/rubocop/cop/style/parentheses_around_condition.rb +12 -11
 - data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
 - data/lib/rubocop/cop/style/percent_q_literals.rb +2 -2
 - data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
 - data/lib/rubocop/cop/style/proc.rb +1 -1
 - data/lib/rubocop/cop/style/raise_args.rb +16 -17
 - data/lib/rubocop/cop/style/redundant_begin.rb +6 -5
 - data/lib/rubocop/cop/style/redundant_conditional.rb +95 -0
 - data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
 - data/lib/rubocop/cop/style/redundant_parentheses.rb +13 -11
 - data/lib/rubocop/cop/style/redundant_return.rb +23 -11
 - data/lib/rubocop/cop/style/redundant_self.rb +18 -9
 - data/lib/rubocop/cop/style/regexp_literal.rb +12 -4
 - data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
 - data/lib/rubocop/cop/style/return_nil.rb +98 -0
 - data/lib/rubocop/cop/style/safe_navigation.rb +80 -43
 - data/lib/rubocop/cop/style/single_line_block_params.rb +14 -13
 - data/lib/rubocop/cop/style/single_line_methods.rb +9 -13
 - data/lib/rubocop/cop/style/special_global_vars.rb +3 -3
 - data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -39
 - data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +22 -1
 - data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
 - data/lib/rubocop/cop/style/symbol_array.rb +5 -25
 - data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
 - data/lib/rubocop/cop/style/symbol_proc.rb +3 -18
 - data/lib/rubocop/cop/style/ternary_parentheses.rb +14 -10
 - data/lib/rubocop/cop/style/trailing_underscore_variable.rb +28 -9
 - data/lib/rubocop/cop/style/trivial_accessors.rb +39 -56
 - data/lib/rubocop/cop/style/unless_else.rb +1 -1
 - data/lib/rubocop/cop/style/unneeded_capital_w.rb +1 -1
 - data/lib/rubocop/cop/style/unneeded_interpolation.rb +1 -1
 - data/lib/rubocop/cop/style/unneeded_percent_q.rb +1 -1
 - data/lib/rubocop/cop/style/variable_interpolation.rb +8 -3
 - data/lib/rubocop/cop/style/word_array.rb +7 -24
 - data/lib/rubocop/cop/style/yoda_condition.rb +49 -14
 - data/lib/rubocop/cop/style/zero_length_predicate.rb +25 -18
 - data/lib/rubocop/cop/team.rb +16 -8
 - data/lib/rubocop/cop/util.rb +11 -0
 - data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
 - data/lib/rubocop/formatter/formatter_set.rb +2 -1
 - data/lib/rubocop/formatter/offense_count_formatter.rb +2 -0
 - data/lib/rubocop/formatter/simple_text_formatter.rb +1 -1
 - data/lib/rubocop/formatter/tap_formatter.rb +71 -0
 - data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -0
 - data/lib/rubocop/node_pattern.rb +44 -26
 - data/lib/rubocop/options.rb +1 -0
 - data/lib/rubocop/processed_source.rb +3 -1
 - data/lib/rubocop/remote_config.rb +5 -1
 - data/lib/rubocop/result_cache.rb +1 -0
 - data/lib/rubocop/rspec/cop_helper.rb +10 -10
 - data/lib/rubocop/rspec/expect_offense.rb +6 -8
 - data/lib/rubocop/rspec/shared_examples.rb +8 -8
 - data/lib/rubocop/string_util.rb +2 -0
 - data/lib/rubocop/version.rb +1 -1
 - metadata +51 -18
 - data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -41
 - data/lib/rubocop/cop/mixin/on_method_def.rb +0 -44
 
| 
         @@ -22,9 +22,9 @@ module RuboCop 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                    MSG = 'Duplicate value `%s` found in `%s` enum declaration.'.freeze
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                    def_node_matcher :enum_declaration, <<- 
     | 
| 
      
 25 
     | 
    
         
            +
                    def_node_matcher :enum_declaration, <<-PATTERN
         
     | 
| 
       26 
26 
     | 
    
         
             
                      (send nil :enum (hash (pair (_ $_) ${array hash})))
         
     | 
| 
       27 
     | 
    
         
            -
                     
     | 
| 
      
 27 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       30 
30 
     | 
    
         
             
                      enum_declaration(node) do |name, args|
         
     | 
| 
         @@ -43,7 +43,7 @@ module RuboCop 
     | 
|
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
                    def check_for_file_join_with_rails_root(node)
         
     | 
| 
       45 
45 
     | 
    
         
             
                      return unless file_join_nodes?(node)
         
     | 
| 
       46 
     | 
    
         
            -
                      return unless node. 
     | 
| 
      
 46 
     | 
    
         
            +
                      return unless node.arguments.any? { |e| rails_root_nodes?(e) }
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
                      register_offense(node)
         
     | 
| 
       49 
49 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -51,7 +51,7 @@ module RuboCop 
     | 
|
| 
       51 
51 
     | 
    
         
             
                    def check_for_rails_root_join_with_slash_separated_path(node)
         
     | 
| 
       52 
52 
     | 
    
         
             
                      return unless rails_root_nodes?(node)
         
     | 
| 
       53 
53 
     | 
    
         
             
                      return unless rails_root_join_nodes?(node)
         
     | 
| 
       54 
     | 
    
         
            -
                      return unless node. 
     | 
| 
      
 54 
     | 
    
         
            +
                      return unless node.arguments.any? { |arg| string_with_slash?(arg) }
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
                      register_offense(node)
         
     | 
| 
       57 
57 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -65,8 +65,7 @@ module RuboCop 
     | 
|
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         
             
                      add_offense(
         
     | 
| 
       67 
67 
     | 
    
         
             
                        node,
         
     | 
| 
       68 
     | 
    
         
            -
                        source_range(processed_source.buffer, node.loc.line, line_range) 
     | 
| 
       69 
     | 
    
         
            -
                        MSG
         
     | 
| 
      
 68 
     | 
    
         
            +
                        source_range(processed_source.buffer, node.loc.line, line_range)
         
     | 
| 
       70 
69 
     | 
    
         
             
                      )
         
     | 
| 
       71 
70 
     | 
    
         
             
                    end
         
     | 
| 
       72 
71 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -24,7 +24,7 @@ module RuboCop 
     | 
|
| 
       24 
24 
     | 
    
         
             
                      return unless SCOPE_METHODS.include?(node.receiver.method_name)
         
     | 
| 
       25 
25 
     | 
    
         
             
                      return if method_chain(node).any? { |m| ignored_by_find_each?(m) }
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                      add_offense(node,  
     | 
| 
      
 27 
     | 
    
         
            +
                      add_offense(node, :selector)
         
     | 
| 
       28 
28 
     | 
    
         
             
                    end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                    def autocorrect(node)
         
     | 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RuboCop
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Cop
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Rails
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # This cop looks for `has_many` or `has_one` associations that don't
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # specify a `:dependent` option.
         
     | 
| 
      
 8 
     | 
    
         
            +
                  #
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # @example
         
     | 
| 
      
 10 
     | 
    
         
            +
                  #   # bad
         
     | 
| 
      
 11 
     | 
    
         
            +
                  #   class User < ActiveRecord::Base
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #     has_many :comments
         
     | 
| 
      
 13 
     | 
    
         
            +
                  #     has_one :avatar
         
     | 
| 
      
 14 
     | 
    
         
            +
                  #   end
         
     | 
| 
      
 15 
     | 
    
         
            +
                  #
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #   # good
         
     | 
| 
      
 17 
     | 
    
         
            +
                  #   class User < ActiveRecord::Base
         
     | 
| 
      
 18 
     | 
    
         
            +
                  #     has_many :comments, dependent: :restrict_with_exception
         
     | 
| 
      
 19 
     | 
    
         
            +
                  #     has_one :avatar, dependent: :destroy
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #   end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  class HasManyOrHasOneDependent < Cop
         
     | 
| 
      
 22 
     | 
    
         
            +
                    MSG = 'Specify a `:dependent` option.'.freeze
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    def_node_matcher :is_has_many_or_has_one_without_options?, <<-PATTERN
         
     | 
| 
      
 25 
     | 
    
         
            +
                      (send nil {:has_many :has_one} _)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    def_node_matcher :is_has_many_or_has_one_with_options?, <<-PATTERN
         
     | 
| 
      
 29 
     | 
    
         
            +
                      (send nil {:has_many :has_one} _ (hash $...))
         
     | 
| 
      
 30 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    def_node_matcher :has_dependent?, <<-PATTERN
         
     | 
| 
      
 33 
     | 
    
         
            +
                      (pair (sym :dependent) !(:nil))
         
     | 
| 
      
 34 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    def on_send(node)
         
     | 
| 
      
 37 
     | 
    
         
            +
                      unless is_has_many_or_has_one_without_options?(node)
         
     | 
| 
      
 38 
     | 
    
         
            +
                        pairs = is_has_many_or_has_one_with_options?(node)
         
     | 
| 
      
 39 
     | 
    
         
            +
                        return unless pairs
         
     | 
| 
      
 40 
     | 
    
         
            +
                        return if pairs.any? { |pair| has_dependent?(pair) }
         
     | 
| 
      
 41 
     | 
    
         
            +
                      end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                      add_offense(node, :selector)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -6,7 +6,7 @@ module RuboCop 
     | 
|
| 
       6 
6 
     | 
    
         
             
                  # This cop is used to identify usages of http methods like `get`, `post`,
         
     | 
| 
       7 
7 
     | 
    
         
             
                  # `put`, `patch` without the usage of keyword arguments in your tests and
         
     | 
| 
       8 
8 
     | 
    
         
             
                  # change them to use keyword args.  This cop only applies to Rails >= 5 .
         
     | 
| 
       9 
     | 
    
         
            -
                  # If you are  
     | 
| 
      
 9 
     | 
    
         
            +
                  # If you are running Rails < 5 you should disable the
         
     | 
| 
       10 
10 
     | 
    
         
             
                  # Rails/HttpPositionalArguments cop or set your TargetRailsVersion in your
         
     | 
| 
       11 
11 
     | 
    
         
             
                  # .rubocop.yml file to 4.0, etc.
         
     | 
| 
       12 
12 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -28,9 +28,9 @@ module RuboCop 
     | 
|
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                    minimum_target_rails_version 5.0
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                    def_node_matcher :http_request?, <<- 
     | 
| 
      
 31 
     | 
    
         
            +
                    def_node_matcher :http_request?, <<-PATTERN
         
     | 
| 
       32 
32 
     | 
    
         
             
                      (send nil {#{HTTP_METHODS.map(&:inspect).join(' ')}} !nil $_data ...)
         
     | 
| 
       33 
     | 
    
         
            -
                     
     | 
| 
      
 33 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       36 
36 
     | 
    
         
             
                      data = http_request?(node)
         
     | 
| 
         @@ -39,7 +39,7 @@ module RuboCop 
     | 
|
| 
       39 
39 
     | 
    
         
             
                      return if data.nil?
         
     | 
| 
       40 
40 
     | 
    
         
             
                      return unless needs_conversion?(data)
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                      add_offense(node,  
     | 
| 
      
 42 
     | 
    
         
            +
                      add_offense(node, :selector, format(MSG, node.method_name))
         
     | 
| 
       43 
43 
     | 
    
         
             
                    end
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
                    # @return [Boolean] true if the line needs to be converted
         
     | 
| 
         @@ -81,7 +81,7 @@ module RuboCop 
     | 
|
| 
       81 
81 
     | 
    
         
             
                    # @return lambda of auto correct procedure
         
     | 
| 
       82 
82 
     | 
    
         
             
                    # the result should look like:
         
     | 
| 
       83 
83 
     | 
    
         
             
                    #     get :new, params: { user_id: @user.id }, headers: {}
         
     | 
| 
       84 
     | 
    
         
            -
                    # the http_method is the method  
     | 
| 
      
 84 
     | 
    
         
            +
                    # the http_method is the method used to call the controller
         
     | 
| 
       85 
85 
     | 
    
         
             
                    # the controller node can be a symbol, method, object or string
         
     | 
| 
       86 
86 
     | 
    
         
             
                    # that represents the path/action on the Rails controller
         
     | 
| 
       87 
87 
     | 
    
         
             
                    # the data is the http parameters and environment sent in
         
     | 
| 
         @@ -34,7 +34,7 @@ module RuboCop 
     | 
|
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                      return unless offense?(node)
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                      add_offense(node 
     | 
| 
      
 37 
     | 
    
         
            +
                      add_offense(node)
         
     | 
| 
       38 
38 
     | 
    
         
             
                    end
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
                    private
         
     | 
| 
         @@ -77,7 +77,7 @@ module RuboCop 
     | 
|
| 
       77 
77 
     | 
    
         
             
                    end
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
                    def singular_receiver?(number)
         
     | 
| 
       80 
     | 
    
         
            -
                      number == 1
         
     | 
| 
      
 80 
     | 
    
         
            +
                      number.abs == 1
         
     | 
| 
       81 
81 
     | 
    
         
             
                    end
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
       83 
83 
     | 
    
         
             
                    def plural_receiver?(number)
         
     | 
| 
         @@ -33,7 +33,7 @@ module RuboCop 
     | 
|
| 
       33 
33 
     | 
    
         
             
                      referer?(node) do
         
     | 
| 
       34 
34 
     | 
    
         
             
                        return unless node.method?(wrong_method_name)
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                        add_offense(node.source_range, node.source_range 
     | 
| 
      
 36 
     | 
    
         
            +
                        add_offense(node.source_range, node.source_range)
         
     | 
| 
       37 
37 
     | 
    
         
             
                      end
         
     | 
| 
       38 
38 
     | 
    
         
             
                    end
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
         @@ -43,7 +43,7 @@ module RuboCop 
     | 
|
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
                    private
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                    def message
         
     | 
| 
      
 46 
     | 
    
         
            +
                    def message(_node)
         
     | 
| 
       47 
47 
     | 
    
         
             
                      format(MSG, style, wrong_method_name)
         
     | 
| 
       48 
48 
     | 
    
         
             
                    end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
         @@ -131,29 +131,29 @@ module RuboCop 
     | 
|
| 
       131 
131 
     | 
    
         
             
                      change change_default remove
         
     | 
| 
       132 
132 
     | 
    
         
             
                    ].freeze
         
     | 
| 
       133 
133 
     | 
    
         | 
| 
       134 
     | 
    
         
            -
                    def_node_matcher :irreversible_schema_statement_call, <<- 
     | 
| 
      
 134 
     | 
    
         
            +
                    def_node_matcher :irreversible_schema_statement_call, <<-PATTERN
         
     | 
| 
       135 
135 
     | 
    
         
             
                      (send nil ${:change_table_comment :execute :remove_belongs_to} ...)
         
     | 
| 
       136 
     | 
    
         
            -
                     
     | 
| 
      
 136 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       137 
137 
     | 
    
         | 
| 
       138 
     | 
    
         
            -
                    def_node_matcher :drop_table_call, <<- 
     | 
| 
      
 138 
     | 
    
         
            +
                    def_node_matcher :drop_table_call, <<-PATTERN
         
     | 
| 
       139 
139 
     | 
    
         
             
                      (send nil :drop_table ...)
         
     | 
| 
       140 
     | 
    
         
            -
                     
     | 
| 
      
 140 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       141 
141 
     | 
    
         | 
| 
       142 
     | 
    
         
            -
                    def_node_matcher :change_column_default_call, <<- 
     | 
| 
      
 142 
     | 
    
         
            +
                    def_node_matcher :change_column_default_call, <<-PATTERN
         
     | 
| 
       143 
143 
     | 
    
         
             
                      (send nil :change_column_default _ _ $...)
         
     | 
| 
       144 
     | 
    
         
            -
                     
     | 
| 
      
 144 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       145 
145 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
                    def_node_matcher :remove_column_call, <<- 
     | 
| 
      
 146 
     | 
    
         
            +
                    def_node_matcher :remove_column_call, <<-PATTERN
         
     | 
| 
       147 
147 
     | 
    
         
             
                      (send nil :remove_column $...)
         
     | 
| 
       148 
     | 
    
         
            -
                     
     | 
| 
      
 148 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
                    def_node_matcher :remove_foreign_key_call, <<- 
     | 
| 
      
 150 
     | 
    
         
            +
                    def_node_matcher :remove_foreign_key_call, <<-PATTERN
         
     | 
| 
       151 
151 
     | 
    
         
             
                      (send nil :remove_foreign_key _ $_)
         
     | 
| 
       152 
     | 
    
         
            -
                     
     | 
| 
      
 152 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       153 
153 
     | 
    
         | 
| 
       154 
     | 
    
         
            -
                    def_node_matcher :change_table_call, <<- 
     | 
| 
      
 154 
     | 
    
         
            +
                    def_node_matcher :change_table_call, <<-PATTERN
         
     | 
| 
       155 
155 
     | 
    
         
             
                      (send nil :change_table $_ ...)
         
     | 
| 
       156 
     | 
    
         
            -
                     
     | 
| 
      
 156 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       157 
157 
     | 
    
         | 
| 
       158 
158 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       159 
159 
     | 
    
         
             
                      return unless within_change_method?(node)
         
     | 
| 
         @@ -56,7 +56,7 @@ module RuboCop 
     | 
|
| 
       56 
56 
     | 
    
         
             
                    end
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                    def after_leaving_scope(scope, _variable_table)
         
     | 
| 
       59 
     | 
    
         
            -
                      scope.variables. 
     | 
| 
      
 59 
     | 
    
         
            +
                      scope.variables.each_value do |variable|
         
     | 
| 
       60 
60 
     | 
    
         
             
                        variable.assignments.each do |assignment|
         
     | 
| 
       61 
61 
     | 
    
         
             
                          check_assignment(assignment)
         
     | 
| 
       62 
62 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -70,7 +70,7 @@ module RuboCop 
     | 
|
| 
       70 
70 
     | 
    
         
             
                      return unless expected_signature?(node)
         
     | 
| 
       71 
71 
     | 
    
         
             
                      return if persisted_referenced?(assignment)
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                      add_offense(node,  
     | 
| 
      
 73 
     | 
    
         
            +
                      add_offense(node, :selector,
         
     | 
| 
       74 
74 
     | 
    
         
             
                                  format(CREATE_MSG,
         
     | 
| 
       75 
75 
     | 
    
         
             
                                         "#{node.method_name}!",
         
     | 
| 
       76 
76 
     | 
    
         
             
                                         node.method_name.to_s,
         
     | 
| 
         @@ -84,7 +84,7 @@ module RuboCop 
     | 
|
| 
       84 
84 
     | 
    
         
             
                      return if check_used_in_conditional(node)
         
     | 
| 
       85 
85 
     | 
    
         
             
                      return if last_call_of_method?(node)
         
     | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
                      add_offense(node,  
     | 
| 
      
 87 
     | 
    
         
            +
                      add_offense(node, :selector,
         
     | 
| 
       88 
88 
     | 
    
         
             
                                  format(MSG,
         
     | 
| 
       89 
89 
     | 
    
         
             
                                         "#{node.method_name}!",
         
     | 
| 
       90 
90 
     | 
    
         
             
                                         node.method_name.to_s))
         
     | 
| 
         @@ -121,7 +121,7 @@ module RuboCop 
     | 
|
| 
       121 
121 
     | 
    
         
             
                      return false unless conditional?(node)
         
     | 
| 
       122 
122 
     | 
    
         | 
| 
       123 
123 
     | 
    
         
             
                      unless MODIFY_PERSIST_METHODS.include?(node.method_name)
         
     | 
| 
       124 
     | 
    
         
            -
                        add_offense(node,  
     | 
| 
      
 124 
     | 
    
         
            +
                        add_offense(node, :selector,
         
     | 
| 
       125 
125 
     | 
    
         
             
                                    format(CREATE_CONDITIONAL_MSG,
         
     | 
| 
       126 
126 
     | 
    
         
             
                                           node.method_name.to_s))
         
     | 
| 
       127 
127 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -130,8 +130,10 @@ module RuboCop 
     | 
|
| 
       130 
130 
     | 
    
         
             
                    end
         
     | 
| 
       131 
131 
     | 
    
         | 
| 
       132 
132 
     | 
    
         
             
                    def conditional?(node)
         
     | 
| 
       133 
     | 
    
         
            -
                      node.parent && ( 
     | 
| 
       134 
     | 
    
         
            -
                         
     | 
| 
      
 133 
     | 
    
         
            +
                      node.parent && (
         
     | 
| 
      
 134 
     | 
    
         
            +
                        node.parent.if_type? || node.parent.case_type? ||
         
     | 
| 
      
 135 
     | 
    
         
            +
                        node.parent.or_type? || node.parent.and_type?
         
     | 
| 
      
 136 
     | 
    
         
            +
                      )
         
     | 
| 
       135 
137 
     | 
    
         
             
                    end
         
     | 
| 
       136 
138 
     | 
    
         | 
| 
       137 
139 
     | 
    
         
             
                    def last_call_of_method?(node)
         
     | 
| 
         @@ -14,9 +14,9 @@ module RuboCop 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  class Eval < Cop
         
     | 
| 
       15 
15 
     | 
    
         
             
                    MSG = 'The use of `eval` is a serious security risk.'.freeze
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                    def_node_matcher :eval?, <<- 
     | 
| 
      
 17 
     | 
    
         
            +
                    def_node_matcher :eval?, <<-PATTERN
         
     | 
| 
       18 
18 
     | 
    
         
             
                      (send {nil (send nil :binding)} :eval $!str ...)
         
     | 
| 
       19 
     | 
    
         
            -
                     
     | 
| 
      
 19 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       22 
22 
     | 
    
         
             
                      eval?(node) do |code|
         
     | 
| 
         @@ -25,9 +25,9 @@ module RuboCop 
     | 
|
| 
       25 
25 
     | 
    
         
             
                  class JSONLoad < Cop
         
     | 
| 
       26 
26 
     | 
    
         
             
                    MSG = 'Prefer `JSON.parse` over `JSON.%s`.'.freeze
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                    def_node_matcher :json_load, <<- 
     | 
| 
      
 28 
     | 
    
         
            +
                    def_node_matcher :json_load, <<-PATTERN
         
     | 
| 
       29 
29 
     | 
    
         
             
                      (send (const {nil cbase} :JSON) ${:load :restore} ...)
         
     | 
| 
       30 
     | 
    
         
            -
                     
     | 
| 
      
 30 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       33 
33 
     | 
    
         
             
                      json_load(node) do |method|
         
     | 
| 
         @@ -21,10 +21,10 @@ module RuboCop 
     | 
|
| 
       21 
21 
     | 
    
         
             
                  class MarshalLoad < Cop
         
     | 
| 
       22 
22 
     | 
    
         
             
                    MSG = 'Avoid using `Marshal.%s`.'.freeze
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                    def_node_matcher :marshal_load, <<- 
     | 
| 
      
 24 
     | 
    
         
            +
                    def_node_matcher :marshal_load, <<-PATTERN
         
     | 
| 
       25 
25 
     | 
    
         
             
                      (send (const {nil cbase} :Marshal) ${:load :restore}
         
     | 
| 
       26 
26 
     | 
    
         
             
                      !(send (const {nil cbase} :Marshal) :dump ...))
         
     | 
| 
       27 
     | 
    
         
            -
                     
     | 
| 
      
 27 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       30 
30 
     | 
    
         
             
                      marshal_load(node) do |method|
         
     | 
| 
         @@ -18,9 +18,9 @@ module RuboCop 
     | 
|
| 
       18 
18 
     | 
    
         
             
                  class YAMLLoad < Cop
         
     | 
| 
       19 
19 
     | 
    
         
             
                    MSG = 'Prefer using `YAML.safe_load` over `YAML.load`.'.freeze
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                    def_node_matcher :yaml_load, <<- 
     | 
| 
      
 21 
     | 
    
         
            +
                    def_node_matcher :yaml_load, <<-PATTERN
         
     | 
| 
       22 
22 
     | 
    
         
             
                      (send (const {nil cbase} :YAML) :load ...)
         
     | 
| 
       23 
     | 
    
         
            -
                     
     | 
| 
      
 23 
     | 
    
         
            +
                    PATTERN
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       26 
26 
     | 
    
         
             
                      yaml_load(node) do
         
     | 
| 
         @@ -3,10 +3,30 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module RuboCop
         
     | 
| 
       4 
4 
     | 
    
         
             
              module Cop
         
     | 
| 
       5 
5 
     | 
    
         
             
                module Style
         
     | 
| 
       6 
     | 
    
         
            -
                  # This cop  
     | 
| 
       7 
     | 
    
         
            -
                  #  
     | 
| 
       8 
     | 
    
         
            -
                  #  
     | 
| 
       9 
     | 
    
         
            -
                  # 
     | 
| 
      
 6 
     | 
    
         
            +
                  # This cop enforces the use of either `#alias` or `#alias_method`
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # depending on configuration.
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # It also flags uses of `alias :symbol` rather than `alias bareword`.
         
     | 
| 
      
 9 
     | 
    
         
            +
                  #
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # @example
         
     | 
| 
      
 11 
     | 
    
         
            +
                  #
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #   # EnforcedStyle: prefer_alias
         
     | 
| 
      
 13 
     | 
    
         
            +
                  #
         
     | 
| 
      
 14 
     | 
    
         
            +
                  #   # good
         
     | 
| 
      
 15 
     | 
    
         
            +
                  #   alias bar foo
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #
         
     | 
| 
      
 17 
     | 
    
         
            +
                  #   # bad
         
     | 
| 
      
 18 
     | 
    
         
            +
                  #   alias_method :bar, :foo
         
     | 
| 
      
 19 
     | 
    
         
            +
                  #   alias :bar :foo
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # @example
         
     | 
| 
      
 22 
     | 
    
         
            +
                  #
         
     | 
| 
      
 23 
     | 
    
         
            +
                  #   # EnforcedStyle: prefer_alias_method
         
     | 
| 
      
 24 
     | 
    
         
            +
                  #
         
     | 
| 
      
 25 
     | 
    
         
            +
                  #   # good
         
     | 
| 
      
 26 
     | 
    
         
            +
                  #   alias_method :bar, :foo
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #   # bad
         
     | 
| 
      
 29 
     | 
    
         
            +
                  #   alias bar foo
         
     | 
| 
       10 
30 
     | 
    
         
             
                  class Alias < Cop
         
     | 
| 
       11 
31 
     | 
    
         
             
                    include ConfigurableEnforcedStyle
         
     | 
| 
       12 
32 
     | 
    
         | 
| 
         @@ -16,34 +36,31 @@ module RuboCop 
     | 
|
| 
       16 
36 
     | 
    
         | 
| 
       17 
37 
     | 
    
         
             
                    def on_send(node)
         
     | 
| 
       18 
38 
     | 
    
         
             
                      return unless node.command?(:alias_method)
         
     | 
| 
       19 
     | 
    
         
            -
                      return  
     | 
| 
       20 
     | 
    
         
            -
                      return if scope_type(node) == :dynamic
         
     | 
| 
      
 39 
     | 
    
         
            +
                      return unless style == :prefer_alias && alias_keyword_possible?(node)
         
     | 
| 
       21 
40 
     | 
    
         | 
| 
       22 
41 
     | 
    
         
             
                      msg = format(MSG_ALIAS_METHOD, lexical_scope_type(node))
         
     | 
| 
       23 
42 
     | 
    
         
             
                      add_offense(node, :selector, msg)
         
     | 
| 
       24 
43 
     | 
    
         
             
                    end
         
     | 
| 
       25 
44 
     | 
    
         | 
| 
       26 
45 
     | 
    
         
             
                    def on_alias(node)
         
     | 
| 
       27 
     | 
    
         
            -
                       
     | 
| 
       28 
     | 
    
         
            -
                      return if node.each_child_node(:gvar).any?
         
     | 
| 
       29 
     | 
    
         
            -
                      # alias_method can't be used in instance_eval blocks
         
     | 
| 
       30 
     | 
    
         
            -
                      scope_type = scope_type(node)
         
     | 
| 
       31 
     | 
    
         
            -
                      return if scope_type == :instance_eval
         
     | 
| 
      
 46 
     | 
    
         
            +
                      return unless alias_method_possible?(node)
         
     | 
| 
       32 
47 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                      if scope_type == :dynamic || style == :prefer_alias_method
         
     | 
| 
      
 48 
     | 
    
         
            +
                      if scope_type(node) == :dynamic || style == :prefer_alias_method
         
     | 
| 
       34 
49 
     | 
    
         
             
                        add_offense(node, :keyword, MSG_ALIAS)
         
     | 
| 
       35 
50 
     | 
    
         
             
                      elsif node.children.none? { |arg| bareword?(arg) }
         
     | 
| 
       36 
51 
     | 
    
         
             
                        add_offense_for_args(node)
         
     | 
| 
       37 
52 
     | 
    
         
             
                      end
         
     | 
| 
       38 
53 
     | 
    
         
             
                    end
         
     | 
| 
       39 
54 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                     
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                       
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 55 
     | 
    
         
            +
                    private
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                    def alias_keyword_possible?(node)
         
     | 
| 
      
 58 
     | 
    
         
            +
                      scope_type(node) != :dynamic && node.arguments.all?(&:sym_type?)
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    def alias_method_possible?(node)
         
     | 
| 
      
 62 
     | 
    
         
            +
                      scope_type(node) != :instance_eval &&
         
     | 
| 
      
 63 
     | 
    
         
            +
                        node.children.none?(&:gvar_type?)
         
     | 
| 
       47 
64 
     | 
    
         
             
                    end
         
     | 
| 
       48 
65 
     | 
    
         | 
| 
       49 
66 
     | 
    
         
             
                    def autocorrect(node)
         
     | 
| 
         @@ -56,7 +73,14 @@ module RuboCop 
     | 
|
| 
       56 
73 
     | 
    
         
             
                      end
         
     | 
| 
       57 
74 
     | 
    
         
             
                    end
         
     | 
| 
       58 
75 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                     
     | 
| 
      
 76 
     | 
    
         
            +
                    def add_offense_for_args(node)
         
     | 
| 
      
 77 
     | 
    
         
            +
                      existing_args  = node.children.map(&:source).join(' ')
         
     | 
| 
      
 78 
     | 
    
         
            +
                      preferred_args = node.children.map { |a| a.source[1..-1] }.join(' ')
         
     | 
| 
      
 79 
     | 
    
         
            +
                      arg_ranges     = node.children.map(&:source_range)
         
     | 
| 
      
 80 
     | 
    
         
            +
                      msg            = format(MSG_SYMBOL_ARGS, preferred_args,
         
     | 
| 
      
 81 
     | 
    
         
            +
                                              existing_args)
         
     | 
| 
      
 82 
     | 
    
         
            +
                      add_offense(node, arg_ranges.reduce(&:join), msg)
         
     | 
| 
      
 83 
     | 
    
         
            +
                    end
         
     | 
| 
       60 
84 
     | 
    
         | 
| 
       61 
85 
     | 
    
         
             
                    # In this expression, will `self` be the same as the innermost enclosing
         
     | 
| 
       62 
86 
     | 
    
         
             
                    # class or module block (:lexical)? Or will it be something else
         
     |