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,61 +1,63 @@
1
- require 'pry/commands/code_collector'
1
+ # frozen_string_literal: true
2
2
 
3
3
  class Pry
4
- class Command::SaveFile < Pry::ClassCommand
5
- match 'save-file'
6
- group 'Input and Output'
7
- description 'Export to a file using content from the REPL.'
4
+ class Command
5
+ class SaveFile < Pry::ClassCommand
6
+ match 'save-file'
7
+ group 'Input and Output'
8
+ description 'Export to a file using content from the REPL.'
8
9
 
9
- banner <<-'BANNER'
10
- Usage: save-file [OPTIONS] --to [FILE]
10
+ banner <<-'BANNER'
11
+ Usage: save-file [OPTIONS] --to [FILE]
11
12
 
12
- Export to a file using content from the REPL.
13
+ Export to a file using content from the REPL.
13
14
 
14
- save-file my_method --to hello.rb
15
- save-file -i 1..10 --to hello.rb --append
16
- save-file show-method --to my_command.rb
17
- save-file sample_file.rb --lines 2..10 --to output_file.rb
18
- BANNER
15
+ save-file my_method --to hello.rb
16
+ save-file -i 1..10 --to hello.rb --append
17
+ save-file show-method --to my_command.rb
18
+ save-file sample_file.rb --lines 2..10 --to output_file.rb
19
+ BANNER
19
20
 
20
- def options(opt)
21
- CodeCollector.inject_options(opt)
21
+ def options(opt)
22
+ CodeCollector.inject_options(opt)
22
23
 
23
- opt.on :to=, "Specify the output file path"
24
- opt.on :a, :append, "Append output to file"
25
- end
24
+ opt.on :to=, "Specify the output file path"
25
+ opt.on :a, :append, "Append output to file"
26
+ end
26
27
 
27
- def process
28
- @cc = CodeCollector.new(args, opts, _pry_)
29
- raise CommandError, "Found no code to save." if @cc.content.empty?
28
+ def process
29
+ @cc = CodeCollector.new(args, opts, pry_instance)
30
+ raise CommandError, "Found no code to save." if @cc.content.empty?
30
31
 
31
- if !file_name
32
- display_content
33
- else
34
- save_file
32
+ if !file_name
33
+ display_content
34
+ else
35
+ save_file
36
+ end
35
37
  end
36
- end
37
38
 
38
- def file_name
39
- opts[:to] || nil
40
- end
39
+ def file_name
40
+ opts[:to] || nil
41
+ end
41
42
 
42
- def save_file
43
- File.open(file_name, mode) do |f|
44
- f.puts @cc.content
43
+ def save_file
44
+ File.open(file_name, mode) do |f|
45
+ f.puts @cc.content
46
+ end
47
+ output.puts "#{file_name} successfully saved"
45
48
  end
46
- output.puts "#{file_name} successfully saved"
47
- end
48
49
 
49
- def display_content
50
- output.puts @cc.content
51
- output.puts "\n\n--\nPlease use `--to FILE` to export to a file."
52
- output.puts "No file saved!\n--"
53
- end
50
+ def display_content
51
+ output.puts @cc.content
52
+ output.puts "\n\n--\nPlease use `--to FILE` to export to a file."
53
+ output.puts "No file saved!\n--"
54
+ end
54
55
 
55
- def mode
56
- opts.present?(:append) ? "a" : "w"
56
+ def mode
57
+ opts.present?(:append) ? "a" : "w"
58
+ end
57
59
  end
58
- end
59
60
 
60
- Pry::Commands.add_command(Pry::Command::SaveFile)
61
+ Pry::Commands.add_command(Pry::Command::SaveFile)
62
+ end
61
63
  end
@@ -1,43 +1,75 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::ShellCommand < Pry::ClassCommand
3
- match /\.(.*)/
4
- group 'Input and Output'
5
- description "All text following a '.' is forwarded to the shell."
6
- command_options :listing => '.<shell command>', :use_prefix => false,
7
- :takes_block => true
8
-
9
- banner <<-'BANNER'
10
- Usage: .COMMAND_NAME
11
-
12
- All text following a "." is forwarded to the shell.
13
-
14
- .ls -aF
15
- .uname
16
- BANNER
17
-
18
- def process(cmd)
19
- if cmd =~ /^cd\s+(.+)/i
20
- dest = $1
21
- begin
22
- Dir.chdir File.expand_path(dest)
23
- rescue Errno::ENOENT
24
- raise CommandError, "No such directory: #{dest}"
25
- end
26
- else
27
- pass_block(cmd)
4
+ class Command
5
+ class ShellCommand < Pry::ClassCommand
6
+ match(/\.(.*)/)
7
+ group 'Input and Output'
8
+ description "All text following a '.' is forwarded to the shell."
9
+ command_options listing: '.<shell command>', use_prefix: false,
10
+ takes_block: true
11
+
12
+ banner <<-'BANNER'
13
+ Usage: .COMMAND_NAME
28
14
 
