class Slimi::Range

Get line-based information from source code and its index.

Public Class Methods

new(index:, source:) click to toggle source

@param [Integer] index 0-indexed per-character index. @param [String] source

# File lib/slimi/range.rb, line 8
def initialize(index:, source:)
  @index = index
  @source = source
end

Public Instance Methods

column() click to toggle source

@return [Integer] 1-indexed column index.

# File lib/slimi/range.rb, line 14
def column
  (@index - line_beginning_index) + 1
end
line() click to toggle source
# File lib/slimi/range.rb, line 18
def line
  @source[line_beginning_index...line_ending_index]
end
line_number() click to toggle source

@return [Integer] 1-indexed line index.

# File lib/slimi/range.rb, line 23
def line_number
  @source[0..@index].scan(/^/).length
end

Private Instance Methods

line_beginning_index() click to toggle source

@return [Integer]

# File lib/slimi/range.rb, line 30
def line_beginning_index
  @source.rindex(/^/, @index) || 0
end
line_ending_index() click to toggle source

@return [Integer]

# File lib/slimi/range.rb, line 35
def line_ending_index
  @source.index(/$/, @index)
end