lib/debug/irb_integration.rb



# frozen_string_literal: true

require 'irb'

module DEBUGGER__
  module IrbPatch
    def evaluate(line, line_no)
      SESSION.send(:restart_all_threads)
      super
      # This is to communicate with the test framework so it can feed the next input
      puts "INTERNAL_INFO: {}" if ENV['RUBY_DEBUG_TEST_UI'] == 'terminal'
    ensure
      SESSION.send(:stop_all_threads)
    end
  end

  class ThreadClient
    def activate_irb_integration
      IRB.setup(location, argv: [])
      workspace = IRB::WorkSpace.new(current_frame&.binding || TOPLEVEL_BINDING)
      irb = IRB::Irb.new(workspace)
      IRB.conf[:MAIN_CONTEXT] = irb.context
      IRB::Debug.setup(irb)
      IRB::Context.prepend(IrbPatch)
    end
  end
end