From 9ad7574435e3126a22ed462b17c71c6a7a8feb98 Mon Sep 17 00:00:00 2001 From: Andrew Parmet Date: Thu, 28 May 2020 15:51:42 -0400 Subject: [PATCH 1/3] add ktfmt option to KotlinGradleExtension --- plugin-gradle/CHANGES.md | 1 + .../spotless/KotlinGradleExtension.java | 28 +++++++++++++++++++ .../spotless/KotlinGradleExtensionTest.java | 18 ++++++++++++ 3 files changed, 47 insertions(+) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 4922d385dc..6a2dfad08b 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] +* Support for ktfmt in KotlinGradleExtension ([#582](https://github.com/diffplug/spotless/pull/582)) ## [4.0.1] - 2020-05-21 ### Fixed diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinGradleExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinGradleExtension.java index 88fcc80185..24ab55d9a9 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinGradleExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinGradleExtension.java @@ -22,6 +22,7 @@ import com.diffplug.common.collect.ImmutableSortedMap; import com.diffplug.spotless.FormatterStep; import com.diffplug.spotless.kotlin.KtLintStep; +import com.diffplug.spotless.kotlin.KtfmtStep; public class KotlinGradleExtension extends FormatExtension { private static final String GRADLE_KOTLIN_DSL_FILE_EXTENSION = "*.gradle.kts"; @@ -65,6 +66,33 @@ private FormatterStep createStep() { } } + /** Uses the [ktfmt](https://github.com/facebookincubator/ktfmt) jar to format source code. */ + public KtfmtConfig ktfmt() { + return ktfmt(KtfmtStep.defaultVersion()); + } + + /** + * Uses the given version of [ktfmt](https://github.com/facebookincubator/ktfmt) to format source + * code. + */ + public KtfmtConfig ktfmt(String version) { + Objects.requireNonNull(version); + return new KtfmtConfig(version); + } + + public class KtfmtConfig { + final String version; + + KtfmtConfig(String version) { + this.version = Objects.requireNonNull(version); + addStep(createStep()); + } + + private FormatterStep createStep() { + return KtfmtStep.create(version, GradleProvisioner.fromProject(getProject())); + } + } + @Override protected void setupTask(SpotlessTask task) { if (target == null) { diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java index 64a008b6d4..c8fe6bba58 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java @@ -109,6 +109,24 @@ public void indentStep() throws IOException { assertThat(result.getOutput()).contains("Unexpected indentation (4) (it should be 6)"); } + @Test + public void integration_ktfmt() throws IOException { + setFile("build.gradle").toLines( + "plugins {", + " id 'nebula.kotlin' version '1.0.6'", + " id 'com.diffplug.gradle.spotless'", + "}", + "repositories { mavenCentral() }", + "spotless {", + " kotlinGradle {", + " ktfmt()", + " }", + "}"); + setFile("configuration.gradle.kts").toResource("kotlin/ktfmt/basic.dirty"); + gradleRunner().withArguments("spotlessApply").build(); + assertFile("configuration.gradle.kts").sameAsResource("kotlin/ktfmt/basic.clean"); + } + @Test public void integration_lint_script_files_without_top_level_declaration() throws IOException { setFile("build.gradle").toLines( From cd4e7fd5215a961dba4c9cecd7088c363cdbc350 Mon Sep 17 00:00:00 2001 From: Andrew Parmet Date: Thu, 28 May 2020 16:03:16 -0400 Subject: [PATCH 2/3] 583 --- plugin-gradle/CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 6a2dfad08b..5727e65819 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,7 +3,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] -* Support for ktfmt in KotlinGradleExtension ([#582](https://github.com/diffplug/spotless/pull/582)) +* Support for ktfmt in KotlinGradleExtension ([#583](https://github.com/diffplug/spotless/pull/583)) ## [4.0.1] - 2020-05-21 ### Fixed From 325f69711de5a880a309e367faa360102507b6ab Mon Sep 17 00:00:00 2001 From: Andrew Parmet Date: Thu, 28 May 2020 16:14:29 -0400 Subject: [PATCH 3/3] skip test on JRE 8 --- .../diffplug/gradle/spotless/KotlinGradleExtensionTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java index c8fe6bba58..e87fce1741 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinGradleExtensionTest.java @@ -22,6 +22,8 @@ import org.gradle.testkit.runner.BuildResult; import org.junit.Test; +import com.diffplug.spotless.JreVersion; + public class KotlinGradleExtensionTest extends GradleIntegrationTest { @Test public void integration() throws IOException { @@ -111,6 +113,10 @@ public void indentStep() throws IOException { @Test public void integration_ktfmt() throws IOException { + if (JreVersion.thisVm() == JreVersion._8) { + // ktfmt's dependency, google-java-format 1.8 requires a minimum of JRE 11+. + return; + } setFile("build.gradle").toLines( "plugins {", " id 'nebula.kotlin' version '1.0.6'",