pry 0.10.3 → 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 +42 -31
  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 +194 -155
  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 +156 -141
  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 -174
  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} +35 -32
  138. data/lib/pry/wrapped_module.rb +68 -63
  139. data/lib/pry.rb +133 -149
  140. metadata +58 -69
  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
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ module Testable
5
+ module Evalable
6
+ def pry_tester(*args, &block)
7
+ args.unshift(Pry.toplevel_binding) if args.empty? || args[0].is_a?(Hash)
8
+ Pry::Testable::PryTester.new(*args).tap do |t|
9
+ t.singleton_class.class_eval(&block) if block
10
+ end
11
+ end
12
+
13
+ def pry_eval(*eval_strs)
14
+ b =
15
+ if eval_strs.first.is_a?(String)
16
+ Pry.toplevel_binding
17
+ else
18
+ Pry.binding_for(eval_strs.shift)
19
+ end
20
+ pry_tester(b).eval(*eval_strs)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
4
+
5
+ class Pry
6
+ module Testable
7
+ module Mockable
8
+ def mock_command(cmd, args = [], opts = {})
9
+ output = StringIO.new
10
+ pry = Pry.new(output: output)
11
+ ret = cmd.new(opts.merge(pry_instance: pry, output: output)).call_safely(*args)
12
+ Struct.new(:output, :return).new(output.string, ret)
13
+ end
14
+
15
+ def mock_exception(*mock_backtrace)
16
+ StandardError.new.tap do |e|
17
+ e.define_singleton_method(:backtrace) { mock_backtrace }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
4
+
5
+ class Pry
6
+ module Testable
7
+ class PryTester
8
+ extend Pry::Forwardable
9
+ attr_reader :pry, :out
10
+ def_delegators :@pry, :eval_string, :eval_string=
11
+
12
+ def initialize(target = TOPLEVEL_BINDING, options = {})
13
+ @pry = Pry.new(options.merge(target: target))
14
+ @history = options[:history]
15
+ @pry.inject_sticky_locals!
16
+ reset_output
17
+ end
18
+
19
+ def eval(*strs)
20
+ reset_output
21
+ result = nil
22
+
23
+ strs.flatten.each do |str|
24
+ # Check for space prefix. See #1369.
25
+ str = "#{str.strip}\n" if str !~ /^\s\S/
26
+ @history.push str if @history
27
+
28
+ result =
29
+ if @pry.process_command(str)
30
+ last_command_result_or_output
31
+ else
32
+ # Check if this is a multiline paste.
33
+ begin
34
+ complete_expr = Pry::Code.complete_expression?(str)
35
+ rescue SyntaxError => exception
36
+ @pry.output.puts(
37
+ "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}"
38
+ )
39
+ end
40
+ @pry.evaluate_ruby(str) if complete_expr
41
+ end
42
+ end
43
+
44
+ result
45
+ end
46
+
47
+ def push(*lines)
48
+ Array(lines).flatten.each do |line|
49
+ @pry.eval(line)
50
+ end
51
+ end
52
+
53
+ def push_binding(context)
54
+ @pry.push_binding context
55
+ end
56
+
57
+ def last_output
58
+ @out.string if @out
59
+ end
60
+
61
+ def process_command(command_str)
62
+ @pry.process_command(command_str) || raise("Not a valid command")
63
+ last_command_result_or_output
64
+ end
65
+
66
+ def last_command_result
67
+ result = Pry.current[:pry_cmd_result]
68
+ result.retval if result
69
+ end
70
+
71
+ protected
72
+
73
+ def last_command_result_or_output
74
+ result = last_command_result
75
+ if result != Pry::Command::VOID_VALUE
76
+ result
77
+ else
78
+ last_output
79
+ end
80
+ end
81
+
82
+ def reset_output
83
+ @out = StringIO.new
84
+ @pry.output = @out
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tempfile'
4
+
5
+ class Pry
6
+ module Testable
7
+ module Utility
8
+ #
9
+ # Creates a Tempfile then unlinks it after the block has yielded.
10
+ #
11
+ # @yieldparam [String] file
12
+ # The path of the temp file
13
+ #
14
+ # @return [void]
15
+ #
16
+ def temp_file(ext = '.rb')
17
+ file = Tempfile.open(['pry', ext])
18
+ yield file
19
+ ensure
20
+ file.close(true) if file
21
+ end
22
+
23
+ def unindent(*args)
24
+ Pry::Helpers::CommandHelpers.unindent(*args)
25
+ end
26
+
27
+ def inner_scope
28
+ catch(:inner_scope) do
29
+ yield -> { throw(:inner_scope, self) }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ module Testable
5
+ module Variables
6
+ #
7
+ # @example
8
+ # temporary_constants(:Foo, :Bar) do
9
+ # Foo = Class.new(RuntimeError)
10
+ # Bar = Class.new(RuntimeError)
11
+ # end
12
+ # Foo # => NameError
13
+ # Bar # => NameError
14
+ #
15
+ # @param [Array<Symbol>] names
16
+ # An array of constant names that be defined by a block,
17
+ # and removed by this method afterwards.
18
+ #
19
+ # @return [void]
20
+ #
21
+ def temporary_constants(*names)
22
+ names.each do |name|
23
+ Object.remove_const name if Object.const_defined?(name)
24
+ end
25
+ yield
26
+ ensure
27
+ names.each do |name|
28
+ Object.remove_const name if Object.const_defined?(name)
29
+ end
30
+ end
31
+
32
+ #
33
+ # @param [String] name
34
+ # The name of a variable.
35
+ #
36
+ # @param [String] value
37
+ # Its value.
38
+ #
39
+ # @param [Binding] binding
40
+ # The binding object to insert a variable into.
41
+ #
42
+ # @return [void]
43
+ #
44
+ def insert_variable(name, value, binding)
45
+ Pry.current[:pry_local] = value
46
+ binding.eval("#{name} = ::Pry.current[:pry_local]")
47
+ ensure
48
+ Pry.current[:pry_local] = nil
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ # good idea ???
4
+ # if you're testing pry plugin you should require pry by yourself, no?
5
+ require 'pry' unless defined?(Pry)
6
+
7
+ class Pry
8
+ module Testable
9
+ require_relative "testable/pry_tester"
10
+ require_relative "testable/evalable"
11
+ require_relative "testable/mockable"
12
+ require_relative "testable/variables"
13
+ require_relative "testable/utility"
14
+
15
+ #
16
+ # When {Pry::Testable} is included into another module or class,
17
+ # the following modules are also included: {Pry::Testable::Mockable},
18
+ # {Pry::Testable::Evalable}, {Pry::Testable::Variables}, and
19
+ # {Pry::Testable::Utility}.
20
+ #
21
+ # @note
22
+ # Each of the included modules mentioned above may also be used
23
+ # standalone or in a pick-and-mix fashion.
24
+ #
25
+ # @param [Module] mod
26
+ # A class or module.
27
+ #
28
+ # @return [void]
29
+ #
30
+ def self.included(mod)
31
+ mod.module_eval do
32
+ include Pry::Testable::Mockable
33
+ include Pry::Testable::Evalable
34
+ include Pry::Testable::Variables
35
+ include Pry::Testable::Utility
36
+ end
37
+ end
38
+
39
+ #
40
+ # Sets various configuration options that make Pry optimal for a test
41
+ # environment, see source code for complete details.
42
+ #
43
+ # @return [void]
44
+ #
45
+ def self.set_testenv_variables
46
+ Pry.config = Pry::Config.new.merge(
47
+ color: false,
48
+ pager: false,
49
+ should_load_rc: false,
50
+ should_load_local_rc: false,
51
+ correct_indent: false,
52
+ collision_warning: false,
53
+ history_save: false,
54
+ history_load: false,
55
+ hooks: Pry::Hooks.new
56
+ )
57
+ end
58
+
59
+ #
60
+ # Reset the Pry configuration to their default values.
61
+ #
62
+ # @return [void]
63
+ #
64
+ def self.unset_testenv_variables
65
+ Pry.config = Pry::Config.new
66
+ end
67
+ end
68
+ end
data/lib/pry/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- VERSION = "0.10.3"
4
+ VERSION = '0.14.2'.freeze
3
5
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pry
4
+ # @api private
5
+ # @since v0.13.0
6
+ module Warning
7
+ # Prints a warning message with exact file and line location, similar to how
8
+ # Ruby's -W prints warnings.
9
+ #
10
+ # @param [String] message
11
+ # @return [void]
12
+ def self.warn(message)
13
+ location = caller_locations(2..2).first
14
+ path = location.path
15
+ lineno = location.lineno
16
+
17
+ Kernel.warn("#{path}:#{lineno}: warning: #{message}")
18
+ end
19
+ end
20
+ end
@@ -1,36 +1,31 @@
1
- require 'pry/helpers/documentation_helpers'
2
- require 'forwardable'
1
+ # frozen_string_literal: true
3
2
 
