class RSpec::CallerFilter
def self.first_non_rspec_line
def self.first_non_rspec_line # `caller` is an expensive method that scales linearly with the size of # the stack. The performance hit for fetching it in chunks is small, # and since the target line is probably near the top of the stack, the # overall improvement of a chunked search like this is significant. # # See benchmarks/caller.rb for measurements. # Initial value here is mostly arbitrary, but is chosen to give good # performance on the common case of creating a double. increment = 5 i = 1 line = nil while !line stack = caller(i, increment) return nil unless stack line = stack.find { |l| l !~ LIB_REGEX } i += increment increment *= 2 # The choice of two here is arbitrary. end line end
def self.first_non_rspec_line
Earlier rubies do not support the two argument form of `caller`. This
def self.first_non_rspec_line caller.find { |line| line !~ LIB_REGEX } end