rubocop-definition_validator 0.1.1 → 0.1.2
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/lib/rubocop/cop/lint/definition_validator.rb +5 -4
 - data/lib/rubocop/definition_validator.rb +2 -1
 - data/lib/rubocop/definition_validator/change_detector.rb +1 -10
 - data/lib/rubocop/definition_validator/changed_method.rb +11 -0
 - data/lib/rubocop/definition_validator/message.rb +65 -0
 - data/lib/rubocop/definition_validator/method.rb +15 -21
 - data/lib/rubocop/definition_validator/patch.rb +52 -49
 - data/lib/rubocop/definition_validator/version.rb +1 -1
 - metadata +4 -3
 - data/lib/rubocop/definition_validator/reason.rb +0 -20
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e64054dd1e26a1402b8b3066859dde92e333008a
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e51cf35bcdc4e921b38e983dd9d0f6edf2b0681b
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: b32c56023f9a88c3baf652dd3f76afdbbf3fe5bc49dce9d6177f9c5175e484728ed43d0f0b6770b40157b6dc4a7b3ae318d9c6a51274430909d77daefbb4b317
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3b73155495975c9cdb0b1dc13007d0960ad8664478cf1b327328acefcab6f204db0730dfbb154507a8e9c2b5fb9b8741f16feadc861e040d9e1ae9b50b2b97db
         
     | 
| 
         @@ -9,17 +9,18 @@ module RuboCop 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                      msg = nil
         
     | 
| 
       11 
11 
     | 
    
         
             
                      Rubocop::DefinitionValidator::ChangeDetector.changed_methods.each do |m|
         
     | 
| 
       12 
     | 
    
         
            -
                        old, new = m 
     | 
| 
      
 12 
     | 
    
         
            +
                        old, new = m.removed, m.added
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                        next if old.name.size <= min
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                         
     | 
| 
      
 16 
     | 
    
         
            +
                        PryTestcase.pry
         
     | 
| 
      
 17 
     | 
    
         
            +
                        old_callable, *_ = old.callable?(name, args)
         
     | 
| 
       17 
18 
     | 
    
         
             
                        next unless old_callable
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                        new_callable, reason = new.callable?(name, args)
         
     | 
| 
      
 20 
     | 
    
         
            +
                        new_callable, *reason = new.callable?(name, args)
         
     | 
| 
       20 
21 
     | 
    
         
             
                        next if new_callable
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                        msg =  
     | 
| 
      
 23 
     | 
    
         
            +
                        msg = Rubocop::DefinitionValidator::Message.new(m).of(*reason)
         
     | 
| 
       23 
24 
     | 
    
         
             
                      end
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
       25 
26 
     | 
    
         
             
                      return unless msg
         
     | 
| 
         @@ -9,7 +9,8 @@ RuboCop::DefinitionValidator::Inject.defaults! 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            require 'rubocop/definition_validator/line'
         
     | 
| 
       11 
11 
     | 
    
         
             
            require 'rubocop/definition_validator/patch'
         
     | 
| 
       12 
     | 
    
         
            -
            require 'rubocop/definition_validator/ 
     | 
| 
      
 12 
     | 
    
         
            +
            require 'rubocop/definition_validator/message'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'rubocop/definition_validator/changed_method'
         
     | 
| 
       13 
14 
     | 
    
         
             
            require 'rubocop/definition_validator/method'
         
     | 
| 
       14 
15 
     | 
    
         
             
            require 'rubocop/definition_validator/change_detector'
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
         @@ -15,17 +15,8 @@ module Rubocop::DefinitionValidator::ChangeDetector 
     | 
|
| 
       15 
15 
     | 
    
         
             
                  #   {added: Method, removed: Method}
         
     | 
| 
       16 
16 
     | 
    
         
             
                  # ]
         
     | 
| 
       17 
17 
     | 
    
         
             
                  @changed_methods = patches
         
     | 
