From 232433f22423fb6a3ff7a610140c711a964d3b3d Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Thu, 18 Mar 2021 01:18:42 -0700 Subject: [PATCH] [ruby/irb] Add whereami command https://github.com/ruby/irb/commit/bc822e4aac --- lib/irb/cmd/whereami.rb | 20 ++++++++++++++++++++ lib/irb/extend-command.rb | 5 +++++ test/irb/test_cmd.rb | 17 +++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 lib/irb/cmd/whereami.rb diff --git a/lib/irb/cmd/whereami.rb b/lib/irb/cmd/whereami.rb new file mode 100644 index 0000000000..b3def11b93 --- /dev/null +++ b/lib/irb/cmd/whereami.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require_relative "nop" + +# :stopdoc: +module IRB + module ExtendCommand + class Whereami < Nop + def execute(*) + code = irb_context.workspace.code_around_binding + if code + puts code + else + puts "The current context doesn't have code." + end + end + end + end +end +# :startdoc: diff --git a/lib/irb/extend-command.rb b/lib/irb/extend-command.rb index e7b046ad4e..f50068d06c 100644 --- a/lib/irb/extend-command.rb +++ b/lib/irb/extend-command.rb @@ -135,6 +135,11 @@ module IRB # :nodoc: [:measure, NO_OVERRIDE], ], + [ + :irb_whereami, :Whereami, "irb/cmd/whereami", + [:whereami, NO_OVERRIDE], + ], + ] # Installs the default irb commands: diff --git a/test/irb/test_cmd.rb b/test/irb/test_cmd.rb index 4a512ed1e6..778b3f863b 100644 --- a/test/irb/test_cmd.rb +++ b/test/irb/test_cmd.rb @@ -391,5 +391,22 @@ module TestIRB assert_empty err assert_match(/^instance variables: @a\n/, out) end + + def test_whereami + IRB.init_config(nil) + workspace = IRB::WorkSpace.new(self) + irb = IRB::Irb.new(workspace) + IRB.conf[:MAIN_CONTEXT] = irb.context + input = TestInputMethod.new([ + "whereami\n", + ]) + irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input) + irb.context.return_format = "=> %s\n" + out, err = capture_output do + irb.eval_input + end + assert_empty err + assert_match(/^From: .+ @ line \d+ :\n/, out) + end end end