pry 0.10.4 → 0.14.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +439 -16
  3. data/LICENSE +1 -1
  4. data/README.md +362 -302
  5. data/bin/pry +4 -7
  6. data/lib/pry/basic_object.rb +10 -0
  7. data/lib/pry/block_command.rb +22 -0
  8. data/lib/pry/class_command.rb +194 -0
  9. data/lib/pry/cli.rb +84 -97
  10. data/lib/pry/code/code_file.rb +37 -26
  11. data/lib/pry/code/code_range.rb +7 -5
  12. data/lib/pry/code/loc.rb +26 -13
  13. data/lib/pry/code.rb +41 -32
  14. data/lib/pry/code_object.rb +53 -28
  15. data/lib/pry/color_printer.rb +46 -35
  16. data/lib/pry/command.rb +197 -369
  17. data/lib/pry/command_set.rb +89 -114
  18. data/lib/pry/command_state.rb +31 -0
  19. data/lib/pry/commands/amend_line.rb +86 -82
  20. data/lib/pry/commands/bang.rb +18 -14
  21. data/lib/pry/commands/bang_pry.rb +15 -11
  22. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  23. data/lib/pry/commands/cat/exception_formatter.rb +85 -72
  24. data/lib/pry/commands/cat/file_formatter.rb +56 -46
  25. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  26. data/lib/pry/commands/cat.rb +62 -54
  27. data/lib/pry/commands/cd.rb +40 -35
  28. data/lib/pry/commands/change_inspector.rb +29 -22
  29. data/lib/pry/commands/change_prompt.rb +48 -23
  30. data/lib/pry/commands/clear_screen.rb +20 -0
  31. data/lib/pry/commands/code_collector.rb +148 -131
  32. data/lib/pry/commands/disable_pry.rb +23 -19
  33. data/lib/pry/commands/easter_eggs.rb +23 -34
  34. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  35. data/lib/pry/commands/edit/file_and_line_locator.rb +34 -23
  36. data/lib/pry/commands/edit.rb +185 -157
  37. data/lib/pry/commands/exit.rb +40 -35
  38. data/lib/pry/commands/exit_all.rb +24 -20
  39. data/lib/pry/commands/exit_program.rb +20 -16
  40. data/lib/pry/commands/find_method.rb +168 -162
  41. data/lib/pry/commands/fix_indent.rb +16 -12
  42. data/lib/pry/commands/help.rb +140 -133
  43. data/lib/pry/commands/hist.rb +151 -149
  44. data/lib/pry/commands/import_set.rb +20 -15
  45. data/lib/pry/commands/jump_to.rb +25 -21
  46. data/lib/pry/commands/list_inspectors.rb +35 -28
  47. data/lib/pry/commands/ls/constants.rb +59 -31
  48. data/lib/pry/commands/ls/formatter.rb +42 -36
  49. data/lib/pry/commands/ls/globals.rb +38 -36
  50. data/lib/pry/commands/ls/grep.rb +17 -15
  51. data/lib/pry/commands/ls/instance_vars.rb +29 -28
  52. data/lib/pry/commands/ls/interrogatable.rb +18 -12
  53. data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
  54. data/lib/pry/commands/ls/local_names.rb +26 -24
  55. data/lib/pry/commands/ls/local_vars.rb +38 -30
  56. data/lib/pry/commands/ls/ls_entity.rb +47 -52
  57. data/lib/pry/commands/ls/methods.rb +49 -51
  58. data/lib/pry/commands/ls/methods_helper.rb +46 -42
  59. data/lib/pry/commands/ls/self_methods.rb +23 -21
  60. data/lib/pry/commands/ls.rb +124 -103
  61. data/lib/pry/commands/nesting.rb +21 -17
  62. data/lib/pry/commands/play.rb +92 -82
  63. data/lib/pry/commands/pry_backtrace.rb +22 -17
  64. data/lib/pry/commands/pry_version.rb +15 -11
  65. data/lib/pry/commands/raise_up.rb +33 -27
  66. data/lib/pry/commands/reload_code.rb +60 -48
  67. data/lib/pry/commands/reset.rb +16 -12
  68. data/lib/pry/commands/ri.rb +57 -42
  69. data/lib/pry/commands/save_file.rb +45 -43
  70. data/lib/pry/commands/shell_command.rb +56 -29
  71. data/lib/pry/commands/shell_mode.rb +22 -18
  72. data/lib/pry/commands/show_doc.rb +80 -70
  73. data/lib/pry/commands/show_info.rb +193 -160
  74. data/lib/pry/commands/show_input.rb +16 -11
  75. data/lib/pry/commands/show_source.rb +110 -42
  76. data/lib/pry/commands/stat.rb +35 -31
  77. data/lib/pry/commands/switch_to.rb +21 -15
  78. data/lib/pry/commands/toggle_color.rb +20 -16
  79. data/lib/pry/commands/watch_expression/expression.rb +32 -27
  80. data/lib/pry/commands/watch_expression.rb +89 -84
  81. data/lib/pry/commands/whereami.rb +155 -146
  82. data/lib/pry/commands/wtf.rb +78 -40
  83. data/lib/pry/config/attributable.rb +22 -0
  84. data/lib/pry/config/lazy_value.rb +29 -0
  85. data/lib/pry/config/memoized_value.rb +34 -0
  86. data/lib/pry/config/value.rb +24 -0
  87. data/lib/pry/config.rb +310 -20
  88. data/lib/pry/control_d_handler.rb +28 -0
  89. data/lib/pry/core_extensions.rb +22 -9
  90. data/lib/pry/editor.rb +56 -34
  91. data/lib/pry/env.rb +18 -0
  92. data/lib/pry/exception_handler.rb +43 -0
  93. data/lib/pry/exceptions.rb +13 -18
  94. data/lib/pry/forwardable.rb +27 -0
  95. data/lib/pry/helpers/base_helpers.rb +20 -62
  96. data/lib/pry/helpers/command_helpers.rb +52 -62
  97. data/lib/pry/helpers/documentation_helpers.rb +21 -12
  98. data/lib/pry/helpers/options_helpers.rb +15 -8
  99. data/lib/pry/helpers/platform.rb +55 -0
  100. data/lib/pry/helpers/table.rb +44 -32
  101. data/lib/pry/helpers/text.rb +96 -85
  102. data/lib/pry/helpers.rb +3 -0
  103. data/lib/pry/history.rb +81 -55
  104. data/lib/pry/hooks.rb +60 -110
  105. data/lib/pry/indent.rb +74 -68
  106. data/lib/pry/input_completer.rb +199 -158
  107. data/lib/pry/input_lock.rb +7 -10
  108. data/lib/pry/inspector.rb +36 -24
  109. data/lib/pry/last_exception.rb +45 -45
  110. data/lib/pry/method/disowned.rb +19 -5
  111. data/lib/pry/method/patcher.rb +14 -8
  112. data/lib/pry/method/weird_method_locator.rb +79 -45
  113. data/lib/pry/method.rb +178 -124
  114. data/lib/pry/object_path.rb +37 -28
  115. data/lib/pry/output.rb +102 -16
  116. data/lib/pry/pager.rb +187 -177
  117. data/lib/pry/prompt.rb +213 -25
  118. data/lib/pry/pry_class.rb +119 -98
  119. data/lib/pry/pry_instance.rb +261 -224
  120. data/lib/pry/repl.rb +83 -29
  121. data/lib/pry/repl_file_loader.rb +27 -22
  122. data/lib/pry/ring.rb +89 -0
  123. data/lib/pry/slop/LICENSE +20 -0
  124. data/lib/pry/slop/commands.rb +190 -0
  125. data/lib/pry/slop/option.rb +210 -0
  126. data/lib/pry/slop.rb +672 -0
  127. data/lib/pry/syntax_highlighter.rb +26 -0
  128. data/lib/pry/system_command_handler.rb +17 -0
  129. data/lib/pry/testable/evalable.rb +24 -0
  130. data/lib/pry/testable/mockable.rb +22 -0
  131. data/lib/pry/testable/pry_tester.rb +88 -0
  132. data/lib/pry/testable/utility.rb +34 -0
  133. data/lib/pry/testable/variables.rb +52 -0
  134. data/lib/pry/testable.rb +68 -0
  135. data/lib/pry/version.rb +3 -1
  136. data/lib/pry/warning.rb +20 -0
  137. data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +34 -32
  138. data/lib/pry/wrapped_module.rb +67 -63
  139. data/lib/pry.rb +133 -149
  140. metadata +52 -63
  141. data/lib/pry/commands/disabled_commands.rb +0 -2
  142. data/lib/pry/commands/gem_cd.rb +0 -26
  143. data/lib/pry/commands/gem_install.rb +0 -32
  144. data/lib/pry/commands/gem_list.rb +0 -33
  145. data/lib/pry/commands/gem_open.rb +0 -29
  146. data/lib/pry/commands/gist.rb +0 -101
  147. data/lib/pry/commands/install_command.rb +0 -53
  148. data/lib/pry/commands/list_prompts.rb +0 -35
  149. data/lib/pry/commands/simple_prompt.rb +0 -22
  150. data/lib/pry/commands.rb +0 -6
  151. data/lib/pry/config/behavior.rb +0 -139
  152. data/lib/pry/config/convenience.rb +0 -25
  153. data/lib/pry/config/default.rb +0 -161
  154. data/lib/pry/history_array.rb +0 -121
  155. data/lib/pry/plugins.rb +0 -103
  156. data/lib/pry/rbx_path.rb +0 -22
  157. data/lib/pry/rubygem.rb +0 -82
  158. data/lib/pry/terminal.rb +0 -79
  159. data/lib/pry/test/helper.rb +0 -170
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #
2
4
  # {Pry::LastException} is a proxy class who wraps an Exception object for
