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,99 +1,103 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::AmendLine < Pry::ClassCommand
3
- match /amend-line(?: (-?\d+)(?:\.\.(-?\d+))?)?/
4
- group 'Editing'
5
- description 'Amend a line of input in multi-line mode.'
6
- command_options :interpolate => false, :listing => 'amend-line'
7
-
8
- banner <<-'BANNER'
9
- Amend a line of input in multi-line mode. `amend-line N`, where the N represents
10
- line to replace. Can also specify a range of lines using `amend-line N..M`
11
- syntax. Passing "!" as replacement content deletes the line(s) instead.
12
-
13
- amend-line 1 puts 'new' # replace line 1
14
- amend-line 1..4 ! # delete lines 1..4
15
- amend-line 3 >puts 'bye' # insert before line 3
16
- amend-line puts 'appended' # no line number modifies immediately preceding line
17
- BANNER
18
-
19
- def process
20
- raise CommandError, "No input to amend." if eval_string.empty?
21
-
22
- eval_string.replace amended_input(eval_string)
23
- run "fix-indent"
24
- run "show-input"
25
- end
4
+ class Command
5
+ class AmendLine < Pry::ClassCommand
6
+ match(/amend-line(?: (-?\d+)(?:\.\.(-?\d+))?)?/)
7
+ group 'Editing'
8
+ description 'Amend a line of input in multi-line mode.'
9
+ command_options interpolate: false, listing: 'amend-line'
10
+
11
+ banner <<-'BANNER'
12
+ Amend a line of input in multi-line mode. `amend-line N`, where the N represents
13
+ line to replace. Can also specify a range of lines using `amend-line N..M`
14
+ syntax. Passing "!" as replacement content deletes the line(s) instead.
15
+
16
+ amend-line 1 puts 'new' # replace line 1
17
+ amend-line 1..4 ! # delete lines 1..4
18
+ amend-line 3 >puts 'bye' # insert before line 3
19
+ amend-line puts 'appended' # no line number modifies immediately preceding line
20
+ BANNER
21
+
22
+ def process
23
+ raise CommandError, "No input to amend." if eval_string.empty?
24
+
25
+ eval_string.replace(amend_input)
26
+ run "fix-indent"
27
+ run "show-input"
28
+ end
26
29
 
27
- private
30
+ private
28
31
 
29
- # @param [String] string The string to amend.
30
- # @return [String] A new string with the amendments applied to it.
31
- def amended_input(string)
32
- input_array = eval_string.each_line.to_a
32
+ # @return [String] A new string with the amendments applied to it.
33
+ def amend_input
34
+ input_array = eval_string.each_line.to_a
33
35
 
34
- if arg_string == "!"
35
- delete_from_array(input_array, line_range)
36
- elsif arg_string.start_with?(">")
37
- insert_into_array(input_array, line_range)
38
- else
39
- replace_in_array(input_array, line_range)
40
- end
36
+ if arg_string == "!"
37
+ delete_from_array(input_array, line_range)
38
+ elsif arg_string.start_with?(">")
39
+ insert_into_array(input_array, line_range)
40
+ else
41
+ replace_in_array(input_array, line_range)
42
+ end
41
43
 
42
- input_array.join
43
- end
44
+ input_array.join
45
+ end
44
46
 
45
- def delete_from_array(array, range)
46
- array.slice!(range)
47
- end
47
+ def delete_from_array(array, range)
48
+ array.slice!(range)
49
+ end
48
50
 
49
- def insert_into_array(array, range)
50
- insert_slot = Array(range).first
51
- array.insert(insert_slot, arg_string[1..-1] + "\n")
52
- end
51
+ def insert_into_array(array, range)
52
+ insert_slot = Array(range).first
53
+ array.insert(insert_slot, arg_string[1..-1] << "\n")
54
+ end
53
55
 
54
- def replace_in_array(array, range)
55
- array[range] = arg_string + "\n"
56
- end
56
+ def replace_in_array(array, range)
57
+ array[range] = arg_string + "\n"
58
+ end
57
59
 
