pry 0.9.10pre1-i386-mswin32 → 0.9.11-i386-mswin32
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.
- data/.travis.yml +3 -1
- data/CHANGELOG +63 -2
- data/CONTRIBUTORS +43 -25
- data/Gemfile +7 -0
- data/Guardfile +62 -0
- data/README.markdown +4 -4
- data/Rakefile +34 -35
- data/lib/pry.rb +107 -54
- data/lib/pry/cli.rb +34 -11
- data/lib/pry/code.rb +165 -182
- data/lib/pry/code/code_range.rb +70 -0
- data/lib/pry/code/loc.rb +92 -0
- data/lib/pry/code_object.rb +153 -0
- data/lib/pry/command.rb +160 -22
- data/lib/pry/command_set.rb +37 -26
- data/lib/pry/commands.rb +4 -27
- data/lib/pry/commands/amend_line.rb +99 -0
- data/lib/pry/commands/bang.rb +20 -0
- data/lib/pry/commands/bang_pry.rb +17 -0
- data/lib/pry/commands/cat.rb +53 -0
- data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
- data/lib/pry/commands/cat/exception_formatter.rb +78 -0
- data/lib/pry/commands/cat/file_formatter.rb +84 -0
- data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
- data/lib/pry/commands/cd.rb +30 -0
- data/lib/pry/commands/code_collector.rb +165 -0
- data/lib/pry/commands/deprecated_commands.rb +2 -0
- data/lib/pry/commands/disable_pry.rb +27 -0
- data/lib/pry/commands/easter_eggs.rb +112 -0
- data/lib/pry/commands/edit.rb +206 -0
- data/lib/pry/commands/edit/exception_patcher.rb +25 -0
- data/lib/pry/commands/edit/file_and_line_locator.rb +38 -0
- data/lib/pry/commands/edit/method_patcher.rb +122 -0
- data/lib/pry/commands/exit.rb +42 -0
- data/lib/pry/commands/exit_all.rb +29 -0
- data/lib/pry/commands/exit_program.rb +24 -0
- data/lib/pry/commands/find_method.rb +199 -0
- data/lib/pry/commands/fix_indent.rb +19 -0
- data/lib/pry/commands/gem_cd.rb +26 -0
- data/lib/pry/commands/gem_install.rb +29 -0
- data/lib/pry/commands/gem_list.rb +33 -0
- data/lib/pry/commands/gem_open.rb +29 -0
- data/lib/pry/commands/gist.rb +95 -0
- data/lib/pry/commands/help.rb +164 -0
- data/lib/pry/commands/hist.rb +161 -0
- data/lib/pry/commands/import_set.rb +22 -0
- data/lib/pry/commands/install_command.rb +51 -0
- data/lib/pry/commands/jump_to.rb +29 -0
- data/lib/pry/commands/ls.rb +339 -0
- data/lib/pry/commands/nesting.rb +25 -0
- data/lib/pry/commands/play.rb +69 -0
- data/lib/pry/commands/pry_backtrace.rb +26 -0
- data/lib/pry/commands/pry_version.rb +17 -0
- data/lib/pry/commands/raise_up.rb +32 -0
- data/lib/pry/commands/reload_code.rb +39 -0
- data/lib/pry/commands/reset.rb +18 -0
- data/lib/pry/commands/ri.rb +56 -0
- data/lib/pry/commands/save_file.rb +61 -0
- data/lib/pry/commands/shell_command.rb +43 -0
- data/lib/pry/commands/shell_mode.rb +27 -0
- data/lib/pry/commands/show_doc.rb +78 -0
- data/lib/pry/commands/show_info.rb +139 -0
- data/lib/pry/commands/show_input.rb +17 -0
- data/lib/pry/commands/show_source.rb +37 -0
- data/lib/pry/commands/simple_prompt.rb +22 -0
- data/lib/pry/commands/stat.rb +40 -0
- data/lib/pry/commands/switch_to.rb +23 -0
- data/lib/pry/commands/toggle_color.rb +20 -0
- data/lib/pry/commands/whereami.rb +114 -0
- data/lib/pry/commands/wtf.rb +57 -0
- data/lib/pry/completion.rb +120 -46
- data/lib/pry/config.rb +11 -0
- data/lib/pry/core_extensions.rb +30 -19
- data/lib/pry/editor.rb +129 -0
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +89 -119
- data/lib/pry/helpers/command_helpers.rb +7 -122
- data/lib/pry/helpers/table.rb +100 -0
- data/lib/pry/helpers/text.rb +4 -4
- data/lib/pry/history_array.rb +5 -0
- data/lib/pry/hooks.rb +1 -3
- data/lib/pry/indent.rb +104 -30
- data/lib/pry/method.rb +66 -22
- data/lib/pry/module_candidate.rb +26 -15
- data/lib/pry/pager.rb +70 -0
- data/lib/pry/plugins.rb +1 -2
- data/lib/pry/pry_class.rb +63 -22
- data/lib/pry/pry_instance.rb +58 -37
- data/lib/pry/rubygem.rb +74 -0
- data/lib/pry/terminal_info.rb +43 -0
- data/lib/pry/test/helper.rb +185 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +58 -24
- data/pry.gemspec +21 -37
- data/{test/test_cli.rb → spec/cli_spec.rb} +0 -0
- data/spec/code_object_spec.rb +277 -0
- data/{test/test_code.rb → spec/code_spec.rb} +19 -1
- data/{test/test_command_helpers.rb → spec/command_helpers_spec.rb} +0 -0
- data/{test/test_command_integration.rb → spec/command_integration_spec.rb} +38 -46
- data/{test/test_command_set.rb → spec/command_set_spec.rb} +18 -1
- data/{test/test_command.rb → spec/command_spec.rb} +250 -149
- data/spec/commands/amend_line_spec.rb +247 -0
- data/spec/commands/bang_spec.rb +19 -0
- data/spec/commands/cat_spec.rb +164 -0
- data/spec/commands/cd_spec.rb +250 -0
- data/spec/commands/disable_pry_spec.rb +25 -0
- data/spec/commands/edit_spec.rb +727 -0
- data/spec/commands/exit_all_spec.rb +34 -0
- data/spec/commands/exit_program_spec.rb +19 -0
- data/spec/commands/exit_spec.rb +34 -0
- data/{test/test_default_commands/test_find_method.rb → spec/commands/find_method_spec.rb} +27 -7
- data/spec/commands/gem_list_spec.rb +26 -0
- data/spec/commands/gist_spec.rb +75 -0
- data/{test/test_default_commands/test_help.rb → spec/commands/help_spec.rb} +8 -9
- data/spec/commands/hist_spec.rb +181 -0
- data/spec/commands/jump_to_spec.rb +15 -0
- data/spec/commands/ls_spec.rb +177 -0
- data/spec/commands/play_spec.rb +140 -0
- data/spec/commands/raise_up_spec.rb +56 -0
- data/spec/commands/save_file_spec.rb +177 -0
- data/spec/commands/show_doc_spec.rb +378 -0
- data/spec/commands/show_input_spec.rb +17 -0
- data/spec/commands/show_source_spec.rb +597 -0
- data/spec/commands/whereami_spec.rb +154 -0
- data/spec/completion_spec.rb +233 -0
- data/spec/control_d_handler_spec.rb +58 -0
- data/spec/editor_spec.rb +79 -0
- data/{test/test_exception_whitelist.rb → spec/exception_whitelist_spec.rb} +0 -0
- data/{test → spec/fixtures}/candidate_helper1.rb +0 -0
- data/{test → spec/fixtures}/candidate_helper2.rb +0 -0
- data/{test/test_default_commands → spec/fixtures}/example.erb +0 -0
- data/spec/fixtures/example_nesting.rb +33 -0
- data/spec/fixtures/show_source_doc_examples.rb +15 -0
- data/{test → spec/fixtures}/testrc +0 -0
- data/{test → spec/fixtures}/testrcbad +0 -0
- data/spec/helper.rb +34 -0
- data/spec/helpers/bacon.rb +86 -0
- data/spec/helpers/mock_pry.rb +43 -0
- data/spec/helpers/table_spec.rb +83 -0
- data/{test/test_history_array.rb → spec/history_array_spec.rb} +21 -19
- data/{test/test_hooks.rb → spec/hooks_spec.rb} +0 -0
- data/{test/test_indent.rb → spec/indent_spec.rb} +24 -0
- data/{test/test_input_stack.rb → spec/input_stack_spec.rb} +4 -0
- data/{test/test_method.rb → spec/method_spec.rb} +65 -1
- data/{test/test_prompt.rb → spec/prompt_spec.rb} +0 -0
- data/{test/test_pry_defaults.rb → spec/pry_defaults_spec.rb} +14 -14
- data/{test/test_pry_history.rb → spec/pry_history_spec.rb} +15 -0
- data/spec/pry_output_spec.rb +95 -0
- data/{test/test_pry.rb → spec/pry_spec.rb} +74 -32
- data/{test/test_sticky_locals.rb → spec/sticky_locals_spec.rb} +27 -25
- data/{test/test_syntax_checking.rb → spec/syntax_checking_spec.rb} +17 -1
- data/{test/test_wrapped_module.rb → spec/wrapped_module_spec.rb} +92 -5
- metadata +239 -115
- data/examples/example_basic.rb +0 -15
- data/examples/example_command_override.rb +0 -32
- data/examples/example_commands.rb +0 -36
- data/examples/example_hooks.rb +0 -9
- data/examples/example_image_edit.rb +0 -67
- data/examples/example_input.rb +0 -7
- data/examples/example_input2.rb +0 -29
- data/examples/example_output.rb +0 -11
- data/examples/example_print.rb +0 -6
- data/examples/example_prompt.rb +0 -9
- data/examples/helper.rb +0 -6
- data/lib/pry/default_commands/cd.rb +0 -81
- data/lib/pry/default_commands/commands.rb +0 -62
- data/lib/pry/default_commands/context.rb +0 -98
- data/lib/pry/default_commands/easter_eggs.rb +0 -95
- data/lib/pry/default_commands/editing.rb +0 -420
- data/lib/pry/default_commands/find_method.rb +0 -169
- data/lib/pry/default_commands/gems.rb +0 -84
- data/lib/pry/default_commands/gist.rb +0 -187
- data/lib/pry/default_commands/help.rb +0 -127
- data/lib/pry/default_commands/hist.rb +0 -120
- data/lib/pry/default_commands/input_and_output.rb +0 -306
- data/lib/pry/default_commands/introspection.rb +0 -410
- data/lib/pry/default_commands/ls.rb +0 -272
- data/lib/pry/default_commands/misc.rb +0 -38
- data/lib/pry/default_commands/navigating_pry.rb +0 -110
- data/lib/pry/default_commands/whereami.rb +0 -92
- data/lib/pry/extended_commands/experimental.rb +0 -7
- data/test/helper.rb +0 -223
- data/test/test_completion.rb +0 -62
- data/test/test_control_d_handler.rb +0 -45
- data/test/test_default_commands/test_cd.rb +0 -321
- data/test/test_default_commands/test_context.rb +0 -288
- data/test/test_default_commands/test_documentation.rb +0 -315
- data/test/test_default_commands/test_gems.rb +0 -18
- data/test/test_default_commands/test_input.rb +0 -428
- data/test/test_default_commands/test_introspection.rb +0 -511
- data/test/test_default_commands/test_ls.rb +0 -151
- data/test/test_default_commands/test_shell.rb +0 -343
- data/test/test_default_commands/test_show_source.rb +0 -432
- data/test/test_pry_output.rb +0 -41
@@ -0,0 +1,139 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::ShowInfo < Pry::ClassCommand
|
3
|
+
extend Pry::Helpers::BaseHelpers
|
4
|
+
|
5
|
+
command_options :shellwords => false
|
6
|
+
command_options :requires_gem => "ruby18_source_location" if mri_18?
|
7
|
+
|
8
|
+
def setup
|
9
|
+
require 'ruby18_source_location' if mri_18?
|
10
|
+
end
|
11
|
+
|
12
|
+
def options(opt)
|
13
|
+
opt.on :s, :super, "Select the 'super' method. Can be repeated to traverse the ancestors", :as => :count
|
14
|
+
opt.on :l, "line-numbers", "Show line numbers"
|
15
|
+
opt.on :b, "base-one", "Show line numbers but start numbering at 1 (useful for `amend-line` and `play` commands)"
|
16
|
+
opt.on :f, :flood, "Do not use a pager to view text longer than one screen"
|
17
|
+
opt.on :a, :all, "Show all definitions and monkeypatches of the module/class"
|
18
|
+
end
|
19
|
+
|
20
|
+
def process
|
21
|
+
code_object = Pry::CodeObject.lookup(obj_name, _pry_, :super => opts[:super])
|
22
|
+
raise Pry::CommandError, "Couldn't locate #{obj_name}!" if !code_object
|
23
|
+
|
24
|
+
if show_all_modules?(code_object)
|
25
|
+
# show all monkey patches for a module
|
26
|
+
result = content_and_headers_for_all_module_candidates(code_object)
|
27
|
+
else
|
28
|
+
# show a specific code object
|
29
|
+
result = content_and_header_for_code_object(code_object)
|
30
|
+
end
|
31
|
+
|
32
|
+
set_file_and_dir_locals(code_object.source_file)
|
33
|
+
stagger_output result
|
34
|
+
end
|
35
|
+
|
36
|
+
def content_and_header_for_code_object(code_object)
|
37
|
+
header(code_object) << content_for(code_object)
|
38
|
+
end
|
39
|
+
|
40
|
+
def content_and_headers_for_all_module_candidates(mod)
|
41
|
+
result = "Found #{mod.number_of_candidates} candidates for `#{mod.name}` definition:\n"
|
42
|
+
mod.number_of_candidates.times do |v|
|
43
|
+
candidate = mod.candidate(v)
|
44
|
+
begin
|
45
|
+
result << "\nCandidate #{v+1}/#{mod.number_of_candidates}: #{candidate.source_file} @ line #{candidate.source_line}:\n"
|
46
|
+
content = content_for(candidate)
|
47
|
+
|
48
|
+
result << "Number of lines: #{content.lines.count}\n\n" << content
|
49
|
+
rescue Pry::RescuableException
|
50
|
+
result << "\nNo content found.\n"
|
51
|
+
next
|
52
|
+
end
|
53
|
+
end
|
54
|
+
result
|
55
|
+
end
|
56
|
+
|
57
|
+
# Generate a header (meta-data information) for all the code
|
58
|
+
# object types: methods, modules, commands, procs...
|
59
|
+
def header(code_object)
|
60
|
+
file_name, line_num = file_and_line_for(code_object)
|
61
|
+
h = "\n#{Pry::Helpers::Text.bold('From:')} #{file_name} "
|
62
|
+
h << method_header(code_object, line_num) if code_object.real_method_object?
|
63
|
+
h << "\n#{Pry::Helpers::Text.bold('Number of lines:')} " <<
|
64
|
+
"#{content_for(code_object).lines.count}\n\n"
|
65
|
+
end
|
66
|
+
|
67
|
+
def method_header(code_object, line_num)
|
68
|
+
h = ""
|
69
|
+
h << (code_object.c_method? ? "(C Method):" : "@ line #{line_num}:")
|
70
|
+
h << method_sections(code_object)[:owner]
|
71
|
+
h << method_sections(code_object)[:visibility]
|
72
|
+
h << method_sections(code_object)[:signature]
|
73
|
+
h
|
74
|
+
end
|
75
|
+
|
76
|
+
def method_sections(code_object)
|
77
|
+
{
|
78
|
+
:owner => "\n#{text.bold("Owner:")} #{code_object.owner || "N/A"}\n",
|
79
|
+
:visibility => "#{text.bold("Visibility:")} #{code_object.visibility}",
|
80
|
+
:signature => "\n#{text.bold("Signature:")} #{code_object.signature}"
|
81
|
+
}.merge(header_options) { |key, old, new| (new && old).to_s }
|
82
|
+
end
|
83
|
+
|
84
|
+
def header_options
|
85
|
+
{
|
86
|
+
:owner => true,
|
87
|
+
:visibility => true,
|
88
|
+
:signature => nil
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
def show_all_modules?(code_object)
|
93
|
+
code_object.is_a?(Pry::WrappedModule) && opts.present?(:all)
|
94
|
+
end
|
95
|
+
|
96
|
+
def obj_name
|
97
|
+
@obj_name ||= args.empty? ? nil : args.join(" ")
|
98
|
+
end
|
99
|
+
|
100
|
+
def use_line_numbers?
|
101
|
+
opts.present?(:b) || opts.present?(:l)
|
102
|
+
end
|
103
|
+
|
104
|
+
def start_line_for(code_object)
|
105
|
+
if opts.present?(:'base-one')
|
106
|
+
1
|
107
|
+
else
|
108
|
+
code_object.source_line || 1
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# takes into account possible yard docs, and returns yard_file / yard_line
|
113
|
+
# Also adjusts for start line of comments (using start_line_for), which it has to infer
|
114
|
+
# by subtracting number of lines of comment from start line of code_object
|
115
|
+
def file_and_line_for(code_object)
|
116
|
+
if code_object.module_with_yard_docs?
|
117
|
+
[code_object.yard_file, code_object.yard_line]
|
118
|
+
else
|
119
|
+
[code_object.source_file, start_line_for(code_object)]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def complete(input)
|
124
|
+
if input =~ /([^ ]*)#([a-z0-9_]*)\z/
|
125
|
+
prefix, search = [$1, $2]
|
126
|
+
methods = begin
|
127
|
+
Pry::Method.all_from_class(binding.eval(prefix))
|
128
|
+
rescue RescuableException => e
|
129
|
+
return super
|
130
|
+
end
|
131
|
+
methods.map do |method|
|
132
|
+
[prefix, method.name].join('#') if method.name.start_with?(search)
|
133
|
+
end.compact
|
134
|
+
else
|
135
|
+
super
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::ShowInput < Pry::ClassCommand
|
3
|
+
match 'show-input'
|
4
|
+
group 'Editing'
|
5
|
+
description 'Show the contents of the input buffer for the current multi-line expression.'
|
6
|
+
|
7
|
+
banner <<-'BANNER'
|
8
|
+
Show the contents of the input buffer for the current multi-line expression.
|
9
|
+
BANNER
|
10
|
+
|
11
|
+
def process
|
12
|
+
output.puts Code.new(eval_string).with_line_numbers
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Pry::Commands.add_command(Pry::Command::ShowInput)
|
17
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'pry/commands/show_info'
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
class Command::ShowSource < Command::ShowInfo
|
5
|
+
match 'show-source'
|
6
|
+
group 'Introspection'
|
7
|
+
description 'Show the source for a method or class.'
|
8
|
+
|
9
|
+
banner <<-'BANNER'
|
10
|
+
Usage: show-source [OPTIONS] [METH|CLASS]
|
11
|
+
Aliases: $, show-method
|
12
|
+
|
13
|
+
Show the source for a method or class. Tries instance methods first and then
|
14
|
+
methods by default.
|
15
|
+
|
16
|
+
show-source hi_method
|
17
|
+
show-source hi_method
|
18
|
+
show-source Pry#rep # source for Pry#rep method
|
19
|
+
show-source Pry # for Pry class
|
20
|
+
show-source Pry -a # for all Pry class definitions (all monkey patches)
|
21
|
+
show-source Pry --super # for superclass of Pry (Object class)
|
22
|
+
|
23
|
+
https://github.com/pry/pry/wiki/Source-browsing#wiki-Show_method
|
24
|
+
BANNER
|
25
|
+
|
26
|
+
# The source for code_object prepared for display.
|
27
|
+
def content_for(code_object)
|
28
|
+
raise CommandError, "Cannot locate source!" if !code_object.source
|
29
|
+
Code.new(code_object.source, start_line_for(code_object)).
|
30
|
+
with_line_numbers(use_line_numbers?).to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Pry::Commands.add_command(Pry::Command::ShowSource)
|
35
|
+
Pry::Commands.alias_command 'show-method', 'show-source'
|
36
|
+
Pry::Commands.alias_command '$', 'show-source'
|
37
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::SimplePrompt < Pry::ClassCommand
|
3
|
+
match 'simple-prompt'
|
4
|
+
group 'Misc'
|
5
|
+
description 'Toggle the simple prompt.'
|
6
|
+
|
7
|
+
banner <<-'BANNER'
|
8
|
+
Toggle the simple prompt.
|
9
|
+
BANNER
|
10
|
+
|
11
|
+
def process
|
12
|
+
case _pry_.prompt
|
13
|
+
when Pry::SIMPLE_PROMPT
|
14
|
+
_pry_.pop_prompt
|
15
|
+
else
|
16
|
+
_pry_.push_prompt Pry::SIMPLE_PROMPT
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Pry::Commands.add_command(Pry::Command::SimplePrompt)
|
22
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Stat < Pry::ClassCommand
|
3
|
+
match 'stat'
|
4
|
+
group 'Introspection'
|
5
|
+
description 'View method information and set _file_ and _dir_ locals.'
|
6
|
+
command_options :shellwords => false
|
7
|
+
|
8
|
+
banner <<-'BANNER'
|
9
|
+
Usage: stat [OPTIONS] [METH]
|
10
|
+
|
11
|
+
Show method information for method METH and set _file_ and _dir_ locals.
|
12
|
+
|
13
|
+
stat hello_method
|
14
|
+
BANNER
|
15
|
+
|
16
|
+
def options(opt)
|
17
|
+
method_options(opt)
|
18
|
+
end
|
19
|
+
|
20
|
+
def process
|
21
|
+
meth = method_object
|
22
|
+
aliases = meth.aliases
|
23
|
+
|
24
|
+
output.puts unindent <<-EOS
|
25
|
+
Method Information:
|
26
|
+
--
|
27
|
+
Name: #{meth.name}
|
28
|
+
Alias#{ "es" if aliases.length > 1 }: #{ aliases.any? ? aliases.join(", ") : "None." }
|
29
|
+
Owner: #{meth.owner ? meth.owner : "Unknown"}
|
30
|
+
Visibility: #{meth.visibility}
|
31
|
+
Type: #{meth.is_a?(::Method) ? "Bound" : "Unbound"}
|
32
|
+
Arity: #{meth.arity}
|
33
|
+
Method Signature: #{meth.signature}
|
34
|
+
Source Location: #{meth.source_location ? meth.source_location.join(":") : "Not found."}
|
35
|
+
EOS
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
Pry::Commands.add_command(Pry::Command::Stat)
|
40
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::SwitchTo < Pry::ClassCommand
|
3
|
+
match 'switch-to'
|
4
|
+
group 'Navigating Pry'
|
5
|
+
description 'Start a new subsession on a binding in the current stack.'
|
6
|
+
|
7
|
+
banner <<-'BANNER'
|
8
|
+
Start a new subsession on a binding in the current stack (numbered by nesting).
|
9
|
+
BANNER
|
10
|
+
|
11
|
+
def process(selection)
|
12
|
+
selection = selection.to_i
|
13
|
+
|
14
|
+
if selection < 0 || selection > _pry_.binding_stack.size - 1
|
15
|
+
raise CommandError, "Invalid binding index #{selection} - use `nesting` command to view valid indices."
|
16
|
+
else
|
17
|
+
Pry.start(_pry_.binding_stack[selection])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Pry::Commands.add_command(Pry::Command::SwitchTo)
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::ToggleColor < Pry::ClassCommand
|
3
|
+
match 'toggle-color'
|
4
|
+
group 'Misc'
|
5
|
+
description 'Toggle syntax highlighting.'
|
6
|
+
|
7
|
+
banner <<-'BANNER'
|
8
|
+
Usage: toggle-color
|
9
|
+
|
10
|
+
Toggle syntax highlighting.
|
11
|
+
BANNER
|
12
|
+
|
13
|
+
def process
|
14
|
+
Pry.color = !Pry.color
|
15
|
+
output.puts "Syntax highlighting #{Pry.color ? "on" : "off"}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Pry::Commands.add_command(Pry::Command::ToggleColor)
|
20
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Whereami < Pry::ClassCommand
|
3
|
+
match 'whereami'
|
4
|
+
description 'Show code surrounding the current context.'
|
5
|
+
group 'Context'
|
6
|
+
|
7
|
+
banner <<-'BANNER'
|
8
|
+
Usage: whereami [-qn] [N]
|
9
|
+
|
10
|
+
Describe the current location. If you use `binding.pry` inside a method then
|
11
|
+
whereami will print out the source for that method.
|
12
|
+
|
13
|
+
If a number is passed, then N lines before and after the current line will be
|
14
|
+
shown instead of the method itself.
|
15
|
+
|
16
|
+
The `-q` flag can be used to suppress error messages in the case that there's
|
17
|
+
no code to show. This is used by pry in the default before_session hook to show
|
18
|
+
you when you arrive at a `binding.pry`.
|
19
|
+
|
20
|
+
The `-n` flag can be used to hide line numbers so that code can be copy/pasted
|
21
|
+
effectively.
|
22
|
+
|
23
|
+
When pry was started on an Object and there is no associated method, whereami
|
24
|
+
will instead output a brief description of the current object.
|
25
|
+
BANNER
|
26
|
+
|
27
|
+
def setup
|
28
|
+
@method = Pry::Method.from_binding(target)
|
29
|
+
@file = target.eval('__FILE__')
|
30
|
+
@line = target.eval('__LINE__')
|
31
|
+
end
|
32
|
+
|
33
|
+
def options(opt)
|
34
|
+
opt.on :q, :quiet, "Don't display anything in case of an error"
|
35
|
+
opt.on :n, :"no-line-numbers", "Do not display line numbers"
|
36
|
+
end
|
37
|
+
|
38
|
+
def code
|
39
|
+
@code ||= if show_method?
|
40
|
+
Pry::Code.from_method(@method)
|
41
|
+
else
|
42
|
+
Pry::Code.from_file(@file).around(@line, window_size)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def location
|
47
|
+
"#{@file} @ line #{@line} #{@method && @method.name_with_owner}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def process
|
51
|
+
if nothing_to_do?
|
52
|
+
return
|
53
|
+
elsif internal_binding?(target)
|
54
|
+
handle_internal_binding
|
55
|
+
return
|
56
|
+
end
|
57
|
+
|
58
|
+
set_file_and_dir_locals(@file)
|
59
|
+
|
60
|
+
output.puts "\n#{text.bold('From:')} #{location}:\n\n"
|
61
|
+
output.puts code.with_line_numbers(use_line_numbers?).with_marker(marker)
|
62
|
+
output.puts
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def nothing_to_do?
|
68
|
+
opts.quiet? && (internal_binding?(target) || !code?)
|
69
|
+
end
|
70
|
+
|
71
|
+
def use_line_numbers?
|
72
|
+
!opts.present?(:n)
|
73
|
+
end
|
74
|
+
|
75
|
+
def marker
|
76
|
+
!opts.present?(:n) && @line
|
77
|
+
end
|
78
|
+
|
79
|
+
def top_level?
|
80
|
+
target_self == TOPLEVEL_BINDING.eval("self")
|
81
|
+
end
|
82
|
+
|
83
|
+
def handle_internal_binding
|
84
|
+
if top_level?
|
85
|
+
output.puts "At the top level."
|
86
|
+
else
|
87
|
+
output.puts "Inside #{Pry.view_clip(target_self)}."
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def show_method?
|
92
|
+
args.empty? && @method && @method.source? && @method.source_range.count < 20 &&
|
93
|
+
# These checks are needed in case of an eval with a binding and file/line
|
94
|
+
# numbers set to outside the function. As in rails' use of ERB.
|
95
|
+
@method.source_file == @file && @method.source_range.include?(@line)
|
96
|
+
end
|
97
|
+
|
98
|
+
def code?
|
99
|
+
!!code
|
100
|
+
rescue MethodSource::SourceNotFoundError
|
101
|
+
false
|
102
|
+
end
|
103
|
+
|
104
|
+
def window_size
|
105
|
+
if args.empty?
|
106
|
+
Pry.config.default_window_size
|
107
|
+
else
|
108
|
+
args.first.to_i
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
Pry::Commands.add_command(Pry::Command::Whereami)
|
114
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class Pry
|
2
|
+
class Command::Wtf < Pry::ClassCommand
|
3
|
+
match /wtf([?!]*)/
|
4
|
+
group 'Context'
|
5
|
+
description 'Show the backtrace of the most recent exception.'
|
6
|
+
options :listing => 'wtf?'
|
7
|
+
|
8
|
+
banner <<-'BANNER'
|
9
|
+
Usage: wtf[?|!]
|
10
|
+
|
11
|
+
Show's a few lines of the backtrace of the most recent exception (also available
|
12
|
+
as `_ex_.backtrace`). If you want to see more lines, add more question marks or
|
13
|
+
exclamation marks.
|
14
|
+
|
15
|
+
wtf?
|
16
|
+
wtf?!???!?!?
|
17
|
+
|
18
|
+
# To see the entire backtrace, pass the `-v` or `--verbose` flag.
|
19
|
+
wtf -v
|
20
|
+
BANNER
|
21
|
+
|
22
|
+
def options(opt)
|
23
|
+
opt.on :v, :verbose, "Show the full backtrace"
|
24
|
+
end
|
25
|
+
|
26
|
+
def process
|
27
|
+
raise Pry::CommandError, "No most-recent exception" unless exception
|
28
|
+
|
29
|
+
output.puts "#{text.bold('Exception:')} #{exception.class}: #{exception}\n--"
|
30
|
+
if opts.verbose?
|
31
|
+
output.puts with_line_numbers(backtrace)
|
32
|
+
else
|
33
|
+
output.puts with_line_numbers(backtrace.first(size_of_backtrace))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def exception
|
40
|
+
_pry_.last_exception
|
41
|
+
end
|
42
|
+
|
43
|
+
def with_line_numbers(bt)
|
44
|
+
Pry::Code.new(bt, 0, :text).with_line_numbers.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def backtrace
|
48
|
+
exception.backtrace
|
49
|
+
end
|
50
|
+
|
51
|
+
def size_of_backtrace
|
52
|
+
[captures[0].size, 0.5].max * 10
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Pry::Commands.add_command(Pry::Command::Wtf)
|
57
|
+
end
|