lib/herb/location.rb



# frozen_string_literal: true

module Herb
  class Location
    attr_reader :start, :end

    def initialize(start_position, end_position)
      @start = start_position
      @end = end_position
    end

    def self.from(start_line, start_column, end_line, end_column)
      new(
        Position.new(start_line, start_column),
        Position.new(end_line, end_column)
      )
    end

    def self.[](...)
      from(...)
    end

    def to_hash
      {
        start: start,
        end: self.end,
      }
    end

    def to_json(*args)
      to_hash.to_json(*args)
    end

    def tree_inspect
      %((location: #{start.tree_inspect}-#{self.end.tree_inspect}))
    end

    def inspect
      %(#<Herb::Location #{tree_inspect}>)
    end
  end
end