pry 0.10.2-i386-mingw32 → 1.0.0.pre1-i386-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. data/.document +2 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +21 -0
  4. data/.yardopts +3 -0
  5. data/CHANGELOG +503 -0
  6. data/CONTRIBUTORS +55 -0
  7. data/Gemfile +9 -0
  8. data/Guardfile +62 -0
  9. data/LICENSE +2 -2
  10. data/{README.md → README.markdown} +31 -37
  11. data/Rakefile +144 -0
  12. data/TODO +117 -0
  13. data/lib/pry.rb +146 -33
  14. data/lib/pry/cli.rb +13 -35
  15. data/lib/pry/code.rb +63 -24
  16. data/lib/pry/code/loc.rb +2 -2
  17. data/lib/pry/code_object.rb +21 -40
  18. data/lib/pry/command.rb +6 -9
  19. data/lib/pry/command_set.rb +37 -80
  20. data/lib/pry/commands.rb +1 -1
  21. data/lib/pry/commands/amend_line.rb +1 -1
  22. data/lib/pry/commands/bang.rb +1 -1
  23. data/lib/pry/commands/cat.rb +2 -11
  24. data/lib/pry/commands/cat/abstract_formatter.rb +1 -1
  25. data/lib/pry/commands/cat/exception_formatter.rb +7 -6
  26. data/lib/pry/commands/cat/file_formatter.rb +32 -15
  27. data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
  28. data/lib/pry/commands/cd.rb +3 -14
  29. data/lib/pry/commands/code_collector.rb +4 -4
  30. data/lib/pry/commands/easter_eggs.rb +3 -3
  31. data/lib/pry/commands/edit.rb +22 -10
  32. data/lib/pry/commands/edit/exception_patcher.rb +1 -1
  33. data/lib/pry/commands/edit/file_and_line_locator.rb +2 -0
  34. data/lib/pry/{method/patcher.rb → commands/edit/method_patcher.rb} +37 -40
  35. data/lib/pry/commands/find_method.rb +22 -16
  36. data/lib/pry/commands/gem_install.rb +2 -5
  37. data/lib/pry/commands/gem_open.rb +1 -1
  38. data/lib/pry/commands/gist.rb +11 -10
  39. data/lib/pry/commands/help.rb +14 -14
  40. data/lib/pry/commands/hist.rb +5 -24
  41. data/lib/pry/commands/ls.rb +287 -56
  42. data/lib/pry/commands/play.rb +10 -44
  43. data/lib/pry/commands/pry_backtrace.rb +2 -1
  44. data/lib/pry/commands/raise_up.rb +1 -1
  45. data/lib/pry/commands/reload_code.rb +15 -31
  46. data/lib/pry/commands/ri.rb +3 -7
  47. data/lib/pry/commands/shell_command.rb +12 -17
  48. data/lib/pry/commands/shell_mode.rb +2 -2
  49. data/lib/pry/commands/show_doc.rb +0 -5
  50. data/lib/pry/commands/show_info.rb +10 -11
  51. data/lib/pry/commands/show_source.rb +3 -15
  52. data/lib/pry/commands/simple_prompt.rb +1 -1
  53. data/lib/pry/commands/toggle_color.rb +4 -8
  54. data/lib/pry/commands/whereami.rb +10 -18
  55. data/lib/pry/completion.rb +293 -0
  56. data/lib/pry/config.rb +233 -20
  57. data/lib/pry/core_extensions.rb +19 -29
  58. data/lib/pry/custom_completions.rb +6 -0
  59. data/lib/pry/editor.rb +103 -109
  60. data/lib/pry/helpers/base_helpers.rb +109 -22
  61. data/lib/pry/helpers/command_helpers.rb +8 -10
  62. data/lib/pry/helpers/documentation_helpers.rb +2 -1
  63. data/lib/pry/helpers/text.rb +5 -4
  64. data/lib/pry/history.rb +10 -21
  65. data/lib/pry/history_array.rb +0 -5
  66. data/lib/pry/hooks.rb +29 -9
  67. data/lib/pry/indent.rb +10 -5
  68. data/lib/pry/method.rb +86 -81
  69. data/lib/pry/method/weird_method_locator.rb +2 -4
  70. data/lib/pry/module_candidate.rb +14 -5
  71. data/lib/pry/pager.rb +48 -193
  72. data/lib/pry/plugins.rb +2 -2
  73. data/lib/pry/pry_class.rb +193 -104
  74. data/lib/pry/pry_instance.rb +154 -152
  75. data/lib/pry/rbx_method.rb +13 -0
  76. data/lib/pry/rbx_path.rb +1 -1
  77. data/lib/pry/repl.rb +14 -17
  78. data/lib/pry/repl_file_loader.rb +3 -8
  79. data/lib/pry/rubygem.rb +3 -3
  80. data/lib/pry/terminal.rb +3 -4
  81. data/lib/pry/test/helper.rb +11 -6
  82. data/lib/pry/version.rb +1 -1
  83. data/lib/pry/wrapped_module.rb +56 -49
  84. data/man/pry.1 +195 -0
  85. data/man/pry.1.html +204 -0
  86. data/man/pry.1.ronn +141 -0
  87. data/pry.gemspec +31 -0
  88. data/spec/Procfile +3 -0
  89. data/spec/cli_spec.rb +78 -0
  90. data/spec/code_object_spec.rb +277 -0
  91. data/spec/code_spec.rb +219 -0
  92. data/spec/command_helpers_spec.rb +29 -0
  93. data/spec/command_integration_spec.rb +562 -0
  94. data/spec/command_set_spec.rb +627 -0
  95. data/spec/command_spec.rb +821 -0
  96. data/spec/commands/amend_line_spec.rb +247 -0
  97. data/spec/commands/bang_spec.rb +18 -0
  98. data/spec/commands/cat_spec.rb +164 -0
  99. data/spec/commands/cd_spec.rb +250 -0
  100. data/spec/commands/disable_pry_spec.rb +25 -0
  101. data/spec/commands/edit_spec.rb +725 -0
  102. data/spec/commands/exit_all_spec.rb +27 -0
  103. data/spec/commands/exit_program_spec.rb +19 -0
  104. data/spec/commands/exit_spec.rb +28 -0
  105. data/spec/commands/find_method_spec.rb +70 -0
  106. data/spec/commands/gem_list_spec.rb +26 -0
  107. data/spec/commands/gist_spec.rb +79 -0
  108. data/spec/commands/help_spec.rb +56 -0
  109. data/spec/commands/hist_spec.rb +172 -0
  110. data/spec/commands/jump_to_spec.rb +15 -0
  111. data/spec/commands/ls_spec.rb +189 -0
  112. data/spec/commands/play_spec.rb +136 -0
  113. data/spec/commands/raise_up_spec.rb +56 -0
  114. data/spec/commands/save_file_spec.rb +177 -0
  115. data/spec/commands/show_doc_spec.rb +488 -0
  116. data/spec/commands/show_input_spec.rb +17 -0
  117. data/spec/commands/show_source_spec.rb +760 -0
  118. data/spec/commands/whereami_spec.rb +203 -0
  119. data/spec/completion_spec.rb +221 -0
  120. data/spec/control_d_handler_spec.rb +62 -0
  121. data/spec/documentation_helper_spec.rb +73 -0
  122. data/spec/editor_spec.rb +79 -0
  123. data/spec/exception_whitelist_spec.rb +21 -0
  124. data/spec/fixtures/candidate_helper1.rb +11 -0
  125. data/spec/fixtures/candidate_helper2.rb +8 -0
  126. data/spec/fixtures/example.erb +5 -0
  127. data/spec/fixtures/example_nesting.rb +33 -0
  128. data/spec/fixtures/show_source_doc_examples.rb +15 -0
  129. data/spec/fixtures/testlinkrc +2 -0
  130. data/spec/fixtures/testrc +2 -0
  131. data/spec/fixtures/testrcbad +2 -0
  132. data/spec/fixtures/whereami_helper.rb +6 -0
  133. data/spec/helper.rb +35 -0
  134. data/spec/helpers/bacon.rb +86 -0
  135. data/spec/helpers/mock_pry.rb +44 -0
  136. data/spec/helpers/repl_tester.rb +112 -0
  137. data/spec/helpers/table_spec.rb +105 -0
  138. data/spec/history_array_spec.rb +67 -0
  139. data/spec/hooks_spec.rb +522 -0
  140. data/spec/indent_spec.rb +301 -0
  141. data/spec/method_spec.rb +482 -0
  142. data/spec/prompt_spec.rb +61 -0
  143. data/spec/pry_defaults_spec.rb +420 -0
  144. data/spec/pry_history_spec.rb +69 -0
  145. data/spec/pry_output_spec.rb +95 -0
  146. data/spec/pry_repl_spec.rb +86 -0
  147. data/spec/pry_spec.rb +394 -0
  148. data/spec/pryrc_spec.rb +97 -0
  149. data/spec/run_command_spec.rb +25 -0
  150. data/spec/sticky_locals_spec.rb +147 -0
  151. data/spec/syntax_checking_spec.rb +81 -0
  152. data/spec/wrapped_module_spec.rb +261 -0
  153. data/wiki/Customizing-pry.md +397 -0
  154. data/wiki/Home.md +4 -0
  155. metadata +272 -61
  156. checksums.yaml +0 -7
  157. data/CHANGELOG.md +0 -714
  158. data/lib/pry/code/code_file.rb +0 -103
  159. data/lib/pry/color_printer.rb +0 -55
  160. data/lib/pry/commands/change_inspector.rb +0 -27
  161. data/lib/pry/commands/change_prompt.rb +0 -26
  162. data/lib/pry/commands/list_inspectors.rb +0 -35
  163. data/lib/pry/commands/list_prompts.rb +0 -35
  164. data/lib/pry/commands/ls/constants.rb +0 -47
  165. data/lib/pry/commands/ls/formatter.rb +0 -49
  166. data/lib/pry/commands/ls/globals.rb +0 -48
  167. data/lib/pry/commands/ls/grep.rb +0 -21
  168. data/lib/pry/commands/ls/instance_vars.rb +0 -39
  169. data/lib/pry/commands/ls/interrogatable.rb +0 -18
  170. data/lib/pry/commands/ls/jruby_hacks.rb +0 -49
  171. data/lib/pry/commands/ls/local_names.rb +0 -35
  172. data/lib/pry/commands/ls/local_vars.rb +0 -39
  173. data/lib/pry/commands/ls/ls_entity.rb +0 -70
  174. data/lib/pry/commands/ls/methods.rb +0 -57
  175. data/lib/pry/commands/ls/methods_helper.rb +0 -46
  176. data/lib/pry/commands/ls/self_methods.rb +0 -32
  177. data/lib/pry/commands/watch_expression.rb +0 -105
  178. data/lib/pry/commands/watch_expression/expression.rb +0 -38
  179. data/lib/pry/config/behavior.rb +0 -139
  180. data/lib/pry/config/convenience.rb +0 -25
  181. data/lib/pry/config/default.rb +0 -161
  182. data/lib/pry/exceptions.rb +0 -78
  183. data/lib/pry/input_completer.rb +0 -242
  184. data/lib/pry/input_lock.rb +0 -132
  185. data/lib/pry/inspector.rb +0 -27
  186. data/lib/pry/last_exception.rb +0 -61
  187. data/lib/pry/object_path.rb +0 -82
  188. data/lib/pry/output.rb +0 -50
  189. data/lib/pry/prompt.rb +0 -26
