From d06ca5201e5f1e9703391ac6e7ed6406ce39cd9b Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Tue, 23 Jul 2019 16:34:05 +0000 Subject: [PATCH 01/10] Add generated changelog entries --- changelog/@unreleased/pr-707.v2.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelog/@unreleased/pr-707.v2.yml diff --git a/changelog/@unreleased/pr-707.v2.yml b/changelog/@unreleased/pr-707.v2.yml new file mode 100644 index 000000000..8b68b4a41 --- /dev/null +++ b/changelog/@unreleased/pr-707.v2.yml @@ -0,0 +1,5 @@ +type: improvement +improvement: + description: Use the Eclipse formatter in Spotless + links: + - https://github.com/palantir/gradle-baseline/pull/707 From 2b61742a7ff4f27eaebc7884d631b85dcedf4863 Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Tue, 23 Jul 2019 17:34:05 +0100 Subject: [PATCH 02/10] Eclipse formatter --- .../resources/spotless/eclipse.xml | 318 ++++++++++++++++++ .../baseline/plugins/BaselineFormat.java | 10 +- .../BaselineConfigIntegrationTest.groovy | 10 +- .../BaselineFormatIntegrationTest.groovy | 26 +- .../baseline/BaselineFormatTest.groovy | 5 + 5 files changed, 353 insertions(+), 16 deletions(-) create mode 100644 gradle-baseline-java-config/resources/spotless/eclipse.xml diff --git a/gradle-baseline-java-config/resources/spotless/eclipse.xml b/gradle-baseline-java-config/resources/spotless/eclipse.xml new file mode 100644 index 000000000..4878f2269 --- /dev/null +++ b/gradle-baseline-java-config/resources/spotless/eclipse.xml @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java index d3873a75f..7bed667e1 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java @@ -17,6 +17,7 @@ package com.palantir.baseline.plugins; import com.diffplug.gradle.spotless.SpotlessExtension; +import java.nio.file.Paths; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.file.ConfigurableFileCollection; @@ -46,14 +47,12 @@ public void apply(Project project) { // use empty string to specify one group for all non-static imports java.importOrder(""); java.trimTrailingWhitespace(); - java.indentWithSpaces(4); - java.endWithNewline(); + + java.eclipse().configFile( + project.file(Paths.get(getConfigDir(), "spotless/eclipse.xml").toString())); // No empty lines at start of blocks java.replaceRegex("Block starts with blank lines", "\\) \\{\n+", ") {\n"); - - // No dangling parentheses - closing paren must be on the same line as the expression - java.replaceRegex("Dangling closing parenthesis", "(\n\\s+)+\\)", ")"); }); // necessary because SpotlessPlugin creates tasks in an afterEvaluate block @@ -65,4 +64,5 @@ public void apply(Project project) { }); }); } + } diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy index 290941f71..8f75dc0d8 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy @@ -22,7 +22,7 @@ import org.gradle.testkit.runner.TaskOutcome * This test relies on running ./gradlew :gradle-baseline-java-config:publishToMavenLocal. */ class BaselineConfigIntegrationTest extends AbstractPluginTest { - def projectVersion = "git describe --tags --first-parent --dirty=.dirty".execute().text.trim() + def projectVersion = "git describe --tags --first-parent --dirty=.dirty --abbrev=7".execute().text.trim() def standardBuildFile = """ plugins { id 'com.palantir.baseline-config' @@ -46,7 +46,9 @@ class BaselineConfigIntegrationTest extends AbstractPluginTest { then: with('--stacktrace', '--info', 'baselineUpdateConfig').build() - directory('.baseline').list().toList().toSet() == ['checkstyle', 'copyright', 'eclipse', 'idea'].toSet() + directory('.baseline').list().toList().toSet() == [ + 'checkstyle', 'copyright', 'eclipse', 'idea', 'spotless' + ].toSet() directory('project').list().toList().isEmpty() } @@ -65,7 +67,9 @@ class BaselineConfigIntegrationTest extends AbstractPluginTest { then: with('--stacktrace', '--info', 'baselineUpdateConfig').build() - directory('.baseline').list().toList().toSet() == ['checkstyle', 'copyright', 'eclipse', 'idea'].toSet() + directory('.baseline').list().toList().toSet() == [ + 'checkstyle', 'copyright', 'eclipse', 'idea', 'spotless' + ].toSet() directory('project').list().toList().toSet() == ['scalastyle_config.xml'].toSet() } diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy index 40b3db4f8..34b3ade59 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy @@ -16,11 +16,18 @@ package com.palantir.baseline +import org.apache.commons.io.FileUtils import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.TaskOutcome class BaselineFormatIntegrationTest extends AbstractPluginTest { + def setup() { + FileUtils.copyDirectory( + new File("../gradle-baseline-java-config/resources"), + new File(projectDir, ".baseline")) + } + def standardBuildFile = ''' plugins { id 'java' @@ -36,14 +43,17 @@ class BaselineFormatIntegrationTest extends AbstractPluginTest { def validJavaFile = ''' package test; - public class Test { void test() { - int x = 1; - System.out.println( - "Hello"); - Optional.of("hello").orElseGet(() -> { - return "Hello World"; - }); - } } + + public class Test { + void test() { + int x = 1; + System.out.println( + "Hello"); + Optional.of("hello").orElseGet(() -> { + return "Hello World"; + }); + } + } '''.stripIndent() def invalidJavaFile = ''' diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatTest.groovy index 73b8bbd41..563d452c3 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatTest.groovy @@ -28,6 +28,11 @@ class BaselineFormatTest extends Specification { def setup() { project = ProjectBuilder.builder().build() + project.buildscript { + repositories { + mavenCentral() + } + } project.plugins.apply 'java' project.plugins.apply BaselineFormat project.evaluate() From 24749531355ca03038b166ef8acc2385b7f954d0 Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Wed, 24 Jul 2019 16:54:38 +0100 Subject: [PATCH 03/10] Fix alignment for enum constants --- gradle-baseline-java-config/resources/spotless/eclipse.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle-baseline-java-config/resources/spotless/eclipse.xml b/gradle-baseline-java-config/resources/spotless/eclipse.xml index 4878f2269..3dda40d30 100644 --- a/gradle-baseline-java-config/resources/spotless/eclipse.xml +++ b/gradle-baseline-java-config/resources/spotless/eclipse.xml @@ -31,7 +31,7 @@ - + From cad62d39b345e9ff8be25b4b34e251dbf50cea76 Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Wed, 24 Jul 2019 16:58:08 +0100 Subject: [PATCH 04/10] Wrap throws clause only when necessary --- gradle-baseline-java-config/resources/spotless/eclipse.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle-baseline-java-config/resources/spotless/eclipse.xml b/gradle-baseline-java-config/resources/spotless/eclipse.xml index 3dda40d30..054985988 100644 --- a/gradle-baseline-java-config/resources/spotless/eclipse.xml +++ b/gradle-baseline-java-config/resources/spotless/eclipse.xml @@ -45,7 +45,7 @@ - + From 638d7ee092450c2767abd5d5eb33cc2a7a6dd004 Mon Sep 17 00:00:00 2001 From: Dan Fox Date: Wed, 31 Jul 2019 14:40:03 +0100 Subject: [PATCH 05/10] Delete other regex --- .../groovy/com/palantir/baseline/plugins/BaselineFormat.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java index 7bed667e1..f3f69a999 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java @@ -50,9 +50,6 @@ public void apply(Project project) { java.eclipse().configFile( project.file(Paths.get(getConfigDir(), "spotless/eclipse.xml").toString())); - - // No empty lines at start of blocks - java.replaceRegex("Block starts with blank lines", "\\) \\{\n+", ") {\n"); }); // necessary because SpotlessPlugin creates tasks in an afterEvaluate block From 7b4eca4a12d425f83b079226e48fdd6105828f23 Mon Sep 17 00:00:00 2001 From: Dan Fox Date: Wed, 31 Jul 2019 14:50:46 +0100 Subject: [PATCH 06/10] feature flag --- README.md | 6 +++++- .../com/palantir/baseline/plugins/BaselineFormat.java | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dd0f5b76f..17f36f95e 100644 --- a/README.md +++ b/README.md @@ -298,11 +298,15 @@ spotless { importOrder '' trimTrailingWhitespace indentWithSpaces 4 - endWithNewline + + // only enabled if you use `-Dcom.palantir.baseline-format.eclipse-formatting` + eclipse().configFile "$rootDir/.baseline/eclipse.xml" } } ``` +We chose the Eclipse formatter because it can be run from the command line and from both IDEs (IntelliJ using the [Eclipse Code Formatter](https://plugins.jetbrains.com/plugin/6546-eclipse-code-formatter) plugin). + ## com.palantir.baseline-reproducibility This plugin is a shorthand for the following snippet, which opts-in to reproducible behaviour for all Gradle's Jar, Tar and Zip tasks. (Surprisingly, these tasks are not reproducible by default). diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java index f3f69a999..860066265 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java @@ -26,6 +26,9 @@ class BaselineFormat extends AbstractBaselinePlugin { + // TODO(dfox): remove this feature flag when we've refined the eclipse.xml sufficiently + private static final String ECLIPSE_FORMATTING = "com.palantir.baseline-versions.eclipse-formatting"; + @Override public void apply(Project project) { this.project = project; @@ -48,8 +51,10 @@ public void apply(Project project) { java.importOrder(""); java.trimTrailingWhitespace(); - java.eclipse().configFile( - project.file(Paths.get(getConfigDir(), "spotless/eclipse.xml").toString())); + if (project.hasProperty(ECLIPSE_FORMATTING)) { + java.eclipse().configFile( + project.file(Paths.get(getConfigDir(), "spotless/eclipse.xml").toString())); + } }); // necessary because SpotlessPlugin creates tasks in an afterEvaluate block From 486daf4ce7580e70fd967cf932a0f6648dd7f20c Mon Sep 17 00:00:00 2001 From: Dan Fox Date: Wed, 31 Jul 2019 15:02:01 +0100 Subject: [PATCH 07/10] Only write eclipse.xml if feature flag is on --- README.md | 2 +- .../com/palantir/baseline/plugins/BaselineConfig.java | 4 ++++ .../com/palantir/baseline/plugins/BaselineFormat.java | 7 +++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 17f36f95e..d51402668 100644 --- a/README.md +++ b/README.md @@ -299,7 +299,7 @@ spotless { trimTrailingWhitespace indentWithSpaces 4 - // only enabled if you use `-Dcom.palantir.baseline-format.eclipse-formatting` + // only enabled if you run `./gradlew format -Pcom.palantir.baseline-format.eclipse` eclipse().configFile "$rootDir/.baseline/eclipse.xml" } } diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineConfig.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineConfig.java index 77bcbba57..4eca336a3 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineConfig.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineConfig.java @@ -74,6 +74,10 @@ public void execute(Task task) { copySpec.into(BaselineConfig.this.getConfigDir()); copySpec.exclude("**/scalastyle_config.xml"); copySpec.setIncludeEmptyDirs(false); + + if (!BaselineFormat.eclipseFormattingEnabled(task.getProject())) { + copySpec.exclude("**/spotless/eclipse.xml"); + } }); if (rootProject .getAllprojects() diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java index 860066265..24b56353a 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java @@ -27,7 +27,7 @@ class BaselineFormat extends AbstractBaselinePlugin { // TODO(dfox): remove this feature flag when we've refined the eclipse.xml sufficiently - private static final String ECLIPSE_FORMATTING = "com.palantir.baseline-versions.eclipse-formatting"; + private static final String ECLIPSE_FORMATTING = "com.palantir.baseline-format.eclipse"; @Override public void apply(Project project) { @@ -51,7 +51,7 @@ public void apply(Project project) { java.importOrder(""); java.trimTrailingWhitespace(); - if (project.hasProperty(ECLIPSE_FORMATTING)) { + if (eclipseFormattingEnabled(project)) { java.eclipse().configFile( project.file(Paths.get(getConfigDir(), "spotless/eclipse.xml").toString())); } @@ -67,4 +67,7 @@ public void apply(Project project) { }); } + public static boolean eclipseFormattingEnabled(Project project) { + return project.hasProperty(ECLIPSE_FORMATTING); + } } From c794fd5b76b72e6ba4ad47879793d739aa050b22 Mon Sep 17 00:00:00 2001 From: Dan Fox Date: Wed, 31 Jul 2019 15:12:53 +0100 Subject: [PATCH 08/10] Automatically create the eclipse.xml --- .../palantir/baseline/plugins/BaselineFormat.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java index 24b56353a..cd3b5e579 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineFormat.java @@ -17,6 +17,8 @@ package com.palantir.baseline.plugins; import com.diffplug.gradle.spotless.SpotlessExtension; +import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import org.gradle.api.Project; import org.gradle.api.Task; @@ -32,6 +34,9 @@ class BaselineFormat extends AbstractBaselinePlugin { @Override public void apply(Project project) { this.project = project; + + Path eclipseXml = Paths.get(getConfigDir(), "spotless/eclipse.xml"); + project.getPluginManager().withPlugin("java", plugin -> { project.getPluginManager().apply("com.diffplug.gradle.spotless"); @@ -52,13 +57,15 @@ public void apply(Project project) { java.trimTrailingWhitespace(); if (eclipseFormattingEnabled(project)) { - java.eclipse().configFile( - project.file(Paths.get(getConfigDir(), "spotless/eclipse.xml").toString())); + java.eclipse().configFile(project.file(eclipseXml.toString())); } }); // necessary because SpotlessPlugin creates tasks in an afterEvaluate block Task formatTask = project.task("format"); + if (eclipseFormattingEnabled(project) && !Files.exists(eclipseXml)) { + formatTask.dependsOn(project.getTasks().findByPath(":baselineUpdateConfig")); + } project.afterEvaluate(p -> { Task spotlessApply = project.getTasks().getByName("spotlessApply"); formatTask.dependsOn(spotlessApply); @@ -67,7 +74,7 @@ public void apply(Project project) { }); } - public static boolean eclipseFormattingEnabled(Project project) { + static boolean eclipseFormattingEnabled(Project project) { return project.hasProperty(ECLIPSE_FORMATTING); } } From 5f1c1172cf25ae14506e15fda2340c850141b6a7 Mon Sep 17 00:00:00 2001 From: Dan Fox Date: Wed, 31 Jul 2019 15:23:24 +0100 Subject: [PATCH 09/10] Fix tests? --- .../baseline/BaselineConfigIntegrationTest.groovy | 4 ++-- .../baseline/BaselineFormatIntegrationTest.groovy | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy index 8f75dc0d8..06d9886c6 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineConfigIntegrationTest.groovy @@ -45,7 +45,7 @@ class BaselineConfigIntegrationTest extends AbstractPluginTest { """.stripIndent() then: - with('--stacktrace', '--info', 'baselineUpdateConfig').build() + with('--stacktrace', '--info', 'baselineUpdateConfig', '-Pcom.palantir.baseline-format.eclipse').build() directory('.baseline').list().toList().toSet() == [ 'checkstyle', 'copyright', 'eclipse', 'idea', 'spotless' ].toSet() @@ -68,7 +68,7 @@ class BaselineConfigIntegrationTest extends AbstractPluginTest { then: with('--stacktrace', '--info', 'baselineUpdateConfig').build() directory('.baseline').list().toList().toSet() == [ - 'checkstyle', 'copyright', 'eclipse', 'idea', 'spotless' + 'checkstyle', 'copyright', 'eclipse', 'idea' ].toSet() directory('project').list().toList().toSet() == ['scalastyle_config.xml'].toSet() } diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy index 34b3ade59..26f9c43e2 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineFormatIntegrationTest.groovy @@ -59,10 +59,7 @@ class BaselineFormatIntegrationTest extends AbstractPluginTest { def invalidJavaFile = ''' package test; import com.java.unused; - public class Test { void test() { - - - int x = 1; + public class Test { void test() {int x = 1; System.out.println( "Hello" ); @@ -94,7 +91,7 @@ class BaselineFormatIntegrationTest extends AbstractPluginTest { file('src/main/java/test/Test.java') << invalidJavaFile then: - BuildResult result = with('format').build(); + BuildResult result = with('format', '-Pcom.palantir.baseline-format.eclipse').build(); result.task(":format").outcome == TaskOutcome.SUCCESS result.task(":spotlessApply").outcome == TaskOutcome.SUCCESS file('src/main/java/test/Test.java').text == validJavaFile @@ -109,7 +106,7 @@ class BaselineFormatIntegrationTest extends AbstractPluginTest { file('src/foo/java/test/Test.java') << invalidJavaFile then: - BuildResult result = with('format').build() + BuildResult result = with('format', '-Pcom.palantir.baseline-format.eclipse').build() result.task(":format").outcome == TaskOutcome.SUCCESS result.task(":spotlessApply").outcome == TaskOutcome.SUCCESS file('src/foo/java/test/Test.java').text == validJavaFile @@ -125,7 +122,7 @@ class BaselineFormatIntegrationTest extends AbstractPluginTest { file('src/foo/groovy/test/Test.java') << invalidJavaFile then: - BuildResult result = with('format').build() + BuildResult result = with('format', '-Pcom.palantir.baseline-format.eclipse').build() result.task(":format").outcome == TaskOutcome.SUCCESS result.task(":spotlessApply").outcome == TaskOutcome.SUCCESS file('src/foo/groovy/test/Test.java').text == validJavaFile From 9291bf2b48347a3e182a0665d4556185b03c9fbe Mon Sep 17 00:00:00 2001 From: Dan Fox Date: Wed, 31 Jul 2019 15:28:46 +0100 Subject: [PATCH 10/10] Refine changelog --- changelog/@unreleased/pr-707.v2.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/changelog/@unreleased/pr-707.v2.yml b/changelog/@unreleased/pr-707.v2.yml index 8b68b4a41..f2d58f339 100644 --- a/changelog/@unreleased/pr-707.v2.yml +++ b/changelog/@unreleased/pr-707.v2.yml @@ -1,5 +1,7 @@ type: improvement improvement: - description: Use the Eclipse formatter in Spotless + description: > + Baseline can now re-format all your Java files using the Eclipse formatter. + This is currently an opt-in preview, try it out by running `./gradlew format -Pcom.palantir.baseline-format.eclipse`. links: - https://github.com/palantir/gradle-baseline/pull/707