Class: Pry::Command::ShowSource
- Inherits:
-
ShowInfo
- Object
- Pry::Command
- Pry::ClassCommand
- ShowInfo
- Pry::Command::ShowSource
- Includes:
- Helpers::DocumentationHelpers
- Defined in:
- lib/pry/commands/show_source.rb
Constant Summary
Constants included from Helpers::DocumentationHelpers
Helpers::DocumentationHelpers::YARD_TAGS
Constants inherited from Pry::Command
Constants included from Helpers::Text
Instance Attribute Summary
Attributes inherited from Pry::ClassCommand
Attributes inherited from Pry::Command
#arg_string, #captures, #command_block, #command_set, #context, #eval_string, #hooks, #output, #pry_instance, #target
Instance Method Summary collapse
-
#content_for(code_object) ⇒ Object
The source for code_object prepared for display.
-
#docs_for(code_object) ⇒ Object
Return docs for the code_object, adjusting for whether the code_object has yard docs available, in which case it returns those.
-
#header_options ⇒ Object
Which sections to include in the ‘header’, can toggle: :owner, :signature and visibility.
- #options(opt) ⇒ Object
- #process ⇒ Object
-
#render_doc_markup_for(code_object) ⇒ Object
process the markup (if necessary) and apply colors.
-
#start_line_for(code_object) ⇒ Fixnum
figure out start line of docs by back-calculating based on number of lines in the comment and the start line of the code_object.
Methods included from Helpers::DocumentationHelpers
get_comment_content, process_comment_markup, process_rdoc, process_yardoc, process_yardoc_tag, strip_comments_from_c_code, strip_leading_whitespace
Methods inherited from ShowInfo
#code_object_header, #code_object_with_accessible_source, #complete, #content_and_header_for_code_object, #content_and_headers_for_all_module_candidates, #file_and_line_for, #header, #initialize, #method_header, #method_sections, #module_header, #no_definition_message, #obj_name, #show_all_modules?, #use_line_numbers?, #valid_superclass?
Methods included from Helpers::BaseHelpers
#colorize_code, #find_command, #heading, #highlight, #not_a_real_file?, #safe_send, #silence_warnings, #stagger_output, #use_ansi_codes?
Methods inherited from Pry::ClassCommand
#call, #complete, doc, #help, inherited, #setup, #slop, source, source_file, source_line, source_location, #subcommands
Methods inherited from Pry::Command
#_pry_, banner, #block, #check_for_command_collision, command_name, #command_name, #command_options, command_regex, #commands, #complete, convert_to_regex, default_options, #description, doc, group, #initialize, inspect, #interpolate_string, #match, match_score, matches?, name, #name, options, #process_line, #run, source, #source, source_file, source_line, state, #state, subclass, #target_self, #tokenize, #void
Methods included from Pry::CodeObject::Helpers
#c_method?, #c_module?, #command?, #module_with_yard_docs?, #real_method_object?
Methods included from Helpers::Text
#bold, #default, #indent, #no_color, #no_pager, #strip_color, #with_line_numbers
Methods included from Helpers::CommandHelpers
#absolute_index_number, #absolute_index_range, #get_method_or_raise, #internal_binding?, #one_index_number, #one_index_range, #one_index_range_or_number, #restrict_to_lines, #set_file_and_dir_locals, #temp_file, #unindent
Methods included from Helpers::OptionsHelpers
Constructor Details
This class inherits a constructor from Pry::Command::ShowInfo
Instance Method Details
#content_for(code_object) ⇒ Object
The source for code_object prepared for display.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/pry/commands/show_source.rb', line 48 def content_for(code_object) content = '' if opts.present?(:d) code = Code.new( render_doc_markup_for(code_object), start_line_for(code_object), :text ) content += code.with_line_numbers(use_line_numbers?).to_s content += "\n" end code = Code.new( code_object.source || [], start_line_for(code_object) ) content += code.with_line_numbers(use_line_numbers?).highlighted content end |
#docs_for(code_object) ⇒ Object
Return docs for the code_object, adjusting for whether the code_object has yard docs available, in which case it returns those. (note we only have to check yard docs for modules since they can have multiple docs, but methods can only be doc’d once so we dont need to check them)
86 87 88 89 90 91 92 93 94 |
# File 'lib/pry/commands/show_source.rb', line 86 def docs_for(code_object) if code_object.module_with_yard_docs? # yard docs code_object.yard_doc else # normal docs (i.e comments above method/module/command) code_object.doc end end |
#header_options ⇒ Object
Which sections to include in the ‘header’, can toggle: :owner, :signature and visibility.
98 99 100 |
# File 'lib/pry/commands/show_source.rb', line 98 def super.merge signature: true end |
#options(opt) ⇒ Object
31 32 33 34 35 36 |
# File 'lib/pry/commands/show_source.rb', line 31 def (opt) opt.on :e, :eval, "evaluate the command's argument as a ruby " \ "expression and show the class its return value" opt.on :d, :doc, 'include documentation in the output' super(opt) end |
#process ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/pry/commands/show_source.rb', line 38 def process if opts.present?(:e) obj = target.eval(args.first) self.args = Array.new(1) { obj.is_a?(Module) ? obj.name : obj.class.name } end super end |
#render_doc_markup_for(code_object) ⇒ Object
process the markup (if necessary) and apply colors
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/pry/commands/show_source.rb', line 66 def render_doc_markup_for(code_object) docs = docs_for(code_object) if code_object.command? # command '--help' shouldn't use markup highlighting docs else if docs.empty? raise CommandError, "No docs found for: #{obj_name || 'current context'}" end process_comment_markup(docs) end end |
#start_line_for(code_object) ⇒ Fixnum
figure out start line of docs by back-calculating based on number of lines in the comment and the start line of the code_object
105 106 107 108 109 110 |
# File 'lib/pry/commands/show_source.rb', line 105 def start_line_for(code_object) return 1 if code_object.command? || opts.present?(:'base-one') return 1 unless code_object.source_line code_object.source_line - code_object.doc.lines.count end |