From bc822e4aacb8aa7224e7a744cfd76426a6960c61 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Thu, 18 Mar 2021 01:18:42 -0700 Subject: [PATCH] Add whereami command --- 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 000000000..b3def11b9 --- /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 e7b046ad4..f50068d06 100644 --- a/lib/irb/extend-command.rb +++ b/lib/irb/extend-command.rb @@ -135,6 +135,11 @@ def irb_context [: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 4ff8657a2..2cb77a426 100644 --- a/test/irb/test_cmd.rb +++ b/test/irb/test_cmd.rb @@ -389,5 +389,22 @@ def test_ls 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