diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala index c082c1079..01b804c9e 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala @@ -6,11 +6,11 @@ import scala.quoted.* import scala.reflect.TypeTest import scala.collection.mutable -trait ContextUtil[C <: Quotes & scala.Singleton](val qctx: C): +trait ContextUtil[C <: Quotes & scala.Singleton](val qctx: C, val valStart: Int): import qctx.reflect.* given qctx.type = qctx - private var counter: Int = -1 + private var counter: Int = valStart - 1 def freshName(prefix: String): String = counter = counter + 1 s"$$${prefix}${counter}" diff --git a/main-settings/src/main/scala/sbt/std/InputConvert.scala b/main-settings/src/main/scala/sbt/std/InputConvert.scala index 1cd8a616d..3a830fa54 100644 --- a/main-settings/src/main/scala/sbt/std/InputConvert.scala +++ b/main-settings/src/main/scala/sbt/std/InputConvert.scala @@ -15,9 +15,9 @@ import sbt.util.Applicative import sbt.internal.util.Types.Compose import scala.quoted.* -class InputInitConvert[C <: Quotes & scala.Singleton](override val qctx: C) +class InputInitConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) extends Convert[C](qctx) - with ContextUtil[C](qctx): + with ContextUtil[C](qctx, valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = @@ -33,9 +33,9 @@ class InputInitConvert[C <: Quotes & scala.Singleton](override val qctx: C) end InputInitConvert /** Converts an input `Term` of type `Parser[A]` or `State => Parser[A]` into a `Term` of type `State => Parser[A]`. */ -class ParserConvert[C <: Quotes & scala.Singleton](override val qctx: C) +class ParserConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) extends Convert[C](qctx) - with ContextUtil[C](qctx): + with ContextUtil[C](qctx, valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = @@ -51,9 +51,9 @@ class ParserConvert[C <: Quotes & scala.Singleton](override val qctx: C) end ParserConvert /** Convert instance for plain `Task`s not within the settings system. */ -class TaskConvert[C <: Quotes & scala.Singleton](override val qctx: C) +class TaskConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) extends Convert[C](qctx) - with ContextUtil[C](qctx): + with ContextUtil[C](qctx, valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = if nme == InputWrapper.WrapTaskName then Converted.success(in) @@ -67,9 +67,9 @@ end TaskConvert * Converts an input `Term` of type `Initialize[A]`, `Initialize[Task[A]]`, or `Task[A]` into * a `Term` of type `Initialize[Task[A]]`. */ -class FullConvert[C <: Quotes & scala.Singleton](override val qctx: C) +class FullConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) extends Convert[C](qctx) - with ContextUtil[C](qctx): + with ContextUtil[C](qctx, valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = @@ -102,9 +102,9 @@ end FullConvert * Converts an input `Term` of type `State => Parser[A]` or `Initialize[State => Parser[A]]` * into a `Term` of type `Initialize[State => Parser[A]]`. */ -class InitParserConvert[C <: Quotes & scala.Singleton](override val qctx: C) +class InitParserConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) extends Convert[C](qctx) - with ContextUtil[C](qctx): + with ContextUtil[C](qctx, valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = diff --git a/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala b/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala index da62318be..3dbfd4a64 100644 --- a/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala +++ b/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala @@ -42,7 +42,7 @@ object InputTaskMacro: )(using qctx: Quotes): Expr[Def.Initialize[F1[A1]]] = import qctx.reflect.* import InputWrapper.* - val convert1 = new InputInitConvert(qctx) + val convert1 = new InputInitConvert(qctx, 0) import convert1.Converted def wrapInitTask[A2: Type](tree: Term): Term = @@ -99,13 +99,13 @@ object InputTaskMacro: f: Expr[A1] => Expr[F1[A1]] )(using qctx: Quotes): Expr[State => Parser[F1[A1]]] = import qctx.reflect.* - val convert1 = new ParserConvert(qctx) + val convert1 = new ParserConvert(qctx, 1000) val inner: convert1.TermTransform[F1] = (in: Term) => f(in.asExprOf[A1]).asTerm convert1.contMapN[A1, ParserInstance.F1, F1](tree, convert1.appExpr, inner) private[this] def iTaskMacro[A1: Type](tree: Expr[A1])(using qctx: Quotes): Expr[Task[A1]] = import qctx.reflect.* - val convert1 = new TaskConvert(qctx) + val convert1 = new TaskConvert(qctx, 2000) convert1.contMapN[A1, Task, Id](tree, convert1.appExpr) /* @@ -214,7 +214,7 @@ object InputTaskMacro: qctx: Quotes ): Expr[Def.Initialize[InputTask[A2]]] = import qctx.reflect.* - val convert1 = new FullConvert(qctx) // 1000 + val convert1 = new FullConvert(qctx, 1000) import convert1.Converted def mkInputTask(params: List[ValDef], body: Term): Expr[Def.Initialize[InputTask[A2]]] = val lambdaTpe = diff --git a/main-settings/src/main/scala/sbt/std/SettingMacro.scala b/main-settings/src/main/scala/sbt/std/SettingMacro.scala index 0b286182f..4a0af31cb 100644 --- a/main-settings/src/main/scala/sbt/std/SettingMacro.scala +++ b/main-settings/src/main/scala/sbt/std/SettingMacro.scala @@ -20,9 +20,9 @@ import sbt.util.Applicative import scala.quoted.* import sbt.internal.util.complete.Parser -class InitializeConvert[C <: Quotes & scala.Singleton](override val qctx: C) +class InitializeConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) extends Convert[C](qctx) - with ContextUtil[C](qctx): + with ContextUtil[C](qctx, valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = @@ -46,17 +46,17 @@ object SettingMacro: import ContSyntax.* def settingMacroImpl[A1: Type](in: Expr[A1])(using qctx: Quotes): Expr[Initialize[A1]] = - val convert1 = InitializeConvert(qctx) + val convert1 = InitializeConvert(qctx, 0) convert1.contMapN[A1, F, Id](in, convert1.appExpr) def settingDynImpl[A1: Type](in: Expr[Initialize[A1]])(using qctx: Quotes): Expr[Initialize[A1]] = - val convert1 = InitializeConvert(qctx) + val convert1 = InitializeConvert(qctx, 0) convert1.contFlatMap[A1, F, Id](in, convert1.appExpr) def inputMacroImpl[A1: Type](in: Expr[State => Parser[A1]])(using qctx: Quotes ): Expr[ParserGen[A1]] = - val convert1 = InitializeConvert(qctx) + val convert1 = InitializeConvert(qctx, 0) val init1 = convert1.contMapN[State => Parser[A1], F, Id](in, convert1.appExpr) '{ ParserGen[A1]($init1) } end SettingMacro diff --git a/main-settings/src/main/scala/sbt/std/TaskMacro.scala b/main-settings/src/main/scala/sbt/std/TaskMacro.scala index ec56f8aea..675e61ef0 100644 --- a/main-settings/src/main/scala/sbt/std/TaskMacro.scala +++ b/main-settings/src/main/scala/sbt/std/TaskMacro.scala @@ -56,7 +56,7 @@ object TaskMacro: t match case '{ if ($cond) then $thenp else $elsep } => taskIfImpl[A1](t) case _ => - val convert1 = new FullConvert(qctx) + val convert1 = new FullConvert(qctx, 0) convert1.contMapN[A1, F, Id](t, convert1.appExpr) def taskIfImpl[A1: Type](expr: Expr[A1])(using qctx: Quotes): Expr[Initialize[Task[A1]]] = @@ -76,7 +76,7 @@ object TaskMacro: def taskDynMacroImpl[A1: Type]( t: Expr[Initialize[Task[A1]]] )(using qctx: Quotes): Expr[Initialize[Task[A1]]] = - val convert1 = new FullConvert(qctx) + val convert1 = new FullConvert(qctx, 0) convert1.contFlatMap[A1, F, Id](t, convert1.appExpr) /*