diff options
-rw-r--r-- | lib/irb/cmd/whereami.rb | 20 | ||||
-rw-r--r-- | lib/irb/extend-command.rb | 5 | ||||
-rw-r--r-- | test/irb/test_cmd.rb | 17 |
3 files changed, 42 insertions, 0 deletions
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 |