| 
       18 
     | 
    
         
            -
                    .map{|patch| patch. 
     | 
| 
      
 18 
     | 
    
         
            +
                    .map{|patch| patch.changed_methods}
         
     | 
| 
       19 
19 
     | 
    
         
             
                    .flatten
         
     | 
| 
       20 
     | 
    
         
            -
                    .map{|code|
         
     | 
| 
       21 
     | 
    
         
            -
                    code.map{|k, v|
         
     | 
| 
       22 
     | 
    
         
            -
                      begin
         
     | 
| 
       23 
     | 
    
         
            -
                        [k, Rubocop::DefinitionValidator::Method.new(v.body)]
         
     | 
| 
       24 
     | 
    
         
            -
                      rescue Rubocop::DefinitionValidator::Method::InvalidAST
         
     | 
| 
       25 
     | 
    
         
            -
                        nil
         
     | 
| 
       26 
     | 
    
         
            -
                      end
         
     | 
| 
       27 
     | 
    
         
            -
                    }.compact.to_h
         
     | 
| 
       28 
     | 
    
         
            -
                  }
         
     | 
| 
       29 
20 
     | 
    
         
             
                end
         
     | 
| 
       30 
21 
     | 
    
         
             
              end
         
     | 
| 
       31 
22 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # This class has added method, removed method, line number and file name.
         
     | 
| 
      
 2 
     | 
    
         
            +
            class Rubocop::DefinitionValidator::ChangedMethod
         
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :added, :removed, :line, :file_name
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(added_line, removed_line, lineno, fname)
         
     | 
| 
      
 6 
     | 
    
         
            +
                @added = Rubocop::DefinitionValidator::Method.new(added_line.body)
         
     | 
| 
      
 7 
     | 
    
         
            +
                @removed = Rubocop::DefinitionValidator::Method.new(removed_line.body)
         
     | 
| 
      
 8 
     | 
    
         
            +
                @line = lineno
         
     | 
| 
      
 9 
     | 
    
         
            +
                @file_name = fname
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Rubocop::DefinitionValidator::Message
         
     | 
| 
      
 2 
     | 
    
         
            +
              # @param [ChangedMethod] method
         
     | 
| 
      
 3 
     | 
    
         
            +
              def initialize(method)
         
     | 
| 
      
 4 
     | 
    
         
            +
                @method = method
         
     | 
| 
      
 5 
     | 
    
         
            +
              end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              # @param [Symbol] reason
         
     | 
| 
      
 8 
     | 
    
         
            +
              def of(reason, *args)
         
     | 
| 
      
 9 
     | 
    
         
            +
                __send__(reason, *args) + suffix
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              private
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              # @return [Proc]
         
     | 
| 
      
 16 
     | 
    
         
            +
              def method_name
         
     | 
| 
      
 17 
     | 
    
         
            +
                "#{@method.removed.name} is undefined. Did you mean? #{@method.added.name}"
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              # @param [Integer] given given args size.
         
     | 
| 
      
 21 
     | 
    
         
            +
              # @param [Integer] expected expected args size.
         
     | 
| 
      
 22 
     | 
    
         
            +
              # @return [Proc]
         
     | 
| 
      
 23 
     | 
    
         
            +
              def not_enough_norml_arguments(given, expected)
         
     | 
| 
      
 24 
     | 
    
         
            +
                n = expected - given
         
     | 
| 
      
 25 
     | 
    
         
            +
                not_enough_arg_names = @method.added.normal_params.dup.pop(n).map{|x| x[1]}
         
     | 
| 
      
 26 
     | 
    
         
            +
                "Not enough arguments. Did you forget the following arguments? [#{not_enough_arg_names.join(', ')}]"
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              # @param [Integer] given given args size.
         
     | 
| 
      
 30 
     | 
    
         
            +
              # @param [Integer] expected expected args size.
         
     | 
| 
      
 31 
     | 
    
         
            +
              # @return [Proc]
         
     | 
| 
      
 32 
     | 
    
         
            +
              def not_enough_normal_after_rest_arguments(given, expected)
         
     | 
| 
      
 33 
     | 
    
         
            +
                n = expected - given
         
     | 
| 
      
 34 
     | 
    
         
            +
                not_enough_arg_names = @method.added.normal_params_after_rest.dup.pop(n).map{|x| x[1]}
         
     | 
| 
      
 35 
     | 
    
         
            +
                "Not enough arguments. Did you forget the following arguments? [#{not_enough_arg_names.join(', ')}]"
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              def too_many_arguments
         
     | 
| 
      
 39 
     | 
    
         
            +
                'Too many arguments'
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              def kwparam_required
         
     | 
| 
      
 43 
     | 
    
         
            +
                "Keyword params is required."
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              # @param [String] got
         
     | 
| 
      
 47 
     | 
    
         
            +
              def kwparam_should_be_hash(got)
         
     | 
| 
      
 48 
     | 
    
         
            +
                "Keyword params should be a Hash. But got #{got}"
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              # @param [Array<String>] not_founds
         
     | 
| 
      
 52 
     | 
    
         
            +
              def kwparam_not_found(not_founds)
         
     | 
| 
      
 53 
     | 
    
         
            +
                "The following keyword parameters are required. But not received. [#{not_founds.join(', ')}]"
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              def unexpected_kwparam(unexpected)
         
     | 
| 
      
 57 
     | 
    
         
            +
                "The following keyword parameters are not expected. But received. [#{unexpected.join(', ')}]"
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              def suffix
         
     | 
| 
      
 63 
     | 
    
         
            +
                "\nThis method is defined at #{@method.file_name} L#{@method.line}"
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'ripper'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module Rubocop::DefinitionValidator
         
     | 
| 
      
 4 
     | 
    
         
            +
              # a method
         
     | 
| 
       4 
5 
     | 
    
         
             
              class Method
         
     | 
| 
       5 
6 
     | 
    
         
             
                class InvalidAST < ArgumentError; end
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
         @@ -47,9 +48,9 @@ module Rubocop::DefinitionValidator 
     | 
|
| 
       47 
48 
     | 
    
         | 
| 
       48 
49 
     | 
    
         
             
                # @param [Array<RuboCop::Node>] args
         
     | 
| 
       49 
50 
     | 
    
         
             
                # @return [Boolean] callable
         
     | 
| 
       50 
     | 
    
         
            -
                # @return [ 
     | 
| 
      
 51 
     | 
    
         
            +
                # @return [Object] cause
         
     | 
| 
       51 
52 
     | 
    
         
             
                def callable?(name, args)
         
     | 
| 
       52 
     | 
    
         
            -
                  return false,  
     | 
| 
      
 53 
     | 
    
         
            +
                  return false, :method_name unless name == @name
         
     | 
| 
       53 
54 
     | 
    
         | 
| 
       54 
55 
     | 
    
         
             
                  args = args.dup
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
         @@ -57,11 +58,8 @@ module Rubocop::DefinitionValidator 
     | 
|
| 
       57 
58 
     | 
    
         
             
                  normal_params_size = (normal_params || []).size
         
     | 
| 
       58 
59 
     | 
    
         
             
                  received_normal_params_size = args.shift(normal_params_size).size
         
     | 
| 
       59 
60 
     | 
    
         
             
                  unless received_normal_params_size == normal_params_size
         
     | 
| 
       60 
     | 
    
         
            -
                    return false,  
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                      normal_params_size,
         
     | 
| 
       63 
     | 
    
         
            -
                      :normal_params,
         
     | 
| 
       64 
     | 
    
         
            -
                    )
         
     | 
