cat --ex now movies through backtrace with each invocation (keeps state)

This commit is contained in:
John Mair 2011-09-14 05:39:48 +12:00
parent 019245bf10
commit 21287630d5
2 changed files with 12 additions and 5 deletions

View File

@ -49,16 +49,22 @@ class Pry
end_line = line - 1 end_line = line - 1
end end
opt.on :ex, "Show a window of N lines either side of the last exception (defaults to 5).", :optional => true, :as => Integer do |bt_index_str| opt.on :ex, "Show a window of N lines either side of the last exception (defaults to 5).", :optional => true, :as => Integer do |bt_index_arg|
window_size = Pry.config.exception_window_size || 5 window_size = Pry.config.exception_window_size || 5
bt_index = bt_index_str.to_i
ex = _pry_.last_exception ex = _pry_.last_exception
next if !ex next if !ex
if bt_index_arg
bt_index = bt_index_arg
else
bt_index = ex.bt_index
end
ex.bt_index = (bt_index + 1) % ex.backtrace.size
ex_file, ex_line = ex.bt_source_location_for(bt_index) ex_file, ex_line = ex.bt_source_location_for(bt_index)
start_line = (ex_line - 1) - window_size start_line = (ex_line - 1) - window_size
start_line = start_line < 0 ? 0 : start_line start_line = start_line < 0 ? 0 : start_line
end_line = (ex_line - 1) + window_size end_line = (ex_line - 1) + window_size
if is_core_rbx_path?(ex_file) if ex_file && is_core_rbx_path?(ex_file)
file_name = rbx_convert_path_to_full(ex_file) file_name = rbx_convert_path_to_full(ex_file)
else else
file_name = ex_file file_name = ex_file

View File

@ -346,14 +346,15 @@ class Pry
# @param [Binding] target The binding to set `_ex_` on. # @param [Binding] target The binding to set `_ex_` on.
def set_last_exception(ex, target) def set_last_exception(ex, target)
class << ex class << ex
attr_accessor :file, :line attr_accessor :file, :line, :bt_index
def bt_source_location_for(index) def bt_source_location_for(index)
backtrace[index] =~ /(.*):(\d+)/ backtrace[index] =~ /(.*):(\d+)/
[$1, $2.to_i] [$1, $2.to_i]
end end
end end
ex.file, ex.line = ex.bt_source_location_for(0)#_btw_index#$1, $2.to_i ex.bt_index = 0
ex.file, ex.line = ex.bt_source_location_for(0)
@last_result_is_exception = true @last_result_is_exception = true
@output_array << ex @output_array << ex