Skip to content

Commit 71ab4dd

Browse files
committed
Support test scope main methods with --list-main-classes
1 parent a62f880 commit 71ab4dd

File tree

6 files changed

+41
-17
lines changed

6 files changed

+41
-17
lines changed

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -589,19 +589,19 @@ object Run extends ScalaCommand[RunOptions] with BuildCommandHelpers {
589589
else
590590
(Nil, Map.empty[String, String])
591591
val allJavaOpts = pythonJavaProps ++ baseJavaProps
592-
if (showCommand) {
593-
val command = Runner.jvmCommand(
594-
builds.head.options.javaHome().value.javaCommand,
595-
allJavaOpts,
596-
builds.head.fullClassPathMaybeAsJar(asJar), // TODO: handle multiple builds
597-
mainClass,
598-
args,
599-
extraEnv = pythonExtraEnv,
600-
useManifest = builds.head.options.notForBloopOptions.runWithManifest,
601-
scratchDirOpt = scratchDirOpt
602-
)
603-
Left(command)
604-
}
592+
if showCommand then
593+
Left {
594+
Runner.jvmCommand(
595+
builds.head.options.javaHome().value.javaCommand,
596+
allJavaOpts,
597+
builds.flatMap(_.fullClassPathMaybeAsJar(asJar)).distinct,
598+
mainClass,
599+
args,
600+
extraEnv = pythonExtraEnv,
601+
useManifest = builds.head.options.notForBloopOptions.runWithManifest,
602+
scratchDirOpt = scratchDirOpt
603+
)
604+
}
605605
else {
606606
val proc = Runner.runJvm(
607607
builds.head.options.javaHome().value.javaCommand,

modules/cli/src/main/scala/scala/cli/commands/shared/MainClassOptions.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ final case class MainClassOptions(
1919
@Name("mainClassList")
2020
@Name("listMainClass")
2121
@Name("listMainClasses")
22+
@Name("listMainMethods")
23+
@Name("listMainMethod")
24+
@Name("mainMethodList")
25+
@Name("mainMethodLs")
2226
@Tag(tags.should)
2327
@Tag(tags.inShortHelp)
2428
mainClassLs: Option[Boolean] = None

modules/integration/src/test/scala/scala/cli/integration/RunTestDefinitions.scala

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2380,4 +2380,24 @@ abstract class RunTestDefinitions
23802380
expect(res.out.trim().contains(expectedMessage))
23812381
}
23822382
}
2383+
2384+
test(s"--list-main-classes includes test scope main methods when --test is enabled") {
2385+
val expectedMains @ Seq(expectedMain1, expectedMain2) = Seq("Main", "AnotherMain")
2386+
val expectedOutput = expectedMains.mkString(" ")
2387+
TestInputs(
2388+
os.rel / "example.scala" -> s"""object $expectedMain1 extends App { println("Hello from the main scope") }""",
2389+
os.rel / "example.test.scala" -> s"""object $expectedMain2 extends App { println("Hello from the test scope") }"""
2390+
).fromRoot { root =>
2391+
val res = os.proc(
2392+
TestUtil.cli,
2393+
"run",
2394+
".",
2395+
"--test",
2396+
"--list-main-classes",
2397+
extraOptions
2398+
)
2399+
.call(cwd = root)
2400+
expect(res.out.trim() == expectedOutput)
2401+
}
2402+
}
23832403
}

website/docs/reference/cli-options.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ Specify which main class to run
737737

738738
### `--main-class-ls`
739739

740-
Aliases: `--list-main-class`, `--list-main-classes`, `--main-class-list`
740+
Aliases: `--list-main-class`, `--list-main-classes`, `--list-main-method`, `--list-main-methods`, `--main-class-list`, `--main-method-list`, `--main-method-ls`
741741

742742
List main classes available in the current context
743743

website/docs/reference/scala-command/cli-options.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ Specify which main class to run
658658

659659
### `--main-class-ls`
660660

661-
Aliases: `--list-main-class`, `--list-main-classes`, `--main-class-list`
661+
Aliases: `--list-main-class`, `--list-main-classes`, `--list-main-method`, `--list-main-methods`, `--main-class-list`, `--main-method-list`, `--main-method-ls`
662662

663663
`SHOULD have` per Scala Runner specification
664664

website/docs/reference/scala-command/runner-specification.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2320,7 +2320,7 @@ Aliases: `--revolver`
23202320

23212321
List main classes available in the current context
23222322

2323-
Aliases: `--main-class-list` ,`--list-main-class` ,`--list-main-classes`
2323+
Aliases: `--main-class-list` ,`--list-main-class` ,`--list-main-classes` ,`--list-main-methods` ,`--list-main-method` ,`--main-method-list` ,`--main-method-ls`
23242324

23252325
**--command**
23262326

@@ -2960,7 +2960,7 @@ Aliases: `--revolver`
29602960

29612961
List main classes available in the current context
29622962

2963-
Aliases: `--main-class-list` ,`--list-main-class` ,`--list-main-classes`
2963+
Aliases: `--main-class-list` ,`--list-main-class` ,`--list-main-classes` ,`--list-main-methods` ,`--list-main-method` ,`--main-method-list` ,`--main-method-ls`
29642964

29652965
**--command**
29662966

0 commit comments

Comments
 (0)