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