pry 0.12.2-java → 0.13.0-java

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.
Files changed (158) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +110 -1
  3. data/LICENSE +1 -1
  4. data/README.md +331 -269
  5. data/bin/pry +5 -0
  6. data/lib/pry.rb +133 -119
  7. data/lib/pry/basic_object.rb +8 -4
  8. data/lib/pry/block_command.rb +22 -0
  9. data/lib/pry/class_command.rb +194 -0
  10. data/lib/pry/cli.rb +40 -31
  11. data/lib/pry/code.rb +39 -27
  12. data/lib/pry/code/code_file.rb +28 -24
  13. data/lib/pry/code/code_range.rb +4 -2
  14. data/lib/pry/code/loc.rb +15 -8
  15. data/lib/pry/code_object.rb +40 -38
  16. data/lib/pry/color_printer.rb +47 -46
  17. data/lib/pry/command.rb +166 -369
  18. data/lib/pry/command_set.rb +76 -73
  19. data/lib/pry/command_state.rb +31 -0
  20. data/lib/pry/commands/amend_line.rb +86 -81
  21. data/lib/pry/commands/bang.rb +18 -14
  22. data/lib/pry/commands/bang_pry.rb +15 -11
  23. data/lib/pry/commands/cat.rb +61 -54
  24. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  25. data/lib/pry/commands/cat/exception_formatter.rb +71 -60
  26. data/lib/pry/commands/cat/file_formatter.rb +55 -49
  27. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  28. data/lib/pry/commands/cd.rb +40 -35
  29. data/lib/pry/commands/change_inspector.rb +29 -22
  30. data/lib/pry/commands/change_prompt.rb +44 -39
  31. data/lib/pry/commands/clear_screen.rb +16 -10
  32. data/lib/pry/commands/code_collector.rb +148 -133
  33. data/lib/pry/commands/disable_pry.rb +23 -19
  34. data/lib/pry/commands/easter_eggs.rb +19 -30
  35. data/lib/pry/commands/edit.rb +184 -161
  36. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  37. data/lib/pry/commands/edit/file_and_line_locator.rb +34 -23
  38. data/lib/pry/commands/exit.rb +39 -35
  39. data/lib/pry/commands/exit_all.rb +24 -20
  40. data/lib/pry/commands/exit_program.rb +20 -16
  41. data/lib/pry/commands/find_method.rb +168 -160
  42. data/lib/pry/commands/fix_indent.rb +16 -12
  43. data/lib/pry/commands/help.rb +140 -133
  44. data/lib/pry/commands/hist.rb +151 -150
  45. data/lib/pry/commands/import_set.rb +20 -16
  46. data/lib/pry/commands/jump_to.rb +25 -21
  47. data/lib/pry/commands/list_inspectors.rb +35 -28
  48. data/lib/pry/commands/ls.rb +124 -102
  49. data/lib/pry/commands/ls/constants.rb +59 -42
  50. data/lib/pry/commands/ls/formatter.rb +50 -46
  51. data/lib/pry/commands/ls/globals.rb +38 -34
  52. data/lib/pry/commands/ls/grep.rb +17 -13
  53. data/lib/pry/commands/ls/instance_vars.rb +29 -27
  54. data/lib/pry/commands/ls/interrogatable.rb +18 -12
  55. data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
  56. data/lib/pry/commands/ls/local_names.rb +26 -22
  57. data/lib/pry/commands/ls/local_vars.rb +38 -28
  58. data/lib/pry/commands/ls/ls_entity.rb +47 -51
  59. data/lib/pry/commands/ls/methods.rb +44 -43
  60. data/lib/pry/commands/ls/methods_helper.rb +46 -42
  61. data/lib/pry/commands/ls/self_methods.rb +23 -22
  62. data/lib/pry/commands/nesting.rb +21 -17
  63. data/lib/pry/commands/play.rb +93 -82
  64. data/lib/pry/commands/pry_backtrace.rb +24 -17
  65. data/lib/pry/commands/pry_version.rb +15 -11
  66. data/lib/pry/commands/raise_up.rb +27 -22
  67. data/lib/pry/commands/reload_code.rb +60 -48
  68. data/lib/pry/commands/reset.rb +16 -12
  69. data/lib/pry/commands/ri.rb +55 -45
  70. data/lib/pry/commands/save_file.rb +45 -43
  71. data/lib/pry/commands/shell_command.rb +51 -51
  72. data/lib/pry/commands/shell_mode.rb +21 -17
  73. data/lib/pry/commands/show_doc.rb +81 -68
  74. data/lib/pry/commands/show_info.rb +189 -171
  75. data/lib/pry/commands/show_input.rb +16 -11
  76. data/lib/pry/commands/show_source.rb +109 -45
  77. data/lib/pry/commands/stat.rb +35 -31
  78. data/lib/pry/commands/switch_to.rb +21 -15
  79. data/lib/pry/commands/toggle_color.rb +20 -16
  80. data/lib/pry/commands/watch_expression.rb +89 -86
  81. data/lib/pry/commands/watch_expression/expression.rb +32 -27
  82. data/lib/pry/commands/whereami.rb +156 -148
  83. data/lib/pry/commands/wtf.rb +75 -50
  84. data/lib/pry/config.rb +311 -25
  85. data/lib/pry/config/attributable.rb +22 -0
  86. data/lib/pry/config/lazy_value.rb +29 -0
  87. data/lib/pry/config/memoized_value.rb +34 -0
  88. data/lib/pry/config/value.rb +24 -0
  89. data/lib/pry/control_d_handler.rb +28 -0
  90. data/lib/pry/core_extensions.rb +9 -7
  91. data/lib/pry/editor.rb +48 -21
  92. data/lib/pry/env.rb +18 -0
  93. data/lib/pry/exception_handler.rb +43 -0
  94. data/lib/pry/exceptions.rb +13 -16
  95. data/lib/pry/forwardable.rb +5 -1
  96. data/lib/pry/helpers.rb +2 -0
  97. data/lib/pry/helpers/base_helpers.rb +68 -197
  98. data/lib/pry/helpers/command_helpers.rb +50 -61
  99. data/lib/pry/helpers/documentation_helpers.rb +20 -13
  100. data/lib/pry/helpers/options_helpers.rb +14 -7
  101. data/lib/pry/helpers/platform.rb +7 -5
  102. data/lib/pry/helpers/table.rb +33 -26
  103. data/lib/pry/helpers/text.rb +17 -14
  104. data/lib/pry/history.rb +48 -56
  105. data/lib/pry/hooks.rb +21 -12
  106. data/lib/pry/indent.rb +54 -50
  107. data/lib/pry/input_completer.rb +248 -230
  108. data/lib/pry/input_lock.rb +8 -9
  109. data/lib/pry/inspector.rb +36 -24
  110. data/lib/pry/last_exception.rb +45 -45
  111. data/lib/pry/method.rb +141 -94
  112. data/lib/pry/method/disowned.rb +16 -4
  113. data/lib/pry/method/patcher.rb +12 -3
  114. data/lib/pry/method/weird_method_locator.rb +68 -44
  115. data/lib/pry/object_path.rb +33 -25
  116. data/lib/pry/output.rb +121 -35
  117. data/lib/pry/pager.rb +41 -42
  118. data/lib/pry/plugins.rb +25 -8
  119. data/lib/pry/prompt.rb +123 -54
  120. data/lib/pry/pry_class.rb +61 -98
  121. data/lib/pry/pry_instance.rb +217 -215
  122. data/lib/pry/repl.rb +18 -22
  123. data/lib/pry/repl_file_loader.rb +27 -21
  124. data/lib/pry/ring.rb +11 -6
  125. data/lib/pry/slop.rb +574 -563
  126. data/lib/pry/slop/commands.rb +164 -169
  127. data/lib/pry/slop/option.rb +172 -168
  128. data/lib/pry/syntax_highlighter.rb +26 -0
  129. data/lib/pry/system_command_handler.rb +17 -0
  130. data/lib/pry/testable.rb +59 -61
  131. data/lib/pry/testable/evalable.rb +21 -12
  132. data/lib/pry/testable/mockable.rb +18 -10
  133. data/lib/pry/testable/pry_tester.rb +71 -56
  134. data/lib/pry/testable/utility.rb +29 -21
  135. data/lib/pry/testable/variables.rb +49 -43
  136. data/lib/pry/version.rb +3 -1
  137. data/lib/pry/warning.rb +27 -0
  138. data/lib/pry/wrapped_module.rb +51 -42
  139. data/lib/pry/wrapped_module/candidate.rb +21 -14
  140. metadata +31 -30
  141. data/lib/pry/commands.rb +0 -6
  142. data/lib/pry/commands/disabled_commands.rb +0 -2
  143. data/lib/pry/commands/gem_cd.rb +0 -26
  144. data/lib/pry/commands/gem_install.rb +0 -32
  145. data/lib/pry/commands/gem_list.rb +0 -33
  146. data/lib/pry/commands/gem_open.rb +0 -29
  147. data/lib/pry/commands/gem_readme.rb +0 -25
  148. data/lib/pry/commands/gem_search.rb +0 -40
  149. data/lib/pry/commands/gem_stats.rb +0 -83
  150. data/lib/pry/commands/gist.rb +0 -102
  151. data/lib/pry/commands/install_command.rb +0 -54
  152. data/lib/pry/config/behavior.rb +0 -255
  153. data/lib/pry/config/convenience.rb +0 -28
  154. data/lib/pry/config/default.rb +0 -159
  155. data/lib/pry/config/memoization.rb +0 -48
  156. data/lib/pry/platform.rb +0 -91
  157. data/lib/pry/rubygem.rb +0 -84
  158. data/lib/pry/terminal.rb +0 -91