| 
      
 61 
     | 
    
         
            +
                    return false, :not_enough_norml_arguments, received_normal_params_size, normal_params_size
         
     | 
| 
      
 62 
     | 
    
         
            +
                    
         
     | 
| 
       65 
63 
     | 
    
         
             
                  end
         
     | 
| 
       66 
64 
     | 
    
         | 
| 
       67 
65 
     | 
    
         
             
                  if has_required_keyword_params?
         
     | 
| 
         @@ -99,11 +97,7 @@ module Rubocop::DefinitionValidator 
     | 
|
| 
       99 
97 
     | 
    
         
             
                  normal_params_after_rest_size = (normal_params_after_rest || []).size
         
     | 
| 
       100 
98 
     | 
    
         
             
                  given_normal_params_after_rest_size = args.pop(normal_params_after_rest_size).size
         
     | 
| 
       101 
99 
     | 
    
         
             
                  unless given_normal_params_after_rest_size == normal_params_after_rest_size
         
     | 
| 
       102 
     | 
    
         
            -
                    return false,  
     | 
| 
       103 
     | 
    
         
            -
                      given_normal_params_after_rest_size,
         
     | 
| 
       104 
     | 
    
         
            -
                      normal_params_after_rest_size,
         
     | 
| 
       105 
     | 
    
         
            -
                      :normal_params_after_rest
         
     | 
| 
       106 
     | 
    
         
            -
                    )
         
     | 
| 
      
 100 
     | 
    
         
            +
                    return false, :not_enough_normal_after_rest_arguments, given_normal_params_after_rest_size, normal_params_after_rest_size
         
     | 
