Class: Solargraph::Position

Inherits:
Object
  • Object
show all
Defined in:
lib/solargraph/position.rb

Overview

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(line, character) ⇒ Position

Returns a new instance of Position.

Parameters:

  • line (Integer)
  • character (Integer)


17
18
19
20
# File 'lib/solargraph/position.rb', line 17

def initialize line, character
  @line = line
  @character = character
end

Instance Attribute Details

#characterInteger (readonly) Also known as: column

Returns:

  • (Integer)


11
12
13
# File 'lib/solargraph/position.rb', line 11

def character
  @character
end

#lineInteger (readonly)

Returns:

  • (Integer)


8
9
10
# File 'lib/solargraph/position.rb', line 8

def line
  @line
end

Class Method Details

.from_offset(text, offset) ⇒ Position

Get a position for the specified text and offset.

Parameters:

  • text (String)
  • offset (Integer)

Returns:

Raises:



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/solargraph/position.rb', line 75

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

.line_char_to_offset(text, line, character) ⇒ Integer

Get a numeric offset for the specified text and a position identified by its line and character.

Parameters:

  • text (String)
  • line (Integer)
  • character (Integer)

Returns:

  • (Integer)


66
67
68
# File 'lib/solargraph/position.rb', line 66

def self.line_char_to_offset text, line, character
  to_offset(text, Position.new(line, character))
end

.normalize(object) ⇒ Position

A helper method for generating positions from arrays of integers. The original parameter is returned if it is already a position.

Parameters:

  • object (Position, Array(Integer, Integer))

Returns:

Raises:

  • (ArgumentError)

    if the object cannot be converted to a position.



101
102
103
104
105
# File 'lib/solargraph/position.rb', line 101

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

.to_offset(text, position) ⇒ Integer

Get a numeric offset for the specified text and position.

Parameters:

Returns:

  • (Integer)


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/solargraph/position.rb', line 42

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

Instance Method Details

#==(other) ⇒ Object



107
108
109
110
# File 'lib/solargraph/position.rb', line 107

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

#inspectObject



33
34
35
# File 'lib/solargraph/position.rb', line 33

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

#to_hashHash

Get a hash of the position. This representation is suitable for use in the language server protocol.

Returns:



26
27
28
29
30
31
# File 'lib/solargraph/position.rb', line 26

def to_hash
  {
    line: line,
    character: character
  }
end