58
- # @return [Fixnum] The number of lines currently in `eval_string` (the input buffer).
59
- def line_count
60
- eval_string.lines.count
61
- end
60
+ # @return [Fixnum] The number of lines currently in `eval_string` (the
61
+ # input buffer)
62
+ def line_count
63
+ eval_string.lines.count
64
+ end
62
65
 
63
- # Returns the (one-indexed) start and end lines given by the user.
64
- # The lines in this range will be affected by the `amend-line`.
65
- # Returns `nil` if no lines were specified by the user.
66
- # @return [Array<Fixnum>, nil]
67
- def start_and_end_line_number
68
- start_line_number, end_line_number = args
69
- end_line_number ||= start_line_number.to_i
66
+ # Returns the (one-indexed) start and end lines given by the user.
67
+ # The lines in this range will be affected by the `amend-line`.
68
+ # Returns `nil` if no lines were specified by the user.
69
+ # @return [Array<Fixnum>, nil]
70
+ def start_and_end_line_number
71
+ start_line_number, end_line_number = args
72
+ end_line_number ||= start_line_number.to_i
70
73
 
71
- [start_line_number.to_i, end_line_number.to_i] if start_line_number
72
- end
74
+ [start_line_number.to_i, end_line_number.to_i] if start_line_number
75
+ end
73
76
 
74
- # Takes two numbers that are 1-indexed, and returns a range (or
75
- # number) that is 0-indexed. 1-indexed means the first element is
76
- # indentified by 1 rather than by 0 (as is the case for Ruby arrays).
77
- # @param [Fixnum] start_line_number One-indexed number.
78
- # @param [Fixnum] end_line_number One-indexed number.
79
- # @return [Range] The zero-indexed range.
80
- def zero_indexed_range_from_one_indexed_numbers(start_line_number, end_line_number)
81
- # FIXME: one_index_number is a horrible name for this method
82
- one_index_number(start_line_number)..one_index_number(end_line_number)
83
- end
77
+ # Takes two numbers that are 1-indexed, and returns a range (or
78
+ # number) that is 0-indexed. 1-indexed means the first element is
79
+ # indentified by 1 rather than by 0 (as is the case for Ruby arrays).
80
+ # @param [Fixnum] start_line_number One-indexed number.
81
+ # @param [Fixnum] end_line_number One-indexed number.
82
+ # @return [Range] The zero-indexed range.
83
+ def zero_indexed_range_from_one_indexed_numbers(start_line_number, end_line_number)
84
+ # FIXME: one_index_number is a horrible name for this method
85
+ one_index_number(start_line_number)..one_index_number(end_line_number)
86
+ end
84
87
 
85
- # The lines (or line) that will be modified by the `amend-line`.
86
- # @return [Range, Fixnum] The lines or line.
87
- def line_range
88
- start_line_number, end_line_number = start_and_end_line_number
89
- if start_line_number
90
- zero_indexed_range_from_one_indexed_numbers(start_line_number,
91
- end_line_number)
92
- else
93
- line_count - 1
88
+ # The lines (or line) that will be modified by the `amend-line`.
89
+ # @return [Range, Fixnum] The lines or line.
90
+ def line_range
91
+ start_line_number, end_line_number = start_and_end_line_number
92
+ if start_line_number
93
+ zero_indexed_range_from_one_indexed_numbers(start_line_number,
94
+ end_line_number)
95
+ else
96
+ line_count - 1
97
+ end
94
98
  end
95
99
  end
96
- end
97
100
 
98
- Pry::Commands.add_command(Pry::Command::AmendLine)
101
+ Pry::Commands.add_command(Pry::Command::AmendLine)
102
+ end
99
103
  end
@@ -1,20 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::Bang < Pry::ClassCommand
3
- match '!'
4
- group 'Editing'
5
- description 'Clear the input buffer.'
6
- command_options :use_prefix => false
4
+ class Command
5
+ class Bang < Pry::ClassCommand
6
+ match(/^\s*!\s*$/)
7
+ group 'Editing'
8
+ description 'Clear the input buffer.'
9
+ command_options use_prefix: false, listing: '!'
7
10
 
8
- banner <<-'BANNER'
9
- Clear the input buffer. Useful if the parsing process goes wrong and you get
10
- stuck in the read loop.
11
- BANNER
11
+ banner <<-'BANNER'
12
+ Clear the input buffer. Useful if the parsing process goes wrong and you get
13
+ stuck in the read loop.
14
+ BANNER
12
15
 
