From b425fb175541ae51d1ba4375185e076473e36df8 Mon Sep 17 00:00:00 2001 From: TzeKei Lee Date: Tue, 29 Oct 2024 16:49:09 +0800 Subject: [PATCH 1/4] backtick when path segment is scala keyword --- .../feature/keyword-module/resources/build.mill | 2 ++ .../keyword-module/resources/import/package.mill | 7 +++++++ .../keyword-module/resources/import/src/Foo.scala | 3 +++ .../keyword-module/src/KeywordModuleTests.scala | 15 +++++++++++++++ runner/src/mill/runner/FileImportGraph.scala | 4 +++- 5 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 integration/feature/keyword-module/resources/build.mill create mode 100644 integration/feature/keyword-module/resources/import/package.mill create mode 100644 integration/feature/keyword-module/resources/import/src/Foo.scala create mode 100644 integration/feature/keyword-module/src/KeywordModuleTests.scala diff --git a/integration/feature/keyword-module/resources/build.mill b/integration/feature/keyword-module/resources/build.mill new file mode 100644 index 00000000000..e423a0c95a4 --- /dev/null +++ b/integration/feature/keyword-module/resources/build.mill @@ -0,0 +1,2 @@ +package build +import $packages._ diff --git a/integration/feature/keyword-module/resources/import/package.mill b/integration/feature/keyword-module/resources/import/package.mill new file mode 100644 index 00000000000..3be97e06c77 --- /dev/null +++ b/integration/feature/keyword-module/resources/import/package.mill @@ -0,0 +1,7 @@ +package build.`import` +import mill._, scalalib._ + +object `package` extends RootModule with ScalaModule { + def scalaVersion = "2.13.11" +} + diff --git a/integration/feature/keyword-module/resources/import/src/Foo.scala b/integration/feature/keyword-module/resources/import/src/Foo.scala new file mode 100644 index 00000000000..c418e3678b7 --- /dev/null +++ b/integration/feature/keyword-module/resources/import/src/Foo.scala @@ -0,0 +1,3 @@ +package `import` + +object foo diff --git a/integration/feature/keyword-module/src/KeywordModuleTests.scala b/integration/feature/keyword-module/src/KeywordModuleTests.scala new file mode 100644 index 00000000000..7e93e1e253d --- /dev/null +++ b/integration/feature/keyword-module/src/KeywordModuleTests.scala @@ -0,0 +1,15 @@ +package mill.integration + +import mill.testkit.UtestIntegrationTestSuite + +import utest._ + +object KeywordModuleTest extends UtestIntegrationTestSuite { + val tests: Tests = Tests { + test("test") - integrationTest { tester => + import tester._ + + assert(eval("import.compile").isSuccess) + } + } +} diff --git a/runner/src/mill/runner/FileImportGraph.scala b/runner/src/mill/runner/FileImportGraph.scala index 05fd98dd095..951c32c0038 100644 --- a/runner/src/mill/runner/FileImportGraph.scala +++ b/runner/src/mill/runner/FileImportGraph.scala @@ -5,6 +5,7 @@ import mill.main.client.CodeGenConstants._ import mill.main.client.OutFiles._ import scala.reflect.NameTransformer.encode +import scala.reflect.runtime import scala.collection.mutable /** @@ -33,7 +34,8 @@ case class FileImportGraph( object FileImportGraph { def backtickWrap(s: String): String = s match { case s"`$v`" => s - case _ => if (encode(s) == s) s else "`" + s + "`" + case _ => if (encode(s) == s) runtime.universe.asInstanceOf[runtime.JavaUniverse].quotedName(s) + else "`" + s + "`" } import mill.api.JsonFormatters.pathReadWrite From b1671838ea31d1c1177dbf456f79f8b9290b752a Mon Sep 17 00:00:00 2001 From: TzeKei Lee Date: Wed, 30 Oct 2024 10:08:30 +0800 Subject: [PATCH 2/4] use userland keyword lists instead of scala 2's JavaUniverse --- .../resources/import/package.mill | 4 +- .../src/KeywordModuleTests.scala | 2 +- runner/src/mill/runner/FileImportGraph.scala | 52 ++++++++++++++++++- 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/integration/feature/keyword-module/resources/import/package.mill b/integration/feature/keyword-module/resources/import/package.mill index 3be97e06c77..69a5731a2d4 100644 --- a/integration/feature/keyword-module/resources/import/package.mill +++ b/integration/feature/keyword-module/resources/import/package.mill @@ -1,7 +1,7 @@ package build.`import` import mill._, scalalib._ -object `package` extends RootModule with ScalaModule { - def scalaVersion = "2.13.11" +object `package` extends RootModule { + def task = Task { true } } diff --git a/integration/feature/keyword-module/src/KeywordModuleTests.scala b/integration/feature/keyword-module/src/KeywordModuleTests.scala index 7e93e1e253d..d00919b0ea9 100644 --- a/integration/feature/keyword-module/src/KeywordModuleTests.scala +++ b/integration/feature/keyword-module/src/KeywordModuleTests.scala @@ -9,7 +9,7 @@ object KeywordModuleTest extends UtestIntegrationTestSuite { test("test") - integrationTest { tester => import tester._ - assert(eval("import.compile").isSuccess) + assert(eval("import.task").isSuccess) } } } diff --git a/runner/src/mill/runner/FileImportGraph.scala b/runner/src/mill/runner/FileImportGraph.scala index 951c32c0038..accd5f7abf4 100644 --- a/runner/src/mill/runner/FileImportGraph.scala +++ b/runner/src/mill/runner/FileImportGraph.scala @@ -5,7 +5,6 @@ import mill.main.client.CodeGenConstants._ import mill.main.client.OutFiles._ import scala.reflect.NameTransformer.encode -import scala.reflect.runtime import scala.collection.mutable /** @@ -32,9 +31,58 @@ case class FileImportGraph( */ @internal object FileImportGraph { + + val alphaKeywords = Set( + "abstract", + "case", + "catch", + "class", + "def", + "do", + "else", + "enum", + "export", + "extends", + "false", + "final", + "finally", + "forSome", + "for", + "given", + "if", + "implicit", + "import", + "lazy", + "match", + "new", + "null", + "object", + "override", + "package", + "private", + "protected", + "return", + "sealed", + "super", + "then", + "this", + "throw", + "trait", + "try", + "true", + "type", + "val", + "var", + "while", + "with", + "yield", + "_", + "macro" + ) + def backtickWrap(s: String): String = s match { case s"`$v`" => s - case _ => if (encode(s) == s) runtime.universe.asInstanceOf[runtime.JavaUniverse].quotedName(s) + case _ => if (encode(s) == s && !alphaKeywords.contains(s)) s else "`" + s + "`" } From 0c6c872fb7c745423e7408f1b7f5cf9f1baebfd5 Mon Sep 17 00:00:00 2001 From: TzeKei Lee Date: Wed, 30 Oct 2024 10:44:25 +0800 Subject: [PATCH 3/4] add more keyword named sub module cases --- .../feature/keyword-module/resources/for/package.mill | 7 +++++++ .../feature/keyword-module/resources/for/src/Foo.scala | 3 +++ .../feature/keyword-module/resources/if/package.mill | 7 +++++++ .../feature/keyword-module/resources/if/src/Foo.scala | 3 +++ .../feature/keyword-module/resources/null/package.mill | 7 +++++++ .../feature/keyword-module/resources/null/src/Foo.scala | 3 +++ .../feature/keyword-module/resources/this/package.mill | 7 +++++++ .../feature/keyword-module/resources/this/src/Foo.scala | 3 +++ .../feature/keyword-module/src/KeywordModuleTests.scala | 4 ++++ 9 files changed, 44 insertions(+) create mode 100644 integration/feature/keyword-module/resources/for/package.mill create mode 100644 integration/feature/keyword-module/resources/for/src/Foo.scala create mode 100644 integration/feature/keyword-module/resources/if/package.mill create mode 100644 integration/feature/keyword-module/resources/if/src/Foo.scala create mode 100644 integration/feature/keyword-module/resources/null/package.mill create mode 100644 integration/feature/keyword-module/resources/null/src/Foo.scala create mode 100644 integration/feature/keyword-module/resources/this/package.mill create mode 100644 integration/feature/keyword-module/resources/this/src/Foo.scala diff --git a/integration/feature/keyword-module/resources/for/package.mill b/integration/feature/keyword-module/resources/for/package.mill new file mode 100644 index 00000000000..51faec20096 --- /dev/null +++ b/integration/feature/keyword-module/resources/for/package.mill @@ -0,0 +1,7 @@ +package build.`for` +import mill._, scalalib._ + +object `package` extends RootModule { + def task = Task { true } +} + diff --git a/integration/feature/keyword-module/resources/for/src/Foo.scala b/integration/feature/keyword-module/resources/for/src/Foo.scala new file mode 100644 index 00000000000..942df5c7f67 --- /dev/null +++ b/integration/feature/keyword-module/resources/for/src/Foo.scala @@ -0,0 +1,3 @@ +package `for` + +object foo diff --git a/integration/feature/keyword-module/resources/if/package.mill b/integration/feature/keyword-module/resources/if/package.mill new file mode 100644 index 00000000000..31f06345050 --- /dev/null +++ b/integration/feature/keyword-module/resources/if/package.mill @@ -0,0 +1,7 @@ +package build.`if` +import mill._, scalalib._ + +object `package` extends RootModule { + def task = Task { true } +} + diff --git a/integration/feature/keyword-module/resources/if/src/Foo.scala b/integration/feature/keyword-module/resources/if/src/Foo.scala new file mode 100644 index 00000000000..4ad10639944 --- /dev/null +++ b/integration/feature/keyword-module/resources/if/src/Foo.scala @@ -0,0 +1,3 @@ +package `if` + +object foo diff --git a/integration/feature/keyword-module/resources/null/package.mill b/integration/feature/keyword-module/resources/null/package.mill new file mode 100644 index 00000000000..63a7e681c41 --- /dev/null +++ b/integration/feature/keyword-module/resources/null/package.mill @@ -0,0 +1,7 @@ +package build.`null` +import mill._, scalalib._ + +object `package` extends RootModule { + def task = Task { true } +} + diff --git a/integration/feature/keyword-module/resources/null/src/Foo.scala b/integration/feature/keyword-module/resources/null/src/Foo.scala new file mode 100644 index 00000000000..53e1342d84a --- /dev/null +++ b/integration/feature/keyword-module/resources/null/src/Foo.scala @@ -0,0 +1,3 @@ +package `null` + +object foo diff --git a/integration/feature/keyword-module/resources/this/package.mill b/integration/feature/keyword-module/resources/this/package.mill new file mode 100644 index 00000000000..9c4aa8cdc17 --- /dev/null +++ b/integration/feature/keyword-module/resources/this/package.mill @@ -0,0 +1,7 @@ +package build.`this` +import mill._, scalalib._ + +object `package` extends RootModule { + def task = Task { true } +} + diff --git a/integration/feature/keyword-module/resources/this/src/Foo.scala b/integration/feature/keyword-module/resources/this/src/Foo.scala new file mode 100644 index 00000000000..267bd51d97d --- /dev/null +++ b/integration/feature/keyword-module/resources/this/src/Foo.scala @@ -0,0 +1,3 @@ +package `this` + +object foo diff --git a/integration/feature/keyword-module/src/KeywordModuleTests.scala b/integration/feature/keyword-module/src/KeywordModuleTests.scala index d00919b0ea9..09699c11be3 100644 --- a/integration/feature/keyword-module/src/KeywordModuleTests.scala +++ b/integration/feature/keyword-module/src/KeywordModuleTests.scala @@ -9,7 +9,11 @@ object KeywordModuleTest extends UtestIntegrationTestSuite { test("test") - integrationTest { tester => import tester._ + assert(eval("for.task").isSuccess) + assert(eval("if.task").isSuccess) assert(eval("import.task").isSuccess) + assert(eval("null.task").isSuccess) + assert(eval("this.task").isSuccess) } } } From 0f8fa9a535f8133006ee6a3f7d2bb7f4c7e3ef1a Mon Sep 17 00:00:00 2001 From: TzeKei Lee Date: Wed, 30 Oct 2024 10:55:13 +0800 Subject: [PATCH 4/4] lint fix --- runner/src/mill/runner/FileImportGraph.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runner/src/mill/runner/FileImportGraph.scala b/runner/src/mill/runner/FileImportGraph.scala index accd5f7abf4..272099d2c55 100644 --- a/runner/src/mill/runner/FileImportGraph.scala +++ b/runner/src/mill/runner/FileImportGraph.scala @@ -32,7 +32,7 @@ case class FileImportGraph( @internal object FileImportGraph { - val alphaKeywords = Set( + val alphaKeywords: Set[String] = Set( "abstract", "case", "catch",