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

Version Path
sentry-ruby-5.4.1 lib/sentry/linecache.rb
sentry-ruby-core-5.4.1 lib/sentry/linecache.rb
sentry-ruby-core-5.4.0 lib/sentry/linecache.rb
sentry-ruby-core-5.3.1 lib/sentry/linecache.rb
sentry-ruby-core-5.3.0 lib/sentry/linecache.rb
sentry-ruby-core-5.2.1 lib/sentry/linecache.rb
sentry-ruby-core-5.2.0 lib/sentry/linecache.rb
sentry-ruby-core-5.1.1 lib/sentry/linecache.rb
sentry-ruby-core-5.1.0 lib/sentry/linecache.rb
sentry-ruby-core-5.0.2 lib/sentry/linecache.rb
sentry-ruby-core-5.0.1 lib/sentry/linecache.rb
sentry-ruby-core-5.0.0 lib/sentry/linecache.rb
sentry-ruby-core-4.9.2 lib/sentry/linecache.rb
sentry-ruby-core-4.9.1 lib/sentry/linecache.rb
sentry-ruby-core-4.9.0 lib/sentry/linecache.rb
sentry-ruby-core-4.8.3 lib/sentry/linecache.rb
sentry-ruby-core-4.8.2 lib/sentry/linecache.rb