29
- if command_block
30
- command_block.call `#{cmd}`
15
+ All text following a "." is forwarded to the shell.
16
+
17
+ .ls -aF
18
+ .uname
19
+ BANNER
20
+
21
+ def process(cmd)
22
+ if cmd =~ /^cd\s*(.*)/i
23
+ process_cd parse_destination(Regexp.last_match(1))
31
24
  else
32
- Pry.config.system.call(output, cmd, _pry_)
25
+ pass_block(cmd)
26
+ if command_block
27
+ command_block.call `#{cmd}`
28
+ else
29
+ pry_instance.config.system.call(output, cmd, pry_instance)
30
+ end
33
31
  end
34
32
  end
35
- end
36
33
 
37
- def complete(search)
38
- super + Bond::Rc.files(search.split(" ").last || '')
34
+ private
35
+
36
+ def parse_destination(dest)
37
+ return "~" if dest.empty?
38
+ return dest unless dest == "-"
39
+
40
+ state.old_pwd || raise(CommandError, "No prior directory available")
41
+ end
42
+
43
+ def process_cd(dest)
44
+ state.old_pwd = Dir.pwd
45
+ Dir.chdir(File.expand_path(path_from_cd_path(dest) || dest))
46
+ rescue Errno::ENOENT
47
+ raise CommandError, "No such directory: #{dest}"
48
+ end
49
+
50
+ def cd_path_env
51
+ Pry::Env['CDPATH']
52
+ end
53
+
54
+ def cd_path_exists?
55
+ cd_path_env && cd_path_env.length.nonzero?
56
+ end
57
+
58
+ def path_from_cd_path(dest)
59
+ return if !(dest && cd_path_exists?) || special_case_path?(dest)
60
+
61
+ cd_path_env.split(File::PATH_SEPARATOR).each do |path|
62
+ return path if File.directory?(path) && path.split(File::SEPARATOR).last == dest
63
+ end
64
+
65
+ nil
66
+ end
67
+
68
+ def special_case_path?(dest)
69
+ ['.', '..', '-'].include?(dest) || dest =~ /\A[#{File::PATH_SEPARATOR}~]/
70
+ end
39
71
  end
40
- end
41
72
 
42
- Pry::Commands.add_command(Pry::Command::ShellCommand)
73
+ Pry::Commands.add_command(Pry::Command::ShellCommand)
74
+ end
43
75
  end
@@ -1,27 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Pry
2
- class Command::ShellMode < Pry::ClassCommand
3
- match 'shell-mode'
4
- group 'Input and Output'
5
- description 'Toggle shell mode. Bring in pwd prompt and file completion.'
4
+ class Command
5
+ class ShellMode < Pry::ClassCommand
6
+ match 'shell-mode'
7
+ group 'Input and Output'
8
+ description 'Toggle shell mode. Bring in pwd prompt and file completion.'
9
+
10
+ banner <<-'BANNER'
11
+ Toggle shell mode. Bring in pwd prompt and file completion.
12
+ BANNER
6
13
 
7
- banner <<-'BANNER'
8
- Toggle shell mode. Bring in pwd prompt and file completion.
9
- BANNER
14
+ def process
15
+ state.disabled ^= true
10
16
 
11
- def process
12
- case _pry_.prompt
13
- when Pry::SHELL_PROMPT
14
- _pry_.pop_prompt
15
- _pry_.custom_completions = Pry::DEFAULT_CUSTOM_COMPLETIONS
16
- else
17
- _pry_.push_prompt Pry::SHELL_PROMPT
18
- _pry_.custom_completions = Pry::FILE_COMPLETIONS
19
- Readline.completion_proc = Pry::InputCompleter.build_completion_proc target,
20
- _pry_.instance_eval(&Pry::FILE_COMPLETIONS)
17
+ if state.disabled
18
+ state.prev_prompt = pry_instance.prompt
19
+ pry_instance.prompt = Pry::Prompt[:shell]
20
+ else
21
+ pry_instance.prompt = state.prev_prompt
22
+ end
21
23
  end
22
24
  end
23
- end
24
25
 
25
- Pry::Commands.add_command(Pry::Command::ShellMode)
26
- Pry::Commands.alias_command 'file-mode', 'shell-mode'
26
+ Pry::Commands.add_command(Pry::Command::ShellMode)
27
+ Pry::Commands.alias_command 'file-mode', 'shell-mode'
28
+ end
27
29
  end
@@ -1,78 +1,93 @@
1
- require 'pry/commands/show_info'
1
+ # frozen_string_literal: true
2
2
 
3
3
  class Pry
4
- class Command::ShowDoc < Command::ShowInfo
5
- include Pry::Helpers::DocumentationHelpers
6
-
7
- match 'show-doc'
8
- group 'Introspection'
9
- description 'Show the documentation for a method or class.'
10
-
11
- banner <<-BANNER
12
- Usage: show-doc [OPTIONS] [METH]
13
- Aliases: ?
14
-
15
- Show the documentation for a method or class. Tries instance methods first and
16
- then methods by default.
17
-
18
- show-doc hi_method # docs for hi_method
19
- show-doc Pry # for Pry class
20
- show-doc Pry -a # for all definitions of Pry class (all monkey patches)
21
- BANNER
22
-
23
- # The docs for code_object prepared for display.
24
- def content_for(code_object)
25
- Code.new(render_doc_markup_for(code_object),
26
- start_line_for(code_object), :text).
27
- with_line_numbers(use_line_numbers?).to_s
28
- end
4
+ class Command
5
+ class ShowDoc < Command::ShowInfo
6
+ include Pry::Helpers::DocumentationHelpers
7
+
8
+ match 'show-doc'
9
+ group 'Introspection'
10
+ description 'Show the documentation for a method or class.'
11
+
12
+ banner <<-BANNER
13
+ Usage: show-doc [OPTIONS] [METH]
14
+ Aliases: ?
15
+
16
+ Show the documentation for a method or class. Tries instance methods first and
17
+ then methods by default.
18
+
19
+ show-doc hi_method # docs for hi_method
20
+ show-doc Pry # for Pry class
21
+ show-doc Pry -a # for all definitions of Pry class (all monkey patches)
22
+ BANNER
29
23
 
30
- # process the markup (if necessary) and apply colors
31
- def render_doc_markup_for(code_object)
32
- docs = docs_for(code_object)
24
+ def process
25
+ super
33
26
 
34
- if code_object.command?
35
- # command '--help' shouldn't use markup highlighting
36
- docs
37
- else
38
- process_comment_markup(docs)
27
+ output.puts(
28
+ "\nWARNING: the show-doc command is deprecated. It will be removed " \
29
+ "from future Pry versions.\nPlease use 'show-source' with the -d " \
30
+ "(or --doc) switch instead\nExample: show-source #{obj_name} -d"
31
+ )
39
32
  end
40
- end
41
33
 
42
- # Return docs for the code_object, adjusting for whether the code_object
43
- # has yard docs available, in which case it returns those.
44
- # (note we only have to check yard docs for modules since they can
45
- # have multiple docs, but methods can only be doc'd once so we
46
- # dont need to check them)
47
- def docs_for(code_object)
48
- if code_object.module_with_yard_docs?
49
- # yard docs
50
- code_object.yard_doc
51
- else
52
- # normal docs (i.e comments above method/module/command)
53
- code_object.doc
34
+ # The docs for code_object prepared for display.
35
+ def content_for(code_object)
36
+ Code.new(
37
+ render_doc_markup_for(code_object),
38
+ start_line_for(code_object),
39
+ :text
40
+ ).with_line_numbers(use_line_numbers?).to_s
54
41
  end
55
- end
56
42
 
57
- # Which sections to include in the 'header', can toggle: :owner,
58
- # :signature and visibility.
59
- def header_options
60
- super.merge :signature => true
61
- end
43
+ # process the markup (if necessary) and apply colors
44
+ def render_doc_markup_for(code_object)
45
+ docs = docs_for(code_object)
46
+
47
+ if code_object.command?
48
+ # command '--help' shouldn't use markup highlighting
49
+ docs
50
+ else
51
+ if docs.empty?
52
+ raise CommandError, "No docs found for: #{obj_name || 'current context'}"
53
+ end
62
54
 
63
- # figure out start line of docs by back-calculating based on
64
- # number of lines in the comment and the start line of the code_object
65
- # @return [Fixnum] start line of docs
66
- def start_line_for(code_object)
67
- if code_object.command? || opts.present?(:'base-one')
68
- 1
69
- else
70
- code_object.source_line.nil? ? 1 :
71
- (code_object.source_line - code_object.doc.lines.count)
55
+ process_comment_markup(docs)
56
+ end
57
+ end
58
+
59
+ # Return docs for the code_object, adjusting for whether the code_object
60
+ # has yard docs available, in which case it returns those.
61
+ # (note we only have to check yard docs for modules since they can
62
+ # have multiple docs, but methods can only be doc'd once so we
63
+ # dont need to check them)
64
+ def docs_for(code_object)
65
+ if code_object.module_with_yard_docs?
66
+ # yard docs
67
+ code_object.yard_doc
68
+ else
69
+ # normal docs (i.e comments above method/module/command)
70
+ code_object.doc
71
+ end
72
+ end
73
+
74
+ # Which sections to include in the 'header', can toggle: :owner,
75
+ # :signature and visibility.
76
+ def header_options
77
+ super.merge signature: true
78
+ end
79
+
80
+ # figure out start line of docs by back-calculating based on
81
+ # number of lines in the comment and the start line of the code_object
82
+ # @return [Fixnum] start line of docs
83
+ def start_line_for(code_object)
84
+ return 1 if code_object.command? || opts.present?(:'base-one')
85
+ return 1 unless code_object.source_line
86
+
87
+ code_object.source_line - code_object.doc.lines.count
72
88
  end
73
89
  end
74
- end
75
90
 
76
- Pry::Commands.add_command(Pry::Command::ShowDoc)
77
- Pry::Commands.alias_command '?', 'show-doc'
91
+ Pry::Commands.add_command(Pry::Command::ShowDoc)
92
+ end
78
93
  end