13
- def process
14
- output.puts 'Input buffer cleared!'
15
- eval_string.replace('')
16
+ def process
17
+ output.puts 'Input buffer cleared!'
18
+ eval_string.replace('')
19
+ end
16
20
  end
17
- end
18
21
 
19
- Pry::Commands.add_command(Pry::Command::Bang)
22
+ Pry::Commands.add_command(Pry::Command::Bang)
23
+ end
20
24
  end
@@ -1,17 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::BangPry < Pry::ClassCommand
3
- match '!pry'
4
- group 'Navigating Pry'
5
- description 'Start a Pry session on current self.'
4
+ class Command
5
+ class BangPry < Pry::ClassCommand
6
+ match '!pry'
7
+ group 'Navigating Pry'
8
+ description 'Start a Pry session on current self.'
6
9
 
7
- banner <<-'BANNER'
8
- Start a Pry session on current self. Also works mid multi-line expression.
9
- BANNER
10
+ banner <<-'BANNER'
11
+ Start a Pry session on current self. Also works mid multi-line expression.
12
+ BANNER
10
13
 
11
- def process
12
- target.pry
14
+ def process
15
+ target.pry
16
+ end
13
17
  end
14
- end
15
18
 
16
- Pry::Commands.add_command(Pry::Command::BangPry)
19
+ Pry::Commands.add_command(Pry::Command::BangPry)
20
+ end
17
21
  end
@@ -1,26 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::Cat
3
- class AbstractFormatter
4
- include Pry::Helpers::CommandHelpers
5
- include Pry::Helpers::BaseHelpers
4
+ class Command
5
+ class Cat
6
+ class AbstractFormatter
7
+ include Pry::Helpers::CommandHelpers
8
+ include Pry::Helpers::BaseHelpers
6
9
 
7
- private
8
- def decorate(content)
9
- content.code_type = code_type
10
- content.between(*between_lines).
11
- with_line_numbers(use_line_numbers?)
12
- end
10
+ private
13
11
 
14
- def code_type
15
- opts[:type] || :ruby
16
- end
12
+ def decorate(content)
13
+ content.code_type = code_type
14
+ content.between(*between_lines)
15
+ .with_line_numbers(use_line_numbers?).highlighted
16
+ end
17
17
 
18
- def use_line_numbers?
19
- opts.present?(:'line-numbers') || opts.present?(:ex)
20
- end
18
+ def code_type
19
+ opts[:type] || :ruby
20
+ end
21
+
22
+ def use_line_numbers?
23
+ opts.present?(:'line-numbers') || opts.present?(:ex)
24
+ end
21
25
 
22
- def between_lines
23
- [opts[:start] || 1, opts[:end] || -1]
26
+ def between_lines
27
+ [opts[:start] || 1, opts[:end] || -1]
28
+ end
24
29
  end
25
30
  end
26
31
  end
@@ -1,78 +1,90 @@
1
- class Pry
2
- class Command::Cat
3
- class ExceptionFormatter < AbstractFormatter
4
- attr_accessor :ex
5
- attr_accessor :opts
6
- attr_accessor :_pry_
7
-
8
- def initialize(exception, _pry_, opts)
9
- @ex = exception
10
- @opts = opts
11
- @_pry_ = _pry_
12
- end
13
-
14
- def format
15
- check_for_errors
16
- set_file_and_dir_locals(backtrace_file, _pry_, _pry_.current_context)
17
- code = decorate(Pry::Code.from_file(backtrace_file).
18
- between(*start_and_end_line_for_code_window).
19
- with_marker(backtrace_line)).to_s
20
- "#{header}#{code}"
21
- end
22
-
23
- private
24
-
25
- def code_window_size
26
- Pry.config.default_window_size || 5
27
- end
28
-
29
- def backtrace_level
30
- return @backtrace_level if @backtrace_level
31
-
32
- bl = if opts[:ex].nil?
33
- ex.bt_index
34
- else
35
- ex.bt_index = absolute_index_number(opts[:ex], ex.backtrace.size)
36
- end
37
-
38
- increment_backtrace_level
39
- @backtrace_level = bl
40
- end
41
-
42
- def increment_backtrace_level
43
- ex.inc_bt_index
44
- end
45
-
46
- def backtrace_file
47
- file = Array(ex.bt_source_location_for(backtrace_level)).first
48
- (file && RbxPath.is_core_path?(file)) ? RbxPath.convert_path_to_full(file) : file
49
- end
50
-
51
- def backtrace_line
52
- Array(ex.bt_source_location_for(backtrace_level)).last
53
- end
54
-
55
- def check_for_errors
56
- raise CommandError, "No exception found." unless ex
57
- raise CommandError, "The given backtrace level is out of bounds." unless backtrace_file
58
- end
1
+ # frozen_string_literal: true
59
2
 
