Skip to content

Commit 9874e1a

Browse files
authored
Merge pull request #165 from sbt/wip/options
Support -Yno-imports
2 parents 70b933c + 83e4162 commit 9874e1a

File tree

7 files changed

+105
-71
lines changed

7 files changed

+105
-71
lines changed

src/main/scala/sbtbuildinfo/ScalaCaseClassRenderer.scala

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ case class ScalaCaseClassRenderer(options: Seq[BuildInfoOption], pkg: String, ob
3030
caseClassDefinitionBegin ++
3131
buildInfoResults.flatMap(caseClassParameter).mkString(",\n").split("\n") ++
3232
caseClassDefinitionEnd ++
33-
toMapMethod(buildInfoResults) ++
33+
toMapLines(buildInfoResults) ++
34+
toJsonLines ++
3435
caseClassEnd ++
3536
List("") ++
3637
caseObjectLine(buildInfoResults) ++
@@ -48,15 +49,6 @@ case class ScalaCaseClassRenderer(options: Seq[BuildInfoOption], pkg: String, ob
4849
)
4950
}
5051

51-
private def toMapMethod(results: Seq[BuildInfoResult]) =
52-
if (options.contains(BuildInfoOption.ToMap))
53-
results
54-
.map(result => " \"%s\" -> %s".format(result.identifier, result.identifier))
55-
.mkString(" def toMap: Map[String, Any] = Map[String, Any](\n", ",\n", ")")
56-
.split("\n")
57-
.toList ::: List("")
58-
else Nil
59-
6052
private def caseClassDefinitionEnd = List(s") $objTraits {", "")
6153
private def caseClassEnd = List("}")
6254

@@ -67,13 +59,4 @@ case class ScalaCaseClassRenderer(options: Seq[BuildInfoOption], pkg: String, ob
6759
s" val value = apply()",
6860
s"}"
6961
)
70-
71-
def toMapLine(results: Seq[BuildInfoResult]): Seq[String] =
72-
if (options.contains(BuildInfoOption.ToMap) || options.contains(BuildInfoOption.ToJson))
73-
results
74-
.map(result => " \"%s\" -> %s".format(result.identifier, result.identifier))
75-
.mkString(" val toMap: Map[String, Any] = Map[String, Any](\n", ",\n", ")")
76-
.split("\n")
77-
.toList ::: List("")
78-
else Nil
7962
}

