[ruby/irb] Print deprecation warning for help
command
(https://github.com/ruby/irb/pull/567) * Give show_doc its own command class * Print deprecation warning for `help` command
This commit is contained in:
parent
cea9c30fa5
commit
b695f58d52
@ -1,55 +1,23 @@
|
|||||||
# frozen_string_literal: false
|
# frozen_string_literal: true
|
||||||
#
|
|
||||||
# help.rb - helper using ri
|
|
||||||
#
|
|
||||||
|
|
||||||
require_relative "nop"
|
require_relative "show_doc"
|
||||||
|
|
||||||
module IRB
|
module IRB
|
||||||
# :stopdoc:
|
|
||||||
|
|
||||||
module ExtendCommand
|
module ExtendCommand
|
||||||
class Help < Nop
|
class Help < ShowDoc
|
||||||
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"
|
category "Context"
|
||||||
description "Enter the mode to look up RI documents."
|
description "[DEPRECATED] Enter the mode to look up RI documents."
|
||||||
|
|
||||||
|
DEPRECATION_MESSAGE = <<~MSG
|
||||||
|
[Deprecation] The `help` command will be repurposed to display command help in the future.
|
||||||
|
For RI document lookup, please use the `show_doc` command instead.
|
||||||
|
For command help, please use `show_cmds` for now.
|
||||||
|
MSG
|
||||||
|
|
||||||
def execute(*names)
|
def execute(*names)
|
||||||
require 'rdoc/ri/driver'
|
warn DEPRECATION_MESSAGE
|
||||||
|
super
|
||||||
unless self.class.const_defined?(:Ri)
|
|
||||||
opts = RDoc::RI::Driver.process_args([])
|
|
||||||
self.class.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
|
||||||
end
|
end
|
||||||
|
|
||||||
# :startdoc:
|
|
||||||
end
|
end
|
||||||
|
48
lib/irb/cmd/show_doc.rb
Normal file
48
lib/irb/cmd/show_doc.rb
Normal file
@ -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
|
@ -157,10 +157,14 @@ module IRB # :nodoc:
|
|||||||
|
|
||||||
[
|
[
|
||||||
:irb_help, :Help, "cmd/help",
|
:irb_help, :Help, "cmd/help",
|
||||||
[:show_doc, NO_OVERRIDE],
|
|
||||||
[:help, NO_OVERRIDE],
|
[:help, NO_OVERRIDE],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
[
|
||||||
|
:irb_show_doc, :ShowDoc, "cmd/show_doc",
|
||||||
|
[:show_doc, NO_OVERRIDE],
|
||||||
|
],
|
||||||
|
|
||||||
[
|
[
|
||||||
:irb_info, :IrbInfo, "cmd/irb_info"
|
:irb_info, :IrbInfo, "cmd/irb_info"
|
||||||
],
|
],
|
||||||
|
@ -783,19 +783,33 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
class ShowDocTest < CommandTestCase
|
class ShowDocTest < CommandTestCase
|
||||||
def test_help_and_show_doc
|
def test_help
|
||||||
["help", "show_doc"].each do |cmd|
|
out, err = execute_lines(
|
||||||
out, err = execute_lines(
|
"help String#gsub\n",
|
||||||
"#{cmd} String#gsub\n",
|
"\n",
|
||||||
"\n",
|
)
|
||||||
)
|
|
||||||
|
|
||||||
# the former is what we'd get without document content installed, like on CI
|
# the former is what we'd get without document content installed, like on CI
|
||||||
# the latter is what we may get locally
|
# the latter is what we may get locally
|
||||||
possible_rdoc_output = [/Nothing known about String#gsub/, /gsub\(pattern\)/]
|
possible_rdoc_output = [/Nothing known about String#gsub/, /gsub\(pattern\)/]
|
||||||
assert_empty err
|
assert_include err, "[Deprecation] The `help` command will be repurposed to display command help in the future.\n"
|
||||||
assert(possible_rdoc_output.any? { |output| output.match?(out) }, "Expect the `#{cmd}` command to match one of the possible outputs. Got:\n#{out}")
|
assert(possible_rdoc_output.any? { |output| output.match?(out) }, "Expect the `help` command to match one of the possible outputs. Got:\n#{out}")
|
||||||
end
|
ensure
|
||||||
|
# this is the only way to reset the redefined method without coupling the test with its implementation
|
||||||
|
EnvUtil.suppress_warning { load "irb/cmd/help.rb" }
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_show_doc
|
||||||
|
out, err = execute_lines(
|
||||||
|
"show_doc String#gsub\n",
|
||||||
|
"\n",
|
||||||
|
)
|
||||||
|
|
||||||
|
# the former is what we'd get without document content installed, like on CI
|
||||||
|
# the latter is what we may get locally
|
||||||
|
possible_rdoc_output = [/Nothing known about String#gsub/, /gsub\(pattern\)/]
|
||||||
|
assert_not_include err, "[Deprecation]"
|
||||||
|
assert(possible_rdoc_output.any? { |output| output.match?(out) }, "Expect the `show_doc` command to match one of the possible outputs. Got:\n#{out}")
|
||||||
ensure
|
ensure
|
||||||
# this is the only way to reset the redefined method without coupling the test with its implementation
|
# this is the only way to reset the redefined method without coupling the test with its implementation
|
||||||
EnvUtil.suppress_warning { load "irb/cmd/help.rb" }
|
EnvUtil.suppress_warning { load "irb/cmd/help.rb" }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user