class Solargraph::Position


The zero-based line and column numbers of a position in a string.

def self.from_offset text, offset

Returns:
  • (Position) -

Parameters:
  • offset (Integer) --
  • text (String) --
def self.from_offset text, offset
  cursor = 0
  line = 0
  character = nil
  text.lines.each do |l|
    line_length = l.length
    char_length = l.chomp.length
    if cursor + char_length >= offset
      character = offset - cursor
      break
    end
    cursor += line_length
    line += 1
  end
  character = 0 if character.nil? and (cursor - offset).between?(0, 1)
  raise InvalidOffsetError if character.nil?
  Position.new(line, character)
end

def self.line_char_to_offset text, line, character

Returns:
  • (Integer) -

Parameters:
  • character (Integer) --
  • line (Integer) --
  • text (String) --
def self.line_char_to_offset text, line, character
  to_offset(text, Position.new(line, character))
end

def self.normalize object

Returns:
  • (Position) -

Parameters:
  • object (Position, Array(Integer, Integer)) --

Raises:
  • (ArgumentError) - if the object cannot be converted to a position.
def self.normalize object
  return object if object.is_a?(Position)
  return Position.new(object[0], object[1]) if object.is_a?(Array)
  raise ArgumentError, "Unable to convert #{object.class} to Position"
end

def self.to_offset text, position

Returns:
  • (Integer) -

Parameters:
  • position (Position) --
  • text (String) --
def self.to_offset text, position
  result = 0
  feed = 0
  line = position.line
  column = position.character
  text.lines.each do |l|
    line_length = l.length
    if feed == line
      result += column
      break
    end
    result += line_length
    feed += 1
  end
  result
end

def == other

def == other
  return false unless other.is_a?(Position)
  line == other.line and character == other.character
end

def initialize line, character

Parameters:
  • character (Integer) --
  • line (Integer) --
def initialize line, character
  @line = line
  @character = character
end

def inspect

def inspect
  "#<#{self.class} #{line}, #{character}>"
end

def to_hash

Returns:
  • (Hash) -
def to_hash
  {
    line: line,
    character: character
  }
end