4
3
  class Pry
5
4
  class WrappedModule
6
-
7
5
  # This class represents a single candidate for a module/class definition.
8
6
  # It provides access to the source, documentation, line and file
9
7
  # for a monkeypatch (reopening) of a class/module.
10
8
  class Candidate
11
9
  include Pry::Helpers::DocumentationHelpers
12
10
  include Pry::CodeObject::Helpers
13
- extend Forwardable
11
+ extend Pry::Forwardable
14
12
 
15
13
  # @return [String] The file where the module definition is located.
16
14
  attr_reader :file
17
- alias_method :source_file, :file
15
+ alias source_file file
18
16
 
19
17
  # @return [Fixnum] The line where the module definition is located.
20
18
  attr_reader :line
21
- alias_method :source_line, :line
19
+ alias source_line line
22
20
 
23
21
  # Methods to delegate to associated `Pry::WrappedModule
24
22
  # instance`.
25
- private_delegates = [:lines_for_file, :method_candidates,
26
- :yard_docs?]
27
-
28
- public_delegates = [:wrapped, :module?, :class?, :name, :nonblank_name,
29
- :number_of_candidates]
23
+ private_delegates = %i[lines_for_file method_candidates yard_docs? name]
24
+ public_delegates = %i[wrapped module? class? nonblank_name
25
+ number_of_candidates]
30
26
 
