aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmer Strulovich <ostrulovich@meta.com>2022-12-16 13:41:50 -0800
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>2022-12-16 13:41:50 -0800
commitba8138dd887245dbff23c2d3b6643e3a0ba97d2c (patch)
tree97f8eb17ad5a30dcca68b5dd3836888836584a0f
parent434aa8ebe67658214dcae0235adf7b29bfe13da4 (diff)
downloadktfmt-ba8138dd887245dbff23c2d3b6643e3a0ba97d2c.tar.gz
Support disabling import optimization from command line
Summary: Turns out we did not connecting this to our CLI interface, making it impossible to skip imports. Slightly awkward naming (i.e. the flag negates), but it gets the job done, and we don't have a real parser for flags no is the dependency on one worth it. Reviewed By: hick209 Differential Revision: D42105735 fbshipit-source-id: 8ddab2af5310fd59d86e29d6c827b33d47ab10b1
-rw-r--r--core/src/main/java/com/facebook/ktfmt/cli/Main.kt2
-rw-r--r--core/src/main/java/com/facebook/ktfmt/cli/ParsedArgs.kt10
-rw-r--r--core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt27
3 files changed, 37 insertions, 2 deletions
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 0a08944..980897d 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=<name>] File1.kt File2.kt ...")
+ "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 ...")
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 4c66efd..2c84972 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 37cbf57..9f0919b 100644
--- a/core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt
+++ b/core/src/test/java/com/facebook/ktfmt/cli/ParsedArgsTest.kt
@@ -108,6 +108,33 @@ class ParsedArgsTest {
}
@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")
assertThat(parsed.stdinName).isEqualTo("my/foo.kt")