@@ -1,4 +1,4 @@
1
- require 'pry/terminal'
1
+ # frozen_string_literal: true
2
2
 
3
3
  # A pager is an `IO`-like object that accepts text and either prints it
4
4
  # immediately, prints it one page at a time, or streams it to an external
@@ -8,10 +8,10 @@ class Pry
8
8
  class StopPaging < StandardError
9
9
  end
10
10
 
11
- attr_reader :_pry_
11
+ attr_reader :pry_instance
12
12
 
13
- def initialize(_pry_)
14
- @_pry_ = _pry_
13
+ def initialize(pry_instance)
14
+ @pry_instance = pry_instance
15
15
  end
16
16
 
17
17
  # Send the given text through the best available pager (if
@@ -33,16 +33,18 @@ class Pry
33
33
  def open
34
34
  pager = best_available
35
35
  yield pager
36
- rescue StopPaging
36
+ rescue StopPaging # rubocop:disable Lint/HandleExceptions
37
37
  ensure
38
38
  pager.close if pager
39
39
  end
40
40
 
41
41
  private
42
42
 
43
- def enabled?; !!@enabled; end
43
+ def enabled?
44
+ !!@enabled
45
+ end
44
46
 
45
- def output; @output; end
47
+ attr_reader :output
46
48
 
