From 117bdcdb4c1b26fee4c4f3d6e0d13e867ab29531 Mon Sep 17 00:00:00 2001 From: Frank Vennemeyer Date: Sat, 12 Aug 2017 18:39:54 +0200 Subject: [PATCH] Provides groovyGradle formatter as agreed in #115. --- plugin-gradle/CHANGES.md | 2 + plugin-gradle/README.md | 5 ++ .../gradle/spotless/GroovyExtension.java | 15 +++-- .../spotless/GroovyGradleExtension.java | 55 ++++++++++++++++ .../gradle/spotless/SpotlessExtension.java | 5 ++ ...rgetTest.java => GroovyExtensionTest.java} | 2 +- .../spotless/GroovyGradleExtensionTest.java | 64 +++++++++++++++++++ spotlessSelf.gradle | 2 +- 8 files changed, 142 insertions(+), 8 deletions(-) create mode 100644 plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyGradleExtension.java rename plugin-gradle/src/test/java/com/diffplug/gradle/spotless/{GroovyDefaultTargetTest.java => GroovyExtensionTest.java} (98%) create mode 100644 plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyGradleExtensionTest.java diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index af02eef505..c420d74e55 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -5,6 +5,8 @@ * Changed `importOrder` interface from array to varargs ([#125](https://github.com/diffplug/spotless/issues/125)) * The `kotlin` extension was mis-spelled as `kotin`. * Added `kotlinGradle` method to `SpotlessExtension` for linting [Gradle Kotlin DSL](https://github.com/gradle/kotlin-dsl) files with [ktlint](https://github.com/shyiko/ktlint). ([#115](https://github.com/diffplug/spotless/issues/115)) +* Added dedicated `groovyGradle` for formating of Gradle files + ### Version 3.4.1 - July 11th 2017 ([javadoc](https://diffplug.github.io/spotless/javadoc/spotless-plugin-gradle/3.4.1/), [jcenter](https://bintray.com/diffplug/opensource/spotless-plugin-gradle/3.4.1)) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 7a4eea7484..d0a16faa28 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -161,6 +161,11 @@ spotless { // so it formats Java files by default (unless `excludeJava` is used). greclipse().configFile('greclipse.properties') } + groovyGradle { + // same as groovy, but for .gradle (defaults to '*.gradle') + target '*.gradle', 'additionalScripts/*.gradle' + greclipse().configFile('greclipse.properties') + } } ``` diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java index 04d8f9287c..2e189d437e 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java @@ -89,26 +89,29 @@ public GrEclipseConfig greclipse() { } public GrEclipseConfig greclipse(String version) { - return new GrEclipseConfig(version); + return new GrEclipseConfig(version, this); } - public class GrEclipseConfig { + public static class GrEclipseConfig { final String version; Object[] configFiles; + final FormatExtension extension; - GrEclipseConfig(String version) { + GrEclipseConfig(String version, FormatExtension extension) { + this.extension = extension; configFiles = new Object[0]; this.version = Objects.requireNonNull(version); - addStep(createStep()); + + extension.addStep(createStep()); } public void configFile(Object... configFiles) { this.configFiles = requireElementsNonNull(configFiles); - replaceStep(createStep()); + extension.replaceStep(createStep()); } private FormatterStep createStep() { - Project project = getProject(); + Project project = extension.getProject(); return GrEclipseFormatterStep.create(version, project.files(configFiles).getFiles(), GradleProvisioner.fromProject(project)); diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyGradleExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyGradleExtension.java new file mode 100644 index 0000000000..878cdd3108 --- /dev/null +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyGradleExtension.java @@ -0,0 +1,55 @@ +/* + * Copyright 2016 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.gradle.spotless; + +import java.util.Objects; + +import com.diffplug.spotless.extra.groovy.GrEclipseFormatterStep; +import com.diffplug.spotless.java.ImportOrderStep; + +public class GroovyGradleExtension extends FormatExtension { + private static final String GRADLE_FILE_EXTENSION = "*.gradle"; + static final String NAME = "groovyGradle"; + + public GroovyGradleExtension(SpotlessExtension rootExtension) { + super(rootExtension); + } + + public void importOrder(String... importOrder) { + addStep(ImportOrderStep.createFromOrder(importOrder)); + } + + public void importOrderFile(Object importOrderFile) { + Objects.requireNonNull(importOrderFile); + addStep(ImportOrderStep.createFromFile(getProject().file(importOrderFile))); + } + + public GroovyExtension.GrEclipseConfig greclipse() { + return greclipse(GrEclipseFormatterStep.defaultVersion()); + } + + public GroovyExtension.GrEclipseConfig greclipse(String version) { + return new GroovyExtension.GrEclipseConfig(version, this); + } + + @Override + protected void setupTask(SpotlessTask task) { + if (target == null) { + target = parseTarget(GRADLE_FILE_EXTENSION); + } + super.setupTask(task); + } +} diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java index d218cd8a34..355c1a0075 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessExtension.java @@ -108,6 +108,11 @@ public void groovy(Action closure) { configure(GroovyExtension.NAME, GroovyExtension.class, closure); } + /** Configures the special groovy-specific extension for Gradle files. */ + public void groovyGradle(Action closure) { + configure(GroovyGradleExtension.NAME, GroovyGradleExtension.class, closure); + } + /** Configures a custom extension. */ public void format(String name, Action closure) { requireNonNull(name, "name"); diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyDefaultTargetTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java similarity index 98% rename from plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyDefaultTargetTest.java rename to plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java index 1cb7f23ce7..531b7cb4e4 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyDefaultTargetTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java @@ -22,7 +22,7 @@ import org.junit.Assert; import org.junit.Test; -public class GroovyDefaultTargetTest extends GradleIntegrationTest { +public class GroovyExtensionTest extends GradleIntegrationTest { private final String HEADER = "//My tests header"; diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyGradleExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyGradleExtensionTest.java new file mode 100644 index 0000000000..f3059e225c --- /dev/null +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyGradleExtensionTest.java @@ -0,0 +1,64 @@ +/* + * Copyright 2016 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.gradle.spotless; + +import java.io.File; +import java.io.IOException; + +import org.assertj.core.api.Assertions; +import org.junit.Test; + +public class GroovyGradleExtensionTest extends GradleIntegrationTest { + + private final String HEADER = "//My tests header"; + + @Test + public void defaultTarget() throws IOException { + testTarget(true); + } + + @Test + public void customTarget() throws IOException { + testTarget(false); + } + + private void testTarget(boolean useDefaultTarget) throws IOException { + String target = useDefaultTarget ? "" : "target 'other.gradle'"; + File projectFile = write("build.gradle", + "plugins {", + " id 'com.diffplug.gradle.spotless'", + "}", + "spotless {", + " groovyGradle {", + target, + " licenseHeader('" + HEADER + "', 'plugins')", + " }", + "}"); + + // write appends a line ending so re-read to see what the original currently looks like + String unModified = read(projectFile.toPath()); + + // Run + gradleRunner().withArguments("spotlessApply").build(); + + if (useDefaultTarget) { + Assertions.assertThat(read(projectFile.toPath())).contains(HEADER); + } else { + assertFileContent(unModified, projectFile); + } + } + +} diff --git a/spotlessSelf.gradle b/spotlessSelf.gradle index edc69e3456..082068f29a 100644 --- a/spotlessSelf.gradle +++ b/spotlessSelf.gradle @@ -27,7 +27,7 @@ spotless { trimTrailingWhitespace() removeUnusedImports() } - groovy { + groovyGradle { target fileTree('.') { include '**/*.gradle' exclude '_ext/**'