From 2f0f831d6c63ebb4c06574a0b0d9103ed2c9e3e7 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 3 Apr 2023 12:54:55 +0800 Subject: [PATCH 1/7] . --- example/web/5-webapp-scalajs-shared/build.sc | 3 +- .../web/6-cross-platform-publishing/build.sc | 28 +++++-------------- .../src/mill/scalalib/CrossScalaModule.scala | 10 +++++++ .../mill/scalalib/PlatformScalaModule.scala | 19 +++++++++++++ 4 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 scalalib/src/mill/scalalib/PlatformScalaModule.scala diff --git a/example/web/5-webapp-scalajs-shared/build.sc b/example/web/5-webapp-scalajs-shared/build.sc index a6ef830533f..84324f87a32 100644 --- a/example/web/5-webapp-scalajs-shared/build.sc +++ b/example/web/5-webapp-scalajs-shared/build.sc @@ -32,8 +32,7 @@ object app extends RootModule with AppScalaModule{ } object shared extends Module{ - trait SharedModule extends AppScalaModule{ - def millSourcePath = super.millSourcePath / os.up + trait SharedModule extends AppScalaModule with PlatformScalaModule { def ivyDeps = Agg( ivy"com.lihaoyi::scalatags::0.12.0", diff --git a/example/web/6-cross-platform-publishing/build.sc b/example/web/6-cross-platform-publishing/build.sc index c0c4682cc49..2c4d23c99f8 100644 --- a/example/web/6-cross-platform-publishing/build.sc +++ b/example/web/6-cross-platform-publishing/build.sc @@ -1,13 +1,8 @@ import mill._, scalalib._, scalajslib._, publish._ object wrapper extends Cross[WrapperModule]("2.13.10", "3.2.2") -class WrapperModule(val crossScalaVersion: String) extends Module { - - trait MyModule extends CrossScalaModule with PublishModule { - def artifactName = millModuleSegments.parts.dropRight(1).last - - def crossScalaVersion = WrapperModule.this.crossScalaVersion - def millSourcePath = super.millSourcePath / os.up +class WrapperModule(val crossScalaVersion: String) extends CrossScalaModule.Wrapper { + trait MyScalaModule extends CrossScalaModule with PlatformScalaModule with PublishModule { def publishVersion = "0.0.1" def pomSettings = PomSettings( @@ -25,23 +20,14 @@ class WrapperModule(val crossScalaVersion: String) extends Module { def ivyDeps = Agg(ivy"com.lihaoyi::utest::0.7.11") def testFramework = "utest.runner.Framework" } - - def sources = T.sources { - val platform = millModuleSegments.parts.last - super.sources().flatMap(source => - Seq( - source, - PathRef(source.path / os.up / s"${source.path.last}-${platform}") - ) - ) - } } - trait MyScalaJSModule extends MyModule with ScalaJSModule { + + trait MyScalaJSModule extends MyScalaModule with ScalaJSModule { def scalaJSVersion = "1.13.0" } object foo extends Module{ - object jvm extends MyModule{ + object jvm extends MyScalaModule{ def moduleDeps = Seq(bar.jvm) def ivyDeps = super.ivyDeps() ++ Agg(ivy"com.lihaoyi::upickle::3.0.0") } @@ -51,7 +37,7 @@ class WrapperModule(val crossScalaVersion: String) extends Module { } object bar extends Module{ - object jvm extends MyModule + object jvm extends MyScalaModule object js extends MyScalaJSModule } } @@ -101,4 +87,4 @@ Publishing Artifact(com.lihaoyi,bar_sjs1_3,0.0.1) to ivy repo Publishing Artifact(com.lihaoyi,bar_3,0.0.1) to ivy repo Publishing Artifact(com.lihaoyi,foo_sjs1_3,0.0.1) to ivy repo Publishing Artifact(com.lihaoyi,foo_3,0.0.1) to ivy repo -*/ \ No newline at end of file +*/ diff --git a/scalalib/src/mill/scalalib/CrossScalaModule.scala b/scalalib/src/mill/scalalib/CrossScalaModule.scala index 8edf01d8f87..4b66cd4286a 100644 --- a/scalalib/src/mill/scalalib/CrossScalaModule.scala +++ b/scalalib/src/mill/scalalib/CrossScalaModule.scala @@ -25,3 +25,13 @@ trait CrossScalaModule extends ScalaModule with CrossModuleBase { outer => } trait Tests extends CrossScalaModuleTests } + +object CrossScalaModule{ + trait Wrapper extends mill.Module { + def crossScalaVersion: String + + trait CrossScalaModule extends mill.scalalib.CrossScalaModule { + def crossScalaVersion = Wrapper.this.crossScalaVersion + } + } +} diff --git a/scalalib/src/mill/scalalib/PlatformScalaModule.scala b/scalalib/src/mill/scalalib/PlatformScalaModule.scala new file mode 100644 index 00000000000..ac007c15faf --- /dev/null +++ b/scalalib/src/mill/scalalib/PlatformScalaModule.scala @@ -0,0 +1,19 @@ +package mill.scalalib +import mill._ + + +trait PlatformScalaModule extends ScalaModule{ + override def millSourcePath = super.millSourcePath / os.up + + override def sources = T.sources { + val platform = millModuleSegments.parts.last + super.sources().flatMap(source => + Seq( + source, + PathRef(source.path / os.up / s"${source.path.last}-${platform}") + ) + ) + } + + override def artifactName = millModuleSegments.parts.dropRight(1).last +} From 56184f78373b7b5b5c3c740c279875275ff7b6ea Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 3 Apr 2023 13:23:26 +0800 Subject: [PATCH 2/7] wip --- example/web/6-cross-platform-publishing/build.sc | 16 ++++++++-------- scalalib/src/mill/scalalib/CrossModuleBase.scala | 3 ++- .../src/mill/scalalib/CrossScalaModule.scala | 4 +++- scalalib/src/mill/scalalib/JavaModule.scala | 4 +++- .../src/mill/scalalib/PlatformScalaModule.scala | 2 +- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/example/web/6-cross-platform-publishing/build.sc b/example/web/6-cross-platform-publishing/build.sc index 2c4d23c99f8..d65a79cd8e2 100644 --- a/example/web/6-cross-platform-publishing/build.sc +++ b/example/web/6-cross-platform-publishing/build.sc @@ -79,12 +79,12 @@ Parsing JSON with js.JSON.parse Foo.main: Set(

i

,

cow

,

me

) > ./mill __.publishLocal -Publishing Artifact(com.lihaoyi,bar_sjs1_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,bar_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,foo_sjs1_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,foo_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,bar_sjs1_3,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,bar_3,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,foo_sjs1_3,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,foo_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-bar_sjs1_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-bar_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-foo_sjs1_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-foo_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-bar_sjs1_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-bar_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-foo_sjs1_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,wrapper-foo_3,0.0.1) to ivy repo */ diff --git a/scalalib/src/mill/scalalib/CrossModuleBase.scala b/scalalib/src/mill/scalalib/CrossModuleBase.scala index 6cae4fb596d..99c93db1b00 100644 --- a/scalalib/src/mill/scalalib/CrossModuleBase.scala +++ b/scalalib/src/mill/scalalib/CrossModuleBase.scala @@ -12,7 +12,8 @@ trait CrossModuleBase extends ScalaModule { protected def scalaVersionDirectoryNames: Seq[String] = ZincWorkerUtil.matchingVersions(crossScalaVersion) - override def artifactName: T[String] = millModuleSegments.parts.init.mkString("-") + protected def wrapperSegments = millModuleSegments.parts + override def artifactNameParts = super.artifactNameParts().patch(wrapperSegments.size - 1, Nil, 1) implicit def crossSbtModuleResolver: Resolver[CrossModuleBase] = new Resolver[CrossModuleBase] { def resolve[V <: CrossModuleBase](c: Cross[V]): V = { diff --git a/scalalib/src/mill/scalalib/CrossScalaModule.scala b/scalalib/src/mill/scalalib/CrossScalaModule.scala index 4b66cd4286a..b9f332e2a68 100644 --- a/scalalib/src/mill/scalalib/CrossScalaModule.scala +++ b/scalalib/src/mill/scalalib/CrossScalaModule.scala @@ -29,9 +29,11 @@ trait CrossScalaModule extends ScalaModule with CrossModuleBase { outer => object CrossScalaModule{ trait Wrapper extends mill.Module { def crossScalaVersion: String - + private def wrapperSegments0 = millModuleSegments.parts trait CrossScalaModule extends mill.scalalib.CrossScalaModule { + override def wrapperSegments = wrapperSegments0 def crossScalaVersion = Wrapper.this.crossScalaVersion + } } } diff --git a/scalalib/src/mill/scalalib/JavaModule.scala b/scalalib/src/mill/scalalib/JavaModule.scala index 8f96f50f8ef..30b5160eab3 100644 --- a/scalalib/src/mill/scalalib/JavaModule.scala +++ b/scalalib/src/mill/scalalib/JavaModule.scala @@ -832,7 +832,9 @@ trait JavaModule * For example, by default a scala module foo.baz might be published as foo-baz_2.12 and a java module would be foo-baz. * Setting this to baz would result in a scala artifact baz_2.12 or a java artifact baz. */ - def artifactName: T[String] = millModuleSegments.parts.mkString("-") + def artifactName: T[String] = artifactNameParts().mkString("-") + + def artifactNameParts: T[Seq[String]] = millModuleSegments.parts /** * The exact id of the artifact to be published. You probably don't want to override this. diff --git a/scalalib/src/mill/scalalib/PlatformScalaModule.scala b/scalalib/src/mill/scalalib/PlatformScalaModule.scala index ac007c15faf..a2a28e9fe78 100644 --- a/scalalib/src/mill/scalalib/PlatformScalaModule.scala +++ b/scalalib/src/mill/scalalib/PlatformScalaModule.scala @@ -15,5 +15,5 @@ trait PlatformScalaModule extends ScalaModule{ ) } - override def artifactName = millModuleSegments.parts.dropRight(1).last + override def artifactNameParts = super.artifactNameParts().dropRight(1) } From f8d7a78d66ac012ed3625cb8eacbcf0a406f5a8b Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 3 Apr 2023 13:56:03 +0800 Subject: [PATCH 3/7] comments --- scalalib/src/mill/scalalib/CrossScalaModule.scala | 2 +- scalalib/src/mill/scalalib/PlatformScalaModule.scala | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/scalalib/src/mill/scalalib/CrossScalaModule.scala b/scalalib/src/mill/scalalib/CrossScalaModule.scala index b9f332e2a68..c038dfdf256 100644 --- a/scalalib/src/mill/scalalib/CrossScalaModule.scala +++ b/scalalib/src/mill/scalalib/CrossScalaModule.scala @@ -4,7 +4,7 @@ import mill.api.PathRef import mill.T /** - * A [[ScalaModule]] with is suited to be used with [[mill.define.Cross]]. + * A [[ScalaModule]] which is suited to be used with [[mill.define.Cross]]. * It supports additional source directories with the scala version pattern as suffix (`src-{scalaversionprefix}`), * e.g. * - src diff --git a/scalalib/src/mill/scalalib/PlatformScalaModule.scala b/scalalib/src/mill/scalalib/PlatformScalaModule.scala index a2a28e9fe78..32ad84418cb 100644 --- a/scalalib/src/mill/scalalib/PlatformScalaModule.scala +++ b/scalalib/src/mill/scalalib/PlatformScalaModule.scala @@ -1,7 +1,17 @@ package mill.scalalib import mill._ - +/** + * A [[ScalaModule]] intended for defining `.jvm`/`.js`/`.native` submodules + * It supports additional source directories per platform, e.g. `src-jvm/` or + * `src-js/` and can be used inside a [[CrossScalaModule.Wrapper]], to get one + * source folder per platform per version e.g. `src-2.12-jvm/`. + * + * Adjusts the [[millSourcePath]] and [[artifactNameParts]] to ignore the last + * path segment, which is assumed to be the name of the platform the module is + * built against and not something that should affect the filesystem path or + * artifact name + */ trait PlatformScalaModule extends ScalaModule{ override def millSourcePath = super.millSourcePath / os.up From 7ad0f2bc38c51ac57bf0e855429bdc77316c0db2 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 3 Apr 2023 13:58:16 +0800 Subject: [PATCH 4/7] . --- scalalib/src/mill/scalalib/CrossScalaModule.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scalalib/src/mill/scalalib/CrossScalaModule.scala b/scalalib/src/mill/scalalib/CrossScalaModule.scala index c038dfdf256..f739f8b6911 100644 --- a/scalalib/src/mill/scalalib/CrossScalaModule.scala +++ b/scalalib/src/mill/scalalib/CrossScalaModule.scala @@ -5,8 +5,9 @@ import mill.T /** * A [[ScalaModule]] which is suited to be used with [[mill.define.Cross]]. - * It supports additional source directories with the scala version pattern as suffix (`src-{scalaversionprefix}`), - * e.g. + * It supports additional source directories with the scala version pattern + * as suffix (`src-{scalaversionprefix}`), e.g. + * * - src * - src-2.11 * - src-2.12.3 @@ -27,6 +28,10 @@ trait CrossScalaModule extends ScalaModule with CrossModuleBase { outer => } object CrossScalaModule{ + /** + * Used with a [[mill.define.Cross]] when you want [[CrossScalaModule]]'s + * nested within it + */ trait Wrapper extends mill.Module { def crossScalaVersion: String private def wrapperSegments0 = millModuleSegments.parts From 44962829a432a3470db1d705f3973eec4d9a8a76 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Tue, 4 Apr 2023 07:57:56 +0800 Subject: [PATCH 5/7] rename foo wrappers --- .../basic/5-nested-modules/baz/src/Baz.scala | 11 +++ example/basic/5-nested-modules/build.sc | 26 +++--- .../{wrapper => foo}/bar/src/Bar.scala | 2 +- .../5-nested-modules/foo/qux/src/Qux.scala | 10 +++ .../basic/5-nested-modules/qux/src/Qux.scala | 11 --- .../wrapper/foo/src/Foo.scala | 10 --- .../web/6-cross-platform-publishing/build.sc | 88 ++++++++++--------- .../bar/src-2/BarVersionSpecific.scala | 0 .../bar/src-3/BarVersionSpecific.scala | 0 .../{wrapper => foo}/bar/src/Bar.scala | 0 .../bar/test/src/BarTests.scala | 0 .../qux/src-js/QuxPlatformSpecific.scala} | 4 +- .../qux/src-jvm/QuxPlatformSpecific.scala} | 4 +- .../src/Foo.scala => foo/qux/src/Qux.scala} | 6 +- .../qux/test/src/QuxTests.scala} | 6 +- 15 files changed, 90 insertions(+), 88 deletions(-) create mode 100644 example/basic/5-nested-modules/baz/src/Baz.scala rename example/basic/5-nested-modules/{wrapper => foo}/bar/src/Bar.scala (80%) create mode 100644 example/basic/5-nested-modules/foo/qux/src/Qux.scala delete mode 100644 example/basic/5-nested-modules/qux/src/Qux.scala delete mode 100644 example/basic/5-nested-modules/wrapper/foo/src/Foo.scala rename example/web/6-cross-platform-publishing/{wrapper => foo}/bar/src-2/BarVersionSpecific.scala (100%) rename example/web/6-cross-platform-publishing/{wrapper => foo}/bar/src-3/BarVersionSpecific.scala (100%) rename example/web/6-cross-platform-publishing/{wrapper => foo}/bar/src/Bar.scala (100%) rename example/web/6-cross-platform-publishing/{wrapper => foo}/bar/test/src/BarTests.scala (100%) rename example/web/6-cross-platform-publishing/{wrapper/foo/src-js/FooPlatformSpecific.scala => foo/qux/src-js/QuxPlatformSpecific.scala} (82%) rename example/web/6-cross-platform-publishing/{wrapper/foo/src-jvm/FooPlatformSpecific.scala => foo/qux/src-jvm/QuxPlatformSpecific.scala} (76%) rename example/web/6-cross-platform-publishing/{wrapper/foo/src/Foo.scala => foo/qux/src/Qux.scala} (69%) rename example/web/6-cross-platform-publishing/{wrapper/foo/test/src/FooTests.scala => foo/qux/test/src/QuxTests.scala} (64%) diff --git a/example/basic/5-nested-modules/baz/src/Baz.scala b/example/basic/5-nested-modules/baz/src/Baz.scala new file mode 100644 index 00000000000..057c0c7e015 --- /dev/null +++ b/example/basic/5-nested-modules/baz/src/Baz.scala @@ -0,0 +1,11 @@ +package baz +import scalatags.Text.all._ +object Baz { + val value = p("today") + + def main(args: Array[String]): Unit = { + println("Bar.value: " + foo.bar.Bar.value) + println("Qux.value: " + foo.qux.Qux.value) + println("Baz.value: " + value) + } +} diff --git a/example/basic/5-nested-modules/build.sc b/example/basic/5-nested-modules/build.sc index 5c07d9179dd..6621840caca 100644 --- a/example/basic/5-nested-modules/build.sc +++ b/example/basic/5-nested-modules/build.sc @@ -5,16 +5,16 @@ trait MyModule extends ScalaModule{ def ivyDeps = Agg(ivy"com.lihaoyi::scalatags:0.8.2") } -object wrapper extends Module{ - object foo extends MyModule { +object foo extends Module{ + object bar extends MyModule + + object qux extends MyModule { def moduleDeps = Seq(bar) } - - object bar extends MyModule } -object qux extends MyModule { - def moduleDeps = Seq(wrapper.bar, wrapper.foo) +object baz extends MyModule { + def moduleDeps = Seq(foo.bar, foo.qux) } // Modules can be nested arbitrarily deeply within each other. The outer module @@ -28,17 +28,17 @@ object qux extends MyModule { /* Example Usage > ./mill resolve __.run -wrapper.foo.run -wrapper.bar.run +foo.bar.run +foo.qux.run qux.run -> ./mill qux.run -Foo.value:

hello

+> ./mill baz.run Bar.value:

world

-Qux.value:

today

+Qux.value:

hello

+Baz.value:

today

-> ./mill wrapper.foo.run -Foo.value:

hello

+> ./mill foo.qux.run Bar.value:

world

+Qux.value:

hello

*/ \ No newline at end of file diff --git a/example/basic/5-nested-modules/wrapper/bar/src/Bar.scala b/example/basic/5-nested-modules/foo/bar/src/Bar.scala similarity index 80% rename from example/basic/5-nested-modules/wrapper/bar/src/Bar.scala rename to example/basic/5-nested-modules/foo/bar/src/Bar.scala index 98184ac8ede..3c185f2abf8 100644 --- a/example/basic/5-nested-modules/wrapper/bar/src/Bar.scala +++ b/example/basic/5-nested-modules/foo/bar/src/Bar.scala @@ -1,4 +1,4 @@ -package bar +package foo.bar import scalatags.Text.all._ object Bar { val value = p("world") diff --git a/example/basic/5-nested-modules/foo/qux/src/Qux.scala b/example/basic/5-nested-modules/foo/qux/src/Qux.scala new file mode 100644 index 00000000000..bb37ddf9860 --- /dev/null +++ b/example/basic/5-nested-modules/foo/qux/src/Qux.scala @@ -0,0 +1,10 @@ +package foo.qux +import scalatags.Text.all._ +object Qux { + val value = h1("hello") + + def main(args: Array[String]): Unit = { + println("Qux.value: " + Qux.value) + println("Bar.value: " + foo.bar.Bar.value) + } +} diff --git a/example/basic/5-nested-modules/qux/src/Qux.scala b/example/basic/5-nested-modules/qux/src/Qux.scala deleted file mode 100644 index f8ff651ae26..00000000000 --- a/example/basic/5-nested-modules/qux/src/Qux.scala +++ /dev/null @@ -1,11 +0,0 @@ -package qux -import scalatags.Text.all._ -object Qux { - val value = p("today") - - def main(args: Array[String]): Unit = { - println("Foo.value: " + foo.Foo.value) - println("Bar.value: " + bar.Bar.value) - println("Qux.value: " + qux.Qux.value) - } -} diff --git a/example/basic/5-nested-modules/wrapper/foo/src/Foo.scala b/example/basic/5-nested-modules/wrapper/foo/src/Foo.scala deleted file mode 100644 index 9e5808e7d6f..00000000000 --- a/example/basic/5-nested-modules/wrapper/foo/src/Foo.scala +++ /dev/null @@ -1,10 +0,0 @@ -package foo -import scalatags.Text.all._ -object Foo { - val value = h1("hello") - - def main(args: Array[String]): Unit = { - println("Foo.value: " + Foo.value) - println("Bar.value: " + bar.Bar.value) - } -} diff --git a/example/web/6-cross-platform-publishing/build.sc b/example/web/6-cross-platform-publishing/build.sc index d65a79cd8e2..00ca25fb0af 100644 --- a/example/web/6-cross-platform-publishing/build.sc +++ b/example/web/6-cross-platform-publishing/build.sc @@ -1,8 +1,8 @@ import mill._, scalalib._, scalajslib._, publish._ -object wrapper extends Cross[WrapperModule]("2.13.10", "3.2.2") -class WrapperModule(val crossScalaVersion: String) extends CrossScalaModule.Wrapper { - trait MyScalaModule extends CrossScalaModule with PlatformScalaModule with PublishModule { +object foo extends Cross[FooModule]("2.13.10", "3.2.2") +class FooModule(val crossScalaVersion: String) extends CrossScalaModule.Wrapper { + trait Shared extends CrossScalaModule with PlatformScalaModule with PublishModule { def publishVersion = "0.0.1" def pomSettings = PomSettings( @@ -22,24 +22,26 @@ class WrapperModule(val crossScalaVersion: String) extends CrossScalaModule.Wrap } } - trait MyScalaJSModule extends MyScalaModule with ScalaJSModule { + trait SharedJS extends Shared with ScalaJSModule { def scalaJSVersion = "1.13.0" } - object foo extends Module{ - object jvm extends MyScalaModule{ + object bar extends Module { + object jvm extends Shared + + object js extends SharedJS + } + + object qux extends Module{ + object jvm extends Shared{ def moduleDeps = Seq(bar.jvm) def ivyDeps = super.ivyDeps() ++ Agg(ivy"com.lihaoyi::upickle::3.0.0") } - object js extends MyScalaJSModule { + object js extends SharedJS { def moduleDeps = Seq(bar.js) } } - object bar extends Module{ - object jvm extends MyScalaModule - object js extends MyScalaJSModule - } } // This example demonstrates how to publish Scala modules which are both @@ -48,43 +50,43 @@ class WrapperModule(val crossScalaVersion: String) extends CrossScalaModule.Wrap /* Example Usage -> ./mill show wrapper[2.13.10].foo.jvm.sources # mac/linux -wrapper/foo/src -wrapper/foo/src-jvm -wrapper/foo/src-2.13.10 -wrapper/foo/src-2.13.10-jvm -wrapper/foo/src-2.13 -wrapper/foo/src-2.13-jvm -wrapper/foo/src-2 -wrapper/foo/src-2-jvm - -> ./mill show wrapper[3.2.2].bar.js.sources # mac/linux -wrapper/bar/src -wrapper/bar/src-js -wrapper/bar/src-3.2.2 -wrapper/bar/src-3.2.2-js -wrapper/bar/src-3.2 -wrapper/bar/src-3.2-js -wrapper/bar/src-3 -wrapper/bar/src-3-js - -> ./mill wrapper[2.13.10].foo.jvm.run +> ./mill show foo[2.13.10].bar.jvm.sources +foo/bar/src +foo/bar/src-jvm +foo/bar/src-2.13.10 +foo/bar/src-2.13.10-jvm +foo/bar/src-2.13 +foo/bar/src-2.13-jvm +foo/bar/src-2 +foo/bar/src-2-jvm + +> ./mill show foo[3.2.2].qux.js.sources +foo/qux/src +foo/qux/src-js +foo/qux/src-3.2.2 +foo/qux/src-3.2.2-js +foo/qux/src-3.2 +foo/qux/src-3.2-js +foo/qux/src-3 +foo/qux/src-3-js + +> ./mill foo[2.13.10].qux.jvm.run Bar.value:

world Specific code for Scala 2.x

Parsing JSON with ujson.read -Foo.main: Set(

i

,

cow

,

me

) +Qux.main: Set(

i

,

cow

,

me

) -> ./mill wrapper[3.2.2].foo.js.run +> ./mill foo[3.2.2].qux.js.run Bar.value:

world Specific code for Scala 3.x

Parsing JSON with js.JSON.parse -Foo.main: Set(

i

,

cow

,

me

) +Qux.main: Set(

i

,

cow

,

me

) > ./mill __.publishLocal -Publishing Artifact(com.lihaoyi,wrapper-bar_sjs1_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,wrapper-bar_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,wrapper-foo_sjs1_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,wrapper-foo_2.13,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,wrapper-bar_sjs1_3,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,wrapper-bar_3,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,wrapper-foo_sjs1_3,0.0.1) to ivy repo -Publishing Artifact(com.lihaoyi,wrapper-foo_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-bar_sjs1_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-bar_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-qux_sjs1_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-qux_2.13,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-bar_sjs1_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-bar_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-qux_sjs1_3,0.0.1) to ivy repo +Publishing Artifact(com.lihaoyi,foo-qux_3,0.0.1) to ivy repo */ diff --git a/example/web/6-cross-platform-publishing/wrapper/bar/src-2/BarVersionSpecific.scala b/example/web/6-cross-platform-publishing/foo/bar/src-2/BarVersionSpecific.scala similarity index 100% rename from example/web/6-cross-platform-publishing/wrapper/bar/src-2/BarVersionSpecific.scala rename to example/web/6-cross-platform-publishing/foo/bar/src-2/BarVersionSpecific.scala diff --git a/example/web/6-cross-platform-publishing/wrapper/bar/src-3/BarVersionSpecific.scala b/example/web/6-cross-platform-publishing/foo/bar/src-3/BarVersionSpecific.scala similarity index 100% rename from example/web/6-cross-platform-publishing/wrapper/bar/src-3/BarVersionSpecific.scala rename to example/web/6-cross-platform-publishing/foo/bar/src-3/BarVersionSpecific.scala diff --git a/example/web/6-cross-platform-publishing/wrapper/bar/src/Bar.scala b/example/web/6-cross-platform-publishing/foo/bar/src/Bar.scala similarity index 100% rename from example/web/6-cross-platform-publishing/wrapper/bar/src/Bar.scala rename to example/web/6-cross-platform-publishing/foo/bar/src/Bar.scala diff --git a/example/web/6-cross-platform-publishing/wrapper/bar/test/src/BarTests.scala b/example/web/6-cross-platform-publishing/foo/bar/test/src/BarTests.scala similarity index 100% rename from example/web/6-cross-platform-publishing/wrapper/bar/test/src/BarTests.scala rename to example/web/6-cross-platform-publishing/foo/bar/test/src/BarTests.scala diff --git a/example/web/6-cross-platform-publishing/wrapper/foo/src-js/FooPlatformSpecific.scala b/example/web/6-cross-platform-publishing/foo/qux/src-js/QuxPlatformSpecific.scala similarity index 82% rename from example/web/6-cross-platform-publishing/wrapper/foo/src-js/FooPlatformSpecific.scala rename to example/web/6-cross-platform-publishing/foo/qux/src-js/QuxPlatformSpecific.scala index 8a31c3529da..d9f57981da4 100644 --- a/example/web/6-cross-platform-publishing/wrapper/foo/src-js/FooPlatformSpecific.scala +++ b/example/web/6-cross-platform-publishing/foo/qux/src-js/QuxPlatformSpecific.scala @@ -1,6 +1,6 @@ -package foo +package qux import scala.scalajs.js -object FooPlatformSpecific { +object QuxPlatformSpecific { def parseJsonGetKeys(s: String): Set[String] = { println("Parsing JSON with js.JSON.parse") js.JSON.parse(s).asInstanceOf[js.Dictionary[_]].keys.toSet diff --git a/example/web/6-cross-platform-publishing/wrapper/foo/src-jvm/FooPlatformSpecific.scala b/example/web/6-cross-platform-publishing/foo/qux/src-jvm/QuxPlatformSpecific.scala similarity index 76% rename from example/web/6-cross-platform-publishing/wrapper/foo/src-jvm/FooPlatformSpecific.scala rename to example/web/6-cross-platform-publishing/foo/qux/src-jvm/QuxPlatformSpecific.scala index 6d92e2e15f4..8feff343246 100644 --- a/example/web/6-cross-platform-publishing/wrapper/foo/src-jvm/FooPlatformSpecific.scala +++ b/example/web/6-cross-platform-publishing/foo/qux/src-jvm/QuxPlatformSpecific.scala @@ -1,5 +1,5 @@ -package foo -object FooPlatformSpecific { +package qux +object QuxPlatformSpecific { def parseJsonGetKeys(s: String): Set[String] = { println("Parsing JSON with ujson.read") ujson.read(s).obj.keys.toSet diff --git a/example/web/6-cross-platform-publishing/wrapper/foo/src/Foo.scala b/example/web/6-cross-platform-publishing/foo/qux/src/Qux.scala similarity index 69% rename from example/web/6-cross-platform-publishing/wrapper/foo/src/Foo.scala rename to example/web/6-cross-platform-publishing/foo/qux/src/Qux.scala index aa72b78de72..77bad3e03af 100644 --- a/example/web/6-cross-platform-publishing/wrapper/foo/src/Foo.scala +++ b/example/web/6-cross-platform-publishing/foo/qux/src/Qux.scala @@ -1,9 +1,9 @@ -package foo +package qux import scalatags.Text.all._ -object Foo { +object Qux { def main(args: Array[String]): Unit = { println("Bar.value: " + bar.Bar.value) val string = """{"i": "am", "cow": "hear", "me": "moo"}""" - println("Foo.main: " + FooPlatformSpecific.parseJsonGetKeys(string).map(p(_))) + println("Qux.main: " + QuxPlatformSpecific.parseJsonGetKeys(string).map(p(_))) } } diff --git a/example/web/6-cross-platform-publishing/wrapper/foo/test/src/FooTests.scala b/example/web/6-cross-platform-publishing/foo/qux/test/src/QuxTests.scala similarity index 64% rename from example/web/6-cross-platform-publishing/wrapper/foo/test/src/FooTests.scala rename to example/web/6-cross-platform-publishing/foo/qux/test/src/QuxTests.scala index 7ca5f69ef3d..bdcf6fa9203 100644 --- a/example/web/6-cross-platform-publishing/wrapper/foo/test/src/FooTests.scala +++ b/example/web/6-cross-platform-publishing/foo/qux/test/src/QuxTests.scala @@ -1,10 +1,10 @@ -package foo +package qux import utest._ -object FooTests extends TestSuite { +object QuxTests extends TestSuite { def tests = Tests { test("parseJsonGetKeys") { val string = """{"i": "am", "cow": "hear", "me": "moo}""" - val keys = FooPlatformSpecific.parseJsonGetKeys(string) + val keys = QuxPlatformSpecific.parseJsonGetKeys(string) assert(keys == Set("i", "cow", "me")) keys } From 904d7c35c269df1919ac0f7db25fff5906c7c3cc Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 8 Apr 2023 23:32:59 +0800 Subject: [PATCH 6/7] merge --- example/web/6-cross-platform-publishing/build.sc | 2 +- scalalib/src/mill/scalalib/CrossScalaModule.scala | 4 ++-- scalalib/src/mill/scalalib/PlatformScalaModule.scala | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/example/web/6-cross-platform-publishing/build.sc b/example/web/6-cross-platform-publishing/build.sc index 00ca25fb0af..81c6703bc6f 100644 --- a/example/web/6-cross-platform-publishing/build.sc +++ b/example/web/6-cross-platform-publishing/build.sc @@ -1,7 +1,7 @@ import mill._, scalalib._, scalajslib._, publish._ object foo extends Cross[FooModule]("2.13.10", "3.2.2") -class FooModule(val crossScalaVersion: String) extends CrossScalaModule.Wrapper { +class FooModule(val crossScalaVersion: String) extends CrossScalaModule.Base { trait Shared extends CrossScalaModule with PlatformScalaModule with PublishModule { def publishVersion = "0.0.1" diff --git a/scalalib/src/mill/scalalib/CrossScalaModule.scala b/scalalib/src/mill/scalalib/CrossScalaModule.scala index f739f8b6911..f46f782201a 100644 --- a/scalalib/src/mill/scalalib/CrossScalaModule.scala +++ b/scalalib/src/mill/scalalib/CrossScalaModule.scala @@ -32,12 +32,12 @@ object CrossScalaModule{ * Used with a [[mill.define.Cross]] when you want [[CrossScalaModule]]'s * nested within it */ - trait Wrapper extends mill.Module { + trait Base extends mill.Module { def crossScalaVersion: String private def wrapperSegments0 = millModuleSegments.parts trait CrossScalaModule extends mill.scalalib.CrossScalaModule { override def wrapperSegments = wrapperSegments0 - def crossScalaVersion = Wrapper.this.crossScalaVersion + def crossScalaVersion = Base.this.crossScalaVersion } } diff --git a/scalalib/src/mill/scalalib/PlatformScalaModule.scala b/scalalib/src/mill/scalalib/PlatformScalaModule.scala index 32ad84418cb..03ff244b57f 100644 --- a/scalalib/src/mill/scalalib/PlatformScalaModule.scala +++ b/scalalib/src/mill/scalalib/PlatformScalaModule.scala @@ -4,7 +4,7 @@ import mill._ /** * A [[ScalaModule]] intended for defining `.jvm`/`.js`/`.native` submodules * It supports additional source directories per platform, e.g. `src-jvm/` or - * `src-js/` and can be used inside a [[CrossScalaModule.Wrapper]], to get one + * `src-js/` and can be used inside a [[CrossScalaModule.Base]], to get one * source folder per platform per version e.g. `src-2.12-jvm/`. * * Adjusts the [[millSourcePath]] and [[artifactNameParts]] to ignore the last From 86be660e870af56451e52fd14ee73d556ef4f983 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 9 Apr 2023 07:17:16 +0800 Subject: [PATCH 7/7] reformat --- scalalib/src/mill/scalalib/CrossModuleBase.scala | 2 +- scalalib/src/mill/scalalib/CrossScalaModule.scala | 3 ++- scalalib/src/mill/scalalib/PlatformScalaModule.scala | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scalalib/src/mill/scalalib/CrossModuleBase.scala b/scalalib/src/mill/scalalib/CrossModuleBase.scala index 99c93db1b00..f608f563aec 100644 --- a/scalalib/src/mill/scalalib/CrossModuleBase.scala +++ b/scalalib/src/mill/scalalib/CrossModuleBase.scala @@ -12,7 +12,7 @@ trait CrossModuleBase extends ScalaModule { protected def scalaVersionDirectoryNames: Seq[String] = ZincWorkerUtil.matchingVersions(crossScalaVersion) - protected def wrapperSegments = millModuleSegments.parts + protected def wrapperSegments = millModuleSegments.parts override def artifactNameParts = super.artifactNameParts().patch(wrapperSegments.size - 1, Nil, 1) implicit def crossSbtModuleResolver: Resolver[CrossModuleBase] = new Resolver[CrossModuleBase] { diff --git a/scalalib/src/mill/scalalib/CrossScalaModule.scala b/scalalib/src/mill/scalalib/CrossScalaModule.scala index f46f782201a..330331477c1 100644 --- a/scalalib/src/mill/scalalib/CrossScalaModule.scala +++ b/scalalib/src/mill/scalalib/CrossScalaModule.scala @@ -27,7 +27,8 @@ trait CrossScalaModule extends ScalaModule with CrossModuleBase { outer => trait Tests extends CrossScalaModuleTests } -object CrossScalaModule{ +object CrossScalaModule { + /** * Used with a [[mill.define.Cross]] when you want [[CrossScalaModule]]'s * nested within it diff --git a/scalalib/src/mill/scalalib/PlatformScalaModule.scala b/scalalib/src/mill/scalalib/PlatformScalaModule.scala index 03ff244b57f..21f42e1e26f 100644 --- a/scalalib/src/mill/scalalib/PlatformScalaModule.scala +++ b/scalalib/src/mill/scalalib/PlatformScalaModule.scala @@ -12,7 +12,7 @@ import mill._ * built against and not something that should affect the filesystem path or * artifact name */ -trait PlatformScalaModule extends ScalaModule{ +trait PlatformScalaModule extends ScalaModule { override def millSourcePath = super.millSourcePath / os.up override def sources = T.sources {