47
49
  # Return an instance of the "best" available pager class --
48
50
  # `SystemPager` if possible, `SimplePager` if `SystemPager` isn't
@@ -52,12 +54,12 @@ class Pry
52
54
  # you must rescue `Pry::Pager::StopPaging`. These requirements can be
53
55
  # avoided by using `.open` instead.
54
56
  def best_available
55
- if !_pry_.config.pager
56
- NullPager.new(_pry_.output)
57
+ if !pry_instance.config.pager
58
+ NullPager.new(pry_instance.output)
57
59
  elsif !SystemPager.available? || Helpers::Platform.jruby?
58
- SimplePager.new(_pry_.output)
60
+ SimplePager.new(pry_instance.output)
59
61
  else
60
- SystemPager.new(_pry_.output)
62
+ SystemPager.new(pry_instance.output)
61
63
  end
62
64
  end
63
65
 
@@ -81,17 +83,16 @@ class Pry
81
83
  @out.write str
82
84
  end
83
85
 
84
- def close
85
- end
86
+ def close; end
86
87
 
87
88
  private
88
89
 
89
90
  def height
90
- @height ||= Pry::Terminal.height!
91
+ @height ||= @out.height
91
92
  end
92
93
 
93
94
  def width
94
- @width ||= Pry::Terminal.width!
95
+ @width ||= @out.width
95
96
  end
96
97
  end
97
98
 
@@ -108,15 +109,15 @@ class Pry
108
109
  @out.print line
109
110
  @tracker.record line
110
111
 
111
- if @tracker.page?
112
- @out.print "\n"
113
- @out.print "\e[0m"
114
- @out.print "<page break> --- Press enter to continue " \
115
- "( q<enter> to break ) --- <page break>\n"
116
- raise StopPaging if Readline.readline("").chomp == "q"
112
+ next unless @tracker.page?
117
113
 