@@ -0,0 +1,293 @@
1
+ # taken from irb
2
+
3
+ class Pry
4
+
5
+ module BondCompleter
6
+ def self.call(input, options)
7
+ Pry.current[:pry] = options[:pry]
8
+ Bond.agent.call(input)
9
+ end
10
+
11
+ def self.start
12
+ Bond.start(:eval_binding => lambda{ Pry.current[:pry] && Pry.current[:pry].current_context })
13
+ Bond.complete(:on => /\A/) do |input|
14
+ Pry.commands.complete(input.line,
15
+ :pry_instance => Pry.current[:pry],
16
+ :target => Pry.current[:pry].current_context,
17
+ :command_set => Pry.current[:pry].commands)
18
+ end
19
+ self
20
+ end
21
+ end
22
+
23
+ # Implements tab completion for Readline in Pry
24
+ module InputCompleter
25
+
26
+ def self.start
27
+ if Readline.respond_to?("basic_word_break_characters=")
28
+ Readline.basic_word_break_characters = " \t\n\"\\'`><=;|&{("
29
+ end
30
+
31
+ Readline.completion_append_character = nil
32
+ self
33
+ end
34
+
35
+ ReservedWords = [
36
+ "BEGIN", "END",
37
+ "alias", "and",
38
+ "begin", "break",
39
+ "case", "class",
40
+ "def", "defined", "do",
41
+ "else", "elsif", "end", "ensure",
42
+ "false", "for",
43
+ "if", "in",
44
+ "module",
45
+ "next", "nil", "not",
46
+ "or",
47
+ "redo", "rescue", "retry", "return",
48
+ "self", "super",
49
+ "then", "true",
50
+ "undef", "unless", "until",
51
+ "when", "while",
52
+ "yield" ]
53
+
54
+ Operators = [
55
+ "%", "&", "*", "**", "+", "-", "/",
56
+ "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
57
+ "[]", "[]=", "^", "!", "!=", "!~"
58
+ ]
59
+
60
+ # Return a new completion proc for use by Readline.
61
+ # @param [Binding] target The current binding context.
62
+ # @param [Array<String>] commands The array of Pry commands.
63
+ def self.call(input, options)
64
+
65
+ custom_completions = options[:custom_completions] || []
66
+
67
+ # if there are multiple contexts e.g. cd 1/2/3
68
+ # get new target for 1/2 and find candidates for 3
69
+ path, input = build_path(input)
70
+
71
+ if path.call.empty?
72
+ target = options[:target]
73
+ else
74
+ target, _ = Pry::Helpers::BaseHelpers.context_from_object_path(path.call, options[:pry])
75
+ target = target.last
76
+ end
77
+
78
+ begin
79
+ bind = target
80
+
81
+ case input
82
+
83
+
84
+ # Complete stdlib symbols
85
+
86
+ when /^(\/[^\/]*\/)\.([^.]*)$/
87
+ # Regexp
88
+ receiver = $1
89
+ message = Regexp.quote($2)
90
+
91
+ candidates = Regexp.instance_methods.collect(&:to_s)
92
+ select_message(path, receiver, message, candidates)
93
+
94
+ when /^([^\]]*\])\.([^.]*)$/
95
+ # Array
96
+ receiver = $1
97
+ message = Regexp.quote($2)
98
+
99
+ candidates = Array.instance_methods.collect(&:to_s)
100
+ select_message(path, receiver, message, candidates)
101
+
102
+ when /^([^\}]*\})\.([^.]*)$/
103
+ # Proc or Hash
104
+ receiver = $1
105
+ message = Regexp.quote($2)
106
+
107
+ candidates = Proc.instance_methods.collect(&:to_s)
108
+ candidates |= Hash.instance_methods.collect(&:to_s)
109
+ select_message(path, receiver, message, candidates)
110
+
111
+ when /^(:[^:.]*)$/
112
+ # Symbol
113
+ if Symbol.respond_to?(:all_symbols)
114
+ sym = Regexp.quote($1)
115
+ candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
116
+
117
+ candidates.grep(/^#{sym}/)
118
+ else
119
+ []
120
+ end
121
+
122
+ when /^::([A-Z][^:\.\(]*)$/
123
+ # Absolute Constant or class methods
124
+ receiver = $1
125
+ candidates = Object.constants.collect(&:to_s)
126
+ candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
127
+
128
+
129
+ # Complete target symbols
130
+
131
+ when /^([A-Z][A-Za-z0-9]*)$/
132
+ # Constant
133
+ message = $1
134
+
135
+ begin
136
+ context = target.eval("self")
137
+ context = context.class unless context.respond_to? :constants
138
+ candidates = context.constants.collect(&:to_s)
139
+ rescue
140
+ candidates = []
141
+ end
142
+ candidates = candidates.grep(/^#{message}/).collect(&path)
143
+
144
+ when /^([A-Z].*)::([^:.]*)$/
145
+ # Constant or class methods
146
+ receiver = $1
147
+ message = Regexp.quote($2)
148
+ begin
149
+ candidates = eval("#{receiver}.constants.collect(&:to_s)", bind)
150
+ candidates |= eval("#{receiver}.methods.collect(&:to_s)", bind)
151
+ rescue RescuableException
152
+ candidates = []
153
+ end
154
+ candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}
155
+
156
+ when /^(:[^:.]+)\.([^.]*)$/
157
+ # Symbol
158
+ receiver = $1
159
+ message = Regexp.quote($2)
160
+
161
+ candidates = Symbol.instance_methods.collect(&:to_s)
162
+ select_message(path, receiver, message, candidates)
163
+
164
+ when /^(-?(0[dbo])?[0-9_]+(\.[0-9_]+)?([eE]-?[0-9]+)?)\.([^.]*)$/
165
+ # Numeric
166
+ receiver = $1
167
+ message = Regexp.quote($5)
168
+
169
+ begin
170
+ candidates = eval(receiver, bind).methods.collect(&:to_s)
171
+ rescue RescuableException
172
+ candidates = []
173
+ end
174
+ select_message(path, receiver, message, candidates)
175
+
176
+ when /^(-?0x[0-9a-fA-F_]+)\.([^.]*)$/#
177
+ # Numeric(0xFFFF)
178
+ receiver = $1
179
+ message = Regexp.quote($2)
180
+
181
+ begin
182
+ candidates = eval(receiver, bind).methods.collect(&:to_s)
183
+ rescue RescuableException
184
+ candidates = []
185
+ end
186
+ select_message(path, receiver, message, candidates)
187
+
188
+ when /^(\$[^.]*)$/
189
+ # Global variables
190
+ regmessage = Regexp.new(Regexp.quote($1))
191
+ candidates = global_variables.collect(&:to_s).grep(regmessage)
192
+
193
+ when /^([^."].*)\.([^.]*)$/
194
+ # Variable
195
+ receiver = $1
196
+ message = Regexp.quote($2)
197
+
198
+ gv = eval("global_variables", bind).collect(&:to_s)
199
+ lv = eval("local_variables", bind).collect(&:to_s)
200
+ cv = eval("self.class.constants", bind).collect(&:to_s)
201
+
202
+ if (gv | lv | cv).include?(receiver) or /^[A-Z]/ =~ receiver && /\./ !~ receiver
203
+ # foo.func and foo is local var. OR
204
+ # Foo::Bar.func
205
+ begin
206
+ candidates = eval("#{receiver}.methods", bind).collect(&:to_s)
207
+ rescue RescuableException
208
+ candidates = []
209
+ end
210
+ else
211
+ # func1.func2
212
+ candidates = []
213
+ ObjectSpace.each_object(Module){|m|
214
+ begin
215
+ name = m.name.to_s
216
+ rescue RescuableException
217
+ name = ""
218
+ end
219
+ next if name != "IRB::Context" and
220
+ /^(IRB|SLex|RubyLex|RubyToken)/ =~ name
221
+
222
+ # jruby doesn't always provide #instance_methods() on each
223
+ # object.
224
+ if m.respond_to?(:instance_methods)
225
+ candidates.concat m.instance_methods(false).collect(&:to_s)
226
+ end
227
+ }
228
+ candidates.sort!
229
+ candidates.uniq!
230
+ end
231
+ select_message(path, receiver, message, candidates)
232
+
233
+ when /^\.([^.]*)$/
234
+ # Unknown(maybe String)
235
+ receiver = ""
236
+ message = Regexp.quote($1)
237
+
238
+ candidates = String.instance_methods(true).collect(&:to_s)
239
+ select_message(path, receiver, message, candidates)
240
+
241
+ else
242
+
243
+ candidates = eval(
244
+ "methods | private_methods | local_variables | " \
245
+ "self.class.constants | instance_variables",
246
+ bind
247
+ ).collect(&:to_s)
248
+
249
+ if eval("respond_to?(:class_variables)", bind)
250
+ candidates += eval("class_variables", bind).collect(&:to_s)
251
+ end
252
+ candidates = (candidates|ReservedWords|custom_completions).grep(/^#{Regexp.quote(input)}/)
253
+ candidates.collect(&path)
254
+ end
255
+ rescue RescuableException
256
+ []
257
+ end
258
+ end
259
+
260
+ def self.select_message(path, receiver, message, candidates)
261
+ candidates.grep(/^#{message}/).collect { |e|
262
+ case e
263
+ when /^[a-zA-Z_]/
264
+ path.call(receiver + "." + e)
265
+ when /^[0-9]/
266
+ when *Operators
267
+ #receiver + " " + e
268
+ end
269
+ }.compact
270
+ end
271
+
272
+ # build_path seperates the input into two parts: path and input.
273
+ # input is the partial string that should be completed
274
+ # path is a proc that takes an input and builds a full path.
275
+ def self.build_path(input)
276
+
277
+ # check to see if the input is a regex
278
+ return proc {|i| i.to_s }, input if input[/\/\./]
279
+
280
+ trailing_slash = input.end_with?('/')
281
+ contexts = input.chomp('/').split(/\//)
282
+ input = contexts[-1]
283
+
284
+ path = proc do |i|
285
+ p = contexts[0..-2].push(i).join('/')
286
+ p += '/' if trailing_slash && !i.nil?
287
+ p
288
+ end
289
+
290
+ return path, input
291
+ end
292
+ end
293
+ end
@@ -1,24 +1,237 @@
1
- class Pry::Config
2
- require_relative 'config/behavior'
3
- require_relative 'config/default'
4
- require_relative 'config/convenience'
5
- include Pry::Config::Behavior
6
-
7
- def self.shortcuts
8
- Convenience::SHORTCUTS
9
- end
1
+ require 'ostruct'
2
+
3
+ class Pry
4
+ class Config < OpenStruct
5
+
6
+ # Get/Set the object to use for input by default by all Pry instances.
7
+ # Pry.config.input is an option determining the input object - the object from
8
+ # which Pry retrieves its lines of input. Pry accepts any object that implements the readline method.
9
+ # This includes IO objects, StringIO, Readline, File and custom objects.
10
+ # @return [#readline] The object to use for input by default by all
11
+ # Pry instances.
12
+ # @example
13
+ # Pry.config.input = StringIO.new("@x = 10\nexit")
14
+ attr_accessor :input
15
+
16
+ # Get/Set the object to use for output by default by all Pry instances.
17
+ # Pry.config.output is an option determining the output object - the object to which
18
+ # Pry writes its output. Pry accepts any object that implements the puts method. This
19
+ # includes IO objects, StringIO, File and custom objects.
20
+ # @return [#puts] The object to use for output by default by all
21
+ # Pry instances.
22
+ # @example
23
+ # Pry.config.output = StringIO.new
24
+ attr_accessor :output
25
+
26
+ # Get/Set the object to use for commands by default by all Pry instances.
27
+ # @return [Pry::CommandBase] The object to use for commands by default by all
28
+ # Pry instances.
29
+ # @example
30
+ # Pry.config.commands = Pry::CommandSet.new do
31
+ # import_from Pry::Commands, "ls"
32
+ #
33
+ # command "greet" do |name|
34
+ # output.puts "hello #{name}"
35
+ # end
36
+ # end
37
+ attr_accessor :commands
38
+
39
+ # Get/Set the Proc to use for printing by default by all Pry
40
+ # instances.
41
+ # Two parameters are passed to the print Proc: these are (1) the
42
+ # output object for the current session and (2) the expression value to print. It is important
43
+ # that you write to the output object instead of just stdout so that all Pry output can be redirected if necessary.
44
+ # This is the 'print' component of the REPL.
45
+ # @return [Proc] The Proc to use for printing by default by all
46
+ # Pry instances.
47
+ # @example
48
+ # Pry.config.print = proc { |output, value| output.puts "=> #{value.inspect}" }
49
+ attr_accessor :print
50
+
51
+ # Pry.config.exception_handler is an option determining the exception handler object - the
52
+ # Proc responsible for dealing with exceptions raised by user input to the REPL.
53
+ # Three parameters are passed to the exception handler Proc: these
54
+ # are (1) the output object for the current session, (2) the
55
+ # exception object that was raised inside the Pry session, and (3)
56
+ # a reference to the associated Pry instance.
57
+ # @return [Proc] The Proc to use for printing exceptions by default by all
58
+ # Pry instances.
59
+ # @example
60
+ # Pry.config.exception_handler = proc do |output, exception, _|
61
+ # output.puts "#{exception.class}: #{exception.message}"
62
+ # output.puts "from #{exception.backtrace.first}"
63
+ # end
64
+ attr_accessor :exception_handler
65
+
66
+ # @return [Array] The classes of exception that will not be caught by Pry.
67
+ # @example
68
+ # Pry.config.exception_whitelist = [SystemExit, SignalException]
69
+ attr_accessor :exception_whitelist
70
+
71
+ # @return [Fixnum] The number of lines of context to show before and after
72
+ # exceptions, etc.
73
+ # @example
74
+ # Pry.config.default_window_size = 10
75
+ attr_accessor :default_window_size
10
76
 
11
- #
12
- # FIXME
13
- # @param [Pry::Hooks] hooks
14
- #
15
- def hooks=(hooks)
16
- if hooks.is_a?(Hash)
17
- warn "Hash-based hooks are now deprecated! Use a `Pry::Hooks` object " \
18
- "instead! http://rubydoc.info/github/pry/pry/master/Pry/Hooks"
19
- self["hooks"] = Pry::Hooks.from_hash(hooks)
20
- else
21
- self["hooks"] = hooks
77
+ # Get/Set the `Pry::Hooks` instance that defines Pry hooks used by default by all Pry
78
+ # instances.
79
+ # @return [Pry::Hooks] The hooks used by default by all Pry instances.
80
+ # @example
81
+ # Pry.config.hooks = Pry::Hooks.new.add_hook(:before_session,
82
+ # :default) { |output, target, _pry_| output.puts "Good morning!" }
83
+ attr_reader :hooks
84
+
85
+ # FIXME:
86
+ # This is a hack to alert people of the new API.
87
+ # @param [Pry::Hooks] v Only accept `Pry::Hooks` now!
88
+ def hooks=(v)
89
+ if v.is_a?(Hash)
90
+ warn "Hash-based hooks are now deprecated! Use a `Pry::Hooks` object instead! http://rubydoc.info/github/pry/pry/master/Pry/Hooks"
91
+ @hooks = Pry::Hooks.from_hash(v)
92
+ else
93
+ @hooks = v
94
+ end
22
95
  end
96
+
97
+ # Get the array of Procs (or single Proc) to be used for the prompts by default by
98
+ # all Pry instances.
99
+ # Three parameters are passed into the prompt procs, (1) the
100
+ # object that is the target of the session, (2) the current
101
+ # nesting level, and (3) a reference to the associated Pry instance. These objects can be used in the prompt, if desired.
102
+ # @return [Array<Proc>, Proc] The array of Procs to be used for the
103
+ # prompts by default by all Pry instances.
104
+ # @example
105
+ # Pry.config.prompt = proc { |obj, nest_level, _pry_| "#{obj}:#{nest_level}> " }
106
+ attr_accessor :prompt
107
+
108
+ # The display name that is part of the prompt. Default is 'pry'.
109
+ # You can set your own name so you can identify which project your current pry session
110
+ # is using. This is useful if you have a local pryrc file in a Rails project for example.
111
+ # @return [String]
112
+ # @example
113
+ # Pry.config.prompt_name = 'my_rails_project'
114
+ attr_accessor :prompt_name
115
+
116
+ # The default editor to use. Defaults to $VISUAL, $EDITOR, or a sensible fallback
117
+ # for the platform.
118
+ # If `editor` is a String then that string is used as the shell
119
+ # command to invoke the editor. If `editor` is callable (e.g a
120
+ # Proc) then `file`, `line`, and `reloading` are passed in as parameters and the
121
+ # return value of that callable invocation is used as the exact
122
+ # shell command to invoke the editor. `reloading` indicates whether Pry will be
123
+ # reloading code after the shell command returns. Any or all of these parameters
124
+ # can be omitted from the callable's signature.
125
+ # @example String
126
+ # Pry.config.editor = "emacsclient"
127
+ # @example Callable
128
+ # Pry.config.editor = proc { |file, line| "emacsclient #{file} +#{line}" }
129
+ # @example Callable waiting only if reloading
130
+ # Pry.config.editor = proc { |file, line, reloading| "subl #{'--wait' if reloading} #{file}:#{line}" }
131
+ # @return [String, #call]
132
+ attr_accessor :editor
133
+
134
+ # A string that must precede all Pry commands (e.g., if command_prefix is
135
+ # set to "%", the "cd" command must be invoked as "%cd").
136
+ # @return [String]
137
+ attr_accessor :command_prefix
138
+
139
+ # @return [Boolean] Toggle Pry color on and off.
140
+ attr_accessor :color
141
+
142
+ # @return [Boolean] Toggle paging on and off.
143
+ attr_accessor :pager
144
+
145
+ # Determines whether the rc file (~/.pryrc) should be loaded.
146
+ # @return [Boolean]
147
+ attr_accessor :should_load_rc
148
+
149
+ # Determines whether the local rc file (./.pryrc) should be loaded.
150
+ # @return [Boolean]
151
+ attr_accessor :should_load_local_rc
152
+
153
+ # Determines whether plugins should be loaded.
154
+ # @return [Boolean]
155
+ attr_accessor :should_load_plugins
156
+
157
+ # Determines whether to load files specified with the -r flag.
158
+ # @return [Boolean]
159
+ attr_accessor :should_load_requires
160
+
161
+ # Determines whether to disable edit-method's auto-reloading behavior.
162
+ # @return [Boolean]
163
+ attr_accessor :disable_auto_reload
164
+
165
+ # Determines whether Pry should trap SIGINT and cause it to raise an
166
+ # Interrupt exception. This is only useful on jruby, MRI does this
167
+ # for us.
168
+ # @return [Boolean]
169
+ attr_accessor :should_trap_interrupts
170
+
171
+ # Config option for history.
172
+ # sub-options include history.file, history.load, and history.save
173
+ # history.file is the file to save/load history to, e.g
174
+ # Pry.config.history.file = "~/.pry_history".
175
+ # history.should_load is a boolean that determines whether history will be
176
+ # loaded from history.file at session start.
177
+ # history.should_save is a boolean that determines whether history will be
178
+ # saved to history.file at session end.
179
+ # @return [OpenStruct]
180
+ attr_accessor :history
181
+
182
+ # Config option for plugins:
183
+ # sub-options include:
184
+ # `plugins.strict_loading` (Boolean) which toggles whether referring to a non-existent plugin should raise an exception (defaults to `false`)
185
+ # @return [OpenStruct]
186
+ attr_accessor :plugins
187
+
188
+ # @return [Array<String>] Ruby files to be required after loading any plugins.
189
+ attr_accessor :requires
190
+
191
+ # @return [Integer] Amount of results that will be stored into out
192
+ attr_accessor :memory_size
193
+
194
+ # @return [Proc] The proc that manages ^D presses in the REPL.
195
+ # The proc is passed the current eval_string and the current pry instance.
196
+ attr_accessor :control_d_handler
197
+
198
+ # @return [Proc] The proc that runs system commands
199
+ # The proc is passed the pry output object, the command string
200
+ # to eval, and a reference to the pry instance
201
+ attr_accessor :system
202
+
203
+ # @return [Boolean] Whether or not code should be indented
204
+ # using Pry::Indent.
205
+ attr_accessor :auto_indent
206
+
207
+ # @return [Boolean] Whether or not indentation should be corrected
208
+ # after hitting enter. This feature is not supported by all terminals.
209
+ attr_accessor :correct_indent
210
+
211
+ # @return [Boolean] Whether or not a warning will be displayed when
212
+ # a command name collides with a method/local in the current context.
213
+ attr_accessor :collision_warning
214
+
215
+
216
+ # Config option for gist.
217
+ # sub-options include `gist.inspecter`,
218
+ # `gist.inspecter` is a callable that defines how the expression output
219
+ # will be displayed when using the `gist -i` command.
220
+ # @example Pretty inspect output
221
+ # Pry.config.gist.inspecter = proc { |v| v.pretty_inspect }
222
+ # @example Regular inspect
223
+ # Pry.config.gist.inspecter = proc &:inspect
224
+ # @return [OpenStruct]
225
+ attr_accessor :gist
226
+
227
+ # @return [Hash] Additional sticky locals (to the standard ones) to use in Pry sessions.
228
+ # @example Inject `random_number` sticky local into Pry session
229
+ # Pry.config.extra_sticky_locals = { :random_number => proc {
230
+ # rand(10) } }
231
+ attr_accessor :extra_sticky_locals
232
+
233
+ # @return [#build_completion_proc] A completer to use.
234
+ attr_accessor :completer
23
235
  end
24
236
  end
237
+