pry 0.9.12.2 → 0.14.2
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 +1141 -0
- data/LICENSE +2 -2
- data/README.md +466 -0
- data/bin/pry +4 -7
- data/lib/pry/basic_object.rb +10 -0
- data/lib/pry/block_command.rb +22 -0
- data/lib/pry/class_command.rb +194 -0
- data/lib/pry/cli.rb +97 -92
- data/lib/pry/code/code_file.rb +114 -0
- data/lib/pry/code/code_range.rb +7 -4
- data/lib/pry/code/loc.rb +27 -14
- data/lib/pry/code.rb +62 -90
- data/lib/pry/code_object.rb +83 -39
- data/lib/pry/color_printer.rb +66 -0
- data/lib/pry/command.rb +202 -371
- data/lib/pry/command_set.rb +151 -133
- data/lib/pry/command_state.rb +31 -0
- data/lib/pry/commands/amend_line.rb +86 -82
- data/lib/pry/commands/bang.rb +18 -14
- data/lib/pry/commands/bang_pry.rb +15 -11
- data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
- data/lib/pry/commands/cat/exception_formatter.rb +85 -73
- data/lib/pry/commands/cat/file_formatter.rb +56 -63
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cat.rb +64 -47
- data/lib/pry/commands/cd.rb +42 -26
- data/lib/pry/commands/change_inspector.rb +34 -0
- data/lib/pry/commands/change_prompt.rb +51 -0
- data/lib/pry/commands/clear_screen.rb +20 -0
- data/lib/pry/commands/code_collector.rb +148 -131
- data/lib/pry/commands/disable_pry.rb +23 -19
- data/lib/pry/commands/easter_eggs.rb +23 -34
- data/lib/pry/commands/edit/exception_patcher.rb +21 -17
- data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
- data/lib/pry/commands/edit.rb +183 -167
- data/lib/pry/commands/exit.rb +40 -35
- data/lib/pry/commands/exit_all.rb +24 -20
- data/lib/pry/commands/exit_program.rb +20 -17
- data/lib/pry/commands/find_method.rb +167 -167
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +153 -132
- data/lib/pry/commands/import_set.rb +20 -15
- data/lib/pry/commands/jump_to.rb +25 -21
- data/lib/pry/commands/list_inspectors.rb +42 -0
- data/lib/pry/commands/ls/constants.rb +75 -0
- data/lib/pry/commands/ls/formatter.rb +55 -0
- data/lib/pry/commands/ls/globals.rb +50 -0
- data/lib/pry/commands/ls/grep.rb +23 -0
- data/lib/pry/commands/ls/instance_vars.rb +40 -0
- data/lib/pry/commands/ls/interrogatable.rb +24 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
- data/lib/pry/commands/ls/local_names.rb +37 -0
- data/lib/pry/commands/ls/local_vars.rb +47 -0
- data/lib/pry/commands/ls/ls_entity.rb +65 -0
- data/lib/pry/commands/ls/methods.rb +55 -0
- data/lib/pry/commands/ls/methods_helper.rb +50 -0
- data/lib/pry/commands/ls/self_methods.rb +34 -0
- data/lib/pry/commands/ls.rb +100 -303
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +93 -49
- data/lib/pry/commands/pry_backtrace.rb +22 -18
- data/lib/pry/commands/pry_version.rb +15 -11
- data/lib/pry/commands/raise_up.rb +33 -27
- data/lib/pry/commands/reload_code.rb +57 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +57 -38
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +66 -34
- data/lib/pry/commands/shell_mode.rb +22 -20
- data/lib/pry/commands/show_doc.rb +80 -65
- data/lib/pry/commands/show_info.rb +193 -159
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +113 -33
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +21 -13
- data/lib/pry/commands/watch_expression/expression.rb +43 -0
- data/lib/pry/commands/watch_expression.rb +110 -0
- data/lib/pry/commands/whereami.rb +157 -134
- data/lib/pry/commands/wtf.rb +78 -40
- 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/config.rb +290 -220
- data/lib/pry/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +50 -27
- data/lib/pry/editor.rb +130 -102
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +73 -0
- data/lib/pry/forwardable.rb +27 -0
- data/lib/pry/helpers/base_helpers.rb +22 -151
- data/lib/pry/helpers/command_helpers.rb +55 -63
- data/lib/pry/helpers/documentation_helpers.rb +21 -13
- data/lib/pry/helpers/options_helpers.rb +15 -8
- data/lib/pry/helpers/platform.rb +55 -0
- data/lib/pry/helpers/table.rb +44 -32
- data/lib/pry/helpers/text.rb +96 -86
- data/lib/pry/helpers.rb +3 -0
- data/lib/pry/history.rb +101 -70
- data/lib/pry/hooks.rb +67 -137
- data/lib/pry/indent.rb +79 -73
- data/lib/pry/input_completer.rb +283 -0
- data/lib/pry/input_lock.rb +129 -0
- data/lib/pry/inspector.rb +39 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method/disowned.rb +19 -5
- data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
- data/lib/pry/method/weird_method_locator.rb +80 -44
- data/lib/pry/method.rb +225 -176
- data/lib/pry/object_path.rb +91 -0
- data/lib/pry/output.rb +136 -0
- data/lib/pry/pager.rb +227 -68
- data/lib/pry/prompt.rb +214 -0
- data/lib/pry/pry_class.rb +216 -289
- data/lib/pry/pry_instance.rb +438 -500
- data/lib/pry/repl.rb +256 -0
- data/lib/pry/repl_file_loader.rb +34 -35
- data/lib/pry/ring.rb +89 -0
- data/lib/pry/slop/LICENSE +20 -0
- data/lib/pry/slop/commands.rb +190 -0
- data/lib/pry/slop/option.rb +210 -0
- data/lib/pry/slop.rb +672 -0
- data/lib/pry/syntax_highlighter.rb +26 -0
- data/lib/pry/system_command_handler.rb +17 -0
- data/lib/pry/testable/evalable.rb +24 -0
- data/lib/pry/testable/mockable.rb +22 -0
- data/lib/pry/testable/pry_tester.rb +88 -0
- data/lib/pry/testable/utility.rb +34 -0
- data/lib/pry/testable/variables.rb +52 -0
- data/lib/pry/testable.rb +68 -0
- data/lib/pry/version.rb +3 -1
- data/lib/pry/warning.rb +20 -0
- data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
- data/lib/pry/wrapped_module.rb +102 -103
- data/lib/pry.rb +135 -261
- metadata +94 -283
- data/.document +0 -2
- data/.gitignore +0 -16
- data/.travis.yml +0 -21
- data/.yardopts +0 -1
- data/CHANGELOG +0 -534
- data/CONTRIBUTORS +0 -55
- data/Gemfile +0 -9
- data/Guardfile +0 -62
- data/README.markdown +0 -400
- data/Rakefile +0 -140
- data/TODO +0 -117
- 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 -29
- data/lib/pry/commands/gem_list.rb +0 -33
- data/lib/pry/commands/gem_open.rb +0 -29
- data/lib/pry/commands/gist.rb +0 -102
- data/lib/pry/commands/install_command.rb +0 -51
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/commands.rb +0 -6
- data/lib/pry/completion.rb +0 -304
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/history_array.rb +0 -116
- data/lib/pry/plugins.rb +0 -103
- data/lib/pry/rbx_method.rb +0 -13
- data/lib/pry/rbx_path.rb +0 -22
- data/lib/pry/rubygem.rb +0 -74
- data/lib/pry/terminal.rb +0 -78
- data/lib/pry/test/helper.rb +0 -185
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -30
- data/spec/Procfile +0 -3
- data/spec/cli_spec.rb +0 -78
- data/spec/code_object_spec.rb +0 -277
- data/spec/code_spec.rb +0 -219
- data/spec/command_helpers_spec.rb +0 -29
- data/spec/command_integration_spec.rb +0 -644
- data/spec/command_set_spec.rb +0 -627
- data/spec/command_spec.rb +0 -821
- data/spec/commands/amend_line_spec.rb +0 -247
- data/spec/commands/bang_spec.rb +0 -19
- data/spec/commands/cat_spec.rb +0 -164
- data/spec/commands/cd_spec.rb +0 -250
- data/spec/commands/disable_pry_spec.rb +0 -25
- data/spec/commands/edit_spec.rb +0 -727
- data/spec/commands/exit_all_spec.rb +0 -34
- data/spec/commands/exit_program_spec.rb +0 -19
- data/spec/commands/exit_spec.rb +0 -34
- data/spec/commands/find_method_spec.rb +0 -70
- data/spec/commands/gem_list_spec.rb +0 -26
- data/spec/commands/gist_spec.rb +0 -79
- data/spec/commands/help_spec.rb +0 -56
- data/spec/commands/hist_spec.rb +0 -181
- data/spec/commands/jump_to_spec.rb +0 -15
- data/spec/commands/ls_spec.rb +0 -181
- data/spec/commands/play_spec.rb +0 -140
- data/spec/commands/raise_up_spec.rb +0 -56
- data/spec/commands/save_file_spec.rb +0 -177
- data/spec/commands/show_doc_spec.rb +0 -510
- data/spec/commands/show_input_spec.rb +0 -17
- data/spec/commands/show_source_spec.rb +0 -782
- data/spec/commands/whereami_spec.rb +0 -203
- data/spec/completion_spec.rb +0 -239
- data/spec/control_d_handler_spec.rb +0 -58
- data/spec/documentation_helper_spec.rb +0 -73
- data/spec/editor_spec.rb +0 -79
- data/spec/exception_whitelist_spec.rb +0 -21
- data/spec/fixtures/candidate_helper1.rb +0 -11
- data/spec/fixtures/candidate_helper2.rb +0 -8
- data/spec/fixtures/example.erb +0 -5
- data/spec/fixtures/example_nesting.rb +0 -33
- data/spec/fixtures/show_source_doc_examples.rb +0 -15
- data/spec/fixtures/testrc +0 -2
- data/spec/fixtures/testrcbad +0 -2
- data/spec/fixtures/whereami_helper.rb +0 -6
- data/spec/helper.rb +0 -34
- data/spec/helpers/bacon.rb +0 -86
- data/spec/helpers/mock_pry.rb +0 -43
- data/spec/helpers/table_spec.rb +0 -105
- data/spec/history_array_spec.rb +0 -67
- data/spec/hooks_spec.rb +0 -522
- data/spec/indent_spec.rb +0 -301
- data/spec/input_stack_spec.rb +0 -90
- data/spec/method_spec.rb +0 -482
- data/spec/prompt_spec.rb +0 -60
- data/spec/pry_defaults_spec.rb +0 -419
- data/spec/pry_history_spec.rb +0 -99
- data/spec/pry_output_spec.rb +0 -95
- data/spec/pry_spec.rb +0 -504
- data/spec/run_command_spec.rb +0 -25
- data/spec/sticky_locals_spec.rb +0 -157
- data/spec/syntax_checking_spec.rb +0 -81
- data/spec/wrapped_module_spec.rb +0 -261
- data/wiki/Customizing-pry.md +0 -397
- data/wiki/Home.md +0 -4
data/lib/pry/commands/edit.rb
CHANGED
@@ -1,207 +1,223 @@
|
|
1
|
-
|
2
|
-
class Command::Edit < Pry::ClassCommand
|
3
|
-
require 'pry/commands/edit/method_patcher'
|
4
|
-
require 'pry/commands/edit/exception_patcher'
|
5
|
-
require 'pry/commands/edit/file_and_line_locator'
|
6
|
-
|
7
|
-
match 'edit'
|
8
|
-
group 'Editing'
|
9
|
-
description 'Invoke the default editor on a file.'
|
10
|
-
|
11
|
-
banner <<-'BANNER'
|
12
|
-
Usage: edit [--no-reload|--reload|--patch] [--line LINE] [--temp|--ex|FILE[:LINE]|OBJECT|--in N]
|
13
|
-
|
14
|
-
Open a text editor. When no FILE is given, edits the pry input buffer.
|
15
|
-
When a method/module/command is given, the code is opened in an editor.
|
16
|
-
Ensure `Pry.config.editor` is set to your editor of choice.
|
17
|
-
|
18
|
-
edit sample.rb edit -p MyClass#my_method
|
19
|
-
edit sample.rb --line 105 edit MyClass
|
20
|
-
edit MyClass#my_method edit --ex
|
21
|
-
edit --method edit --ex -p
|
22
|
-
|
23
|
-
https://github.com/pry/pry/wiki/Editor-integration#wiki-Edit_command
|
24
|
-
BANNER
|
25
|
-
|
26
|
-
def options(opt)
|
27
|
-
opt.on :e, :ex, "Open the file that raised the most recent exception (_ex_.file)",
|
28
|
-
:optional_argument => true, :as => Integer
|
29
|
-
opt.on :i, :in, "Open a temporary file containing the Nth input expression. N may be a range",
|
30
|
-
:optional_argument => true, :as => Range, :default => -1..-1
|
31
|
-
opt.on :t, :temp, "Open an empty temporary file"
|
32
|
-
opt.on :l, :line, "Jump to this line in the opened file",
|
33
|
-
:argument => true, :as => Integer
|
34
|
-
opt.on :n, :"no-reload", "Don't automatically reload the edited code"
|
35
|
-
opt.on :c, :current, "Open the current __FILE__ and at __LINE__ (as returned by `whereami`)"
|
36
|
-
opt.on :r, :reload, "Reload the edited code immediately (default for ruby files)"
|
37
|
-
opt.on :p, :patch, "Instead of editing the object's file, try to edit in a tempfile and apply as a monkey patch"
|
38
|
-
opt.on :m, :method, "Explicitly edit the _current_ method (when inside a method context)."
|
39
|
-
end
|
1
|
+
# frozen_string_literal: true
|
40
2
|
|
41
|
-
|
42
|
-
|
43
|
-
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class Edit < Pry::ClassCommand
|
6
|
+
match 'edit'
|
7
|
+
group 'Editing'
|
8
|
+
description 'Invoke the default editor on a file.'
|
9
|
+
|
10
|
+
banner <<-'BANNER'
|
11
|
+
Usage: edit [--no-reload|--reload|--patch] [--line LINE] [--temp|--ex|FILE[:LINE]|OBJECT|--in N]
|
12
|
+
|
13
|
+
Open a text editor. When no FILE is given, edits the pry input buffer.
|
14
|
+
When a method/module/command is given, the code is opened in an editor.
|
15
|
+
Ensure `Pry.config.editor` or `pry_instance.config.editor` is set to your editor of choice.
|
16
|
+
|
17
|
+
edit sample.rb edit -p MyClass#my_method
|
18
|
+
edit sample.rb --line 105 edit MyClass
|
19
|
+
edit MyClass#my_method edit --ex
|
20
|
+
edit --method edit --ex -p
|
21
|
+
|
22
|
+
https://github.com/pry/pry/wiki/Editor-integration#wiki-Edit_command
|
23
|
+
BANNER
|
24
|
+
|
25
|
+
def options(opt)
|
26
|
+
opt.on :e, :ex, "Open the file that raised the most recent exception " \
|
27
|
+
"(_ex_.file)",
|
28
|
+
optional_argument: true, as: Integer
|
29
|
+
opt.on :i, :in, "Open a temporary file containing the Nth input " \
|
30
|
+
"expression. N may be a range",
|
31
|
+
optional_argument: true, as: Range, default: -1..-1
|
32
|
+
opt.on :t, :temp, "Open an empty temporary file"
|
33
|
+
opt.on :l, :line, "Jump to this line in the opened file",
|
34
|
+
argument: true, as: Integer
|
35
|
+
opt.on :n, :"no-reload", "Don't automatically reload the edited file"
|
36
|
+
opt.on :c, :current, "Open the current __FILE__ and at __LINE__ (as " \
|
37
|
+
"returned by `whereami`)"
|
38
|
+
opt.on :r, :reload, "Reload the edited code immediately (default for " \
|
39
|
+
"ruby files)"
|
40
|
+
opt.on :p, :patch, "Instead of editing the object's file, try to edit " \
|
41
|
+
"in a tempfile and apply as a monkey patch"
|
42
|
+
opt.on :m, :method, "Explicitly edit the _current_ method (when " \
|
43
|
+
"inside a method context)."
|
44
44
|
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
46
|
+
def process
|
47
|
+
if bad_option_combination?
|
48
|
+
raise CommandError, "Only one of --ex, --temp, --in, --method and " \
|
49
|
+
"FILE may be specified."
|
50
|
+
end
|
51
|
+
|
52
|
+
if repl_edit?
|
53
|
+
# code defined in pry, eval'd within pry.
|
54
|
+
repl_edit
|
55
|
+
elsif runtime_patch?
|
56
|
+
# patch code without persisting changes, implies future changes are patches
|
57
|
+
apply_runtime_patch
|
58
|
+
else
|
59
|
+
# code stored in actual files, eval'd at top-level
|
60
|
+
file_edit
|
61
|
+
end
|
55
62
|
end
|
56
|
-
end
|
57
63
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
64
|
+
def repl_edit?
|
65
|
+
!opts.present?(:ex) && !opts.present?(:current) && !opts.present?(:method) &&
|
66
|
+
filename_argument.empty?
|
67
|
+
end
|
62
68
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
69
|
+
def repl_edit
|
70
|
+
content = Pry::Editor.new(pry_instance).edit_tempfile_with_content(
|
71
|
+
initial_temp_file_content,
|
72
|
+
initial_temp_file_content.lines.count
|
73
|
+
)
|
74
|
+
pry_instance.eval_string = content
|
75
|
+
Pry.history.push(content)
|
70
76
|
end
|
71
|
-
end
|
72
77
|
|
73
|
-
|
74
|
-
|
75
|
-
|
78
|
+
def file_based_exception?
|
79
|
+
opts.present?(:ex) && !opts.present?(:patch)
|
80
|
+
end
|
76
81
|
|
77
|
-
|
78
|
-
|
79
|
-
|
82
|
+
def runtime_patch?
|
83
|
+
!file_based_exception? &&
|
84
|
+
(opts.present?(:patch) ||
|
85
|
+
previously_patched?(code_object) ||
|
86
|
+
pry_method?(code_object))
|
87
|
+
end
|
80
88
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
89
|
+
def apply_runtime_patch
|
90
|
+
if patch_exception?
|
91
|
+
ExceptionPatcher.new(
|
92
|
+
pry_instance, state, file_and_line_for_current_exception
|
93
|
+
).perform_patch
|
94
|
+
elsif code_object.is_a?(Pry::Method)
|
95
|
+
code_object.redefine(
|
96
|
+
Pry::Editor.new(pry_instance).edit_tempfile_with_content(
|
97
|
+
code_object.source
|
98
|
+
)
|
99
|
+
)
|
87
100
|
else
|
88
101
|
raise NotImplementedError, "Cannot yet patch #{code_object} objects!"
|
89
102
|
end
|
90
103
|
end
|
91
|
-
end
|
92
104
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
105
|
+
def ensure_file_name_is_valid(file_name)
|
106
|
+
unless file_name
|
107
|
+
raise CommandError, "Cannot find a valid file for #{filename_argument}"
|
108
|
+
end
|
97
109
|
|
98
|
-
|
99
|
-
FileAndLineLocator.from_exception(_pry_.last_exception, opts[:ex].to_i)
|
100
|
-
end
|
110
|
+
return unless not_a_real_file?(file_name)
|
101
111
|
|
102
|
-
|
103
|
-
|
104
|
-
FileAndLineLocator.from_binding(target)
|
105
|
-
elsif opts.present?(:ex)
|
106
|
-
file_and_line_for_current_exception
|
107
|
-
elsif code_object
|
108
|
-
FileAndLineLocator.from_code_object(code_object, filename_argument)
|
109
|
-
else
|
110
|
-
# when file and line are passed as a single arg, e.g my_file.rb:30
|
111
|
-
FileAndLineLocator.from_filename_argument(filename_argument)
|
112
|
-
end
|
113
|
-
|
114
|
-
[file_name, opts.present?(:line) ? opts[:l].to_i : line]
|
115
|
-
end
|
112
|
+
raise CommandError, "#{file_name} is not a valid file name, cannot edit!"
|
113
|
+
end
|
116
114
|
|
117
|
-
|
118
|
-
|
115
|
+
def file_and_line_for_current_exception
|
116
|
+
FileAndLineLocator.from_exception(pry_instance.last_exception, opts[:ex].to_i)
|
117
|
+
end
|
119
118
|
|
120
|
-
|
119
|
+
def file_and_line
|
120
|
+
file_name, line =
|
121
|
+
if opts.present?(:current)
|
122
|
+
FileAndLineLocator.from_binding(target)
|
123
|
+
elsif opts.present?(:ex)
|
124
|
+
file_and_line_for_current_exception
|
125
|
+
elsif code_object
|
126
|
+
FileAndLineLocator.from_code_object(code_object, filename_argument)
|
127
|
+
else
|
128
|
+
# when file and line are passed as a single arg, e.g my_file.rb:30
|
129
|
+
FileAndLineLocator.from_filename_argument(filename_argument)
|
130
|
+
end
|
131
|
+
|
132
|
+
[file_name, opts.present?(:line) ? opts[:l].to_i : line]
|
133
|
+
end
|
121
134
|
|
122
|
-
|
123
|
-
|
135
|
+
def file_edit
|
136
|
+
file_name, line = file_and_line
|
124
137
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
138
|
+
ensure_file_name_is_valid(file_name)
|
139
|
+
|
140
|
+
Pry::Editor.new(pry_instance).invoke_editor(file_name, line, reload?(file_name))
|
141
|
+
set_file_and_dir_locals(file_name)
|
142
|
+
|
143
|
+
return unless reload?(file_name)
|
144
|
+
|
145
|
+
silence_warnings { load(file_name) }
|
129
146
|
end
|
130
|
-
end
|
131
147
|
|
132
|
-
|
133
|
-
|
134
|
-
|
148
|
+
def filename_argument
|
149
|
+
args.join(' ')
|
150
|
+
end
|
135
151
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
152
|
+
def code_object
|
153
|
+
@code_object ||=
|
154
|
+
!probably_a_file?(filename_argument) &&
|
155
|
+
Pry::CodeObject.lookup(filename_argument, pry_instance)
|
156
|
+
end
|
140
157
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
158
|
+
def pry_method?(code_object)
|
159
|
+
code_object.is_a?(Pry::Method) &&
|
160
|
+
code_object.pry_method?
|
161
|
+
end
|
145
162
|
|
146
|
-
|
147
|
-
|
148
|
-
|
163
|
+
def previously_patched?(code_object)
|
164
|
+
code_object.is_a?(Pry::Method) &&
|
165
|
+
Pry::Method::Patcher.code_for(code_object.source_location.first)
|
166
|
+
end
|
149
167
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
end
|
168
|
+
def patch_exception?
|
169
|
+
opts.present?(:ex) && opts.present?(:patch)
|
170
|
+
end
|
154
171
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
else
|
162
|
-
raise Pry::CommandError, "Not a valid range: #{opts[:i]}"
|
172
|
+
def bad_option_combination?
|
173
|
+
[
|
174
|
+
opts.present?(:ex), opts.present?(:temp),
|
175
|
+
opts.present?(:in), opts.present?(:method),
|
176
|
+
!filename_argument.empty?
|
177
|
+
].count(true) > 1
|
163
178
|
end
|
164
|
-
end
|
165
179
|
|
166
|
-
|
167
|
-
|
168
|
-
|
180
|
+
def input_expression
|
181
|
+
case opts[:i]
|
182
|
+
when Range
|
183
|
+
(pry_instance.input_ring[opts[:i]] || []).join
|
184
|
+
when Integer
|
185
|
+
pry_instance.input_ring[opts[:i]] || ""
|
186
|
+
else
|
187
|
+
raise Pry::CommandError, "Not a valid range: #{opts[:i]}"
|
188
|
+
end
|
189
|
+
end
|
169
190
|
|
170
|
-
|
171
|
-
|
172
|
-
|
191
|
+
def reloadable?
|
192
|
+
opts.present?(:reload) || opts.present?(:ex)
|
193
|
+
end
|
173
194
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
end
|
195
|
+
def never_reload?
|
196
|
+
opts.present?(:'no-reload') || pry_instance.config.disable_auto_reload
|
197
|
+
end
|
178
198
|
|
179
|
-
|
180
|
-
|
181
|
-
|
199
|
+
def reload?(file_name = "")
|
200
|
+
(reloadable? || file_name.end_with?(".rb")) && !never_reload?
|
201
|
+
end
|
182
202
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
203
|
+
def initial_temp_file_content
|
204
|
+
if opts.present?(:temp)
|
205
|
+
""
|
206
|
+
elsif opts.present?(:in)
|
207
|
+
input_expression
|
208
|
+
elsif eval_string.strip != ""
|
209
|
+
eval_string
|
210
|
+
else
|
211
|
+
pry_instance.input_ring.to_a.reverse_each.find { |x| x && x.strip != "" } || ""
|
212
|
+
end
|
193
213
|
end
|
194
|
-
end
|
195
214
|
|
196
|
-
|
197
|
-
|
198
|
-
|
215
|
+
def probably_a_file?(str)
|
216
|
+
[".rb", ".c", ".py", ".yml", ".gemspec"].include?(File.extname(str)) ||
|
217
|
+
str =~ %r{/|\\}
|
218
|
+
end
|
199
219
|
end
|
200
220
|
|
201
|
-
|
202
|
-
super + Bond::Rc.files(search.split(" ").last || '')
|
203
|
-
end
|
221
|
+
Pry::Commands.add_command(Pry::Command::Edit)
|
204
222
|
end
|
205
|
-
|
206
|
-
Pry::Commands.add_command(Pry::Command::Edit)
|
207
223
|
end
|
data/lib/pry/commands/exit.rb
CHANGED
@@ -1,42 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Pry
|
2
|
-
class Command
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
4
|
+
class Command
|
5
|
+
class Exit < Pry::ClassCommand
|
6
|
+
match 'exit'
|
7
|
+
group 'Navigating Pry'
|
8
|
+
description 'Pop the previous binding.'
|
9
|
+
command_options keep_retval: true
|
10
|
+
|
11
|
+
banner <<-'BANNER'
|
12
|
+
Usage: exit [OPTIONS] [--help]
|
13
|
+
Aliases: quit
|
14
|
+
|
15
|
+
Pop the previous binding (does NOT exit program). It can be useful to exit a
|
16
|
+
context with a user-provided value. For instance an exit value can be used to
|
17
|
+
determine program flow.
|
18
|
+
|
19
|
+
exit "pry this"
|
20
|
+
exit
|
21
|
+
|
22
|
+
https://github.com/pry/pry/wiki/State-navigation#wiki-Exit_with_value
|
23
|
+
BANNER
|
24
|
+
|
25
|
+
def process
|
26
|
+
if pry_instance.binding_stack.one?
|
27
|
+
pry_instance.run_command "exit-all #{arg_string}"
|
28
|
+
else
|
29
|
+
# otherwise just pop a binding and return user supplied value
|
30
|
+
process_pop_and_return
|
31
|
+
end
|
28
32
|
end
|
29
|
-
end
|
30
33
|
|
31
|
-
|
32
|
-
|
34
|
+
def process_pop_and_return
|
35
|
+
popped_object = pry_instance.binding_stack.pop.eval('self')
|
36
|
+
|
37
|
+
# return a user-specified value if given otherwise return the object
|
38
|
+
return target.eval(arg_string) unless arg_string.empty?
|
33
39
|
|
34
|
-
|
35
|
-
|
36
|
-
popped_object
|
40
|
+
popped_object
|
41
|
+
end
|
37
42
|
end
|
38
|
-
end
|
39
43
|
|
40
|
-
|
41
|
-
|
44
|
+
Pry::Commands.add_command(Pry::Command::Exit)
|
45
|
+
Pry::Commands.alias_command 'quit', 'exit'
|
46
|
+
end
|
42
47
|
end
|
@@ -1,29 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Pry
|
2
|
-
class Command
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
class Command
|
5
|
+
class ExitAll < Pry::ClassCommand
|
6
|
+
match 'exit-all'
|
7
|
+
group 'Navigating Pry'
|
8
|
+
description 'End the current Pry session.'
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
+
banner <<-'BANNER'
|
11
|
+
Usage: exit-all [--help]
|
12
|
+
Aliases: !!@
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
+
End the current Pry session (popping all bindings and returning to caller).
|
15
|
+
Accepts optional return value.
|
16
|
+
BANNER
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
def process
|
19
|
+
# calculate user-given value
|
20
|
+
exit_value = target.eval(arg_string)
|
18
21
|
|
19
|
-
|
20
|
-
|
22
|
+
# clear the binding stack
|
23
|
+
pry_instance.binding_stack.clear
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
# break out of the repl loop
|
26
|
+
throw(:breakout, exit_value)
|
27
|
+
end
|
24
28
|
end
|
25
|
-
end
|
26
29
|
|
27
|
-
|
28
|
-
|
30
|
+
Pry::Commands.add_command(Pry::Command::ExitAll)
|
31
|
+
Pry::Commands.alias_command '!!@', 'exit-all'
|
32
|
+
end
|
29
33
|
end
|
@@ -1,24 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Pry
|
2
|
-
class Command
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
class Command
|
5
|
+
class ExitProgram < Pry::ClassCommand
|
6
|
+
match 'exit-program'
|
7
|
+
group 'Navigating Pry'
|
8
|
+
description 'End the current program.'
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
banner <<-'BANNER'
|
11
|
+
Usage: exit-program [--help]
|
12
|
+
Aliases: quit-program
|
13
|
+
!!!
|
11
14
|
|
12
|
-
|
13
|
-
|
15
|
+
End the current program.
|
16
|
+
BANNER
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
def process
|
19
|
+
Kernel.exit target.eval(arg_string).to_i
|
20
|
+
end
|
18
21
|
end
|
19
|
-
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
23
|
+
Pry::Commands.add_command(Pry::Command::ExitProgram)
|
24
|
+
Pry::Commands.alias_command 'quit-program', 'exit-program'
|
25
|
+
Pry::Commands.alias_command '!!!', 'exit-program'
|
26
|
+
end
|
24
27
|
end
|