31
- def_delegators :@wrapper, *(private_delegates + public_delegates)
32
- private(*private_delegates)
33
- public(*public_delegates)
27
+ def_delegators :@wrapper, *public_delegates
28
+ def_private_delegators :@wrapper, *private_delegates
34
29
 
35
30
  # @raise [Pry::CommandError] If `rank` is out of bounds.
36
31
  # @param [Pry::WrappedModule] wrapper The associated
@@ -45,10 +40,15 @@ class Pry
45
40
 
46
41
  if number_of_candidates <= 0
47
42
  raise CommandError, "Cannot find a definition for #{name} module!"
48
- elsif rank > (number_of_candidates - 1)
49
- raise CommandError, "No such module candidate. Allowed candidates range is from 0 to #{number_of_candidates - 1}"
50
43
  end
51
44
 
45
+ if rank > (number_of_candidates - 1)
46
+ raise CommandError,
47
+ "No such module candidate. Allowed candidates range is " \
48
+ "from 0 to #{number_of_candidates - 1}"
49
+ end
50
+
51
+ @source = @source_location = nil
52
52
  @rank = rank
53
53
  @file, @line = source_location
54
54
  end
@@ -60,16 +60,17 @@ class Pry
60
60
  return nil if file.nil?
61
61
  return @source if @source
62
62
 
