Skip to content

Commit

Permalink
Cli: use varargs, remove unused methods
Browse files Browse the repository at this point in the history
  • Loading branch information
kitbellew committed Jan 28, 2025
1 parent dfde311 commit dc886ae
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ private[scalafmt] trait CliUtils {
),
)
val exit = Cli.mainWithOptions(
nGContext.getArgs,
CliOptions.default.copy(common =
CliOptions.default.common.copy(
cwd = Some(workingDirectory),
Expand All @@ -26,6 +25,7 @@ private[scalafmt] trait CliUtils {
err = nGContext.err,
),
),
nGContext.getArgs: _*,
)
nGContext.exit(exit.code)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class CliOptionsJVMTest extends FunSuite {

Seq("--stdin", "--stdout").foreach { arg =>
test(s"don't write info when using $arg") {
val options = Cli.getConfig(Array(arg), baseCliOptionsWithOut).get
val options = Cli.getConfig(baseCliOptionsWithOut, arg).get
val cons = System.console()
if (cons ne null) options.common.info match {
case x: Output.FromWriter if x.obj eq cons.writer() =>
Expand Down
23 changes: 4 additions & 19 deletions scalafmt-cli/shared/src/main/scala/org/scalafmt/cli/Cli.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,36 +7,21 @@ import java.nio.file.Paths

import scala.io.Source
import scala.util.Using
import scala.util.control.NoStackTrace

object Cli extends CliUtils {

private def throwIfError(exit: ExitCode): Unit = if (exit != ExitCode.Ok)
throw new RuntimeException(exit.toString) with NoStackTrace

def main(args: Array[String]): Unit = {
val exit = mainWithOptions(args, CliOptions.default)
val exit = mainWithOptions(CliOptions.default, args: _*)
sys.exit(exit.code)
}

def exceptionThrowingMain(args: Array[String]): Unit =
exceptionThrowingMainWithOptions(args, CliOptions.default)

def exceptionThrowingMainWithOptions(
args: Array[String],
options: CliOptions,
): Unit = {
val exit = mainWithOptions(args, options)
throwIfError(exit)
}

def mainWithOptions(args: Array[String], options: CliOptions): ExitCode =
getConfig(args, options) match {
def mainWithOptions(options: CliOptions, args: String*): ExitCode =
getConfig(options, args: _*) match {
case Some(x) => run(x)
case None => ExitCode.CommandLineArgumentError
}

def getConfig(args: Array[String], init: CliOptions): Option[CliOptions] = {
def getConfig(init: CliOptions, args: String*): Option[CliOptions] = {
val expandedArguments = expandArguments(args)
CliArgParser.scoptParser.parse(expandedArguments, init).map(CliOptions.auto)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class CliOptionsTest extends FunSuite {
}

test("write info to out if not writing to stdout") {
val options = Cli.getConfig(Array.empty[String], baseCliOptionsWithOut).get
val options = Cli.getConfig(baseCliOptionsWithOut).get
assertEquals(options.common.info.printStream, System.out)
}

Expand Down
52 changes: 23 additions & 29 deletions scalafmt-cli/shared/src/test/scala/org/scalafmt/cli/CliTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,19 @@ abstract class AbstractCliTest extends FunSuite {

def runWith(root: AbsoluteFile, argStr: String)(implicit
loc: munit.Location,
): Unit = runArgs(mkArgs(argStr), getMockOptions(root))
): Unit = runArgs(getMockOptions(root))(mkArgs(argStr): _*)

def runArgs(
args: Array[String],
init: CliOptions = baseCliOptions,
exitCode: ExitCode = ExitCode.Ok,
def runArgs(cliOptions: CliOptions, exitCode: ExitCode = ExitCode.Ok)(
args: String*,
)(implicit loc: munit.Location): Unit =
run(Cli.getConfig(args, init).get, exitCode)
run(Cli.getConfig(cliOptions, args: _*).get, exitCode)

def run(options: CliOptions, exitCode: ExitCode = ExitCode.Ok)(implicit
loc: munit.Location,
) = assertEquals(Cli.run(options), exitCode)

def getConfig(args: Array[String]): CliOptions = Cli
.getConfig(args, baseCliOptions).get
def getConfig(args: String*): CliOptions = Cli
.getConfig(baseCliOptions, args: _*).get

def assertContains(out: String, expected: String, flag: Boolean = true)(
implicit loc: munit.Location,
Expand Down Expand Up @@ -102,8 +100,9 @@ abstract class AbstractCliTest extends FunSuite {
testExitCode: Option[ExitCode] = None,
)(implicit loc: munit.Location): Unit = cmds.foreach { args =>
val out = new ByteArrayOutputStream()
val init: CliOptions = getMockOptions(input, input, new PrintStream(out))
val config = Cli.getConfig(args, init).get
val config = Cli
.getConfig(getMockOptions(input, input, new PrintStream(out)), args: _*)
.get
run(config, exitCode)
val obtained = dir2string(input)
assertNoDiff(obtained, expected)
Expand Down Expand Up @@ -149,17 +148,14 @@ trait CliTestBehavior {
test(s"scalafmt --stdout tmpFile prints to stdout: $label") {
val originalTmpFile = Files.createTempFile("prefix", ".scala")
Files.write(originalTmpFile, unformatted.getBytes)
val args = Array(
val baos = new ByteArrayOutputStream()
val ps = new PrintStream(baos)
runArgs(baseCliOptions.copy(common = baseCliOptions.common.copy(out = ps)))(
"--stdout",
"--config-str",
s"""{version="$version",style=IntelliJ}""",
originalTmpFile.toFile.getPath,
)
val baos = new ByteArrayOutputStream()
val ps = new PrintStream(baos)
val init = baseCliOptions
.copy(common = baseCliOptions.common.copy(out = ps))
runArgs(args, init)
val obtained = new String(baos.toByteArray, StandardCharsets.UTF_8)
assertNoDiff(obtained, formatted)
assertEquals(obtained.length, formatted.length)
Expand All @@ -175,14 +171,13 @@ trait CliTestBehavior {
| """.stripMargin
Files.write(scalafmtConfig, config.getBytes)

val args = Array(
val printToStdout = getConfig(
"--stdin",
"--assume-filename",
"build.sbt",
"--config",
scalafmtConfig.toFile.getPath,
)
val printToStdout = getConfig(args)
val bais = new ByteArrayInputStream(sbtOriginal.getBytes)
val baos = new ByteArrayOutputStream()
val ps = new PrintStream(baos)
Expand Down Expand Up @@ -226,7 +221,7 @@ trait CliTestBehavior {
s"""{version="$version",style=IntelliJ}""",
tmpFile.toFile.getAbsolutePath,
)
Cli.exceptionThrowingMainWithOptions(args, baseCliOptions)
assertEquals(Cli.mainWithOptions(baseCliOptions, args: _*), ExitCode.Ok)
val obtained = FileOps.readFile(tmpFile.toString)
// TODO: We need to pass customFiles information to ProjectFiles
assertNoDiff(obtained, formatted)
Expand Down Expand Up @@ -310,17 +305,14 @@ trait CliTestBehavior {

test(s"scalafmt doesnotexist.scala throws error: $label") {
def check(filename: String): Unit = {
val args = Array(
def runCli = Cli.mainWithOptions(
baseCliOptions,
fixSeparatorsInPathPattern(s"$filename.scala"),
"--config-str",
s"""{version="$version",style=IntelliJ}""",
)
if (PlatformCompat.isNativeOnWindows()) intercept[UncheckedIOException](
Cli.exceptionThrowingMainWithOptions(args, baseCliOptions),
)
else intercept[IOException](
Cli.exceptionThrowingMainWithOptions(args, baseCliOptions),
)
if (!PlatformCompat.isNativeOnWindows()) intercept[IOException](runCli)
else intercept[UncheckedIOException](runCli)
}
check("notfound")
check("target/notfound")
Expand Down Expand Up @@ -864,8 +856,7 @@ class CliTest extends AbstractCliTest with CliTestBehavior {
val arguments = List("--config", configFile.toString, "foobar.scala")
Files.write(argumentsFile, arguments.asJava)
Files.write(configFile, List("maxColumn=40").asJava)
val obtained = Cli
.getConfig(Array(s"@$argumentsFile"), CliTest.defaultOptions).get
val obtained = Cli.getConfig(CliTest.defaultOptions, s"@$argumentsFile").get
val config = obtained.scalafmtConfig.get
assertEquals(config.maxColumn, 40)
assertEquals(obtained.customFiles.head.getFileName.toString, "foobar.scala")
Expand All @@ -874,8 +865,11 @@ class CliTest extends AbstractCliTest with CliTestBehavior {
test("can't specify both --config and --config-str") {
val errStream = new ByteArrayOutputStream()
val obtained = Console.withErr(errStream)(Cli.getConfig(
Array("--config", "foo", "--config-str", "bar"),
CliTest.defaultOptions,
"--config",
"foo",
"--config-str",
"bar",
))
assertEquals(
errStream.toString.trim,
Expand Down

0 comments on commit dc886ae

Please sign in to comment.