diff --git a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala index b95912572a..c01d33930b 100644 --- a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala +++ b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala @@ -4,6 +4,7 @@ import sun.misc.{Signal, SignalHandler} import java.io.{ByteArrayOutputStream, File, PrintStream} import java.nio.charset.StandardCharsets +import java.nio.file.Paths import java.util.Locale import scala.build.blooprifle.FailedToStartServerException @@ -21,7 +22,14 @@ object ScalaCli { // the Scala CLI native image, no need to manually load it. coursier.jniutils.LoadWindowsLibrary.assumeInitialized() - val progName = (new Argv0).get("scala-cli") + val progName = { + val argv0 = (new Argv0).get("scala-cli") + val last = Paths.get(argv0).getFileName.toString + last match { + case s".${name}.aux" => name // cs install binaries under .app-name.aux and to the PATH + case _ => argv0 + } + } private def checkName(name: String) = { val baseProgName = if (Properties.isWin) progName.stripSuffix(".exe") else progName diff --git a/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala b/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala index 4249677fb4..effe03d845 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/installcompletions/InstallCompletions.scala @@ -5,12 +5,12 @@ import caseapp.core.complete.{Bash, Zsh} import java.io.File import java.nio.charset.Charset +import java.nio.file.Paths import java.util - import scala.build.Logger -import scala.cli.CurrentParams import scala.cli.commands.ScalaCommand import scala.cli.internal.{Argv0, ProfileFileUpdater} +import scala.cli.{CurrentParams, ScalaCli} object InstallCompletions extends ScalaCommand[InstallCompletionsOptions] { override def names = List( @@ -101,13 +101,8 @@ object InstallCompletions extends ScalaCommand[InstallCompletionsOptions] { def getName(name: Option[String]): String = name.getOrElse { - val baseName = (new Argv0).get(baseRunnerName) - val idx = baseName.lastIndexOf(File.separator) - val last = if (idx < 0) baseName else baseName.drop(idx + 1) - last match { - case s".${name}.aux" => name // // cs install binaries under .app-name.aux - case name => name - } + val progName = ScalaCli.progName + Paths.get(progName).getFileName.toString } def getFormat(format: Option[String]): Option[String] = diff --git a/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala b/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala index 013d77b5e8..648b037755 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/SipScalaTests.scala @@ -107,6 +107,20 @@ class SipScalaTests extends ScalaCliSuite { } } + if (TestUtil.isNativeCli) + test(s"usage instruction should point to scala when installing by cs") { // https://github.com/VirtusLab/scala-cli/issues/1662 + TestInputs.empty.fromRoot { + root => // cs install binaries under .app-name.aux and scala-cli should drop .aux from progName + val binary = "scala".prepareBinary(root) + val csBinaryName = root / ".scala.aux" + os.move(binary, csBinaryName) + val output = os.proc(csBinaryName, "test", "--usage").call(check = false).out.text() + val usageMsg = TestUtil.removeAnsiColors(output) + expect(usageMsg.contains(" scala ")) + expect(!usageMsg.contains(".scala.aux")) + } + } + def testHelpOutput(binaryName: String): Unit = TestInputs.empty.fromRoot { root => val binary = binaryName.prepareBinary(root) for { helpOption <- Seq("help", "-help", "--help") } {