class Pry::Command::ShowSource
def content_for(code_object)
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
def docs_for(code_object)
have multiple docs, but methods can only be doc'd once so we
(note we only have to check yard docs for modules since they can
has yard docs available, in which case it returns those.
Return docs for the code_object, adjusting for whether the code_object
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
def header_options
Which sections to include in the 'header', can toggle: :owner,
def header_options super.merge signature: true end
def options(opt)
def options(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
def process
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
def render_doc_markup_for(code_object)
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
def start_line_for(code_object)
-
(Fixnum)
- start line of docs
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