diff --git a/lib/pry-debugger/before_session_hook.rb b/lib/pry-debugger/before_session_hook.rb new file mode 100644 index 000000000..d2f85bc6f --- /dev/null +++ b/lib/pry-debugger/before_session_hook.rb @@ -0,0 +1,26 @@ +module PryDebugger + class BeforeSessionHook + + def caller_bindings(target) + + bindings = binding.callers + + start_frames = bindings.each_with_index.select do |b, i| + (b.frame_type == :method && + b.eval("self.class") == Debugger::Context && + b.eval("__method__") == :at_line) + end + + start_frame_index = start_frames.first.last + bindings = bindings.drop(start_frame_index + 1) + + bindings + end + + def call(output, target, _pry_) + return if binding.callers.map(&:frame_description).include?("start") + bindings = caller_bindings(target) + PryStackExplorer.create_and_push_frame_manager bindings, _pry_, :initial_frame => 0 + end + end +end \ No newline at end of file diff --git a/lib/pry-debugger/cli.rb b/lib/pry-debugger/cli.rb index bb4a7c70d..c35b532da 100644 --- a/lib/pry-debugger/cli.rb +++ b/lib/pry-debugger/cli.rb @@ -11,5 +11,6 @@ # require 'pry-debugger/base' +require 'pry-debugger/before_session_hook.rb' require 'pry-debugger/pry_ext' require 'pry-debugger/commands' diff --git a/lib/pry-debugger/pry_ext.rb b/lib/pry-debugger/pry_ext.rb index 4ff9bd3f7..ac7d22a41 100644 --- a/lib/pry-debugger/pry_ext.rb +++ b/lib/pry-debugger/pry_ext.rb @@ -20,3 +20,12 @@ def start(target = TOPLEVEL_BINDING, options = {}) end end end + +if Pry.plugins.include?("stack_explorer") + Pry.config.hooks.add_hook(:before_session, :debugger_frame_manager, PryDebugger::BeforeSessionHook.new) + + # move default to the back of before_session + default = Pry.config.hooks.get_hook(:before_session, :default) + Pry.config.hooks.delete_hook(:before_session, :default) + Pry.config.hooks.add_hook(:before_session, :default, default) +end