diff --git a/core/src/main/java/com/facebook/ktfmt/cli/Main.kt b/core/src/main/java/com/facebook/ktfmt/cli/Main.kt index 0a089445..980897de 100644 --- a/core/src/main/java/com/facebook/ktfmt/cli/Main.kt +++ b/core/src/main/java/com/facebook/ktfmt/cli/Main.kt @@ -70,7 +70,7 @@ class Main( fun run(): Int { if (parsedArgs.fileNames.isEmpty()) { err.println( - "Usage: ktfmt [--dropbox-style | --google-style | --kotlinlang-style] [--dry-run] [--set-exit-if-changed] [--stdin-name=] File1.kt File2.kt ...") + "Usage: ktfmt [--dropbox-style | --google-style | --kotlinlang-style] [--dry-run] [--set-exit-if-changed] [--stdin-name=] [--do-not-remove-unused-imports] File1.kt File2.kt ...") err.println("Or: ktfmt @file") return 1 } diff --git a/core/src/main/java/com/facebook/ktfmt/cli/ParsedArgs.kt b/core/src/main/java/com/facebook/ktfmt/cli/ParsedArgs.kt index 4c66efd4..2c849722 100644 --- a/core/src/main/java/com/facebook/ktfmt/cli/ParsedArgs.kt +++ b/core/src/main/java/com/facebook/ktfmt/cli/ParsedArgs.kt @@ -52,6 +52,7 @@ data class ParsedArgs( var formattingOptions = FormattingOptions() var dryRun = false var setExitIfChanged = false + var removeUnusedImports = true var stdinName: String? = null for (arg in args) { @@ -61,6 +62,7 @@ data class ParsedArgs( arg == "--kotlinlang-style" -> formattingOptions = Formatter.KOTLINLANG_FORMAT arg == "--dry-run" || arg == "-n" -> dryRun = true arg == "--set-exit-if-changed" -> setExitIfChanged = true + arg == "--do-not-remove-unused-imports" -> removeUnusedImports = false arg.startsWith("--stdin-name") -> stdinName = parseKeyValueArg(err, "--stdin-name", arg) arg.startsWith("--") -> err.println("Unexpected option: $arg") arg.startsWith("@") -> err.println("Unexpected option: $arg") @@ -68,7 +70,13 @@ data class ParsedArgs( } } - return ParsedArgs(fileNames, formattingOptions, dryRun, setExitIfChanged, stdinName) + return ParsedArgs( + fileNames, + formattingOptions.copy(removeUnusedImports = removeUnusedImports), + dryRun, + setExitIfChanged, + stdinName, + ) } private fun parseKeyValueArg(err: PrintStream, key: String, arg: String): String? { diff --git a/core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt b/core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt index 37cbf576..9f0919bf 100644 --- a/core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt +++ b/core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt @@ -107,6 +107,33 @@ class ParsedArgsTest { assertThat(parsed.setExitIfChanged).isTrue() } + @Test + fun `parseOptions defaults to removing imports`() { + val (parsed, _) = parseTestOptions("foo.kt") + assertThat(parsed.formattingOptions.removeUnusedImports).isTrue() + } + + @Test + fun `parseOptions recognizes --do-not-remove-unused-imports to removing imports`() { + val (parsed, _) = parseTestOptions("--do-not-remove-unused-imports", "foo.kt") + assertThat(parsed.formattingOptions.removeUnusedImports).isFalse() + } + + @Test + fun `parseOptions handles dropbox style and --do-not-remove-unused-imports`() { + val (parsed, _) = + parseTestOptions("--do-not-remove-unused-imports", "--dropbox-style", "foo.kt") + assertThat(parsed.formattingOptions.removeUnusedImports).isFalse() + assertThat(parsed.formattingOptions.style).isEqualTo(FormattingOptions.Style.DROPBOX) + } + + @Test + fun `parseOptions handles google style and --do-not-remove-unused-imports`() { + val (parsed, _) = parseTestOptions("--do-not-remove-unused-imports", "--google-style", "foo.kt") + assertThat(parsed.formattingOptions.removeUnusedImports).isFalse() + assertThat(parsed.formattingOptions.style).isEqualTo(FormattingOptions.Style.GOOGLE) + } + @Test fun `parseOptions --stdin-name`() { val (parsed, _) = parseTestOptions("--stdin-name=my/foo.kt")