Sha256: 53747d97dd2a6b55eb6c86f9c9dda5653ca0a079d2665969a72840711b935897
Contents?: true
Size: 1.1 KB
Versions: 77
Compression:
Stored size: 1.1 KB
Contents
# frozen_string_literal: true module Sentry # @api private class LineCache def initialize @cache = {} end # Any linecache you provide to Sentry must implement this method. # Returns an Array of Strings representing the lines in the source # file. The number of lines retrieved is (2 * context) + 1, the middle # line should be the line requested by lineno. See specs for more information. def get_file_context(filename, lineno, context) return nil, nil, nil unless valid_path?(filename) lines = Array.new(2 * context + 1) do |i| getline(filename, lineno - context + i) end [lines[0..(context - 1)], lines[context], lines[(context + 1)..-1]] end private def valid_path?(path) lines = getlines(path) !lines.nil? end def getlines(path) @cache[path] ||= begin IO.readlines(path) rescue nil end end def getline(path, n) return nil if n < 1 lines = getlines(path) return nil if lines.nil? lines[n - 1] end end end
Version data entries
77 entries across 77 versions & 2 rubygems