From c5b684984cefa459cd3537a9446b1bc5226a202c Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Sat, 15 Feb 2020 17:10:49 +0000 Subject: [PATCH] Tweak Def.displayRelative My driving use case was LocalProject: it should display the same as a fully resolved ProjectRef. Similarly ThisBuild should display as such. --- main-settings/src/main/scala/sbt/Def.scala | 19 +++++++++++++------ .../src/test/scala/sbt/ScopeDisplaySpec.scala | 12 ++++++------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/main-settings/src/main/scala/sbt/Def.scala b/main-settings/src/main/scala/sbt/Def.scala index 95988ebcc..0ae22de4c 100644 --- a/main-settings/src/main/scala/sbt/Def.scala +++ b/main-settings/src/main/scala/sbt/Def.scala @@ -10,6 +10,7 @@ package sbt import java.io.File import java.net.URI +import scala.annotation.tailrec import sbt.KeyRanks.{ DTask, Invisible } import sbt.Scope.{ GlobalScope, ThisScope } import sbt.internal.util.Types.const @@ -132,13 +133,19 @@ object Def extends Init[Scope] with TaskMacroExtra { project: Reference, trailingSlash: Boolean ): String = { - val trailing = if (trailingSlash) " /" else "" - project match { - case BuildRef(current.build) => "ThisBuild" + trailing - case `current` => "" - case ProjectRef(current.build, x) => x + trailing - case _ => Reference.display(project) + trailing + import Reference.{ display => displayRef } + @tailrec def loop(ref: Reference): String = ref match { + case ProjectRef(b, p) => if (b == current.build) loop(LocalProject(p)) else displayRef(ref) + case BuildRef(b) => if (b == current.build) loop(ThisBuild) else displayRef(ref) + case RootProject(b) => if (b == current.build) loop(LocalRootProject) else displayRef(ref) + case LocalProject(p) => if (p == current.project) "" else p + case ThisBuild => "ThisBuild" + case LocalRootProject => "" + case ThisProject => "" } + val str = loop(project) + if (trailingSlash && !str.isEmpty) s"$str /" + else str } @deprecated("Use variant without multi", "1.1.1") diff --git a/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala b/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala index de8290196..103b62802 100644 --- a/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala +++ b/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala @@ -64,11 +64,11 @@ class ScopeDisplaySpec extends FlatSpec { it should "ProjectRef diff build" in assert(disp(p3) == """ProjectRef(uri("other"), "qux") /""") it should "BuildRef same build" in assert(disp(BuildRef(b1)) == "ThisBuild /") it should "BuildRef diff build" in assert(disp(BuildRef(b2)) == "{other} /") - it should "RootProject same build" in assert(disp(RootProject(b1)) == "{foo/bar } /") + it should "RootProject same build" in assert(disp(RootProject(b1)) == " /") it should "RootProject diff build" in assert(disp(RootProject(b2)) == "{other } /") - it should "LocalProject curr proj" in assert(disp(LocalProject(p1.project)) == "{}bar /") - it should "LocalProject diff proj" in assert(disp(LocalProject(p2.project)) == "{}baz /") - it should "ThisBuild" in assert(disp(ThisBuild) == "{} /") - it should "LocalRootProject" in assert(disp(LocalRootProject) == "{} /") - it should "ThisProject" in assert(disp(ThisProject) == "{} /") + it should "LocalProject curr proj" in assert(disp(LocalProject(p1.project)) == "") + it should "LocalProject diff proj" in assert(disp(LocalProject(p2.project)) == "baz /") + it should "ThisBuild" in assert(disp(ThisBuild) == "ThisBuild /") + it should "LocalRootProject" in assert(disp(LocalRootProject) == " /") + it should "ThisProject" in assert(disp(ThisProject) == " /") }