| 
       107 
101 
     | 
    
         
             
                  end
         
     | 
| 
       108 
102 
     | 
    
         | 
| 
       109 
103 
     | 
    
         
             
                  # rest引数があれば全て呑み込むためtrue
         
     | 
| 
         @@ -112,22 +106,22 @@ module Rubocop::DefinitionValidator 
     | 
|
| 
       112 
106 
     | 
    
         
             
                  if default_value_params
         
     | 
| 
       113 
107 
     | 
    
         
             
                    return true if args.size <= default_value_params.size
         
     | 
| 
       114 
108 
     | 
    
         
             
                    # XXX: optimize message.
         
     | 
| 
       115 
     | 
    
         
            -
                    return false,  
     | 
| 
      
 109 
     | 
    
         
            +
                    return false, :too_many_arguments
         
     | 
| 
       116 
110 
     | 
    
         
             
                  end
         
     | 
| 
       117 
111 
     | 
    
         
             
                  return true if args.empty?
         
     | 
| 
       118 
     | 
    
         
            -
                  return false,  
     | 
| 
      
 112 
     | 
    
         
            +
                  return false, :too_many_arguments
         
     | 
| 
       119 
113 
     | 
    
         
             
                end
         
     | 
| 
       120 
114 
     | 
    
         | 
| 
       121 
115 
     | 
    
         
             
                def decide_with_required_keyword_params(args)
         
     | 
| 
       122 
116 
     | 
    
         
             
                  kwparam = args.pop(1)
         
     | 
| 
       123 
     | 
    
         
            -
                  usable, reason = usable_as_keyword_param?(kwparam[0])
         
     | 
| 
       124 
     | 
    
         
            -
                  return false, reason unless usable
         
     | 
| 
      
 117 
     | 
    
         
            +
                  usable, *reason = usable_as_keyword_param?(kwparam[0])
         
     | 
| 
      
 118 
     | 
    
         
            +
                  return false, *reason unless usable
         
     | 
| 
       125 
119 
     | 
    
         | 
| 
       126 
120 
     | 
    
         
             
                  return decide_rest_args(args)
         
     | 
| 
       127 
121 
     | 
    
         
             
                end
         
     | 
| 
       128 
122 
     | 
    
         | 
| 
       129 
123 
     | 
    
         
             
                def decide_with_keyword_params(args)
         
     | 
| 
       130 
     | 
    
         
            -
                  ok, _ = decide_rest_args(args.dup)
         
     | 
| 
      
 124 
     | 
    
         
            +
                  ok, *_ = decide_rest_args(args.dup)
         
     | 
| 
       131 
125 
     | 
    
         
             
                  return true if ok
         
     | 
| 
       132 
126 
     | 
    
         | 
| 
       133 
127 
     | 
    
         
             
                  return decide_with_required_keyword_params(args)
         
     | 
| 
         @@ -148,8 +142,8 @@ module Rubocop::DefinitionValidator 
     | 
|
| 
       148 
142 
     | 
    
         
             
                # @param [RuboCop::Node] arg
         
     | 
| 
       149 
143 
     | 
    
         
             
                def usable_as_keyword_param?(arg)
         
     | 
| 
       150 
144 
     | 
    
         
             
                  # should be hash
         
     | 
| 
       151 
     | 
    
         
            -
                  return false,  
     | 
| 
       152 
     | 
    
         
            -
                  return false,  
     | 
| 
      
 145 
     | 
    
         
            +
                  return false, :kwparam_required unless arg
         
     | 
| 
      
 146 
     | 
    
         
            +
                  return false, :kwparam_should_be_hash, arg.loc.expression.source unless arg.hash_type? || !arg.literal?
         
     | 
| 
       153 
147 
     | 
    
         | 
| 
       154 
148 
     | 
    
         
             
                  # should have specified keyword
         
     | 
| 
       155 
149 
     | 
    
         
             
                  return true unless arg.hash_type?
         
     | 
| 
         @@ -170,7 +164,7 @@ module Rubocop::DefinitionValidator 
     | 
|
| 
       170 
164 
     | 
    
         
             
                    not received_keyword_names.include?(name)
         
     | 
| 
       171 
165 
     | 
    
         
             
                  end
         
     | 
| 
       172 
