зеркало из https://github.com/github/ruby.git
[ruby/irb] Add irb_info command
https://github.com/ruby/irb/commit/a6fe58e916
This commit is contained in:
Родитель
009092b04c
Коммит
98a346d065
|
@ -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
|
||||
|
|
|
@ -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
|
Загрузка…
Ссылка в новой задаче