[ruby/irb] show_doc
command should take non-string argument too
(https://github.com/ruby/irb/pull/478) Given that `show_doc` already supports syntax like `String#gsub`, it should be able to take it in non-string form too, like `edit` and `show_source` do. This ensures users can have a consistent syntax on argument between different commands.
This commit is contained in:
parent
ece6246057
commit
223d4448c8
@ -18,13 +18,6 @@ module IRB
|
|||||||
args.strip.dump
|
args.strip.dump
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def string_literal?(args)
|
|
||||||
sexp = Ripper.sexp(args)
|
|
||||||
sexp && sexp.size == 2 && sexp.last&.first&.first == :string_literal
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def execute(*args)
|
def execute(*args)
|
||||||
|
@ -16,6 +16,17 @@ module IRB
|
|||||||
|
|
||||||
module ExtendCommand
|
module ExtendCommand
|
||||||
class Help < Nop
|
class Help < 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"
|
category "Context"
|
||||||
description "Enter the mode to look up RI documents."
|
description "Enter the mode to look up RI documents."
|
||||||
|
|
||||||
|
@ -26,6 +26,13 @@ module IRB
|
|||||||
@description = description if description
|
@description = description if description
|
||||||
@description
|
@description
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def string_literal?(args)
|
||||||
|
sexp = Ripper.sexp(args)
|
||||||
|
sexp && sexp.size == 2 && sexp.last&.first&.first == :string_literal
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.7.0"
|
if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.7.0"
|
||||||
|
@ -65,11 +65,6 @@ module IRB
|
|||||||
end
|
end
|
||||||
first_line
|
first_line
|
||||||
end
|
end
|
||||||
|
|
||||||
def string_literal?(args)
|
|
||||||
sexp = Ripper.sexp(args)
|
|
||||||
sexp && sexp.size == 2 && sexp.last&.first&.first == :string_literal
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def execute(str = nil)
|
def execute(str = nil)
|
||||||
|
@ -379,13 +379,13 @@ module TestIRB
|
|||||||
def test_help_and_show_doc
|
def test_help_and_show_doc
|
||||||
["help", "show_doc"].each do |cmd|
|
["help", "show_doc"].each do |cmd|
|
||||||
out, _ = execute_lines(
|
out, _ = execute_lines(
|
||||||
"#{cmd} '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/, /Returns a copy of self with all occurrences of the given pattern/]
|
possible_rdoc_output = [/Nothing known about String#gsub/, /str.gsub\(pattern\)/]
|
||||||
assert(possible_rdoc_output.any? { |output| output.match?(out) }, "Expect the `#{cmd}` command to match one of the possible outputs")
|
assert(possible_rdoc_output.any? { |output| output.match?(out) }, "Expect the `#{cmd}` command to match one of the possible outputs")
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
|
Loading…
x
Reference in New Issue
Block a user