3
5
  # {Pry#last_exception}. it extends the exception object with methods that
@@ -6,56 +8,54 @@
6
8
  # the original exception object is not modified and method calls are forwarded
7
9
  # to the wrapped exception object.
8
10
  #
9
- class Pry::LastException < BasicObject
10
- attr_accessor :bt_index
11
-
12
- def initialize(e)
13
- @e = e
14
- @bt_index = 0
15
- @file, @line = bt_source_location_for(0)
16
- end
17
-
18
- def method_missing(name, *args, &block)
19
- if @e.respond_to?(name)
20
- @e.public_send(name, *args, &block)
21
- else
22
- super
11
+ class Pry
12
+ class LastException < BasicObject
13
+ attr_accessor :bt_index
14
+
15
+ def initialize(exception)
16
+ @exception = exception
17
+ @bt_index = 0
18
+ @file, @line = bt_source_location_for(0)
23
19
  end
24
- end
25
-
26
- def respond_to_missing?(name, include_private = false)
27
- @e.respond_to?(name)
28
- end
29
20
 
30
- #
31
- # @return [String]
32
- # returns the path to a file for the current backtrace. see {#bt_index}.
33
- #
34
- def file
35
- @file
36
- end
21
+ def method_missing(name, *args, &block)
22
+ if @exception.respond_to?(name)
23
+ @exception.public_send(name, *args, &block)
24
+ else
25
+ super
26
+ end
27
+ end
37
28
 
