Skip to content

Commit 726d3e2

Browse files
committed
Code review changes: add a warning message about script classes available in context
1 parent d1dd0dc commit 726d3e2

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

modules/build/src/main/scala/scala/build/Build.scala

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ object Build {
5454
def outputOpt: Some[os.Path] = Some(output)
5555
def fullClassPath: Seq[os.Path] = Seq(output) ++ sources.resourceDirs ++ artifacts.classPath
5656
def foundMainClasses(): Seq[String] = MainClass.find(output)
57-
def retainedMainClass(mainClasses: Seq[String]): Either[MainClassError, String] = {
57+
def retainedMainClass(
58+
mainClasses: Seq[String],
59+
logger: Logger
60+
): Either[MainClassError, String] = {
5861
val defaultMainClassOpt = sources.defaultMainClass
5962
.filter(name => mainClasses.contains(name))
6063
def foundMainClass =
@@ -77,7 +80,23 @@ object Build {
7780
}
7881
val filteredMainClasses =
7982
mainClasses.filter(!scriptInferredMainClasses.contains(_))
80-
if (filteredMainClasses.length == 1) Right(filteredMainClasses.head)
83+
if (filteredMainClasses.length == 1) {
84+
val pickedMainClass = filteredMainClasses.head
85+
if (scriptInferredMainClasses.nonEmpty) {
86+
val firstScript = scriptInferredMainClasses.head
87+
val scriptsString = scriptInferredMainClasses.mkString(", ")
88+
logger.message(
89+
s"Running $pickedMainClass. Also detected script main classes: $scriptsString"
90+
)
91+
logger.message(
92+
s"You can run any one of them by passing option --main-class, i.e. --main-class $firstScript"
93+
)
94+
logger.message(
95+
"All available main classes can always be listed by passing option --list-main-classes"
96+
)
97+
}
98+
Right(pickedMainClass)
99+
}
81100
else options.interactive
82101
.chooseOne(
83102
"Found several main classes. Which would you like to run?",

modules/cli/src/main/scala/scala/cli/commands/Package.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ object Package extends ScalaCommand[PackageOptions] {
212212
.map(_.stripSuffix("_sc"))
213213
.map(_ + extension)
214214
}
215-
.orElse(build.retainedMainClass(build.foundMainClasses()).map(
215+
.orElse(build.retainedMainClass(build.foundMainClasses(), logger).map(
216216
_.stripSuffix("_sc") + extension
217217
).toOption)
218218
.orElse(build.sources.paths.collectFirst(_._1.baseName + extension))
@@ -239,7 +239,7 @@ object Package extends ScalaCommand[PackageOptions] {
239239
def mainClass: Either[BuildException, String] =
240240
build.options.mainClass match {
241241
case Some(cls) => Right(cls)
242-
case None => build.retainedMainClass(build.foundMainClasses())
242+
case None => build.retainedMainClass(build.foundMainClasses(), logger)
243243
}
244244

245245
val packageOptions = build.options.notForBloopOptions.packageOptions

modules/cli/src/main/scala/scala/cli/commands/Run.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ object Run extends ScalaCommand[RunOptions] {
183183
}
184184
val mainClass = mainClassOpt match {
185185
case Some(cls) => cls
186-
case None => value(build.retainedMainClass(potentialMainClasses))
186+
case None => value(build.retainedMainClass(potentialMainClasses, logger))
187187
}
188188
val verbosity = build.options.internal.verbosity.getOrElse(0).toString
189189

modules/cli/src/main/scala/scala/cli/commands/publish/Publish.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ object Publish extends ScalaCommand[PublishOptions] {
385385
val mainJar = {
386386
val mainClassOpt = build.options.mainClass.orElse {
387387
val potentialMainClasses = build.foundMainClasses()
388-
build.retainedMainClass(potentialMainClasses) match {
388+
build.retainedMainClass(potentialMainClasses, logger) match {
389389
case Left(_: NoMainClassFoundError) => None
390390
case Left(err) =>
391391
logger.debug(s"Error while looking for main class: $err")

0 commit comments

Comments
 (0)