166 
     | 
    
         
             
                  unless not_fould_requireds.empty?
         
     | 
| 
       173 
     | 
    
         
            -
                    return false,  
     | 
| 
      
 167 
     | 
    
         
            +
                    return false, :kwparam_not_found, not_fould_requireds.join(', ')
         
     | 
| 
       174 
168 
     | 
    
         
             
                  end
         
     | 
| 
       175 
169 
     | 
    
         | 
| 
       176 
170 
     | 
    
         
             
                  return true if keyword_rest_params
         
     | 
| 
         @@ -183,7 +177,7 @@ module Rubocop::DefinitionValidator 
     | 
|
| 
       183 
177 
     | 
    
         
             
                    not allowed_keyword_names.include?(name)
         
     | 
| 
       184 
178 
     | 
    
         
             
                  end
         
     | 
| 
       185 
179 
     | 
    
         
             
                  unless unexpected_keywords.empty?
         
     | 
| 
       186 
     | 
    
         
            -
                    return false,  
     | 
| 
      
 180 
     | 
    
         
            +
                    return false, :unexpected_kwparam, unexpected_keywords
         
     | 
| 
       187 
181 
     | 
    
         
             
                  end
         
     | 
| 
       188 
182 
     | 
    
         
             
                  return true
         
     | 
| 
       189 
183 
     | 
    
         
             
                end
         
     | 
| 
         @@ -3,61 +3,64 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            # The original method retuns only added lines.
         
     | 
| 
       4 
4 
     | 
    
         
             
            # However we want added and removed lines.
         
     | 
| 
       5 
5 
     | 
    
         
             
            #
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
               
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Rubocop::DefinitionValidator
         
     | 
| 
      
 7 
     | 
    
         
            +
              class Patch < GitDiffParser::Patch
         
     | 
| 
      
 8 
     | 
    
         
            +
                ADDED_LINE   = -> (line) { line.start_with?('+') && line !~ /^\+\+\+/ }
         
     | 
| 
      
 9 
     | 
    
         
            +
                REMOVED_LINE = -> (line) { line.start_with?('-') && line !~ /^\-\-\-/ }
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
                def initialize(original_patch)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @body = original_patch.body
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @file = original_patch.file
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @secure_hash = original_patch.secure_hash
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                # @return [Array<Line>] changed lines
         
     | 
| 
      
 18 
     | 
    
         
            +
                def changed_lines
         
     | 
| 
      
 19 
     | 
    
         
            +
                  line_number = 0
         
     | 
| 
      
 20 
     | 
    
         
            +
                  removed_line_offset = 0
         
     | 
| 
       15 
21 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
                  lines.each_with_index.inject([]) do |lines, (content, patch_position)|
         
     | 
| 
      
 23 
     | 
    
         
            +
                    case content
         
     | 
| 
      
 24 
     | 
    
         
            +
                    when RANGE_INFORMATION_LINE
         
     | 
| 
      
 25 
     | 
    
         
            +
                      line_number = Regexp.last_match[:line_number].to_i
         
     | 
| 
      
 26 
     | 
    
         
            +
                      removed_line_offset = 0
         
     | 
| 
      
 27 
     | 
    
         
            +
                    when ADDED_LINE
         
     | 
| 
      
 28 
     | 
    
         
            +
                      line = Rubocop::DefinitionValidator::Line.new(
         
     | 
| 
      
 29 
     | 
    
         
            +
                        content: content,
         
     | 
| 
      
 30 
     | 
    
         
            +
                        number: line_number,
         
     | 
| 
      
 31 
     | 
    
         
            +
                        patch_position: patch_position
         
     | 
| 
      
 32 
     | 
    
         
            +
                      )
         
     | 
| 
      
 33 
     | 
    
         
            +
                      lines << line
         
     | 
| 
      
 34 
     | 
    
         
            +
                      line_number += 1
         
     | 
| 
      
 35 
     | 
    
         
            +
                      removed_line_offset = 0
         
     | 
| 
      
 36 
     | 
    
         
            +
                    when REMOVED_LINE
         
     | 
| 
      
 37 
     | 
    
         
            +
                      line = Rubocop::DefinitionValidator::Line.new(
         
     | 
| 
      
 38 
     | 
    
         
            +
                        content: content,
         
     | 
| 
      
 39 
     | 
    
         
            +
                        number: line_number + removed_line_offset,
         
     | 
| 
      
 40 
     | 
    
         
            +
                        patch_position: patch_position
         
     | 
| 
      
 41 
     | 
    
         
            +
                      )
         
     | 
