class Goodcheck::Buffer

Constants

DISABLE_LINE_PATTERNS
DISABLE_NEXT_LINE_PATTERNS

Attributes

content[R]
path[R]

Public Class Methods

new(path:, content:) click to toggle source
# File lib/goodcheck/buffer.rb, line 28
def initialize(path:, content:)
  @path = path
  @content = content
  @line_ranges = nil
end

Public Instance Methods

line(line_number) click to toggle source
# File lib/goodcheck/buffer.rb, line 78
def line(line_number)
  lines[line_number - 1]
end
line_disabled?(line_number) click to toggle source
# File lib/goodcheck/buffer.rb, line 50
def line_disabled?(line_number)
  if line_number > 1
    return true if DISABLE_NEXT_LINE_PATTERNS.any? { |pattern| line(line_number - 1).match?(pattern) }
  end

  if line_number <= lines.length
    return DISABLE_LINE_PATTERNS.any? { |pattern| line(line_number).match?(pattern) }
  end

  return false
end
line_ranges() click to toggle source
# File lib/goodcheck/buffer.rb, line 34
def line_ranges
  unless @line_ranges
    @line_ranges = []

    start_position = 0

    content.split(/\n/, -1).each do |line|
      range = start_position..(start_position + line.bytesize)
      @line_ranges << range
      start_position = range.end + 1
    end
  end

  @line_ranges
end
lines() click to toggle source
# File lib/goodcheck/buffer.rb, line 74
def lines
  @lines ||= content.lines
end
location_for_position(position) click to toggle source
# File lib/goodcheck/buffer.rb, line 62
def location_for_position(position)
  line_index = line_ranges.bsearch_index do |range|
    position <= range.end
  end

  if line_index
    line_number = line_index + 1
    column_number = position - line_ranges[line_index].begin + 1
    [line_number, column_number]
  end
end