118
- @tracker.reset
119
- end
114
+ @out.print "\n"
115
+ @out.print "\e[0m"
116
+ @out.print "<page break> --- Press enter to continue " \
117
+ "( q<enter> to break ) --- <page break>\n"
118
+ raise StopPaging if Readline.readline("").chomp == "q"
119
+
120
+ @tracker.reset
120
121
  end
121
122
  end
122
123
  end
@@ -127,13 +128,11 @@ class Pry
127
128
  # buffered content.
128
129
  class SystemPager < NullPager
129
130
  def self.default_pager
130
- pager = ENV["PAGER"] || ""
131
+ pager = Pry::Env['PAGER'] || ''
131
132
 
132
133
  # Default to less, and make sure less is being passed the correct
133
134
  # options
134
- if pager.strip.empty? or pager =~ /^less\b/
135
- pager = "less -R -F -X"
136
- end
135
+ pager = "less -R -F -X" if pager.strip.empty? || pager =~ /^less\b/
137
136
 
138
137
  pager
139
138
  end
@@ -142,17 +141,18 @@ class Pry
142
141
 
143
142
  def self.available?
144
143
  if @system_pager.nil?
145
- @system_pager = begin
146
- pager_executable = default_pager.split(' ').first
147
- if Helpers::Platform.windows? || Helpers::Platform.windows_ansi?
148
- `where /Q #{pager_executable}`
149
- else
150
- `which #{pager_executable}`
144
+ @system_pager =
145
+ begin
146
+ pager_executable = default_pager.split(' ').first
147
+ if Helpers::Platform.windows? || Helpers::Platform.windows_ansi?
148
+ `where /Q #{pager_executable}`
149
+ else
150
+ `which #{pager_executable}`
151
+ end
152
+ $CHILD_STATUS.success?
153
+ rescue StandardError
154
+ false
151
155
  end
152
- $?.success?
153
- rescue
154
- false
155
- end
156
156
  else
157
157
  @system_pager
158
158
  end
@@ -170,11 +170,9 @@ class Pry
170
170
  write_to_pager str
171
171
  else
172
172
  @tracker.record str
173
- @buffer << str
173
+ @buffer += str
174
174
 
175
- if @tracker.page?
176
- write_to_pager @buffer
177
- end
175
+ write_to_pager @buffer if @tracker.page?
178
176
  end
179
177
  rescue Errno::EPIPE
180
178
  raise StopPaging
@@ -214,7 +212,8 @@ class Pry
214
212
  # `false` to `true` until we see a newline.
215
213
  class PageTracker
216
214
  def initialize(rows, cols)
217
- @rows, @cols = rows, cols
215
+ @rows = rows
216
+ @cols = cols
218
217
  reset
219
218
  end
220
219
 
@@ -1,6 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+
1
5
  class Pry
2
6
  class PluginManager
3
- PRY_PLUGIN_PREFIX = /^pry-/
7
+ PRY_PLUGIN_PREFIX = /^pry-/.freeze
4
8
 
5
9
  # Placeholder when no associated gem found, displays warning
6
10
  class NoPlugin
@@ -8,8 +12,13 @@ class Pry
8
12
  @name = name
9
13
  end
10
14
 
11
- def method_missing(*_args)
15
+ def method_missing(*)
12
16
  warn "Warning: The plugin '#{@name}' was not found! (no gem found)"
17
+ super
18
+ end
19
+
20
+ def respond_to_missing?(*)
21
+ false
13
22
  end
14
23
  end
15
24
 
@@ -17,7 +26,10 @@ class Pry
17
26
  attr_accessor :name, :gem_name, :enabled, :spec, :active
18
27
 
19
28
  def initialize(name, gem_name, spec, enabled)
20
- @name, @gem_name, @enabled, @spec = name, gem_name, enabled, spec
29
+ @name = name
30
+ @gem_name = gem_name
31
+ @enabled = enabled
32
+ @spec = spec
21
33
  end
22
34
 
23
35
  # Disable a plugin. (prevents plugin from being loaded, cannot
@@ -37,7 +49,9 @@ class Pry
37
49
  cli_options_file = File.join(spec.full_gem_path, "lib/#{spec.name}/cli.rb")
