Skip to content

Commit

Permalink
Add show doc dialog for Reline
Browse files Browse the repository at this point in the history
  • Loading branch information
aycabta committed Aug 29, 2021
1 parent 9861023 commit 0267004
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions lib/irb/input-method.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
require_relative 'completion'
require 'io/console'
require 'reline'
require 'rdoc'

module IRB
STDIN_FILE_NAME = "(line)" # :nodoc:
Expand Down Expand Up @@ -308,6 +309,46 @@ def auto_indent(&block)
@auto_indent_proc = block
end

SHOW_DOC_DIALOG = ->() {
begin
require 'rdoc'
rescue LoadError
return nil
end
if just_cursor_moving and completion_journey_data.nil?
return nil
end
cursor_pos_to_render, result, pointer = context.pop(3)
return nil if result.nil? or pointer.nil?
name = result[pointer]

driver = RDoc::RI::Driver.new
name = driver.expand_name(name)
doc = nil
used_for_class = false
if not name =~ /#|\./
found, klasses, includes, extends = driver.classes_and_includes_and_extends_for(name)
if not found.empty?
doc = driver.class_document(name, found, klasses, includes, extends)
used_for_class = true
end
end
unless used_for_class
doc = RDoc::Markup::Document.new
begin
driver.add_method(doc, name)
rescue RDoc::RI::Driver::NotFoundError
doc = nil
end
end
return nil if doc.nil?
formatter = RDoc::Markup::ToAnsi.new
formatter.width = 40
str = doc.accept(formatter)

[Reline::CursorPos.new(cursor_pos_to_render.x + 40, cursor_pos_to_render.y + pointer), str.split("\n"), nil, '49']
}

# Reads the next line from this input method.
#
# See IO#gets for more information.
Expand All @@ -316,6 +357,7 @@ def gets
Reline.output = @stdout
Reline.prompt_proc = @prompt_proc
Reline.auto_indent_proc = @auto_indent_proc if @auto_indent_proc
Reline.add_dialog_proc(:show_doc, SHOW_DOC_DIALOG, Reline::DEFAULT_DIALOG_CONTEXT)
if l = readmultiline(@prompt, false, &@check_termination_proc)
HISTORY.push(l) if !l.empty?
@line[@line_no += 1] = l + "\n"
Expand Down

0 comments on commit 0267004

Please sign in to comment.