[ruby/irb] Add irb_info command

https://github.com/ruby/irb/commit/a6fe58e916
This commit is contained in:
aycabta 2020-04-27 18:27:19 +09:00
Родитель 009092b04c
Коммит 98a346d065
4 изменённых файлов: 126 добавлений и 0 удалений

25
lib/irb/cmd/info.rb Normal file
Просмотреть файл

@ -0,0 +1,25 @@
# frozen_string_literal: false
require_relative "nop"
# :stopdoc:
module IRB
module ExtendCommand
class Info < Nop
def execute
Class.new {
def inspect
<<~EOM.chomp
Ruby version: #{RUBY_VERSION}
IRB version: #{IRB.version}
InputMethod: #{IRB.CurrentContext.io.inspect}
.irbrc path: #{IRB.rc_file}
EOM
end
alias_method :to_s, :inspect
}.new
end
end
end
end
# :startdoc:

Просмотреть файл

@ -121,6 +121,10 @@ module IRB # :nodoc:
[:help, NO_OVERRIDE],
],
[
:irb_info, :Info, "irb/cmd/info"
],
]
# Installs the default irb commands:

Просмотреть файл

@ -43,6 +43,11 @@ module IRB
def readable_after_eof?
false
end
# For debug message
def inspect
'Abstract InputMethod'
end
end
class StdioInputMethod < InputMethod
@ -93,6 +98,11 @@ module IRB
def encoding
@stdin.external_encoding
end
# For debug message
def inspect
'StdioInputMethod'
end
end
# Use a File for IO with irb, see InputMethod
@ -125,6 +135,11 @@ module IRB
def encoding
@io.external_encoding
end
# For debug message
def inspect
'FileInputMethod'
end
end
begin
@ -202,6 +217,13 @@ module IRB
end
Readline.completion_append_character = nil
Readline.completion_proc = IRB::InputCompletor::CompletionProc
# For debug message
def inspect
inputrc_path = File.expand_path(ENV['INPUTRC'] || '~/.inputrc')
readline_impl = (defined?(Reline) && Readline == Reline) ? 'Reline' : 'ext/readline'
"ReadlineInputMethod with #{readline_impl} #{Readline::VERSION} and #{inputrc_path}"
end
end
rescue LoadError
end
@ -297,5 +319,16 @@ module IRB
def encoding
@stdin.external_encoding
end
# For debug message
def inspect
config = Reline::Config.new
if config.respond_to?(:inputrc_path)
inputrc_path = config.inputrc_path
else
inputrc_path = File.expand_path(ENV['INPUTRC'] || '~/.inputrc')
end
"ReidlineInputMethod with Reline #{Reline::VERSION} and #{inputrc_path}"
end
end
end

64
test/irb/test_cmd.rb Normal file
Просмотреть файл

@ -0,0 +1,64 @@
# frozen_string_literal: false
require "test/unit"
require "irb"
require "irb/extend-command"
module TestIRB
class ExtendCommand < Test::Unit::TestCase
def setup
@pwd = Dir.pwd
@tmpdir = File.join(Dir.tmpdir, "test_reline_config_#{$$}")
begin
Dir.mkdir(@tmpdir)
rescue Errno::EEXIST
FileUtils.rm_rf(@tmpdir)
Dir.mkdir(@tmpdir)
end
Dir.chdir(@tmpdir)
@home_backup = ENV["HOME"]
ENV["HOME"] = @tmpdir
end
def teardown
ENV["HOME"] = @home_backup
Dir.chdir(@pwd)
FileUtils.rm_rf(@tmpdir)
end
def test_irb_info_multiline
FileUtils.touch("#{@tmpdir}/.inputrc")
FileUtils.touch("#{@tmpdir}/.irbrc")
IRB.setup(__FILE__, argv: [])
IRB.conf[:USE_MULTILINE] = true
IRB.conf[:USE_SINGLELINE] = false
workspace = IRB::WorkSpace.new(self)
irb = IRB::Irb.new(workspace)
IRB.conf[:MAIN_CONTEXT] = irb.context
expected = %r{
Ruby\sversion: .+\n
IRB\sversion:\sirb .+\n
InputMethod:\sReidlineInputMethod\swith\sReline .+ and .+\n
\.irbrc\spath: .+
}x
assert_match expected, irb.context.main.irb_info.to_s
end
def test_irb_info_singleline
FileUtils.touch("#{@tmpdir}/.inputrc")
FileUtils.touch("#{@tmpdir}/.irbrc")
IRB.setup(__FILE__, argv: [])
IRB.conf[:USE_MULTILINE] = false
IRB.conf[:USE_SINGLELINE] = true
workspace = IRB::WorkSpace.new(self)
irb = IRB::Irb.new(workspace)
IRB.conf[:MAIN_CONTEXT] = irb.context
expected = %r{
Ruby\sversion: .+\n
IRB\sversion:\sirb .+\n
InputMethod:\sReadlineInputMethod\swith .+ and .+\n
\.irbrc\spath: .+
}x
assert_match expected, irb.context.main.irb_info.to_s
end
end
end