38
- #
39
- # @return [Fixnum]
40
- # returns the line for the current backtrace. see {#bt_index}.
41
- #
42
- def line
43
- @line
44
- end
29
+ def respond_to_missing?(name, include_all = false)
30
+ @exception.respond_to?(name, include_all)
31
+ end
45
32
 
46
- # @return [Exception]
47
- # returns the wrapped exception
48
- #
49
- def wrapped_exception
50
- @e
51
- end
33
+ #
34
+ # @return [String]
35
+ # returns the path to a file for the current backtrace. see {#bt_index}.
36
+ #
37
+ attr_reader :file
38
+
39
+ #
40
+ # @return [Fixnum]
41
+ # returns the line for the current backtrace. see {#bt_index}.
42
+ #
43
+ attr_reader :line
44
+
45
+ # @return [Exception]
46
+ # returns the wrapped exception
47
+ #
48
+ def wrapped_exception
49
+ @exception
50
+ end
52
51
 
53
- def bt_source_location_for(index)
54
- backtrace[index] =~ /(.*):(\d+)/
55
- [$1, $2.to_i]
56
- end
52
+ def bt_source_location_for(index)
53
+ backtrace[index] =~ /(.*):(\d+)/
54
+ [::Regexp.last_match(1), ::Regexp.last_match(2).to_i]
55
+ end
57
56
 
58
- def inc_bt_index
59
- @bt_index = (@bt_index + 1) % backtrace.size
57
+ def inc_bt_index
58
+ @bt_index = (@bt_index + 1) % backtrace.size
59
+ end
60
60
  end
61
61
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  class Method
3
5
  # A Disowned Method is one that's been removed from the class on which it was defined.
@@ -20,8 +22,10 @@ class Pry
20
22
  #
21
23
  # @param [Object] receiver
22
24
  # @param [String] method_name