| 
      
 42 
     | 
    
         
            +
                      lines << line
         
     | 
| 
      
 43 
     | 
    
         
            +
                      removed_line_offset +=1
         
     | 
| 
      
 44 
     | 
    
         
            +
                    when NOT_REMOVED_LINE
         
     | 
| 
      
 45 
     | 
    
         
            +
                      line_number += 1
         
     | 
| 
      
 46 
     | 
    
         
            +
                      removed_line_offset = 0
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
       20 
48 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  case content
         
     | 
| 
       23 
     | 
    
         
            -
                  when RANGE_INFORMATION_LINE
         
     | 
| 
       24 
     | 
    
         
            -
                    line_number = Regexp.last_match[:line_number].to_i
         
     | 
| 
       25 
     | 
    
         
            -
                    removed_line_offset = 0
         
     | 
| 
       26 
     | 
    
         
            -
                  when ADDED_LINE
         
     | 
| 
       27 
     | 
    
         
            -
                    line = Rubocop::DefinitionValidator::Line.new(
         
     | 
| 
       28 
     | 
    
         
            -
                      content: content,
         
     | 
| 
       29 
     | 
    
         
            -
                      number: line_number,
         
     | 
| 
       30 
     | 
    
         
            -
                      patch_position: patch_position
         
     | 
| 
       31 
     | 
    
         
            -
                    )
         
     | 
| 
       32 
     | 
    
         
            -
                    lines << line
         
     | 
| 
       33 
     | 
    
         
            -
                    line_number += 1
         
     | 
| 
       34 
     | 
    
         
            -
                    removed_line_offset = 0
         
     | 
| 
       35 
     | 
    
         
            -
                  when REMOVED_LINE
         
     | 
| 
       36 
     | 
    
         
            -
                    line = Rubocop::DefinitionValidator::Line.new(
         
     | 
| 
       37 
     | 
    
         
            -
                      content: content,
         
     | 
| 
       38 
     | 
    
         
            -
                      number: line_number + removed_line_offset,
         
     | 
| 
       39 
     | 
    
         
            -
                      patch_position: patch_position
         
     | 
| 
       40 
     | 
    
         
            -
                    )
         
     | 
| 
       41 
     | 
    
         
            -
                    lines << line
         
     | 
| 
       42 
     | 
    
         
            -
                    removed_line_offset +=1
         
     | 
| 
       43 
     | 
    
         
            -
                  when NOT_REMOVED_LINE
         
     | 
| 
       44 
     | 
    
         
            -
                    line_number += 1
         
     | 
| 
       45 
     | 
    
         
            -
                    removed_line_offset = 0
         
     | 
| 
      
 49 
     | 
    
         
            +
                    lines
         
     | 
| 
       46 
50 
     | 
    
         
             
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
       47 
52 
     | 
    
         | 
| 
      
 53 
     | 
    
         
            +
                def changed_methods
         
     | 
| 
      
 54 
     | 
    
         
            +
                  lines = changed_lines
         
     | 
| 
       48 
55 
     | 
    
         
             
                  lines
         
     | 
| 
      
 56 
     | 
    
         
            +
                    .group_by{|l| l.number}
         
     | 
| 
      
 57 
     | 
    
         
            +
                    .select{|_, v| v.size == 2}
         
     | 
| 
      
 58 
     | 
    
         
            +
                    .select{|_, v| t = v.map(&:type); t.include?('-') && t.include?('+')}
         
     | 
| 
      
 59 
     | 
    
         
            +
                    .select{|_, v| v.all?{|x| x.content =~ /def\s+\w+/}}
         
     | 
| 
      
 60 
     | 
    
         
            +
                    .map{|line, v|
         
     | 
| 
      
 61 
     | 
    
         
            +
                      sorted = v.sort_by(&:type)
         
     | 
| 
      
 62 
     | 
    
         
            +
                      ChangedMethod.new(sorted.first, sorted.last, line, @file)
         
     | 
| 
      
 63 
     | 
    
         
            +
                    }
         
     | 
| 
       49 
64 
     | 
    
         
             
                end
         
     | 
| 
       50 
65 
     | 
    
         
             
              end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
              def changed_method_codes
         
     | 
