pry 0.10.2-i386-mingw32 → 1.0.0.pre1-i386-mingw32
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/.document +2 -0
- data/.gitignore +16 -0
- data/.travis.yml +21 -0
- data/.yardopts +3 -0
- data/CHANGELOG +503 -0
- data/CONTRIBUTORS +55 -0
- data/Gemfile +9 -0
- data/Guardfile +62 -0
- data/LICENSE +2 -2
- data/{README.md → README.markdown} +31 -37
- data/Rakefile +144 -0
- data/TODO +117 -0
- data/lib/pry.rb +146 -33
- data/lib/pry/cli.rb +13 -35
- data/lib/pry/code.rb +63 -24
- data/lib/pry/code/loc.rb +2 -2
- data/lib/pry/code_object.rb +21 -40
- data/lib/pry/command.rb +6 -9
- data/lib/pry/command_set.rb +37 -80
- data/lib/pry/commands.rb +1 -1
- data/lib/pry/commands/amend_line.rb +1 -1
- data/lib/pry/commands/bang.rb +1 -1
- data/lib/pry/commands/cat.rb +2 -11
- data/lib/pry/commands/cat/abstract_formatter.rb +1 -1
- data/lib/pry/commands/cat/exception_formatter.rb +7 -6
- data/lib/pry/commands/cat/file_formatter.rb +32 -15
- data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
- data/lib/pry/commands/cd.rb +3 -14
- data/lib/pry/commands/code_collector.rb +4 -4
- data/lib/pry/commands/easter_eggs.rb +3 -3
- data/lib/pry/commands/edit.rb +22 -10
- data/lib/pry/commands/edit/exception_patcher.rb +1 -1
- data/lib/pry/commands/edit/file_and_line_locator.rb +2 -0
- data/lib/pry/{method/patcher.rb → commands/edit/method_patcher.rb} +37 -40
- data/lib/pry/commands/find_method.rb +22 -16
- data/lib/pry/commands/gem_install.rb +2 -5
- data/lib/pry/commands/gem_open.rb +1 -1
- data/lib/pry/commands/gist.rb +11 -10
- data/lib/pry/commands/help.rb +14 -14
- data/lib/pry/commands/hist.rb +5 -24
- data/lib/pry/commands/ls.rb +287 -56
- data/lib/pry/commands/play.rb +10 -44
- data/lib/pry/commands/pry_backtrace.rb +2 -1
- data/lib/pry/commands/raise_up.rb +1 -1
- data/lib/pry/commands/reload_code.rb +15 -31
- data/lib/pry/commands/ri.rb +3 -7
- data/lib/pry/commands/shell_command.rb +12 -17
- data/lib/pry/commands/shell_mode.rb +2 -2
- data/lib/pry/commands/show_doc.rb +0 -5
- data/lib/pry/commands/show_info.rb +10 -11
- data/lib/pry/commands/show_source.rb +3 -15
- data/lib/pry/commands/simple_prompt.rb +1 -1
- data/lib/pry/commands/toggle_color.rb +4 -8
- data/lib/pry/commands/whereami.rb +10 -18
- data/lib/pry/completion.rb +293 -0
- data/lib/pry/config.rb +233 -20
- data/lib/pry/core_extensions.rb +19 -29
- data/lib/pry/custom_completions.rb +6 -0
- data/lib/pry/editor.rb +103 -109
- data/lib/pry/helpers/base_helpers.rb +109 -22
- data/lib/pry/helpers/command_helpers.rb +8 -10
- data/lib/pry/helpers/documentation_helpers.rb +2 -1
- data/lib/pry/helpers/text.rb +5 -4
- data/lib/pry/history.rb +10 -21
- data/lib/pry/history_array.rb +0 -5
- data/lib/pry/hooks.rb +29 -9
- data/lib/pry/indent.rb +10 -5
- data/lib/pry/method.rb +86 -81
- data/lib/pry/method/weird_method_locator.rb +2 -4
- data/lib/pry/module_candidate.rb +14 -5
- data/lib/pry/pager.rb +48 -193
- data/lib/pry/plugins.rb +2 -2
- data/lib/pry/pry_class.rb +193 -104
- data/lib/pry/pry_instance.rb +154 -152
- data/lib/pry/rbx_method.rb +13 -0
- data/lib/pry/rbx_path.rb +1 -1
- data/lib/pry/repl.rb +14 -17
- data/lib/pry/repl_file_loader.rb +3 -8
- data/lib/pry/rubygem.rb +3 -3
- data/lib/pry/terminal.rb +3 -4
- data/lib/pry/test/helper.rb +11 -6
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +56 -49
- data/man/pry.1 +195 -0
- data/man/pry.1.html +204 -0
- data/man/pry.1.ronn +141 -0
- data/pry.gemspec +31 -0
- data/spec/Procfile +3 -0
- data/spec/cli_spec.rb +78 -0
- data/spec/code_object_spec.rb +277 -0
- data/spec/code_spec.rb +219 -0
- data/spec/command_helpers_spec.rb +29 -0
- data/spec/command_integration_spec.rb +562 -0
- data/spec/command_set_spec.rb +627 -0
- data/spec/command_spec.rb +821 -0
- data/spec/commands/amend_line_spec.rb +247 -0
- data/spec/commands/bang_spec.rb +18 -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 +725 -0
- data/spec/commands/exit_all_spec.rb +27 -0
- data/spec/commands/exit_program_spec.rb +19 -0
- data/spec/commands/exit_spec.rb +28 -0
- data/spec/commands/find_method_spec.rb +70 -0
- data/spec/commands/gem_list_spec.rb +26 -0
- data/spec/commands/gist_spec.rb +79 -0
- data/spec/commands/help_spec.rb +56 -0
- data/spec/commands/hist_spec.rb +172 -0
- data/spec/commands/jump_to_spec.rb +15 -0
- data/spec/commands/ls_spec.rb +189 -0
- data/spec/commands/play_spec.rb +136 -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 +488 -0
- data/spec/commands/show_input_spec.rb +17 -0
- data/spec/commands/show_source_spec.rb +760 -0
- data/spec/commands/whereami_spec.rb +203 -0
- data/spec/completion_spec.rb +221 -0
- data/spec/control_d_handler_spec.rb +62 -0
- data/spec/documentation_helper_spec.rb +73 -0
- data/spec/editor_spec.rb +79 -0
- data/spec/exception_whitelist_spec.rb +21 -0
- data/spec/fixtures/candidate_helper1.rb +11 -0
- data/spec/fixtures/candidate_helper2.rb +8 -0
- data/spec/fixtures/example.erb +5 -0
- data/spec/fixtures/example_nesting.rb +33 -0
- data/spec/fixtures/show_source_doc_examples.rb +15 -0
- data/spec/fixtures/testlinkrc +2 -0
- data/spec/fixtures/testrc +2 -0
- data/spec/fixtures/testrcbad +2 -0
- data/spec/fixtures/whereami_helper.rb +6 -0
- data/spec/helper.rb +35 -0
- data/spec/helpers/bacon.rb +86 -0
- data/spec/helpers/mock_pry.rb +44 -0
- data/spec/helpers/repl_tester.rb +112 -0
- data/spec/helpers/table_spec.rb +105 -0
- data/spec/history_array_spec.rb +67 -0
- data/spec/hooks_spec.rb +522 -0
- data/spec/indent_spec.rb +301 -0
- data/spec/method_spec.rb +482 -0
- data/spec/prompt_spec.rb +61 -0
- data/spec/pry_defaults_spec.rb +420 -0
- data/spec/pry_history_spec.rb +69 -0
- data/spec/pry_output_spec.rb +95 -0
- data/spec/pry_repl_spec.rb +86 -0
- data/spec/pry_spec.rb +394 -0
- data/spec/pryrc_spec.rb +97 -0
- data/spec/run_command_spec.rb +25 -0
- data/spec/sticky_locals_spec.rb +147 -0
- data/spec/syntax_checking_spec.rb +81 -0
- data/spec/wrapped_module_spec.rb +261 -0
- data/wiki/Customizing-pry.md +397 -0
- data/wiki/Home.md +4 -0
- metadata +272 -61
- checksums.yaml +0 -7
- data/CHANGELOG.md +0 -714
- data/lib/pry/code/code_file.rb +0 -103
- data/lib/pry/color_printer.rb +0 -55
- data/lib/pry/commands/change_inspector.rb +0 -27
- data/lib/pry/commands/change_prompt.rb +0 -26
- data/lib/pry/commands/list_inspectors.rb +0 -35
- data/lib/pry/commands/list_prompts.rb +0 -35
- data/lib/pry/commands/ls/constants.rb +0 -47
- data/lib/pry/commands/ls/formatter.rb +0 -49
- data/lib/pry/commands/ls/globals.rb +0 -48
- data/lib/pry/commands/ls/grep.rb +0 -21
- data/lib/pry/commands/ls/instance_vars.rb +0 -39
- data/lib/pry/commands/ls/interrogatable.rb +0 -18
- data/lib/pry/commands/ls/jruby_hacks.rb +0 -49
- data/lib/pry/commands/ls/local_names.rb +0 -35
- data/lib/pry/commands/ls/local_vars.rb +0 -39
- data/lib/pry/commands/ls/ls_entity.rb +0 -70
- data/lib/pry/commands/ls/methods.rb +0 -57
- data/lib/pry/commands/ls/methods_helper.rb +0 -46
- data/lib/pry/commands/ls/self_methods.rb +0 -32
- data/lib/pry/commands/watch_expression.rb +0 -105
- data/lib/pry/commands/watch_expression/expression.rb +0 -38
- data/lib/pry/config/behavior.rb +0 -139
- data/lib/pry/config/convenience.rb +0 -25
- data/lib/pry/config/default.rb +0 -161
- data/lib/pry/exceptions.rb +0 -78
- data/lib/pry/input_completer.rb +0 -242
- data/lib/pry/input_lock.rb +0 -132
- data/lib/pry/inspector.rb +0 -27
- data/lib/pry/last_exception.rb +0 -61
- data/lib/pry/object_path.rb +0 -82
- data/lib/pry/output.rb +0 -50
- data/lib/pry/prompt.rb +0 -26
data/TODO
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
0.9.5
|
2
|
+
* include method visiblity in show-doc and stat output
|
3
|
+
* tempfile should end in .rb (for edit -t)
|
4
|
+
* ls output should not be in array format
|
5
|
+
* exceptions should allow access to previous items in the backtrace
|
6
|
+
* input should allow multiple objects which are switched to automatically when EOF is reached on the preceding one
|
7
|
+
* pry -r should happen in pry
|
8
|
+
* more plugin-related commands in pry - see installed ones, see activated ones, see available on rubygems
|
9
|
+
* should also allow plugins be explicitly activated as a command line option
|
10
|
+
* should not raise if plugin activation fails (should show warning instead)
|
11
|
+
* more documentation on CommandContext, etc and also command helpers
|
12
|
+
* fix history saving (should not save all of Readline::HISTORY, but only what changed)
|
13
|
+
* prevent blank lines going to Readline::HISTORY
|
14
|
+
* ensure that cat --ex emulates the `whereami` format - includes line numbers and formatted the same, etc
|
15
|
+
* rename inp and out to _inp_ and _out_ otherwise than can overwrite locals by those names when debugging (not good)
|
16
|
+
* add source file to stat command
|
17
|
+
* make plugins use hash instead of array
|
18
|
+
* ensure edit -t has 'edit' alias (no parameters) and dumps eval_string into buffer
|
19
|
+
* whitelist exceptions
|
20
|
+
* hooks system
|
21
|
+
* jruby shell command support
|
22
|
+
|
23
|
+
0.9.3
|
24
|
+
* hist command now excludes last line of input (the command invocation itself)
|
25
|
+
* hist now has `history` alias
|
26
|
+
* `pry -r` requires now happen after plugin loading (so as not to interfere with
|
27
|
+
* new Pry.config.disable_auto_reload option, for turning off auto reloading by edit-method and related
|
28
|
+
* add better error messages for `cd` command
|
29
|
+
* add command_prefix
|
30
|
+
* change some command names to include hyphen, e.g version => pry-version, install => install-command
|
31
|
+
* do cat --ex and edit --ex
|
32
|
+
* add reload-method
|
33
|
+
* fixed exotic object regression - BasicObject.new etc now return "=> unknown"
|
34
|
+
* converted: import => import-set, version => pry-version, install => install-command
|
35
|
+
* fix show-doc bug for ruby 1.8 and Kernel.fork
|
36
|
+
* edit -t (opens a temporary file and evals it in current context when closed)
|
37
|
+
|
38
|
+
0.9.0
|
39
|
+
Major features
|
40
|
+
--------------
|
41
|
+
* Restructure command system and helpers (almost complete)
|
42
|
+
* Delete unnecessary commands, add a couple of new ones (e.g amend-line)
|
43
|
+
* Readline history
|
44
|
+
* Plugin support
|
45
|
+
* Support Rubinius core methods
|
46
|
+
* in[] and out[] arrays
|
47
|
+
* Improve test coverage (test some commands, etc)
|
48
|
+
|
49
|
+
Minor changes
|
50
|
+
-------------
|
51
|
+
* improve edit-method support for various editors
|
52
|
+
* ensure all commands have appropriate error handing and informative error messages
|
53
|
+
* show-doc should include signature of method
|
54
|
+
|
55
|
+
Optional
|
56
|
+
--------
|
57
|
+
* multi-line readline support
|
58
|
+
|
59
|
+
|
60
|
+
0.8.0
|
61
|
+
* allow #{} interpolation of all commands
|
62
|
+
* update documentation! new commands and features and change in behaviour of `run`
|
63
|
+
* add ; at end of line to suppress return value output
|
64
|
+
* Remove message spam (before/after hooks)
|
65
|
+
* stop commands returning a value
|
66
|
+
* use `redo` in the r() method when encounter a command
|
67
|
+
* shell functionality should just use system(), but redirect in and
|
68
|
+
out to Pry.input and Pry.output by reassining $stdin and $stdout
|
69
|
+
for duration of block.
|
70
|
+
* basicobject and no to_s/inspect support
|
71
|
+
* fix documentation, support rdoc and yard properly
|
72
|
+
* only load Ripper if 1.9 AND MRI (support jruby 1.9, using
|
73
|
+
RubyParser)
|
74
|
+
* shell commands invokable file .<command>
|
75
|
+
* supercharge cat-file so it can syntax highlight sourcecode files
|
76
|
+
|
77
|
+
|
78
|
+
0.7.0
|
79
|
+
* add pry-doc support with syntax highlighting for docs
|
80
|
+
* add 'mj' option to ls (restrict to singleton methods)
|
81
|
+
* add _ex_ local to hold last exception raised in an exception
|
82
|
+
|
83
|
+
0.6.8
|
84
|
+
* add whereami command, a la the `ir_b` gem
|
85
|
+
* make .pryrc be loaded by run-time pry sessions
|
86
|
+
|
87
|
+
0.6.7
|
88
|
+
* color support
|
89
|
+
* --simple-prompt for pry commandline
|
90
|
+
* -I mode for pry commandline
|
91
|
+
* --color mode for pry commandline
|
92
|
+
* clean up requires (put them all in one place)
|
93
|
+
* simple-prompt command and toggle-color commandd.
|
94
|
+
|
95
|
+
0.6.1
|
96
|
+
* !@ command alias for exit_all
|
97
|
+
* `cd /` for breaking out to pry top level (jump-to 0)
|
98
|
+
* made `-e` option work in a more effective way for `pry` command line invocation
|
99
|
+
* exit and exit-all commands now accept a parameter, this parameter becomes the return value of repl()
|
100
|
+
* `command` method from CommandBase now accepts a :keep_retval arg that determines if command value is returned to pry session or just `nil` (`nil` was old behaviour)
|
101
|
+
* tests for new :keep_retval and exit-all/exit behaviour; :keep_retval will remain undocumented.
|
102
|
+
|
103
|
+
0.5.0 release:
|
104
|
+
* !!!! UPDATE DOCUMENTATION !!!!
|
105
|
+
* Use clipped version of Pry.view() for large objects
|
106
|
+
* Exit Pry session on ^d
|
107
|
+
* Use Shellwords for breaking up parameters to pry commands
|
108
|
+
* Use OptionParser to parse options for default pry commands
|
109
|
+
* Add version command
|
110
|
+
* Refactor 'status' command: add current method info
|
111
|
+
* Add meth_name_from_binding utility lambda to commands.rb
|
112
|
+
* Add -M, -m, -v(erbose), -a(ll), -s(uper), -l(ocals), -i(ivars), -k(klass vars) options to ls
|
113
|
+
* add -i(nstance) option to show-method
|
114
|
+
* add --help option to most commands
|
115
|
+
* Get rid of ls_method and ls_imethods (subsumed by more powerful ls)
|
116
|
+
* Get rid of show_idoc and show_imethod
|
117
|
+
* Add special eval-file command that evals target file in current context
|
data/lib/pry.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
|
-
# (C) John Mair (banisterfiend)
|
1
|
+
# (C) John Mair (banisterfiend) 2011
|
2
2
|
# MIT License
|
3
3
|
#
|
4
|
-
require 'pp'
|
5
4
|
|
6
|
-
require '
|
7
|
-
require 'pry/exceptions'
|
5
|
+
require 'pp'
|
8
6
|
require 'pry/helpers/base_helpers'
|
9
7
|
require 'pry/hooks'
|
10
|
-
require 'forwardable'
|
11
8
|
|
12
9
|
class Pry
|
13
10
|
# The default hooks - display messages when beginning and ending Pry sessions.
|
@@ -17,11 +14,42 @@ class Pry
|
|
17
14
|
end
|
18
15
|
|
19
16
|
# The default print
|
20
|
-
DEFAULT_PRINT = proc do |output, value
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
DEFAULT_PRINT = proc do |output, value|
|
18
|
+
output_with_default_format(output, value, :hashrocket => true)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.output_with_default_format(output, value, options = {})
|
22
|
+
stringified = begin
|
23
|
+
value.pretty_inspect
|
24
|
+
rescue RescuableException
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
unless String === stringified
|
29
|
+
# Read the class name off of the singleton class to provide a default
|
30
|
+
# inspect.
|
31
|
+
eig = class << value; self; end
|
32
|
+
klass = Pry::Method.safe_send(eig, :ancestors).first
|
33
|
+
id = value.__id__.to_s(16) rescue 0
|
34
|
+
stringified = "#<#{klass}:0x#{id}>"
|
24
35
|
end
|
36
|
+
|
37
|
+
nonce = rand(0x100000000).to_s(16) # whatever
|
38
|
+
|
39
|
+
stringified.gsub!(/#</, "%<#{nonce}")
|
40
|
+
# Don't recolorize output with color (for cucumber, looksee, etc.) [Issue #751]
|
41
|
+
colorized = if stringified =~ /\e\[/
|
42
|
+
stringified
|
43
|
+
else
|
44
|
+
Helpers::BaseHelpers.colorize_code(stringified)
|
45
|
+
end
|
46
|
+
|
47
|
+
# avoid colour-leak from CodeRay and any of the users' previous output
|
48
|
+
colorized = colorized.sub(/(\n*)\z/, "\e[0m\\1") if Pry.color
|
49
|
+
|
50
|
+
result = colorized.gsub(/%<(.*?)#{nonce}/, '#<\1')
|
51
|
+
result = "=> #{result}"if options[:hashrocket]
|
52
|
+
Helpers::BaseHelpers.stagger_output(result, output)
|
25
53
|
end
|
26
54
|
|
27
55
|
# may be convenient when working with enormous objects and
|
@@ -36,7 +64,7 @@ class Pry
|
|
36
64
|
|
37
65
|
# useful when playing with truly enormous objects
|
38
66
|
CLIPPED_PRINT = proc do |output, value|
|
39
|
-
output.puts Pry.view_clip(value
|
67
|
+
output.puts Pry.view_clip(value)
|
40
68
|
end
|
41
69
|
|
42
70
|
# Will only show the first line of the backtrace
|
@@ -54,36 +82,32 @@ class Pry
|
|
54
82
|
# The default prompt; includes the target and nesting level
|
55
83
|
DEFAULT_PROMPT = [
|
56
84
|
proc { |target_self, nest_level, pry|
|
57
|
-
"[#{pry.input_array.size}] #{
|
85
|
+
"[#{pry.input_array.size}] #{Pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}> "
|
58
86
|
},
|
59
87
|
|
60
88
|
proc { |target_self, nest_level, pry|
|
61
|
-
"[#{pry.input_array.size}] #{
|
89
|
+
"[#{pry.input_array.size}] #{Pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}* "
|
62
90
|
}
|
63
91
|
]
|
64
92
|
|
65
|
-
DEFAULT_PROMPT_SAFE_OBJECTS = [String, Numeric, Symbol, nil, true, false]
|
66
|
-
|
67
93
|
# A simple prompt - doesn't display target or nesting level
|
68
94
|
SIMPLE_PROMPT = [proc { ">> " }, proc { " | " }]
|
69
95
|
|
70
|
-
NO_PROMPT = [proc { '' }, proc { '' }]
|
71
|
-
|
72
96
|
SHELL_PROMPT = [
|
73
|
-
proc { |target_self, _,
|
74
|
-
proc { |target_self, _,
|
97
|
+
proc { |target_self, _, _| "#{Pry.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
|
98
|
+
proc { |target_self, _, _| "#{Pry.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} * " }
|
75
99
|
]
|
76
100
|
|
77
101
|
# A prompt that includes the full object path as well as
|
78
102
|
# input/output (_in_ and _out_) information. Good for navigation.
|
79
103
|
NAV_PROMPT = [
|
80
|
-
proc do |
|
81
|
-
tree =
|
82
|
-
"[#{
|
104
|
+
proc do |conf|
|
105
|
+
tree = conf.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
|
106
|
+
"[#{conf.expr_number}] (#{Pry.config.prompt_name}) #{tree}: #{conf.nesting_level}> "
|
83
107
|
end,
|
84
|
-
proc do |
|
85
|
-
tree =
|
86
|
-
"[#{
|
108
|
+
proc do |conf|
|
109
|
+
tree = conf.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
|
110
|
+
"[#{conf.expr_number}] (#{ Pry.config.prompt_name}) #{tree}: #{conf.nesting_level}* "
|
87
111
|
end,
|
88
112
|
]
|
89
113
|
|
@@ -100,7 +124,7 @@ class Pry
|
|
100
124
|
else
|
101
125
|
# Otherwise, saves current binding stack as old stack and pops last
|
102
126
|
# binding out of binding stack (the old stack still has that binding).
|
103
|
-
_pry_.command_state["cd"] ||=
|
127
|
+
_pry_.command_state["cd"] ||= OpenStruct.new # FIXME
|
104
128
|
_pry_.command_state['cd'].old_stack = _pry_.binding_stack.dup
|
105
129
|
_pry_.binding_stack.pop
|
106
130
|
end
|
@@ -116,9 +140,70 @@ class Pry
|
|
116
140
|
# your process has changed directory since boot. [Issue #675]
|
117
141
|
INITIAL_PWD = Dir.pwd
|
118
142
|
|
143
|
+
# As a REPL, we often want to catch any unexpected exceptions that may have
|
144
|
+
# been raised; however we don't want to go overboard and prevent the user
|
145
|
+
# from exiting Pry when they want to.
|
146
|
+
module RescuableException
|
147
|
+
def self.===(exception)
|
148
|
+
case exception
|
149
|
+
# Catch when the user hits ^C (Interrupt < SignalException), and assume
|
150
|
+
# that they just wanted to stop the in-progress command (just like bash etc.)
|
151
|
+
when Interrupt
|
152
|
+
true
|
153
|
+
# Don't catch signals (particularly not SIGTERM) as these are unlikely to be
|
154
|
+
# intended for pry itself. We should also make sure that Kernel#exit works.
|
155
|
+
when *Pry.config.exception_whitelist
|
156
|
+
false
|
157
|
+
# All other exceptions will be caught.
|
158
|
+
else
|
159
|
+
true
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
# An Exception Tag (cf. Exceptional Ruby) that instructs Pry to show the error in
|
165
|
+
# a more user-friendly manner. This should be used when the exception happens within
|
166
|
+
# Pry itself as a direct consequence of the user typing something wrong.
|
167
|
+
#
|
168
|
+
# This allows us to distinguish between the user typing:
|
169
|
+
#
|
170
|
+
# pry(main)> def )
|
171
|
+
# SyntaxError: unexpected )
|
172
|
+
#
|
173
|
+
# pry(main)> method_that_evals("def )")
|
174
|
+
# SyntaxError: (eval):1: syntax error, unexpected ')'
|
175
|
+
# from ./a.rb:2 in `eval'
|
176
|
+
module UserError; end
|
177
|
+
|
178
|
+
# Catches SecurityErrors if $SAFE is set
|
179
|
+
module TooSafeException
|
180
|
+
def self.===(exception)
|
181
|
+
$SAFE > 0 && SecurityError === exception
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
# Don't catch these exceptions
|
186
|
+
DEFAULT_EXCEPTION_WHITELIST = [SystemExit, SignalException, Pry::TooSafeException]
|
187
|
+
|
188
|
+
# CommandErrors are caught by the REPL loop and displayed to the user. They
|
189
|
+
# indicate an exceptional condition that's fatal to the current command.
|
190
|
+
class CommandError < StandardError; end
|
191
|
+
class MethodNotFound < CommandError; end
|
192
|
+
|
193
|
+
# indicates obsolete API
|
194
|
+
class ObsoleteError < StandardError; end
|
195
|
+
|
119
196
|
# This is to keep from breaking under Rails 3.2 for people who are doing that
|
120
197
|
# IRB = Pry thing.
|
121
|
-
module ExtendCommandBundle
|
198
|
+
module ExtendCommandBundle
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
if Pry::Helpers::BaseHelpers.mri_18?
|
203
|
+
begin
|
204
|
+
require 'ruby18_source_location'
|
205
|
+
rescue LoadError
|
206
|
+
end
|
122
207
|
end
|
123
208
|
|
124
209
|
require 'method_source'
|
@@ -130,8 +215,41 @@ require 'rbconfig'
|
|
130
215
|
require 'tempfile'
|
131
216
|
require 'pathname'
|
132
217
|
|
218
|
+
begin
|
219
|
+
require 'readline'
|
220
|
+
rescue LoadError
|
221
|
+
warn "You're running a version of ruby with no Readline support"
|
222
|
+
warn "Please `gem install rb-readline` or recompile ruby --with-readline."
|
223
|
+
exit!
|
224
|
+
end
|
225
|
+
|
226
|
+
if Pry::Helpers::BaseHelpers.jruby?
|
227
|
+
begin
|
228
|
+
require 'ffi'
|
229
|
+
rescue LoadError
|
230
|
+
warn "Need to `gem install ffi`"
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
if Pry::Helpers::BaseHelpers.windows? && !Pry::Helpers::BaseHelpers.windows_ansi?
|
235
|
+
begin
|
236
|
+
require 'win32console'
|
237
|
+
# The mswin and mingw versions of pry require win32console, so this should
|
238
|
+
# only fail on jruby (where win32console doesn't work).
|
239
|
+
# Instead we'll recommend ansicon, which does.
|
240
|
+
rescue LoadError
|
241
|
+
warn "For a better pry experience, please use ansicon: http://adoxa.3eeweb.com/ansicon/"
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
begin
|
246
|
+
require 'bond'
|
247
|
+
rescue LoadError
|
248
|
+
end
|
249
|
+
|
133
250
|
require 'pry/version'
|
134
251
|
require 'pry/repl'
|
252
|
+
require 'pry/rbx_method'
|
135
253
|
require 'pry/rbx_path'
|
136
254
|
require 'pry/code'
|
137
255
|
require 'pry/history_array'
|
@@ -143,19 +261,14 @@ require 'pry/history'
|
|
143
261
|
require 'pry/command'
|
144
262
|
require 'pry/command_set'
|
145
263
|
require 'pry/commands'
|
264
|
+
require 'pry/custom_completions'
|
265
|
+
require 'pry/completion'
|
146
266
|
require 'pry/plugins'
|
147
267
|
require 'pry/core_extensions'
|
148
268
|
require 'pry/pry_class'
|
149
269
|
require 'pry/pry_instance'
|
150
270
|
require 'pry/cli'
|
151
|
-
require 'pry/color_printer'
|
152
271
|
require 'pry/pager'
|
153
272
|
require 'pry/terminal'
|
154
273
|
require 'pry/editor'
|
155
274
|
require 'pry/rubygem'
|
156
|
-
require "pry/indent"
|
157
|
-
require "pry/last_exception"
|
158
|
-
require "pry/prompt"
|
159
|
-
require "pry/inspector"
|
160
|
-
require 'pry/object_path'
|
161
|
-
require 'pry/output'
|
data/lib/pry/cli.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
class Pry
|
2
3
|
|
3
4
|
# Manage the processing of command line options
|
@@ -10,9 +11,7 @@ class Pry
|
|
10
11
|
# @return [Proc] The Proc defining the valid command line options.
|
11
12
|
attr_accessor :options
|
12
13
|
|
13
|
-
# @return [Array] The Procs that process the parsed options.
|
14
|
-
# utilize this facility in order to add and process their own Pry
|
15
|
-
# options.
|
14
|
+
# @return [Array] The Procs that process the parsed options.
|
16
15
|
attr_accessor :option_processors
|
17
16
|
|
18
17
|
# @return [Array<String>] The input array of strings to process
|
@@ -44,7 +43,7 @@ class Pry
|
|
44
43
|
end
|
45
44
|
|
46
45
|
# Add a block responsible for processing parsed options.
|
47
|
-
def
|
46
|
+
def process_options(&block)
|
48
47
|
self.option_processors ||= []
|
49
48
|
option_processors << block
|
50
49
|
|
@@ -57,26 +56,14 @@ class Pry
|
|
57
56
|
self.option_processors = nil
|
58
57
|
end
|
59
58
|
|
60
|
-
def parse_options(args=ARGV)
|
59
|
+
def parse_options(args=ARGV.dup)
|
61
60
|
unless options
|
62
61
|
raise NoOptionsError, "No command line options defined! Use Pry::CLI.add_options to add command line options."
|
63
62
|
end
|
64
63
|
|
65
64
|
self.input_args = args
|
66
65
|
|
67
|
-
|
68
|
-
opts = Slop.parse!(
|
69
|
-
args,
|
70
|
-
:help => true,
|
71
|
-
:multiple_switches => false,
|
72
|
-
:strict => true,
|
73
|
-
&options
|
74
|
-
)
|
75
|
-
rescue Slop::InvalidOptionError
|
76
|
-
# Display help message on unknown switches and exit.
|
77
|
-
puts Slop.new(&options)
|
78
|
-
exit
|
79
|
-
end
|
66
|
+
opts = Slop.parse!(args, :help => true, :multiple_switches => false, &options)
|
80
67
|
|
81
68
|
# Option processors are optional.
|
82
69
|
if option_processors
|
@@ -104,19 +91,19 @@ Slop.new do
|
|
104
91
|
end.parse(ARGV.dup)
|
105
92
|
|
106
93
|
if Pry.config.should_load_plugins
|
107
|
-
Pry::CLI.add_plugin_options
|
94
|
+
Pry::CLI.add_plugin_options
|
108
95
|
end
|
109
96
|
|
110
97
|
# The default Pry command line options (before plugin options are included)
|
111
98
|
Pry::CLI.add_options do
|
112
99
|
banner %{Usage: pry [OPTIONS]
|
113
100
|
Start a Pry session.
|
114
|
-
See
|
101
|
+
See: `https://github.com/pry` for more information.
|
115
102
|
Copyright (c) 2013 John Mair (banisterfiend)
|
116
103
|
--
|
117
104
|
}
|
118
105
|
on :e, :exec=, "A line of code to execute in context before the session starts" do |input|
|
119
|
-
exec_string << input
|
106
|
+
exec_string << input + "\n"
|
120
107
|
end
|
121
108
|
|
122
109
|
on "no-pager", "Disable pager for long output" do
|
@@ -128,7 +115,7 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
128
115
|
end
|
129
116
|
|
130
117
|
on "no-color", "Disable syntax highlighting for session" do
|
131
|
-
Pry.
|
118
|
+
Pry.color = false
|
132
119
|
end
|
133
120
|
|
134
121
|
on :f, "Suppress loading of ~/.pryrc and ./.pryrc" do
|
@@ -149,11 +136,11 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
149
136
|
Pry.config.should_load_plugins = false
|
150
137
|
end
|
151
138
|
|
152
|
-
on "plugins", "List installed plugins." do
|
139
|
+
on "installed-plugins", "List installed plugins." do
|
153
140
|
puts "Installed Plugins:"
|
154
141
|
puts "--"
|
155
142
|
Pry.locate_plugins.each do |plugin|
|
156
|
-
puts "#{plugin.name}".ljust(18)
|
143
|
+
puts "#{plugin.name}".ljust(18) + plugin.spec.summary
|
157
144
|
end
|
158
145
|
exit
|
159
146
|
end
|
@@ -162,10 +149,6 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
162
149
|
Pry.config.prompt = Pry::SIMPLE_PROMPT
|
163
150
|
end
|
164
151
|
|
165
|
-
on "noprompt", "No prompt mode" do
|
166
|
-
Pry.config.prompt = Pry::NO_PROMPT
|
167
|
-
end
|
168
|
-
|
169
152
|
on :r, :require=, "`require` a Ruby script at startup" do |file|
|
170
153
|
Pry.config.requires << file
|
171
154
|
end
|
@@ -194,7 +177,7 @@ Copyright (c) 2013 John Mair (banisterfiend)
|
|
194
177
|
"Start the session in the specified context. Equivalent to `context.pry` in a session.",
|
195
178
|
:default => "Pry.toplevel_binding"
|
196
179
|
)
|
197
|
-
end.
|
180
|
+
end.process_options do |opts|
|
198
181
|
|
199
182
|
exit if opts.help?
|
200
183
|
|
@@ -202,12 +185,7 @@ end.add_option_processor do |opts|
|
|
202
185
|
Pry.cli = true
|
203
186
|
|
204
187
|
# create the actual context
|
205
|
-
|
206
|
-
Pry.initial_session_setup
|
207
|
-
context = Pry.binding_for(eval(opts[:context]))
|
208
|
-
else
|
209
|
-
context = Pry.toplevel_binding
|
210
|
-
end
|
188
|
+
context = Pry.binding_for(eval(opts[:context]))
|
211
189
|
|
212
190
|
if Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
|
213
191
|
full_name = File.expand_path(Pry::CLI.input_args.first)
|