60
- def start_and_end_line_for_code_window
61
- start_line = backtrace_line - code_window_size
62
- start_line = 1 if start_line < 1
63
-
64
- [start_line, backtrace_line + code_window_size]
65
- end
66
-
67
- def header
68
- unindent %{
69
- #{Helpers::Text.bold 'Exception:'} #{ex.class}: #{ex.message}
70
- --
71
- #{Helpers::Text.bold('From:')} #{backtrace_file} @ line #{backtrace_line} @ #{Helpers::Text.bold("level: #{backtrace_level}")} of backtrace (of #{ex.backtrace.size - 1}).
72
-
73
- }
3
+ class Pry
4
+ class Command
5
+ class Cat
6
+ class ExceptionFormatter < AbstractFormatter
7
+ attr_reader :ex
8
+ attr_reader :opts
9
+ attr_reader :pry_instance
10
+ include Pry::Helpers::Text
11
+
12
+ def initialize(exception, pry_instance, opts)
13
+ @ex = exception
14
+ @opts = opts
15
+ @pry_instance = pry_instance
16
+ end
17
+
18
+ def format
19
+ check_for_errors
20
+ set_file_and_dir_locals(
21
+ backtrace_file, pry_instance, pry_instance.current_context
22
+ )
23
+ code = decorate(
24
+ Pry::Code.from_file(backtrace_file)
25
+ .between(*start_and_end_line_for_code_window)
26
+ .with_marker(backtrace_line)
27
+ )
28
+ "#{header}#{code}"
29
+ end
30
+
31
+ private
32
+
33
+ def code_window_size
34
+ pry_instance.config.default_window_size || 5
35
+ end
36
+
37
+ def backtrace_level
38
+ @backtrace_level ||=
39
+ begin
40
+ bl =
41
+ if opts[:ex].nil?
42
+ ex.bt_index
43
+ else
44
+ ex.bt_index = absolute_index_number(opts[:ex], ex.backtrace.size)
45
+ end
46
+
47
+ increment_backtrace_level
48
+ bl
49
+ end
50
+ end
51
+
52
+ def increment_backtrace_level
53
+ ex.inc_bt_index
54
+ end
55
+
56
+ def backtrace_file
57
+ Array(ex.bt_source_location_for(backtrace_level)).first
58
+ end
59
+
60
+ def backtrace_line
61
+ Array(ex.bt_source_location_for(backtrace_level)).last
62
+ end
63
+
64
+ def check_for_errors
65
+ raise CommandError, "No exception found." unless ex
66
+ return if backtrace_file
67
+
68
+ raise CommandError, "The given backtrace level is out of bounds."
69
+ end
70
+
71
+ def start_and_end_line_for_code_window
72
+ start_line = backtrace_line - code_window_size
73
+ start_line = 1 if start_line < 1
74
+
75
+ [start_line, backtrace_line + code_window_size]
76
+ end
77
+
78
+ def header
79
+ unindent(
80
+ "#{bold 'Exception:'} #{ex.class}: #{ex.message}\n" \
81
+ "--\n" \
82
+ "#{bold('From:')} #{backtrace_file}:#{backtrace_line} @ " \
83
+ "#{bold("level: #{backtrace_level}")} of backtrace " \
84
+ "(of #{ex.backtrace.size - 1}).\n\n"
85
+ )
86
+ end
74
87
  end
75
-
76
88
  end