38
50
  return unless File.exist?(cli_options_file)
39
51
 
40
- cli_options_file = File.realpath(cli_options_file) if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.4.4")
52
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.4.4")
53
+ cli_options_file = File.realpath(cli_options_file)
54
+ end
41
55
  require cli_options_file
42
56
  end
43
57
 
@@ -47,14 +61,14 @@ class Pry
47
61
  # Does not reload plugin if it's already active.
48
62
  def activate!
49
63
  # Create the configuration object for the plugin.
50
- Pry.config.send("#{gem_name.gsub('-', '_')}=", Pry::Config.from_hash({}))
64
+ Pry.config.send("#{gem_name.tr('-', '_')}=", OpenStruct.new)
51
65
 
52
66
  begin
53
- require gem_name if !active?
67
+ require gem_name unless active?
54
68
  rescue LoadError => e
55
69
  warn "Found plugin #{gem_name}, but could not require '#{gem_name}'"
56
70
  warn e
57
- rescue => e
71
+ rescue StandardError => e
58
72
  warn "require '#{gem_name}' # Failed, saying: #{e}"
59
73
  end
60
74
 
@@ -110,13 +124,16 @@ class Pry
110
124
  end
111
125
 
112
126
  private
127
+
113
128
  def plugin_located?(plugin)
114
129
  @plugins.any? { |existing| existing.gem_name == plugin.gem_name }
115
130
  end
116
131
 
117
132
  def gem_list
118
133
  Gem.refresh
119
- Gem::Specification.respond_to?(:each) ? Gem::Specification : Gem.source_index.find_name('')
134
+ return Gem::Specification if Gem::Specification.respond_to?(:each)
135
+
136
+ Gem.source_index.find_name('')
120
137
  end
121
138
  end
122
139
  end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
4
  # Prompt represents the Pry prompt, which can be used with Readline-like
3
5
  # libraries. It defines a few default prompts (default prompt, simple prompt,
4
- # etc) and also provides an API to add custom prompts.
6
+ # etc) and also provides an API for adding and implementing custom prompts.
5
7
  #
6
- # @example
8
+ # @example Registering a new Pry prompt
7
9
  # Pry::Prompt.add(
8
10
  # :ipython,
9
11
  # 'IPython-like prompt', [':', '...:']
10
- # ) do |_context, _nesting, _pry_, sep|
11
- # sep == ':' ? "In [#{_pry_.input_ring.count}]: " : ' ...: '
12
+ # ) do |_context, _nesting, pry_instance, sep|
13
+ # sep == ':' ? "In [#{pry_instance.input_ring.count}]: " : ' ...: '
12
14
  # end
13
15
  #
14
16
  # # Produces:
@@ -17,20 +19,23 @@ class Pry
17
19
  # # ...: end
18
20
  # # => :foo
19
21
  # # In [4]:
22
+ #
23
+ # @example Manually instantiating the Prompt class
24
+ # prompt_procs = [
25
+ # proc { '#{rand(1)}>" },
26
+ # proc { "#{('a'..'z').to_a.sample}*" }
27
+ # ]
28
+ # prompt = Pry::Prompt.new(
29
+ # :random,
30
+ # 'Random number or letter prompt.',
31
+ # prompt_procs
32
+ # )
33
+ # prompt.wait_proc.call(...) #=>
34
+ # prompt.incomplete_proc.call(...)
35
+ #
20
36
  # @since v0.11.0
21
37
  # @api public
22
- module Prompt
23
- # @return [String]
24
- DEFAULT_NAME = 'pry'.freeze
25
-
26
- # @return [Array<Object>] the list of objects that are known to have a
27
- # 1-line #inspect output suitable for prompt
28
- SAFE_CONTEXTS = [String, Numeric, Symbol, nil, true, false].freeze
29
-
30
- # @deprecated Use {Pry::Prompt.add} instead.
31
- MAP = {}
32
- deprecate_constant(:MAP) if respond_to?(:deprecate_constant)
33
-
38
+ class Prompt
34
39
  # A Hash that holds all prompts. The keys of the Hash are prompt
35
40
  # names, the values are Hash instances of the format {:description, :value}.
36
41
  @prompts = {}
@@ -39,13 +44,13 @@ class Pry
39
44
  # Retrieves a prompt.
40
45
  #
