Sha256: 59321fbeceecbf8cdc6b20fb3bdfbb9321631dfcd9eaba2dc8470e8f00e5ceca

Contents?: true

Size: 890 Bytes

Versions: 37

Compression:

Stored size: 890 Bytes

Contents

module RBS
  class Buffer
    attr_reader :name
    attr_reader :content
    attr_reader :lines
    attr_reader :ranges

    def initialize(name:, content:)
      @name = name
      @content = content

      @lines = content.lines

      @ranges = []
      offset = 0
      lines.each do |line|
        size = line.size
        range = offset...(offset+size)
        ranges << range
        offset += size
      end
    end

    def pos_to_loc(pos)
      index = ranges.bsearch_index do |range|
        pos < range.end ? true : false
      end

      if index
        [index + 1, pos - ranges[index].begin]
      else
        [ranges.size + 1, 0]
      end
    end

    def loc_to_pos(loc)
      line, column = loc

      if range = ranges[line - 1]
        range.begin + column
      else
        last_position
      end
    end

    def last_position
      content.size
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
rbs-1.6.2 lib/rbs/buffer.rb
rbs-1.6.1 lib/rbs/buffer.rb
rbs-1.6.0 lib/rbs/buffer.rb
rbs-1.5.1 lib/rbs/buffer.rb
rbs-1.5.0 lib/rbs/buffer.rb
rbs-1.4.0 lib/rbs/buffer.rb
rbs-1.3.3 lib/rbs/buffer.rb
rbs-1.3.2 lib/rbs/buffer.rb
rbs-1.3.1 lib/rbs/buffer.rb
rbs-1.3.0 lib/rbs/buffer.rb
rbs-1.2.1 lib/rbs/buffer.rb
rbs-1.2.0 lib/rbs/buffer.rb
rbs-1.1.1 lib/rbs/buffer.rb
rbs-1.1.0 lib/rbs/buffer.rb
rbs-1.0.6 lib/rbs/buffer.rb
rbs-1.0.5 lib/rbs/buffer.rb
rbs-1.0.4 lib/rbs/buffer.rb
rbs-1.0.3 lib/rbs/buffer.rb
rbs-1.0.2 lib/rbs/buffer.rb
rbs-1.0.1 lib/rbs/buffer.rb