Skip to content

Commit

Permalink
Use --style=<style> in CLI
Browse files Browse the repository at this point in the history
  • Loading branch information
Joseph Cooper committed Jun 9, 2024
1 parent 5b97b8e commit b2e5944
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 16 deletions.
4 changes: 2 additions & 2 deletions core/src/main/java/com/facebook/ktfmt/cli/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class Main(
}
if (parsedArgs.fileNames.isEmpty()) {
err.println(
"Usage: ktfmt [--dropbox-style | --google-style | --kotlinlang-style] [--dry-run] [--set-exit-if-changed] [--stdin-name=<name>] [--do-not-remove-unused-imports] File1.kt File2.kt ...")
"Usage: ktfmt [--style=dropbox|google|kotlinlang] [--dry-run] [--set-exit-if-changed] [--stdin-name=<name>] [--do-not-remove-unused-imports] File1.kt File2.kt ...")
err.println("Or: ktfmt @file")
return 1
}
Expand All @@ -92,7 +92,7 @@ class Main(
}

val files: List<File> = expandArgsToFileNames(parsedArgs.fileNames)

if (files.isEmpty()) {
err.println("Error: no .kt files found")
return 1
Expand Down
24 changes: 19 additions & 5 deletions core/src/main/java/com/facebook/ktfmt/cli/ParsedArgs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,21 @@ data class ParsedArgs(

for (arg in args) {
when {
arg == "--dropbox-style" -> formattingOptions = Formatter.DROPBOX_FORMAT
arg == "--google-style" -> formattingOptions = Formatter.GOOGLE_FORMAT
arg == "--kotlinlang-style" -> formattingOptions = Formatter.KOTLINLANG_FORMAT
arg.startsWith("--style=") -> {
val parsedStyle =
parseKeyValueArg("--style", arg)
?: return ParseResult.Error(
unexpectedArg(arg)
)
formattingOptions = when (parsedStyle) {
"dropbox" -> Formatter.DROPBOX_FORMAT
"google" -> Formatter.GOOGLE_FORMAT
"kotlinlang" -> Formatter.KOTLINLANG_FORMAT
else -> return ParseResult.Error(
"Unknown style '${parsedStyle}'. Style must be one of [dropbox, google, kotlinlang]."
)
}
}
arg == "--dry-run" || arg == "-n" -> dryRun = true
arg == "--set-exit-if-changed" -> setExitIfChanged = true
arg == "--do-not-remove-unused-imports" -> removeUnusedImports = false
Expand All @@ -70,8 +82,8 @@ data class ParsedArgs(
parseKeyValueArg("--stdin-name", arg)
?: return ParseResult.Error(
"Found option '${arg}', expected '${"--stdin-name"}=<value>'")
arg.startsWith("--") -> return ParseResult.Error("Unexpected option: $arg")
arg.startsWith("@") -> return ParseResult.Error("Unexpected option: $arg")
arg.startsWith("--") -> return ParseResult.Error(unexpectedArg(arg))
arg.startsWith("@") -> return ParseResult.Error(unexpectedArg(arg))
else -> fileNames.add(arg)
}
}
Expand All @@ -94,6 +106,8 @@ data class ParsedArgs(
))
}

private fun unexpectedArg(arg: String) = "Unexpected option: $arg"

private fun parseKeyValueArg(key: String, arg: String): String? {
val parts = arg.split('=', limit = 2)
return parts[1].takeIf { parts[0] == key || parts.size == 2 }
Expand Down
4 changes: 2 additions & 2 deletions core/src/test/java/com/facebook/ktfmt/cli/MainTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ class MainTest {
emptyInput,
PrintStream(out),
PrintStream(err),
arrayOf("--dropbox-style", fooBar.toString()))
arrayOf("--style=dropbox", fooBar.toString()))
.run()

assertThat(fooBar.readText()).isEqualTo(code)
Expand Down Expand Up @@ -274,7 +274,7 @@ class MainTest {
code.byteInputStream(),
PrintStream(out),
PrintStream(err),
arrayOf("--dropbox-style", "-"))
arrayOf("--style=dropbox", "-"))
.run()

assertThat(out.toString(UTF_8)).isEqualTo(formatted)
Expand Down
26 changes: 19 additions & 7 deletions core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,29 @@ class ParsedArgsTest {
}

@Test
fun `parseOptions recognizes --dropbox-style`() {
val parsed = assertSucceeds(ParsedArgs.parseOptions(arrayOf("--dropbox-style", "foo.kt")))
fun `parseOptions recognizes --style=dropbox`() {
val parsed = assertSucceeds(ParsedArgs.parseOptions(arrayOf("--style=dropbox", "foo.kt")))
assertThat(parsed.formattingOptions).isEqualTo(Formatter.DROPBOX_FORMAT)
}

@Test
fun `parseOptions recognizes --google-style`() {
val parsed = assertSucceeds(ParsedArgs.parseOptions(arrayOf("--google-style", "foo.kt")))
fun `parseOptions recognizes --style=google`() {
val parsed = assertSucceeds(ParsedArgs.parseOptions(arrayOf("--style=google", "foo.kt")))
assertThat(parsed.formattingOptions).isEqualTo(Formatter.GOOGLE_FORMAT)
}

@Test
fun `parseOptions recognizes --style=kotlinlang`() {
val parsed = assertSucceeds(ParsedArgs.parseOptions(arrayOf("--style=kotlinlang", "foo.kt")))
assertThat(parsed.formattingOptions).isEqualTo(Formatter.KOTLINLANG_FORMAT)
}

@Test
fun `parseOptions rejects unknown style`() {
val parseResult = ParsedArgs.parseOptions(arrayOf("--style=custom-style", "foo.kt"))
assertThat(parseResult).isInstanceOf(ParseResult.Error::class.java)
}

@Test
fun `parseOptions recognizes --dry-run`() {
val parsed = assertSucceeds(ParsedArgs.parseOptions(arrayOf("--dry-run", "foo.kt")))
Expand Down Expand Up @@ -139,7 +151,7 @@ class ParsedArgsTest {
@Test
fun `processArgs use the @file option with file containing arguments`() {
val file = root.resolve("existing-file")
file.writeText("--google-style\n--dry-run\n--set-exit-if-changed\nFile1.kt\nFile2.kt\n")
file.writeText("--style=google\n--dry-run\n--set-exit-if-changed\nFile1.kt\nFile2.kt\n")

val result = ParsedArgs.processArgs(arrayOf("@" + file.absolutePath))
assertThat(result).isInstanceOf(ParseResult.Ok::class.java)
Expand All @@ -156,7 +168,7 @@ class ParsedArgsTest {
fun `parses multiple args successfully`() {
val testResult =
ParsedArgs.parseOptions(
arrayOf("--google-style", "--dry-run", "--set-exit-if-changed", "File.kt"),
arrayOf("--style=google", "--dry-run", "--set-exit-if-changed", "File.kt"),
)
assertThat(testResult)
.isEqualTo(
Expand All @@ -171,7 +183,7 @@ class ParsedArgsTest {
@Test
fun `last style in args wins`() {
val testResult =
ParsedArgs.parseOptions(arrayOf("--google-style", "--dropbox-style", "File.kt"))
ParsedArgs.parseOptions(arrayOf("--style=google", "--style=dropbox", "File.kt"))
assertThat(testResult)
.isEqualTo(
parseResultOk(
Expand Down

0 comments on commit b2e5944

Please sign in to comment.