| 
       53 
     | 
    
         
            -
                lines = changed_lines
         
     | 
| 
       54 
     | 
    
         
            -
                lines
         
     | 
| 
       55 
     | 
    
         
            -
                  .group_by{|l| l.number}
         
     | 
| 
       56 
     | 
    
         
            -
                  .values
         
     | 
| 
       57 
     | 
    
         
            -
                  .select{|l| l.size == 2}
         
     | 
| 
       58 
     | 
    
         
            -
                  .select{|l| t = l.map(&:type); t.include?('-') && t.include?('+')}
         
     | 
| 
       59 
     | 
    
         
            -
                  .select{|l| l.all?{|x| x.content =~ /def\s+\w+/}}
         
     | 
| 
       60 
     | 
    
         
            -
                  .map{|l| l.sort_by(&:type)}
         
     | 
| 
       61 
     | 
    
         
            -
                  .map{|l| {added: l.first, removed: l.last}}
         
     | 
| 
       62 
     | 
    
         
            -
              end
         
     | 
| 
       63 
66 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rubocop-definition_validator
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Masataka Kuwabara
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016-06- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-06-08 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rubocop
         
     | 
| 
         @@ -186,11 +186,12 @@ files: 
     | 
|
| 
       186 
186 
     | 
    
         
             
            - lib/rubocop/cop/lint/definition_validator.rb
         
     | 
| 
       187 
187 
     | 
    
         
             
            - lib/rubocop/definition_validator.rb
         
     | 
| 
       188 
188 
     | 
    
         
             
            - lib/rubocop/definition_validator/change_detector.rb
         
     | 
| 
      
 189 
     | 
    
         
            +
            - lib/rubocop/definition_validator/changed_method.rb
         
     | 
| 
       189 
190 
     | 
    
         
             
            - lib/rubocop/definition_validator/inject.rb
         
     | 
| 
       190 
191 
     | 
    
         
             
            - lib/rubocop/definition_validator/line.rb
         
     | 
| 
      
 192 
     | 
    
         
            +
            - lib/rubocop/definition_validator/message.rb
         
     | 
| 
       191 
193 
     | 
    
         
             
            - lib/rubocop/definition_validator/method.rb
         
     | 
| 
       192 
194 
     | 
    
         
             
            - lib/rubocop/definition_validator/patch.rb
         
     | 
| 
       193 
     | 
    
         
            -
            - lib/rubocop/definition_validator/reason.rb
         
     | 
| 
       194 
195 
     | 
    
         
             
            - lib/rubocop/definition_validator/version.rb
         
     | 
| 
       195 
196 
     | 
    
         
             
            - rubocop-definition_validator.gemspec
         
     | 
| 
       196 
197 
     | 
    
         
             
            homepage: https://github.com/actcat/rubocop-definition_validator
         
     | 
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Rubocop::DefinitionValidator::Reason
         
     | 
| 
       2 
     | 
    
         
            -
              class << self
         
     | 
| 
       3 
     | 
    
         
            -
                # @return [Proc]
         
     | 
| 
       4 
     | 
    
         
            -
                def method_name
         
     | 
| 
       5 
     | 
    
         
            -
                  -> (old, new) { "#{old.name} is undefined. Did you mean? #{new.name}" }
         
     | 
| 
       6 
     | 
    
         
            -
                end
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                # @param [Integer] given given args size.
         
     | 
| 
       9 
     | 
    
         
            -
                # @param [Integer] expected expected args size.
         
     | 
| 
       10 
     | 
    
         
            -
                # @param [Symbol] kind normal_params or normal_params_after_rest
         
     | 
| 
       11 
     | 
    
         
            -
                # @return [Proc]
         
     | 
| 
       12 
     | 
    
         
            -
                def not_enough_arguments(given, expected, kind)
         
     | 
| 
       13 
     | 
    
         
            -
                  n = expected - given
         
     | 
| 
       14 
     | 
    
         
            -
                  -> (_old, new) {
         
     | 
| 
       15 
     | 
    
         
            -
                    not_enough_arg_names = new.__send__(kind).dup.pop(n).map{|x| x[1]}
         
     | 
| 
       16 
     | 
    
         
            -
                    "Not enough arguments. Did you forget the following arguments? [#{not_enough_arg_names.join(', ')}]"
         
     | 
| 
       17 
     | 
    
         
            -
                  }
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     |