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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +110 -1
- data/LICENSE +1 -1
- data/README.md +331 -269
- data/bin/pry +5 -0
- data/lib/pry.rb +133 -119
- data/lib/pry/basic_object.rb +8 -4
- data/lib/pry/block_command.rb +22 -0
- data/lib/pry/class_command.rb +194 -0
- data/lib/pry/cli.rb +40 -31
- data/lib/pry/code.rb +39 -27
- data/lib/pry/code/code_file.rb +28 -24
- data/lib/pry/code/code_range.rb +4 -2
- data/lib/pry/code/loc.rb +15 -8
- data/lib/pry/code_object.rb +40 -38
- data/lib/pry/color_printer.rb +47 -46
- data/lib/pry/command.rb +166 -369
- data/lib/pry/command_set.rb +76 -73
- data/lib/pry/command_state.rb +31 -0
- data/lib/pry/commands/amend_line.rb +86 -81
- data/lib/pry/commands/bang.rb +18 -14
- data/lib/pry/commands/bang_pry.rb +15 -11
- data/lib/pry/commands/cat.rb +61 -54
- data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
- data/lib/pry/commands/cat/exception_formatter.rb +71 -60
- data/lib/pry/commands/cat/file_formatter.rb +55 -49
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cd.rb +40 -35
- data/lib/pry/commands/change_inspector.rb +29 -22
- data/lib/pry/commands/change_prompt.rb +44 -39
- data/lib/pry/commands/clear_screen.rb +16 -10
- data/lib/pry/commands/code_collector.rb +148 -133
- data/lib/pry/commands/disable_pry.rb +23 -19
- data/lib/pry/commands/easter_eggs.rb +19 -30
- data/lib/pry/commands/edit.rb +184 -161
- data/lib/pry/commands/edit/exception_patcher.rb +21 -17
- data/lib/pry/commands/edit/file_and_line_locator.rb +34 -23
- data/lib/pry/commands/exit.rb +39 -35
- data/lib/pry/commands/exit_all.rb +24 -20
- data/lib/pry/commands/exit_program.rb +20 -16
- data/lib/pry/commands/find_method.rb +168 -160
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +151 -150
- data/lib/pry/commands/import_set.rb +20 -16
- data/lib/pry/commands/jump_to.rb +25 -21
- data/lib/pry/commands/list_inspectors.rb +35 -28
- data/lib/pry/commands/ls.rb +124 -102
- data/lib/pry/commands/ls/constants.rb +59 -42
- data/lib/pry/commands/ls/formatter.rb +50 -46
- data/lib/pry/commands/ls/globals.rb +38 -34
- data/lib/pry/commands/ls/grep.rb +17 -13
- data/lib/pry/commands/ls/instance_vars.rb +29 -27
- data/lib/pry/commands/ls/interrogatable.rb +18 -12
- data/lib/pry/commands/ls/jruby_hacks.rb +47 -41
- data/lib/pry/commands/ls/local_names.rb +26 -22
- data/lib/pry/commands/ls/local_vars.rb +38 -28
- data/lib/pry/commands/ls/ls_entity.rb +47 -51
- data/lib/pry/commands/ls/methods.rb +44 -43
- data/lib/pry/commands/ls/methods_helper.rb +46 -42
- data/lib/pry/commands/ls/self_methods.rb +23 -22
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +93 -82
- data/lib/pry/commands/pry_backtrace.rb +24 -17
- data/lib/pry/commands/pry_version.rb +15 -11
- data/lib/pry/commands/raise_up.rb +27 -22
- data/lib/pry/commands/reload_code.rb +60 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +55 -45
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +51 -51
- data/lib/pry/commands/shell_mode.rb +21 -17
- data/lib/pry/commands/show_doc.rb +81 -68
- data/lib/pry/commands/show_info.rb +189 -171
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +109 -45
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +20 -16
- data/lib/pry/commands/watch_expression.rb +89 -86
- data/lib/pry/commands/watch_expression/expression.rb +32 -27
- data/lib/pry/commands/whereami.rb +156 -148
- data/lib/pry/commands/wtf.rb +75 -50
- data/lib/pry/config.rb +311 -25
- data/lib/pry/config/attributable.rb +22 -0
- data/lib/pry/config/lazy_value.rb +29 -0
- data/lib/pry/config/memoized_value.rb +34 -0
- data/lib/pry/config/value.rb +24 -0
- data/lib/pry/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +9 -7
- data/lib/pry/editor.rb +48 -21
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +13 -16
- data/lib/pry/forwardable.rb +5 -1
- data/lib/pry/helpers.rb +2 -0
- data/lib/pry/helpers/base_helpers.rb +68 -197
- data/lib/pry/helpers/command_helpers.rb +50 -61
- data/lib/pry/helpers/documentation_helpers.rb +20 -13
- data/lib/pry/helpers/options_helpers.rb +14 -7
- data/lib/pry/helpers/platform.rb +7 -5
- data/lib/pry/helpers/table.rb +33 -26
- data/lib/pry/helpers/text.rb +17 -14
- data/lib/pry/history.rb +48 -56
- data/lib/pry/hooks.rb +21 -12
- data/lib/pry/indent.rb +54 -50
- data/lib/pry/input_completer.rb +248 -230
- data/lib/pry/input_lock.rb +8 -9
- data/lib/pry/inspector.rb +36 -24
- data/lib/pry/last_exception.rb +45 -45
- data/lib/pry/method.rb +141 -94
- data/lib/pry/method/disowned.rb +16 -4
- data/lib/pry/method/patcher.rb +12 -3
- data/lib/pry/method/weird_method_locator.rb +68 -44
- data/lib/pry/object_path.rb +33 -25
- data/lib/pry/output.rb +121 -35
- data/lib/pry/pager.rb +41 -42
- data/lib/pry/plugins.rb +25 -8
- data/lib/pry/prompt.rb +123 -54
- data/lib/pry/pry_class.rb +61 -98
- data/lib/pry/pry_instance.rb +217 -215
- data/lib/pry/repl.rb +18 -22
- data/lib/pry/repl_file_loader.rb +27 -21
- data/lib/pry/ring.rb +11 -6
- data/lib/pry/slop.rb +574 -563
- data/lib/pry/slop/commands.rb +164 -169
- data/lib/pry/slop/option.rb +172 -168
- data/lib/pry/syntax_highlighter.rb +26 -0
- data/lib/pry/system_command_handler.rb +17 -0
- data/lib/pry/testable.rb +59 -61
- data/lib/pry/testable/evalable.rb +21 -12
- data/lib/pry/testable/mockable.rb +18 -10
- data/lib/pry/testable/pry_tester.rb +71 -56
- data/lib/pry/testable/utility.rb +29 -21
- data/lib/pry/testable/variables.rb +49 -43
- data/lib/pry/version.rb +3 -1
- data/lib/pry/warning.rb +27 -0
- data/lib/pry/wrapped_module.rb +51 -42
- data/lib/pry/wrapped_module/candidate.rb +21 -14
- metadata +31 -30
- data/lib/pry/commands.rb +0 -6
- data/lib/pry/commands/disabled_commands.rb +0 -2
- data/lib/pry/commands/gem_cd.rb +0 -26
- data/lib/pry/commands/gem_install.rb +0 -32
- data/lib/pry/commands/gem_list.rb +0 -33
- data/lib/pry/commands/gem_open.rb +0 -29
- data/lib/pry/commands/gem_readme.rb +0 -25
- data/lib/pry/commands/gem_search.rb +0 -40
- data/lib/pry/commands/gem_stats.rb +0 -83
- data/lib/pry/commands/gist.rb +0 -102
- data/lib/pry/commands/install_command.rb +0 -54
- data/lib/pry/config/behavior.rb +0 -255
- data/lib/pry/config/convenience.rb +0 -28
- data/lib/pry/config/default.rb +0 -159
- data/lib/pry/config/memoization.rb +0 -48
- data/lib/pry/platform.rb +0 -91
- data/lib/pry/rubygem.rb +0 -84
- data/lib/pry/terminal.rb +0 -91
data/lib/pry/pager.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
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 :
|
11
|
+
attr_reader :pry_instance
|
12
12
|
|
13
|
-
def initialize(
|
14
|
-
@
|
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
|
43
|
+
def enabled?
|
44
|
+
!!@enabled
|
45
|
+
end
|
44
46
|
|
45
|
-
|
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 !
|
56
|
-
NullPager.new(
|
57
|
+
if !pry_instance.config.pager
|
58
|
+
NullPager.new(pry_instance.output)
|
57
59
|
elsif !SystemPager.available? || Helpers::Platform.jruby?
|
58
|
-
SimplePager.new(
|
60
|
+
SimplePager.new(pry_instance.output)
|
59
61
|
else
|
60
|
-
SystemPager.new(
|
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 ||=
|
91
|
+
@height ||= @out.height
|
91
92
|
end
|
92
93
|
|
93
94
|
def width
|
94
|
-
@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
|
-
|
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
|
-
|
119
|
-
|
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 =
|
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?
|
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 =
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
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
|
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
|
215
|
+
@rows = rows
|
216
|
+
@cols = cols
|
218
217
|
reset
|
219
218
|
end
|
220
219
|
|
data/lib/pry/plugins.rb
CHANGED
@@ -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(*
|
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
|
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
|
-
|
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.
|
64
|
+
Pry.config.send("#{gem_name.tr('-', '_')}=", OpenStruct.new)
|
51
65
|
|
52
66
|
begin
|
53
|
-
require gem_name
|
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
|
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
|
data/lib/pry/prompt.rb
CHANGED
@@ -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
|
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,
|
11
|
-
# sep == ':' ? "In [#{
|
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
|
-
|
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]
|
47
|
+
# Prompt[:my_prompt]
|
43
48
|
#
|
44
|
-
# @param [Symbol]
|
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 [](
|
48
|
-
@prompts[
|
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]
|
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,
|
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
|
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(
|
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
|
79
|
-
|
80
|
-
|
81
|
-
|
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
|
-
|
104
|
+
# @return [String]
|
105
|
+
attr_reader :name
|
89
106
|
|
90
|
-
|
91
|
-
|
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
|
-
|
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(
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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:
|
105
|
-
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(
|
169
|
+
add(
|
170
|
+
:simple,
|
171
|
+
"A simple `>>`.",
|
172
|
+
['>> ', ' | ']
|
173
|
+
) do |_, _, _, sep|
|
113
174
|
sep
|
114
175
|
end
|
115
176
|
|
116
|
-
add(
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
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:
|
124
|
-
name:
|
186
|
+
in_count: pry_instance.input_ring.count,
|
187
|
+
name: pry_instance.config.prompt_name,
|
125
188
|
tree: tree.join(' / '),
|
126
|
-
stack_size:
|
189
|
+
stack_size: pry_instance.binding_stack.size - 1,
|
127
190
|
separator: sep
|
128
191
|
)
|
129
192
|
end
|
130
193
|
|
131
|
-
add(
|
132
|
-
|
133
|
-
|
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:
|
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(
|
208
|
+
add(
|
209
|
+
:none,
|
210
|
+
'Wave goodbye to the Pry prompt.',
|
211
|
+
Array.new(2)
|
212
|
+
) { '' }
|
144
213
|
end
|
145
214
|
end
|