src/main/scala/sbtbuildinfo/ScalaCaseObjectRenderer.scala

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ private[sbtbuildinfo] case class ScalaCaseObjectRenderer(options: Seq[BuildInfoO
2828

2929
override def renderKeys(buildInfoResults: Seq[BuildInfoResult]) =
3030
header ++
31-
buildInfoResults.flatMap(line) ++ Seq(toStringLines(buildInfoResults)) ++
32-
toMapLine(buildInfoResults) ++ toJsonLine ++
31+
buildInfoResults.flatMap(line) ++
32+
Seq(toStringLines(buildInfoResults)) ++
33+
toMapLines(buildInfoResults) ++
34+
toJsonLines ++
3335
footer
3436

35-
3637
private val constantTypes = Set("scala.Int", "scala.Long", "scala.Double", "scala.Boolean", "scala.Symbol", "String")
3738

3839
private def line(result: BuildInfoResult): Seq[String] = {
@@ -62,39 +63,4 @@ private[sbtbuildinfo] case class ScalaCaseObjectRenderer(options: Seq[BuildInfoO
6263
| )
6364
| }""".stripMargin
6465
}
65-
66-
def toMapLine(results: Seq[BuildInfoResult]): Seq[String] =
67-
if (options.contains(BuildInfoOption.ToMap) || options.contains(BuildInfoOption.ToJson))
68-
results
69-
.map(result => " \"%s\" -> %s".format(result.identifier, result.identifier))
70-
.mkString(" val toMap: Map[String, Any] = Map[String, Any](\n", ",\n", ")")
71-
.split("\n")
72-
.toList ::: List("")
73-
else Nil
74-
75-
def toJsonLine: Seq[String] =
76-
if (options contains BuildInfoOption.ToJson)
77-
List(
78-
"""| private def quote(x: Any): String = "\"" + x + "\""
79-
| private def toJsonValue(value: Any): String = {
80-
| value match {
81-
| case elem: Seq[_] => elem.map(toJsonValue).mkString("[", ",", "]")
82-
| case elem: Option[_] => elem.map(toJsonValue).getOrElse("null")
83-
| case elem: Map[_, Any] => elem.map {
84-
| case (k, v) => toJsonValue(k.toString) + ":" + toJsonValue(v)
85-
| }.mkString("{", ", ", "}")
86-
| case d: Double => d.toString
87-
| case f: Float => f.toString
88-
| case l: Long => l.toString
89-
| case i: Int => i.toString
90-
| case s: Short => s.toString
91-
| case bool: Boolean => bool.toString
92-
| case str: String => quote(str)
93-
| case other => quote(other.toString)
94-
| }
95-
| }
96-
|
97-
| val toJson: String = toJsonValue(toMap)""".stripMargin)
98-
else Nil
99-
10066
}

src/main/scala/sbtbuildinfo/ScalaRenderer.scala

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,42 @@ abstract class ScalaRenderer extends BuildInfoRenderer {
44

55
protected def pkg: String
66

7+
def options: Seq[BuildInfoOption]
8+
9+
protected def toMapLines(results: Seq[BuildInfoResult]): Seq[String] =
10+
if (options.contains(BuildInfoOption.ToMap) || options.contains(BuildInfoOption.ToJson))
11+
results
12+
.map(result => " \"%s\" -> %s".format(result.identifier, result.identifier))
13+
.mkString(" val toMap: Map[String, scala.Any] = Map[String, scala.Any](\n", ",\n", ")")
14+
.split("\n")
15+
.toList ::: List("")
16+
else Nil
17+
18+
protected def toJsonLines: Seq[String] =
19+
if (options contains BuildInfoOption.ToJson)
20+
List(
21+
"""| private def quote(x: scala.Any): String = "\"" + x + "\""
22+
| private def toJsonValue(value: scala.Any): String = {
23+
| value match {
24+
| case elem: scala.collection.Seq[_] => elem.map(toJsonValue).mkString("[", ",", "]")
25+
| case elem: scala.Option[_] => elem.map(toJsonValue).getOrElse("null")
26+
| case elem: scala.collection.Map[_, scala.Any] => elem.map {
27+
| case (k, v) => toJsonValue(k.toString) + ":" + toJsonValue(v)
28+
| }.mkString("{", ", ", "}")
29+
| case d: scala.Double => d.toString
30+
| case f: scala.Float => f.toString
31+
| case l: scala.Long => l.toString
32+
| case i: scala.Int => i.toString
33+
| case s: scala.Short => s.toString
34+
| case bool: scala.Boolean => bool.toString
35+
| case str: String => quote(str)
36+
| case other => quote(other.toString)
37+
| }
38+
| }
39+
|
40+
| val toJson: String = toJsonValue(toMap)""".stripMargin)
41+
else Nil
42+
743
protected def getType(typeExpr: TypeExpression): Option[String] = {
844
def tpeToReturnType(tpe: TypeExpression): Option[String] =
945
tpe match {

src/sbt-test/sbt-buildinfo/caseclassrenderer/build.sbt

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ lazy val root = (project in file("."))
2424
"sym" -> 'Foo,
2525
BuildInfoKey.action("buildTime") { 1234L },
2626
target),
27-
buildInfoOptions += BuildInfoOption.Traits("traits.MyCustomTrait"),
27+
buildInfoOptions ++= Seq(
28+
BuildInfoOption.ToJson,
29+
BuildInfoOption.ToMap,
30+
BuildInfoOption.Traits("traits.MyCustomTrait"),
31+
),
2832
buildInfoRenderFactory := ScalaCaseClassRenderer.apply,
2933
buildInfoPackage := "hello",
3034
scalacOptions ++= Seq("-Ywarn-unused-import", "-Xfatal-warnings", "-Yno-imports"),
@@ -55,6 +59,40 @@ lazy val root = (project in file("."))
5559
""" target: java.io.File""" ::
5660
""") extends traits.MyCustomTrait {""" ::
5761
"""""" ::
62+
""" val toMap: Map[String, scala.Any] = Map[String, scala.Any](""" ::
63+
""" "name" -> name,""" ::
64+
""" "projectVersion" -> projectVersion,""" ::
65+
""" "scalaVersion" -> scalaVersion,""" ::
66+
""" "ivyXML" -> ivyXML,""" ::
67+
""" "homepage" -> homepage,""" ::
68+
""" "licenses" -> licenses,""" ::
69+
""" "apiMappings" -> apiMappings,""" ::
70+
""" "isSnapshot" -> isSnapshot,""" ::
71+
""" "year" -> year,""" ::
72+
""" "sym" -> sym,""" ::
73+
""" "buildTime" -> buildTime,""" ::
74+
""" "target" -> target)""" ::
75+
"""""" ::
76+
""" private def quote(x: scala.Any): String = "\"" + x + "\""""" ::
77+
""" private def toJsonValue(value: scala.Any): String = {""" ::
78+
""" value match {""" ::
79+
""" case elem: scala.collection.Seq[_] => elem.map(toJsonValue).mkString("[", ",", "]")""" ::
80+
""" case elem: scala.Option[_] => elem.map(toJsonValue).getOrElse("null")""" ::
81+
""" case elem: scala.collection.Map[_, scala.Any] => elem.map {""" ::
82+
""" case (k, v) => toJsonValue(k.toString) + ":" + toJsonValue(v)""" ::
83+
""" }.mkString("{", ", ", "}")""" ::
84+
""" case d: scala.Double => d.toString""" ::
85+
""" case f: scala.Float => f.toString""" ::
86+
""" case l: scala.Long => l.toString""" ::
87+
""" case i: scala.Int => i.toString""" ::
88+
""" case s: scala.Short => s.toString""" ::
89+
""" case bool: scala.Boolean => bool.toString""" ::
90+
""" case str: String => quote(str)""" ::
91+
""" case other => quote(other.toString)""" ::
92+
""" }""" ::
93+
""" }""" ::
94+
"""""" ::
95+
""" val toJson: String = toJsonValue(toMap)""" ::
5896
"""}""" ::
5997
"""""" ::
6098
"""case object BuildInfo {""" ::

src/sbt-test/sbt-buildinfo/options/build.sbt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ lazy val root = (project in file("."))
2020
BuildInfoOption.PackagePrivate),
2121
homepage := Some(url("http://example.com")),
2222
licenses := Seq("MIT License" -> url("https://github.com/sbt/sbt-buildinfo/blob/master/LICENSE")),
23-
scalacOptions ++= Seq("-Xlint", "-Xfatal-warnings"),
23+
scalacOptions ++= Seq("-Xlint", "-Xfatal-warnings", "-Yno-imports"),
2424
check := {
2525
val f = (sourceManaged in Compile).value / "sbt-buildinfo" / ("%s.scala" format "BuildInfo")
2626
val lines = scala.io.Source.fromFile(f).getLines.toList
@@ -41,24 +41,24 @@ lazy val root = (project in file("."))
4141
""" name, scalaVersion""" ::
4242
""" )""" ::
4343
""" }""" ::
44-
""" val toMap: Map[String, Any] = Map[String, Any](""" ::
44+
""" val toMap: Map[String, scala.Any] = Map[String, scala.Any](""" ::
4545
""" "name" -> name,""" ::
4646
""" "scalaVersion" -> scalaVersion)""" ::
4747
"""""" ::
48-
""" private def quote(x: Any): String = "\"" + x + "\""""" ::
49-
""" private def toJsonValue(value: Any): String = {""" ::
48+
""" private def quote(x: scala.Any): String = "\"" + x + "\""""" ::
49+
""" private def toJsonValue(value: scala.Any): String = {""" ::
5050
""" value match {""" ::
51-
""" case elem: Seq[_] => elem.map(toJsonValue).mkString("[", ",", "]")""" ::
52-
""" case elem: Option[_] => elem.map(toJsonValue).getOrElse("null")""" ::
53-
""" case elem: Map[_, Any] => elem.map {""" ::
51+
""" case elem: scala.collection.Seq[_] => elem.map(toJsonValue).mkString("[", ",", "]")""" ::
52+
""" case elem: scala.Option[_] => elem.map(toJsonValue).getOrElse("null")""" ::
53+
""" case elem: scala.collection.Map[_, scala.Any] => elem.map {""" ::
5454
""" case (k, v) => toJsonValue(k.toString) + ":" + toJsonValue(v)""" ::
5555
""" }.mkString("{", ", ", "}")""" ::
56-
""" case d: Double => d.toString""" ::
57-
""" case f: Float => f.toString""" ::
58-
""" case l: Long => l.toString""" ::
59-
""" case i: Int => i.toString""" ::
60-
""" case s: Short => s.toString""" ::
61-
""" case bool: Boolean => bool.toString""" ::
56+
""" case d: scala.Double => d.toString""" ::
57+
""" case f: scala.Float => f.toString""" ::
58+
""" case l: scala.Long => l.toString""" ::
59+
""" case i: scala.Int => i.toString""" ::
60+
""" case s: scala.Short => s.toString""" ::
61+
""" case bool: scala.Boolean => bool.toString""" ::
6262
""" case str: String => quote(str)""" ::
6363
""" case other => quote(other.toString)""" ::
6464
""" }""" ::
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package hello
2+
3+
import scala.Predef._
4+
5+
object Test extends scala.App {
6+
val expected = """{"name":"helloworld", "scalaVersion":"2.12.12"}"""
7+
val actual = hello.BuildInfo.toJson
8+
assert(actual == expected, "expected " + expected + " but found " + actual)
9+
}

src/sbt-test/sbt-buildinfo/options/test

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
$ exists target/scala-2.12/src_managed/main/sbt-buildinfo/BuildInfo.scala
33

44
> check
5+
6+
> run

0 commit comments

Comments
 (0)