77
89
  end
78
90
  end
@@ -1,81 +1,74 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::Cat
3
- class FileFormatter < AbstractFormatter
4
- attr_accessor :file_with_embedded_line
5
- attr_accessor :opts
6
- attr_accessor :_pry_
4
+ class Command
5
+ class Cat
6
+ class FileFormatter < AbstractFormatter
7
+ attr_reader :file_with_embedded_line
8
+ attr_reader :opts
9
+ attr_reader :pry_instance
7
10
 
8
- def initialize(file_with_embedded_line, _pry_, opts)
9
- @file_with_embedded_line = file_with_embedded_line
10
- @opts = opts
11
- @_pry_ = _pry_
12
- end
11
+ def initialize(file_with_embedded_line, pry_instance, opts)
12
+ unless file_with_embedded_line
13
+ raise CommandError, "Must provide a filename, --in, or --ex."
14
+ end
13
15
 
14
- def format
15
- raise CommandError, "Must provide a filename, --in, or --ex." if !file_with_embedded_line
16
+ @file_with_embedded_line = file_with_embedded_line
17
+ @opts = opts
18
+ @pry_instance = pry_instance
19
+ @code_from_file = Pry::Code.from_file(file_name)
20
+ end
16
21
 
17
- set_file_and_dir_locals(file_name, _pry_, _pry_.current_context)
18
- decorate(Pry::Code.from_file(file_name))
19
- end
22
+ def format
23
+ set_file_and_dir_locals(file_name, pry_instance, pry_instance.current_context)
24
+ decorate(@code_from_file)
25
+ end
20
26
 
21
- private
27
+ def file_and_line
28
+ file_name, line_num = file_with_embedded_line.split(%r{:(?!/|\\)})
22
29
 
23
- def file_and_line
24
- file_name, line_num = file_with_embedded_line.split(':')
30
+ [file_name, line_num ? line_num.to_i : nil]
31
+ end
25
32
 
26
- [File.expand_path(file_name), line_num ? line_num.to_i : nil]
27
- end
33
+ private
28
34
 
29
- def file_name
30
- file_and_line.first
31
- end
35
+ def file_name
36
+ file_and_line.first
37
+ end
32
38
 
33
- def line_number
34
- file_and_line.last
35
- end
39
+ def line_number
40
+ file_and_line.last
41
+ end
36
42
 
37
- def code_window_size
38
- Pry.config.default_window_size || 7
39
- end
43
+ def code_window_size
44
+ pry_instance.config.default_window_size || 7
45
+ end
40
46
 
41
- def decorate(content)
42
- line_number ? super.around(line_number, code_window_size) : super
43
- end
47
+ def decorate(content)
48
+ if line_number
49
+ super(content.around(line_number, code_window_size))
50
+ else
51
+ super
52
+ end
53
+ end
44
54
 
45
- def code_type
46
- opts[:type] || detect_code_type_from_file(file_name)
47
- end
55
+ def code_type
56
+ opts[:type] || detect_code_type_from_file(file_name)
57
+ end
48
58
 
49
- def detect_code_type_from_file(file_name)
50
- name, ext = File.basename(file_name).split('.', 2)
59
+ def detect_code_type_from_file(file_name)
60
+ code_type = @code_from_file.code_type
51
61
 
52
- if ext
53
- case ext
54
- when "py"
55
- :python
56
- when "rb", "gemspec", "rakefile", "ru", "pryrc", "irbrc"
57
- :ruby
58
- when "js"
59
- return :javascript
60
- when "yml", "prytheme"
61
- :yaml
62
- when "groovy"
63
- :groovy
64
- when "c"
65
- :c
66
- when "cpp"
67
- :cpp
68
- when "java"
69
- :java
70
- else
71
- :text
72
- end
73
- else
74
- case name
75
- when "Rakefile", "Gemfile"
76
- :ruby
62
+ if code_type == :unknown
63
+ name = File.basename(file_name).split('.', 2).first
64
+ case name
65
+ when "Rakefile", "Gemfile"
66
+ :ruby
67
+ else
68
+ :text
69
+ end
77
70
  else
78
- :text
71
+ code_type
79
72
  end
80
73
  end
81
74
  end