From 786fe5f4cec14abe3219c6fde018af56a9b919c3 Mon Sep 17 00:00:00 2001 From: Eugene Vigdorchik Date: Thu, 16 Feb 2012 16:58:51 +0400 Subject: [PATCH] Remember the range for settings read from .sbt files --- util/collection/Positions.scala | 20 ++++++++++++++++++++ util/collection/Settings.scala | 6 +----- 2 files changed, 21 insertions(+), 5 deletions(-) create mode 100755 util/collection/Positions.scala diff --git a/util/collection/Positions.scala b/util/collection/Positions.scala new file mode 100755 index 000000000..2cd3f77e1 --- /dev/null +++ b/util/collection/Positions.scala @@ -0,0 +1,20 @@ +package sbt + +sealed trait SourcePosition + +sealed trait FilePosition { + def path: String + def startLine: Int +} + +case object NoPosition extends SourcePosition + +final case class LinePosition(path: String, startLine: Int) extends SourcePosition with FilePosition + +final case class LineRange(start: Int, end: Int) { + def shift(n: Int) = new LineRange(start + n, end + n) +} + +final case class RangePosition(path: String, range: LineRange) extends SourcePosition with FilePosition { + def startLine = range.start +} diff --git a/util/collection/Settings.scala b/util/collection/Settings.scala index 210c8e3c1..6df7291af 100644 --- a/util/collection/Settings.scala +++ b/util/collection/Settings.scala @@ -255,14 +255,10 @@ trait Init[Scope] def mapKey(g: MapScoped): Setting[T] = new Setting(g(key), init, pos) def mapInit(f: (ScopedKey[T], T) => T): Setting[T] = new Setting(key, init(t => f(key,t)), pos) def mapConstant(g: MapConstant): Setting[T] = new Setting(key, init mapConstant g, pos) - def withPos(pos: SourceCoord) = new Setting(key, init, pos) + def withPos(pos: SourcePosition) = new Setting(key, init, pos) override def toString = "setting(" + key + ") at " + pos } - sealed trait SourcePosition - case object NoPosition extends SourcePosition - final case class SourceCoord(fileName: String, line: Int) extends SourcePosition - // mainly for reducing generated class count private[this] def validateReferencedT(g: ValidateRef) = new (Initialize ~> ValidatedInit) { def apply[T](i: Initialize[T]) = i validateReferenced g }