diff options
Diffstat (limited to 'lib/irb/cmd/show_doc.rb')
-rw-r--r-- | lib/irb/cmd/show_doc.rb | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/irb/cmd/show_doc.rb b/lib/irb/cmd/show_doc.rb new file mode 100644 index 0000000000..99dd9ab95a --- /dev/null +++ b/lib/irb/cmd/show_doc.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require_relative "nop" + +module IRB + module ExtendCommand + class ShowDoc < Nop + class << self + def transform_args(args) + # Return a string literal as is for backward compatibility + if args.empty? || string_literal?(args) + args + else # Otherwise, consider the input as a String for convenience + args.strip.dump + end + end + end + + category "Context" + description "Enter the mode to look up RI documents." + + def execute(*names) + require 'rdoc/ri/driver' + + unless ShowDoc.const_defined?(:Ri) + opts = RDoc::RI::Driver.process_args([]) + ShowDoc.const_set(:Ri, RDoc::RI::Driver.new(opts)) + end + + if names.empty? + Ri.interactive + else + names.each do |name| + begin + Ri.display_name(name.to_s) + rescue RDoc::RI::Error + puts $!.message + end + end + end + + nil + rescue LoadError, SystemExit + warn "Can't display document because `rdoc` is not installed." + end + end + end +end |