From 9f5525c989b139d680a00401ce25d8077bbb9afb Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 27 Nov 2022 00:57:02 -0500 Subject: [PATCH] inline parameter removes let binding --- .../sbt/internal/util/appmacro/Cont.scala | 3 +-- .../internal/util/appmacro/ContextUtil.scala | 27 ------------------- main-settings/src/main/scala/sbt/Def.scala | 20 +++++++------- .../scala/sbt/std/InputTaskMacro.scala.scala | 6 ++--- project/Dependencies.scala | 2 +- project/build.properties | 2 +- 6 files changed, 15 insertions(+), 45 deletions(-) diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala index ca5e387de..db4ad067e 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala @@ -261,8 +261,7 @@ trait Cont: inputBuf += Input(TypeRepr.of[a], qual, replacement, freshName("q")) oldTree } - val inlined = inlineExtensionProxy(expr.asTerm) - val tx = transformWrappers(inlined, record, Symbol.spliceOwner) + val tx = transformWrappers(expr.asTerm, record, Symbol.spliceOwner) val tr = makeApp(tx, inputBuf.toList) tr end Cont 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 01b804c9e..89a07860c 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 @@ -67,33 +67,6 @@ trait ContextUtil[C <: Quotes & scala.Singleton](val qctx: C, val valStart: Int) def idTransform[F[_]]: TermTransform[F] = in => in - /** - * { - * val in$proxy264: sbt.Def.Initialize[sbt.Task[sbt.ForkOptions]] = sbt.Defaults.forkOptionsTask - * (foo.bar[sbt.ForkOptions](in$proxy264): sbt.ForkOptions) - * } - * - * @param tree - * @return - */ - def inlineExtensionProxy(tree: Term): Term = - val rhss: mutable.Map[String, Term] = mutable.Map.empty - object refTransformer extends TreeMap: - override def transformStatement(tree: Statement)(owner: Symbol): Statement = - tree match - case ValDef(name, tpe, Some(body)) if name.contains("$proxy") => - rhss(name) = body - ValDef.copy(tree)(name, tpe, None) - case _ => - super.transformStatement(tree)(owner) - - override def transformTerm(tree: Term)(owner: Symbol): Term = - tree match - case Ident(name) if rhss.contains(name) => rhss(name) - case _ => super.transformTerm(tree)(owner) - end refTransformer - refTransformer.transformTerm(tree)(Symbol.spliceOwner) - def collectDefs(tree: Term, isWrapper: (String, TypeRepr, Term) => Boolean): Set[Symbol] = val defs = mutable.HashSet[Symbol]() object traverser extends TreeTraverser: diff --git a/main-settings/src/main/scala/sbt/Def.scala b/main-settings/src/main/scala/sbt/Def.scala index 37b2a4e22..78691f56d 100644 --- a/main-settings/src/main/scala/sbt/Def.scala +++ b/main-settings/src/main/scala/sbt/Def.scala @@ -294,10 +294,10 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits: // implicit def macroValueI[T](@deprecated("unused", "") in: Initialize[T]): MacroValue[T] = ??? - extension [A1](in: Initialize[A1]) + extension [A1](inline in: Initialize[A1]) inline def value: A1 = InputWrapper.`wrapInit_\u2603\u2603`[A1](in) - extension [A1](in: Initialize[Task[A1]]) + extension [A1](inline in: Initialize[Task[A1]]) @targetName("valueIA1") inline def value: A1 = InputWrapper.`wrapInitTask_\u2603\u2603`[A1](in) @@ -314,7 +314,7 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits: inline def flatMapTask[A2](f: A1 => Initialize[Task[A2]]): Initialize[Task[A2]] = std.FullInstance.initializeTaskMonad.flatMap(in)(f) - extension [A1](in: TaskKey[A1]) + extension [A1](inline in: TaskKey[A1]) // implicit def macroPrevious[T](@deprecated("unused", "") in: TaskKey[T]): MacroPrevious[T] = ??? inline def previous(using JsonFormat[A1]): Option[A1] = ${ TaskMacro.previousImpl[A1]('in) } @@ -323,20 +323,20 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits: // Initialize[State => Parser[T]] to be used in the inputTask macro as an input with an ultimate // result of type A1, previously implemented using ParserInput.parsedMacroImpl[A1]. - extension [A1](in: Initialize[Parser[A1]]) + extension [A1](inline in: Initialize[Parser[A1]]) inline def parsed: A1 = ParserInput.`initParser_\u2603\u2603`[A1](Def.toISParser(in)) - extension [A1](in: Initialize[State => Parser[A1]]) + extension [A1](inline in: Initialize[State => Parser[A1]]) @targetName("parsedISPA1") inline def parsed: A1 = ParserInput.`initParser_\u2603\u2603`[A1](in) - extension [A1](in: Def.Initialize[InputTask[A1]]) + extension [A1](inline in: Def.Initialize[InputTask[A1]]) inline def parsed: Task[A1] = ParserInput.`initParser_\u2603\u2603`[Task[A1]](Def.toIParser[A1](in)) inline def evaluated: A1 = InputWrapper.`wrapInitInputTask_\u2603\u2603`[A1](in) - def toTask(arg: String): Initialize[Task[A1]] = + inline def toTask(arg: String): Initialize[Task[A1]] = import TaskExtra.singleInputTask FullInstance.flatten( (Def.stateKey zipWith in)((sTask, it) => @@ -415,16 +415,16 @@ end Def // because the target doesn't involve Initialize or anything in Def trait TaskMacroExtra: import sbt.std.ParserInput - extension [A1](in: Task[A1]) + extension [A1](inline in: Task[A1]) inline def value: A1 = std.InputWrapper.`wrapTask_\u2603\u2603`[A1](in) // implicit def macroValueIn[T](@deprecated("unused", "") in: InputTask[T]): std.InputEvaluated[T] = // ??? - extension [A1](in: Parser[A1]) + extension [A1](inline in: Parser[A1]) inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](Def.toSParser(in)) - extension [A1](in: State => Parser[A1]) + extension [A1](inline in: State => Parser[A1]) inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](in) end TaskMacroExtra 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 e98522e8b..ea6d1b948 100644 --- a/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala +++ b/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala @@ -97,8 +97,7 @@ object InputTaskMacro: ) val inner: convert1.TermTransform[F1] = (in: Term) => f(in.asExprOf[A1]).asTerm - val inlined = convert1.inlineExtensionProxy(tree.asTerm) - val cond = conditionInputTaskTree(inlined).asExprOf[A1] + val cond = conditionInputTaskTree(tree.asTerm).asExprOf[A1] convert1.contMapN[A1, Def.Initialize, F1](cond, convert1.appExpr, inner) private[this] def iParserMacro[F1[_]: Type, A1: Type](tree: Expr[A1])( @@ -184,9 +183,8 @@ object InputTaskMacro: subWrapper(tpe, tree, oldTree) } - val inlined = convert1.inlineExtensionProxy(expr.asTerm) val tx = - convert1.transformWrappers(inlined, sub, Symbol.spliceOwner) + convert1.transformWrappers(expr.asTerm, sub, Symbol.spliceOwner) result match { case Some((p, tpe, param)) => val fCore = util.createFunction(param :: Nil, tx, functionSym) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 465268b31..f7090cf93 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -6,7 +6,7 @@ object Dependencies { // WARNING: Please Scala update versions in PluginCross.scala too val scala212 = "2.12.17" val scala213 = "2.13.8" - val scala3 = "3.2.0" + val scala3 = "3.2.1" val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up") val baseScalaVersion = scala3 def nightlyVersion: Option[String] = diff --git a/project/build.properties b/project/build.properties index 563a014da..8b9a0b0ab 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.7.2 +sbt.version=1.8.0