23
- def initialize(receiver, method_name, binding=nil)
24
- @receiver, @name = receiver, method_name
25
+ def initialize(receiver, method_name)
26
+ @receiver = receiver
27
+ @name = method_name
28
+ @method = nil
25
29
  end
26
30
 
27
31
  # Is the method undefined? (aka `Disowned`)
@@ -44,9 +48,19 @@ class Pry
44
48
  end
45
49
 
46
50
  # Raise a more useful error message instead of trying to forward to nil.
47
- def method_missing(meth_name, *args, &block)
48
- raise "Cannot call '#{meth_name}' on an undef'd method." if method(:name).respond_to?(meth_name)
49
- Object.instance_method(:method_missing).bind(self).call(meth_name, *args, &block)
51
+ # rubocop:disable Style/MethodMissingSuper
52
+ def method_missing(method_name, *args, &block)
53
+ if method(:name).respond_to?(method_name)
54
+ raise "Cannot call '#{method_name}' on an undef'd method."
55
+ end
56
+
57
+ method = Object.instance_method(:method_missing).bind(self)
58
+ method.call(method_name, *args, &block)
59
+ end
60
+ # rubocop:enable Style/MethodMissingSuper
61
+
62
+ def respond_to_missing?(method_name, include_private = false)
63
+ !method(:name).respond_to?(method_name) || super
50
64
  end
51
65
  end
52
66
  end
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  class Method
3
5
  class Patcher
4
6
  attr_accessor :method
5
7
 
8
+ # rubocop:disable Style/ClassVars
6
9
  @@source_cache = {}
10
+ # rubocop:enable Style/ClassVars
7
11
 
8
12
  def initialize(method)
9
13
  @method = method
@@ -42,9 +46,6 @@ class Pry
42
46
  # transation we make that not happen, which means that alias_method_chains, etc.
43
47
  # continue to work.
44
48
  #
45
- # @param [String] meth_name The method name before aliasing
46
- # @param [Module] target The owner of the method
47
-
48
49
  def with_method_transaction
49
50
  temp_name = "__pry_#{method.original_name}__"
50
51
  method = self.method
@@ -54,9 +55,12 @@ class Pry
54
55
  alias_method method.name, method.original_name
55
56
  alias_method method.original_name, temp_name
56
57
  end
57
-
58
58
  ensure
59
- method.send(:remove_method, temp_name) rescue nil
59
+ begin
60
+ method.send(:remove_method, temp_name)
61
+ rescue StandardError
62
+ nil
63
+ end
60
64
  end
61
65
 
62
66
  # Update the definition line so that it can be eval'd directly on the Method's
@@ -75,7 +79,9 @@ class Pry
75
79
  if line =~ /\Adef (?:.*?\.)?#{Regexp.escape(method.original_name)}(?=[\(\s;]|$)/
76
80
  "def #{method.original_name}#{$'}"
77
81
  else
78
- raise CommandError, "Could not find original `def #{method.original_name}` line to patch."
82
+ raise CommandError,
83
+ "Could not find original `def #{method.original_name}` line " \
84
+ "to patch."
79
85
  end
80
86
  end
81
87
 
@@ -97,7 +103,7 @@ class Pry
97
103
  def wrap_for_owner(source)
98
104
  Pry.current[:pry_owner] = method.owner
99
105
  owner_source = definition_for_owner(source)
100
- visibility_fix = "#{method.visibility.to_s} #{method.name.to_sym.inspect}"
106
+ visibility_fix = "#{method.visibility} #{method.name.to_sym.inspect}"
101
107
  "Pry.current[:pry_owner].class_eval do; #{owner_source}\n#{visibility_fix}\nend"
102
108
  end
103
109
 
@@ -116,7 +122,7 @@ class Pry
116
122
  def wrap_for_nesting(source)
117
123
  nesting = Pry::Code.from_file(method.source_file).nesting_at(method.source_line)
118
124
 
119
- (nesting + [source] + nesting.map{ "end" } + [""]).join(";")
125
+ (nesting + [source] + nesting.map { "end" } + [""]).join(";")
120
126
  rescue Pry::Indent::UnparseableNestingError
121
127
  source
122
128
  end
@@ -1,38 +1,48 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  class Method
3
-
4
5
  # This class is responsible for locating the *real* `Pry::Method`
5
6
  # object captured by a binding.
6
7
  #
