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