41
46
  # @example
42
- # Prompt[:my_prompt][:value]
47
+ # Prompt[:my_prompt]
43
48
  #
44
- # @param [Symbol] prompt_name The name of the prompt you want to access
49
+ # @param [Symbol] name The name of the prompt you want to access
45
50
  # @return [Hash{Symbol=>Object}]
46
51
  # @since v0.12.0
47
- def [](prompt_name)
48
- @prompts[prompt_name.to_s]
52
+ def [](name)
53
+ @prompts[name.to_s]
49
54
  end
50
55
 
51
56
  # @return [Hash{Symbol=>Hash}] the duplicate of the internal prompts hash
@@ -57,89 +62,153 @@ class Pry
57
62
 
58
63
  # Adds a new prompt to the prompt hash.
59
64
  #
60
- # @param [Symbol] prompt_name
65
+ # @param [Symbol] name
61
66
  # @param [String] description
62
67
  # @param [Array<String>] separators The separators to differentiate
63
68
  # between prompt modes (default mode and class/method definition mode).
64
69
  # The Array *must* have a size of 2.
65
- # @yield [context, nesting, _pry_, sep]
70
+ # @yield [context, nesting, pry_instance, sep]
66
71
  # @yieldparam context [Object] the context where Pry is currently in
67
72
  # @yieldparam nesting [Integer] whether the context is nested
68
- # @yieldparam _pry_ [Pry] the Pry instance
73
+ # @yieldparam pry_instance [Pry] the Pry instance
69
74
  # @yieldparam separator [String] separator string
70
75
  # @return [nil]
71
76
  # @raise [ArgumentError] if the size of `separators` is not 2
77
+ # @raise [ArgumentError] if `prompt_name` is already occupied
72
78
  # @since v0.12.0
73
- def add(prompt_name, description = '', separators = %w[> *])
79
+ def add(name, description = '', separators = %w[> *])
80
+ name = name.to_s
81
+
74
82
  unless separators.size == 2
75
83
  raise ArgumentError, "separators size must be 2, given #{separators.size}"
76
84
  end
77
85
 
78
- @prompts[prompt_name.to_s] = {
79
- description: description,
80
- value: separators.map do |sep|
81
- proc { |context, nesting, _pry_| yield(context, nesting, _pry_, sep) }
86
+ if @prompts.key?(name)
87
+ raise ArgumentError, "the '#{name}' prompt was already added"
88
+ end
89
+
90
+ @prompts[name] = new(
91
+ name,
92
+ description,
93
+ separators.map do |sep|
94
+ proc do |context, nesting, pry_instance|
95
+ yield(context, nesting, pry_instance, sep)
96
+ end
82
97
  end
83
- }
98
+ )
84
99
 
85
100
  nil
86
101
  end
102
+ end
87
103
 
88
- private
104
+ # @return [String]
105
+ attr_reader :name
89
106
 
90
- def prompt_name(name)
91
- return name unless name.is_a?(Pry::Config::Lazy)
107
+ # @return [String]
108
+ attr_reader :description
109
+
110
+ # @return [Array<Proc>] the array of procs that hold
111
+ # `[wait_proc, incomplete_proc]`
112
+ attr_reader :prompt_procs
113
+
114
+ # @param [String] name
115
+ # @param [String] description
116
+ # @param [Array<Proc>] prompt_procs
117
+ def initialize(name, description, prompt_procs)
118
+ @name = name
119
+ @description = description
120
+ @prompt_procs = prompt_procs
121
+ end
122
+
123
+ # @return [Proc] the proc which builds the wait prompt (`>`)
124
+ def wait_proc
125
+ @prompt_procs.first
126
+ end
127
+
128
+ # @return [Proc] the proc which builds the prompt when in the middle of an
129
+ # expression such as open method, etc. (`*`)
130
+ def incomplete_proc
131
+ @prompt_procs.last
132
+ end
92
133
 
93
- name.call
134
+ # @deprecated Use a `Pry::Prompt` instance directly
135
+ def [](key)
136
+ key = key.to_s
137
+ if %w[name description].include?(key)
138
+ Pry::Warning.warn(
139
+ "`Pry::Prompt[:#{@name}][:#{key}]` is deprecated. " \
140
+ "Use `#{self.class}##{key}` instead"
141
+ )
142
+ public_send(key)
143
+ elsif key.to_s == 'value'
144
+ Pry::Warning.warn(
145
+ "`#{self.class}[:#{@name}][:value]` is deprecated. Use " \
146
+ "`#{self.class}#prompt_procs` instead or an instance of " \
147
+ "`#{self.class}` directly"
148
+ )
149
+ @prompt_procs
94
150
  end