7
8
  # Given a `Binding` from inside a method and a 'seed' Pry::Method object,
8
9
  # there are primarily two situations where the seed method doesn't match
9
10
  # the Binding:
10
- # 1. The Pry::Method is from a subclass 2. The Pry::Method represents a method of the same name
11
- # while the original was renamed to something else. For 1. we
12
- # search vertically up the inheritance chain,
13
- # and for 2. we search laterally along the object's method table.
11
+ # 1. The Pry::Method is from a subclass
12
+ # 2. The Pry::Method represents a method of the same name while the original
13
+ # was renamed to something else. For 1. we search vertically up the
14
+ # inheritance chain, and for 2. we search laterally along the object's
15
+ # method table.
14
16
  #
15
17
  # When we locate the method that matches the Binding we wrap it in
16
18
  # Pry::Method and return it, or return nil if we fail.
17
19
  class WeirdMethodLocator
18
20
  class << self
19
-
20
21
  # Whether the given method object matches the associated binding.
21
22
  # If the method object does not match the binding, then it's
22
23
  # most likely not the method captured by the binding, and we
23
24
  # must commence a search.
24
25
  #
25
26
  # @param [Pry::Method] method
26
- # @param [Binding] b
27
+ # @param [Binding] binding
27
28
  # @return [Boolean]
28
- def normal_method?(method, b)
29
- method && (method.source_file && method.source_range rescue false) &&
30
- File.expand_path(method.source_file) == File.expand_path(b.eval('__FILE__')) &&
31
- method.source_range.include?(b.eval('__LINE__'))
29
+ def normal_method?(method, binding)
30
+ if method && method.source_file && method.source_range
31
+ if binding.respond_to?(:source_location)
32
+ binding_file, binding_line = binding.source_location
33
+ else
34
+ binding_file = binding.eval('__FILE__')
35
+ binding_line = binding.eval('__LINE__')
36
+ end
37
+ (File.expand_path(method.source_file) == File.expand_path(binding_file)) &&
38
+ method.source_range.include?(binding_line)
39
+ end
40
+ rescue StandardError
41
+ false
32
42
  end
33
43
 
34
- def weird_method?(method, b)
35
- !normal_method?(method, b)
44
+ def weird_method?(method, binding)
45
+ !normal_method?(method, binding)
36
46
  end
37
47
  end
38
48
 
@@ -43,12 +53,13 @@ class Pry
43
53
  # @param [Binding] target The Binding that captures the method
44
54
  # we want to locate.
45
55
  def initialize(method, target)
46
- @method, @target = method, target
56
+ @method = method
57
+ @target = target
47
58
  end
48
59
 
49
60
  # @return [Pry::Method, nil] The Pry::Method that matches the
50
61
  # given binding.
51
- def get_method
62
+ def find_method
52
63
  find_method_in_superclass || find_renamed_method
53
64
  end
54
65
 
@@ -56,11 +67,16 @@ class Pry
56
67
  # This usually happens when the method captured by the Binding
57
68
  # has been subsequently deleted.
58
69
  def lost_method?
59
- !!(get_method.nil? && renamed_method_source_location)
70
+ !!(find_method.nil? && renamed_method_source_location)
60
71
  end
61
72
 
62
73
  private
63
74
 
75
+ def skip_superclass_search?
76
+ target_mod = @target.eval('self').class
77
+ target_mod.ancestors.take_while { |mod| mod != target_mod }.any?
78
+ end
79
+
64
80
  def normal_method?(method)
65
81
  self.class.normal_method?(method, target)
66
82
  end
@@ -70,50 +86,64 @@ class Pry
70
86
  end
71
87
 
72
88
  def target_file
73
- pry_file? ? target.eval('__FILE__') : File.expand_path(target.eval('__FILE__'))
89
+ file =
90
+ if target.respond_to?(:source_location)
91
+ target.source_location.first
92
+ else
93
+ target.eval('__FILE__')
94
+ end
95
+ pry_file? ? file : File.expand_path(file)
74
96
  end
75
97
 
76
98
  def target_line
77
- target.eval('__LINE__')
99
+ if target.respond_to?(:source_location)
100
+ target.source_location.last
101
+ else
102
+ target.eval('__LINE__')
103
+ end
78
104
  end
79
105
 
80
106
  def pry_file?