63
- @source = strip_leading_whitespace(Pry::Code.from_file(file).expression_at(line, number_of_lines_in_first_chunk))
63
+ @source ||= strip_leading_whitespace(
64
+ Pry::Code.from_file(file).expression_at(line, number_of_lines_in_first_chunk)
65
+ )
64
66
  end
65
67
 
66
68
  # @raise [Pry::CommandError] If documentation cannot be found.
67
69
  # @return [String] The documentation for the candidate.
68
70
  def doc
69
71
  return nil if file.nil?
70
- return @doc if @doc
71
72
 
72
- @doc = get_comment_content(Pry::Code.from_file(file).comment_describing(line))
73
+ @doc ||= get_comment_content(Pry::Code.from_file(file).comment_describing(line))
73
74
  end
74
75
 
75
76
  # @return [Array, nil] A `[String, Fixnum]` pair representing the
@@ -79,9 +80,9 @@ class Pry
79
80
  return @source_location if @source_location
80
81
 
81
82
  file, line = first_method_source_location
82
- return nil if !file.is_a?(String)
83
+ return nil unless file.is_a?(String)
83
84
 
84
- @source_location = [file, first_line_of_module_definition(file, line)]
85
+ @source_location = [file, first_line_of_module_definition(file, line)]
85
86
  rescue Pry::RescuableException
86
87
  nil
87
88
  end
@@ -97,14 +98,15 @@ class Pry
97
98
  # line number is one-indexed.
98
99
  def first_line_of_module_definition(file, line)
99
100
  searchable_lines = lines_for_file(file)[0..(line - 2)]
100
- searchable_lines.rindex { |v| class_regexes.any? { |r| r =~ v } } + 1
101
+ searchable_lines.rindex { |v| module_definition_first_line?(v) } + 1
101
102
  end
102
103
 
103
- def class_regexes
104
+ def module_definition_first_line?(line)
104
105
  mod_type_string = wrapped.class.to_s.downcase
105
- [/^\s*#{mod_type_string}\s+(?:(?:\w*)::)*?#{wrapped.name.split(/::/).last}/,
106
- /^\s*(::)?#{wrapped.name.split(/::/).last}\s*?=\s*?#{wrapped.class}/,
107
- /^\s*(::)?#{wrapped.name.split(/::/).last}\.(class|instance)_eval/]
106
+ wrapped_name_last = wrapped.name.split(/::/).last
107
+ /(^|=)\s*#{mod_type_string}\s+(?:(?:\w*)::)*?#{wrapped_name_last}/ =~ line ||
108
+ /^\s*(::)?#{wrapped_name_last}\s*?=\s*?#{wrapped.class}/ =~ line ||
109
+ /^\s*(::)?#{wrapped_name_last}\.(class|instance)_eval/ =~ line
108
110
  end
109
111
 
110
112
  # This method is used by `Candidate#source_location` as a
@@ -118,14 +120,15 @@ class Pry
118
120
  # @return [Array] The source location of the last method in this
119
121
  # candidate's module definition.
120
122
  def last_method_source_location
121
- @end_method_source_location ||= method_candidates[@rank].last.source_location
123
+ @last_method_source_location ||= method_candidates[@rank].last.source_location
122
124
  end
123
125
 
124
- # Return the number of lines between the start of the class definition
125
- # and the start of the last method. We use this value so we can
126
- # quickly grab these lines from the file (without having to
127
- # check each intervening line for validity, which is expensive) speeding up source extraction.
128
- # @return [Fixum] Number of lines.
126
+ # Return the number of lines between the start of the class definition and
127
+ # the start of the last method. We use this value so we can quickly grab
128
+ # these lines from the file (without having to check each intervening line
129
+ # for validity, which is expensive) speeding up source extraction.
130
+ #
131
+ # @return [Integer] number of lines.
129
132
  def number_of_lines_in_first_chunk
130
133
  end_method_line = last_method_source_location.last
131
134