95
151
  end
96
152
 
97
- add(:default, <<DESC) do |context, nesting, _pry_, sep|
98
- The default Pry prompt. Includes information about the current expression
99
- number, evaluation context, and nesting level, plus a reminder that you're
100
- using Pry.
101
- DESC
153
+ add(
154
+ :default,
155
+ "The default Pry prompt. Includes information about the current expression \n" \
156
+ "number, evaluation context, and nesting level, plus a reminder that you're \n" \
157
+ 'using Pry.'
158
+ ) do |context, nesting, pry_instance, sep|
102
159
  format(
103
160
  "[%<in_count>s] %<name>s(%<context>s)%<nesting>s%<separator>s ",
104
- in_count: _pry_.input_ring.count,
105
- name: prompt_name(_pry_.config.prompt_name),
161
+ in_count: pry_instance.input_ring.count,
162
+ name: pry_instance.config.prompt_name,
106
163
  context: Pry.view_clip(context),
107
164
  nesting: (nesting > 0 ? ":#{nesting}" : ''),
108
165
  separator: sep
109
166
  )
110
167
  end
111
168
 
112
- add(:simple, "A simple `>>`.\n", ['>> ', ' | ']) do |_, _, _, sep|
169
+ add(
170
+ :simple,
171
+ "A simple `>>`.",
172
+ ['>> ', ' | ']
173
+ ) do |_, _, _, sep|
113
174
  sep
114
175
  end
115
176
 
116
- add(:nav, <<DESC, %w[> *]) do |context, nesting, _pry_, sep|
117
- A prompt that displays the binding stack as a path and includes information
118
- about #{Helpers::Text.bold('_in_')} and #{Helpers::Text.bold('_out_')}.
119
- DESC
120
- tree = _pry_.binding_stack.map { |b| Pry.view_clip(b.eval('self')) }
177
+ add(
178
+ :nav,
179
+ "A prompt that displays the binding stack as a path and includes information \n" \
180
+ "about #{Helpers::Text.bold('_in_')} and #{Helpers::Text.bold('_out_')}.",
181
+ %w[> *]
182
+ ) do |_context, _nesting, pry_instance, sep|
183
+ tree = pry_instance.binding_stack.map { |b| Pry.view_clip(b.eval('self')) }
121
184
  format(
122
185
  "[%<in_count>s] (%<name>s) %<tree>s: %<stack_size>s%<separator>s ",
123
- in_count: _pry_.input_ring.count,
124
- name: prompt_name(_pry_.config.prompt_name),
186
+ in_count: pry_instance.input_ring.count,
187
+ name: pry_instance.config.prompt_name,
125
188
  tree: tree.join(' / '),
126
- stack_size: _pry_.binding_stack.size - 1,
189
+ stack_size: pry_instance.binding_stack.size - 1,
127
190
  separator: sep
128
191
  )
129
192
  end
130
193
 
131
- add(:shell, <<DESC, %w[$ *]) do |context, nesting, _pry_, sep|
132
- A prompt that displays `$PWD` as you change it.
133
- DESC
194
+ add(
195
+ :shell,
196
+ 'A prompt that displays `$PWD` as you change it.',
197
+ %w[$ *]
198
+ ) do |context, _nesting, pry_instance, sep|
134
199
  format(
135
200
  "%<name>s %<context>s:%<pwd>s %<separator>s ",
136
- name: prompt_name(_pry_.config.prompt_name),
201
+ name: pry_instance.config.prompt_name,
137
202
  context: Pry.view_clip(context),
138
203
  pwd: Dir.pwd,
139
204
  separator: sep
140
205
  )
141
206
  end
142
207
 
143
- add(:none, 'Wave goodbye to the Pry prompt.', Array.new(2)) { '' }
208
+ add(
209
+ :none,
210
+ 'Wave goodbye to the Pry prompt.',
211
+ Array.new(2)
212
+ ) { '' }
144
213
  end
145
214
  end