81
- Pry.eval_path == target.eval('__FILE__')
107
+ file =
108
+ if target.respond_to?(:source_location)
109
+ target.source_location.first
110
+ else
111
+ target.eval('__FILE__')
112
+ end
113
+ Pry.eval_path == file
82
114
  end
83
115
 
84
- # it's possible in some cases that the method we find by this approach is a sub-method of
85
- # the one we're currently in, consider:
116
+ # it's possible in some cases that the method we find by this approach is
117
+ # a sub-method of the one we're currently in, consider:
86
118
  #
87
119
  # class A; def b; binding.pry; end; end
88
120
  # class B < A; def b; super; end; end
89
121
  #
90
- # Given that we can normally find the source_range of methods, and that we know which
91
- # __FILE__ and __LINE__ the binding is at, we can hope to disambiguate these cases.
122
+ # Given that we can normally find the source_range of methods, and that we
123
+ # know which __FILE__ and __LINE__ the binding is at, we can hope to
124
+ # disambiguate these cases.
92
125
  #
93
- # This obviously won't work if the source is unavaiable for some reason, or if both
94
- # methods have the same __FILE__ and __LINE__, or if we're in rbx where b.eval('__LINE__')
95
- # is broken.
126
+ # This obviously won't work if the source is unavaiable for some reason,
127
+ # or if both methods have the same __FILE__ and __LINE__.
96
128
  #
97
129
  # @return [Pry::Method, nil] The Pry::Method representing the
98
130
  # superclass method.
99
131
  def find_method_in_superclass
100
132
  guess = method
133
+ return guess if skip_superclass_search?
101
134
 
102
135
  while guess
103
136
  # needs rescue if this is a Disowned method or a C method or something...
104
137
  # TODO: Fix up the exception handling so we don't need a bare rescue
105
- if normal_method?(guess)
106
- return guess
107
- elsif guess != guess.super
108
- guess = guess.super
109
- else
110
- break
111
- end
138
+ return guess if normal_method?(guess)
139
+ break if guess == guess.super
140
+
141
+ guess = guess.super
112
142
  end
113
143
 
114
- # Uhoh... none of the methods in the chain had the right __FILE__ and __LINE__
115
- # This may be caused by rbx https://github.com/rubinius/rubinius/issues/953,
116
- # or other unknown circumstances (TODO: we should warn the user when this happens)
144
+ # Uhoh... none of the methods in the chain had the right `__FILE__` and
145
+ # `__LINE__` due to unknown circumstances.
146
+ # TODO: we should warn the user when this happens.
117
147
  nil
118
148
  end
119
149
 
@@ -124,21 +154,23 @@ class Pry
124
154
  # @return [Pry::Method, nil] The Pry::Method representing the
125
155
  # renamed method
126
156
  def find_renamed_method
127
- return if !valid_file?(target_file)
157
+ return unless valid_file?(target_file)
158
+
128
159
  alias_name = all_methods_for(target_self).find do |v|
129
- expanded_source_location(target_self.method(v).source_location) == renamed_method_source_location
160
+ location = target_self.method(v).source_location
161
+ location && expanded_source_location(location) == renamed_method_source_location
130
162
  end
131
163
 
132
164
  alias_name && Pry::Method(target_self.method(alias_name))
133
165
  end
134
166
 
135
- def expanded_source_location(sl)
136
- return if !sl
167
+ def expanded_source_location(source_location)
168
+ return unless source_location
137
169
 
138
170
  if pry_file?
139
- sl
171
+ source_location
140
172
  else
141
- [File.expand_path(sl.first), sl.last]
173
+ [File.expand_path(source_location.first), source_location.last]
142
174
  end
143
175
  end
144
176
 
@@ -150,14 +182,16 @@ class Pry
150
182
  # @return [Array<String, Fixnum>] The `source_location` of the
151
183
  # renamed method
152
184
  def renamed_method_source_location
153
- return @original_method_source_location if defined?(@original_method_source_location)
185
+ if defined?(@original_method_source_location)
186
+ return @original_method_source_location
187
+ end
154
188
 
155
189
  source_index = lines_for_file(target_file)[0..(target_line - 1)].rindex do |v|
156
190
  Pry::Method.method_definition?(method.name, v)
157
191
  end
158
192
 
159
- @original_method_source_location = source_index &&
160
- [target_file, index_to_line_number(source_index)]
193
+ @original_method_source_location =
194
+ source_index && [target_file, index_to_line_number(source_index)]
161
195
  end
162
196
 
163
197
  def index_to_line_number(index)