From a12b7caf62a8c004cd380ecd4f445a1512c248cb Mon Sep 17 00:00:00 2001 From: David Gregory <2992938+DavidGregory084@users.noreply.github.com> Date: Thu, 13 Jul 2023 11:31:53 +0100 Subject: [PATCH 01/49] Add ApplyJsonPatchStep --- .gitignore | 3 + lib/build.gradle | 5 +- .../spotless/json/ApplyJsonPatchStep.java | 90 +++++++++++++++++++ .../json/ApplyJsonPatchFormatterFunc.java | 58 ++++++++++++ .../gradle/spotless/JsonExtension.java | 37 ++++++++ .../gradle/spotless/JsonExtensionTest.java | 40 +++++++++ .../spotless/maven/json/ApplyJsonPatch.java | 41 +++++++++ .../diffplug/spotless/maven/json/Json.java | 4 + .../spotless/maven/json/JsonTest.java | 19 ++++ .../json/patchObjectAfterReplaceString.json | 11 +++ .../patchObjectAfterReplaceWithObject.json | 13 +++ .../resources/json/patchObjectBefore.json | 11 +++ 12 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java create mode 100644 lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java create mode 100644 plugin-maven/src/main/java/com/diffplug/spotless/maven/json/ApplyJsonPatch.java create mode 100644 testlib/src/main/resources/json/patchObjectAfterReplaceString.json create mode 100644 testlib/src/main/resources/json/patchObjectAfterReplaceWithObject.json create mode 100644 testlib/src/main/resources/json/patchObjectBefore.json diff --git a/.gitignore b/.gitignore index 138bb77159..8a0bc11e97 100644 --- a/.gitignore +++ b/.gitignore @@ -124,3 +124,6 @@ nb-configuration.xml # MacOS jenv .java-version + +# VS Code +.vscode/ diff --git a/lib/build.gradle b/lib/build.gradle index a9d5181569..3f1ba0bb25 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -20,7 +20,8 @@ def NEEDS_GLUE = [ 'ktlint', 'palantirJavaFormat', 'scalafmt', - 'sortPom' + 'sortPom', + 'zjsonPatch', ] for (glue in NEEDS_GLUE) { sourceSets.register(glue) { @@ -112,6 +113,8 @@ dependencies { // sortPom sortPomCompileOnly 'com.github.ekryd.sortpom:sortpom-sorter:3.2.1' sortPomCompileOnly 'org.slf4j:slf4j-api:2.0.0' + // zjsonPatch + zjsonPatchCompileOnly 'com.flipkart.zjsonpatch:zjsonpatch:0.4.14' } // we'll hold the core lib to a high standard diff --git a/lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java b/lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java new file mode 100644 index 0000000000..84f39f5b23 --- /dev/null +++ b/lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java @@ -0,0 +1,90 @@ +/* + * Copyright 2023 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.spotless.json; + +import java.io.IOException; +import java.io.Serializable; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import com.diffplug.spotless.FormatterFunc; +import com.diffplug.spotless.FormatterStep; +import com.diffplug.spotless.JarState; +import com.diffplug.spotless.Provisioner; + +public class ApplyJsonPatchStep { + // https://mvnrepository.com/artifact/com.flipkart.zjsonpatch/zjsonpatch + static final String MAVEN_COORDINATE = "com.flipkart.zjsonpatch:zjsonpatch"; + static final String DEFAULT_VERSION = "0.4.14"; + + private ApplyJsonPatchStep() {} + + public static FormatterStep create(String patchString, Provisioner provisioner) { + return create(DEFAULT_VERSION, patchString, provisioner); + } + + public static FormatterStep create(String zjsonPatchVersion, String patchString, Provisioner provisioner) { + Objects.requireNonNull(zjsonPatchVersion, "zjsonPatchVersion cannot be null"); + Objects.requireNonNull(patchString, "patchString cannot be null"); + Objects.requireNonNull(provisioner, "provisioner cannot be null"); + return FormatterStep.createLazy("apply-json-patch", () -> new State(zjsonPatchVersion, patchString, provisioner), State::toFormatter); + } + + public static FormatterStep create(List> patch, Provisioner provisioner) { + return create(DEFAULT_VERSION, patch, provisioner); + } + + public static FormatterStep create(String zjsonPatchVersion, List> patch, Provisioner provisioner) { + Objects.requireNonNull(zjsonPatchVersion, "zjsonPatchVersion cannot be null"); + Objects.requireNonNull(patch, "patch cannot be null"); + Objects.requireNonNull(provisioner, "provisioner cannot be null"); + return FormatterStep.createLazy("apply-json-patch", () -> new State(zjsonPatchVersion, patch, provisioner), State::toFormatter); + } + + static final class State implements Serializable { + private static final long serialVersionUID = 1L; + + private final JarState jarState; + private final List> patch; + private final String patchString; + + private State(String zjsonPatchVersion, List> patch, Provisioner provisioner) throws IOException { + this.jarState = JarState.from(MAVEN_COORDINATE + ":" + zjsonPatchVersion, provisioner); + this.patch = patch; + this.patchString = null; + } + + private State(String zjsonPatchVersion, String patchString, Provisioner provisioner) throws IOException { + this.jarState = JarState.from(MAVEN_COORDINATE + ":" + zjsonPatchVersion, provisioner); + this.patch = null; + this.patchString = patchString; + } + + FormatterFunc toFormatter() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + Class formatterFunc = jarState.getClassLoader().loadClass("com.diffplug.spotless.glue.json.ApplyJsonPatchFormatterFunc"); + if (this.patch != null) { + Constructor constructor = formatterFunc.getConstructor(List.class); + return (FormatterFunc) constructor.newInstance(patch); + } else { + Constructor constructor = formatterFunc.getConstructor(String.class); + return (FormatterFunc) constructor.newInstance(patchString); + } + } + } +} diff --git a/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java b/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java new file mode 100644 index 0000000000..42c14c9e2b --- /dev/null +++ b/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java @@ -0,0 +1,58 @@ +/* + * Copyright 2023 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.spotless.glue.json; + +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.flipkart.zjsonpatch.JsonPatch; + +import com.diffplug.spotless.FormatterFunc; + +public class ApplyJsonPatchFormatterFunc implements FormatterFunc { + private final ObjectMapper objectMapper; + private final List> patch; + private final String patchString; + + public ApplyJsonPatchFormatterFunc(String patchString) { + this.objectMapper = new ObjectMapper(); + this.objectMapper.setDefaultPrettyPrinter(new DefaultPrettyPrinter()); + this.patch = null; + this.patchString = patchString; + } + + public ApplyJsonPatchFormatterFunc(List> patch) { + this.objectMapper = new ObjectMapper(); + this.objectMapper.setDefaultPrettyPrinter(new DefaultPrettyPrinter()); + this.patch = patch; + this.patchString = null; + } + + @Override + public String apply(String input) throws Exception { + var patchNode = this.patch == null + ? objectMapper.readTree(patchString) + : objectMapper.valueToTree(patch); + + var inputNode = objectMapper.readTree(input); + + var patchedNode = JsonPatch.apply(patchNode, inputNode); + + return objectMapper.writeValueAsString(patchedNode); + } +} diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java index 2fa567472f..5e587dbd9f 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java @@ -16,10 +16,13 @@ package com.diffplug.gradle.spotless; import java.util.Collections; +import java.util.List; +import java.util.Map; import javax.inject.Inject; import com.diffplug.spotless.FormatterStep; +import com.diffplug.spotless.json.ApplyJsonPatchStep; import com.diffplug.spotless.json.JacksonJsonConfig; import com.diffplug.spotless.json.JacksonJsonStep; import com.diffplug.spotless.json.JsonSimpleStep; @@ -28,6 +31,7 @@ public class JsonExtension extends FormatExtension { private static final int DEFAULT_INDENTATION = 4; private static final String DEFAULT_GSON_VERSION = "2.10.1"; + private static final String DEFAULT_ZJSONPATCH_VERSION = "0.4.14"; static final String NAME = "json"; @Inject @@ -71,6 +75,14 @@ public RomeJson rome(String version) { return romeConfig; } + public ApplyJsonPatchConfig applyJsonPatch(List> patch) { + return new ApplyJsonPatchConfig(patch); + } + + public ApplyJsonPatchConfig applyJsonPatch(String zjsonPatchVersion, List> patch) { + return new ApplyJsonPatchConfig(zjsonPatchVersion, patch); + } + public class SimpleConfig { private int indent; @@ -191,4 +203,29 @@ protected RomeJson getThis() { return this; } } + + public class ApplyJsonPatchConfig { + private String zjsonPatchVersion; + private List> patch; + + public ApplyJsonPatchConfig(List> patch) { + this(DEFAULT_ZJSONPATCH_VERSION, patch); + } + + public ApplyJsonPatchConfig(String zjsonPatchVersion, List> patch) { + this.zjsonPatchVersion = zjsonPatchVersion; + this.patch = patch; + addStep(createStep()); + } + + public ApplyJsonPatchConfig version(String zjsonPatchVersion) { + this.zjsonPatchVersion = zjsonPatchVersion; + replaceStep(createStep()); + return this; + } + + private FormatterStep createStep() { + return ApplyJsonPatchStep.create(zjsonPatchVersion, patch, provisioner()); + } + } } diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java index a878615eaa..ea1358ccee 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java @@ -156,4 +156,44 @@ void jacksonFormattingWithSortingByKeys() throws IOException { gradleRunner().withArguments("spotlessApply").build(); assertFile("src/main/resources/example.json").sameAsResource("json/sortByKeysAfter_Jackson.json"); } + + @Test + void applyJsonPatchReplaceString() throws IOException { + setFile("build.gradle").toLines( + "plugins {", + " id 'java'", + " id 'com.diffplug.spotless'", + "}", + "repositories { mavenCentral() }", + "spotless {", + " json {", + " target 'src/**/*.json'", + " applyJsonPatch([[op: 'replace', path: '/abc', value: 'ghi']])", + " gson()", + " }", + "}"); + setFile("src/main/resources/example.json").toResource("json/patchObjectBefore.json"); + gradleRunner().withArguments("spotlessApply").build(); + assertFile("src/main/resources/example.json").sameAsResource("json/patchObjectAfterReplaceString.json"); + } + + @Test + void applyJsonPatchReplaceWithObject() throws IOException { + setFile("build.gradle").toLines( + "plugins {", + " id 'java'", + " id 'com.diffplug.spotless'", + "}", + "repositories { mavenCentral() }", + "spotless {", + " json {", + " target 'src/**/*.json'", + " applyJsonPatch([[op: 'replace', path: '/abc', value: [def: 'ghi']]])", + " gson()", + " }", + "}"); + setFile("src/main/resources/example.json").toResource("json/patchObjectBefore.json"); + gradleRunner().withArguments("spotlessApply").build(); + assertFile("src/main/resources/example.json").sameAsResource("json/patchObjectAfterReplaceWithObject.json"); + } } diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/ApplyJsonPatch.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/ApplyJsonPatch.java new file mode 100644 index 0000000000..6e18ea9388 --- /dev/null +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/ApplyJsonPatch.java @@ -0,0 +1,41 @@ +/* + * Copyright 2023 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.spotless.maven.json; + +import org.apache.maven.plugins.annotations.Parameter; + +import com.diffplug.spotless.FormatterStep; +import com.diffplug.spotless.json.ApplyJsonPatchStep; +import com.diffplug.spotless.maven.FormatterStepConfig; +import com.diffplug.spotless.maven.FormatterStepFactory; + +/** + * A {@link FormatterStepFactory} implementation that corresponds to {@code ...} configuration element. + */ +public class ApplyJsonPatch implements FormatterStepFactory { + private static final String DEFAULT_ZJSONPATCH_VERSION = "0.4.14"; + + @Parameter + String zjsonPatchVersion = DEFAULT_ZJSONPATCH_VERSION; + + @Parameter + String patch; + + @Override + public FormatterStep newFormatterStep(FormatterStepConfig stepConfig) { + return ApplyJsonPatchStep.create(zjsonPatchVersion, patch, stepConfig.getProvisioner()); + } +} diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java index adbb2b7883..76a5c43221 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java @@ -53,4 +53,8 @@ public void addJackson(JacksonJson jackson) { public void addRome(RomeJson rome) { addStepFactory(rome); } + + public void addApplyJsonPatch(ApplyJsonPatch applyJsonPatch) { + addStepFactory(applyJsonPatch); + } } diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java index 1897cc764a..49becde33a 100644 --- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java @@ -90,4 +90,23 @@ public void testFormatJson_WithJackson_sortByKeys_spaceAfterKeySeparator() throw assertFile("json_test.json").sameAsResource("json/sortByKeysAfter_Jackson_spaceAfterKeySeparator.json"); } + @Test + public void testFormatJson_ApplyJsonPatch_replaceString() throws Exception { + writePomWithJsonSteps("[{\"op\":\"replace\",\"path\":\"/abc\",\"value\":\"ghi\"}]"); + + setFile("json_test.json").toResource("json/patchObjectBefore.json"); + + mavenRunner().withArguments("spotless:apply").runNoError(); + assertFile("json_test.json").sameAsResource("json/patchObjectAfterReplaceString.json"); + } + + @Test + public void testFormatJson_ApplyJsonPatch_replaceWithObject() throws Exception { + writePomWithJsonSteps("[{\"op\":\"replace\",\"path\":\"/abc\",\"value\":{\"def\":\"ghi\"}}]"); + + setFile("json_test.json").toResource("json/patchObjectBefore.json"); + + mavenRunner().withArguments("spotless:apply").runNoError(); + assertFile("json_test.json").sameAsResource("json/patchObjectAfterReplaceWithObject.json"); + } } diff --git a/testlib/src/main/resources/json/patchObjectAfterReplaceString.json b/testlib/src/main/resources/json/patchObjectAfterReplaceString.json new file mode 100644 index 0000000000..1da41d5ac2 --- /dev/null +++ b/testlib/src/main/resources/json/patchObjectAfterReplaceString.json @@ -0,0 +1,11 @@ +{ + "abc": "ghi", + "obj": { + "arr": [ + 1, + 2, + 3 + ], + "val": 5 + } +} diff --git a/testlib/src/main/resources/json/patchObjectAfterReplaceWithObject.json b/testlib/src/main/resources/json/patchObjectAfterReplaceWithObject.json new file mode 100644 index 0000000000..533691261c --- /dev/null +++ b/testlib/src/main/resources/json/patchObjectAfterReplaceWithObject.json @@ -0,0 +1,13 @@ +{ + "abc": { + "def": "ghi" + }, + "obj": { + "arr": [ + 1, + 2, + 3 + ], + "val": 5 + } +} diff --git a/testlib/src/main/resources/json/patchObjectBefore.json b/testlib/src/main/resources/json/patchObjectBefore.json new file mode 100644 index 0000000000..070dfc481e --- /dev/null +++ b/testlib/src/main/resources/json/patchObjectBefore.json @@ -0,0 +1,11 @@ +{ + "abc": "def", + "obj": { + "arr": [ + 1, + 2, + 3 + ], + "val": 5 + } +} From 7f9ed128d3ef15ed700f91db34b01f2effc78a55 Mon Sep 17 00:00:00 2001 From: David Gregory <2992938+DavidGregory084@users.noreply.github.com> Date: Thu, 13 Jul 2023 12:05:23 +0100 Subject: [PATCH 02/49] Remove unnecessary configuration of ObjectMapper's pretty printer in ApplyJsonPatchFormatterFunc --- .../spotless/glue/json/ApplyJsonPatchFormatterFunc.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java b/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java index 42c14c9e2b..1ba6084a67 100644 --- a/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java +++ b/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; import com.fasterxml.jackson.databind.ObjectMapper; import com.flipkart.zjsonpatch.JsonPatch; @@ -31,14 +30,12 @@ public class ApplyJsonPatchFormatterFunc implements FormatterFunc { public ApplyJsonPatchFormatterFunc(String patchString) { this.objectMapper = new ObjectMapper(); - this.objectMapper.setDefaultPrettyPrinter(new DefaultPrettyPrinter()); this.patch = null; this.patchString = patchString; } public ApplyJsonPatchFormatterFunc(List> patch) { this.objectMapper = new ObjectMapper(); - this.objectMapper.setDefaultPrettyPrinter(new DefaultPrettyPrinter()); this.patch = patch; this.patchString = null; } From 654b093663701ef7dc7f28c93567e4d943683d39 Mon Sep 17 00:00:00 2001 From: runner Date: Mon, 17 Jul 2023 22:08:40 +0000 Subject: [PATCH 03/49] Published gradle/6.20.0 --- plugin-gradle/CHANGES.md | 2 ++ plugin-gradle/README.md | 54 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 33bd1ede30..6d8bee7169 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] + +## [6.20.0] - 2023-07-17 ### Added * Add target option `targetExcludeIfContentContains` and `targetExcludeIfContentContainsRegex` to exclude files based on their text content. ([#1749](https://github.com/diffplug/spotless/pull/1749)) * Add support for Protobuf formatting based on [Buf](https://buf.build/) ([#1208](https://github.com/diffplug/spotless/pull/1208)). diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 55b6e98a30..e04697766a 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -14,9 +14,9 @@ output = [ ].join('\n'); --> [![Gradle plugin](https://img.shields.io/badge/plugins.gradle.org-com.diffplug.spotless-blue.svg)](https://plugins.gradle.org/plugin/com.diffplug.spotless) -[![Changelog](https://img.shields.io/badge/changelog-6.19.0-blue.svg)](CHANGES.md) +[![Changelog](https://img.shields.io/badge/changelog-6.20.0-blue.svg)](CHANGES.md) [![Maven central](https://img.shields.io/badge/mavencentral-here-blue.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.diffplug.spotless%22%20AND%20a%3A%22spotless-plugin-gradle%22) -[![Javadoc](https://img.shields.io/badge/javadoc-here-blue.svg)](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/index.html) +[![Javadoc](https://img.shields.io/badge/javadoc-here-blue.svg)](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/index.html) [![VS Code plugin](https://img.shields.io/badge/IDE-VS_Code-blueviolet.svg)](https://marketplace.visualstudio.com/items?itemName=richardwillis.vscode-spotless-gradle) [![IntelliJ plugin](https://img.shields.io/badge/IDE-IntelliJ-blueviolet.svg)](https://plugins.jetbrains.com/plugin/18321-spotless-gradle) @@ -127,10 +127,10 @@ spotless { ``` Spotless consists of a list of formats (in the example above, `misc` and `java`), and each format has: -- a `target` (the files to format), which you set with [`target`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#target-java.lang.Object...-) and [`targetExclude`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#targetExclude-java.lang.Object...-) -- a list of `FormatterStep`, which are just `String -> String` functions, such as [`replace`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#replace-java.lang.String-java.lang.CharSequence-java.lang.CharSequence-), [`replaceRegex`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#replaceRegex-java.lang.String-java.lang.String-java.lang.String-), [`trimTrailingWhitespace`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#replace-java.lang.String-java.lang.CharSequence-java.lang.CharSequence-), [`custom`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#custom-java.lang.String-groovy.lang.Closure-), [`prettier`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#prettier--), [`eclipseWtp`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#eclipseWtp-com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep-), [`licenseHeader`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#licenseHeader-java.lang.String-java.lang.String-) etc. +- a `target` (the files to format), which you set with [`target`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#target-java.lang.Object...-) and [`targetExclude`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#targetExclude-java.lang.Object...-) +- a list of `FormatterStep`, which are just `String -> String` functions, such as [`replace`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#replace-java.lang.String-java.lang.CharSequence-java.lang.CharSequence-), [`replaceRegex`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#replaceRegex-java.lang.String-java.lang.String-java.lang.String-), [`trimTrailingWhitespace`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#replace-java.lang.String-java.lang.CharSequence-java.lang.CharSequence-), [`custom`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#custom-java.lang.String-groovy.lang.Closure-), [`prettier`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#prettier--), [`eclipseWtp`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#eclipseWtp-com.diffplug.spotless.extra.wtp.EclipseWtpFormatterStep-), [`licenseHeader`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#licenseHeader-java.lang.String-java.lang.String-) etc. -All the generic steps live in [`FormatExtension`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html), and there are many language-specific steps which live in its language-specific subclasses, which are described below. +All the generic steps live in [`FormatExtension`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html), and there are many language-specific steps which live in its language-specific subclasses, which are described below. ### Requirements @@ -143,7 +143,7 @@ Spotless requires JRE 11+ and Gradle 6.1.1 or newer. ## Java -`com.diffplug.gradle.spotless.JavaExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/JavaExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java) +`com.diffplug.gradle.spotless.JavaExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/JavaExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java) ```gradle spotless { @@ -300,8 +300,8 @@ spotless { ## Groovy -- `com.diffplug.gradle.spotless.GroovyExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/GroovyExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java) -- `com.diffplug.gradle.spotless.GroovyGradleExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/GroovyGradleExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyGradleExtension.java) +- `com.diffplug.gradle.spotless.GroovyExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/GroovyExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java) +- `com.diffplug.gradle.spotless.GroovyGradleExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/GroovyGradleExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyGradleExtension.java) Configuration for Groovy is similar to [Java](#java), in that it also supports `licenseHeader` and `importOrder`. @@ -351,8 +351,8 @@ Groovy-Eclipse formatting errors/warnings lead per default to a build failure. T ## Kotlin -- `com.diffplug.gradle.spotless.KotlinExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/KotlinExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java) -- `com.diffplug.gradle.spotless.KotlinGradleExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/KotlinGradleExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinGradleExtension.java) +- `com.diffplug.gradle.spotless.KotlinExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/KotlinExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java) +- `com.diffplug.gradle.spotless.KotlinGradleExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/KotlinGradleExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinGradleExtension.java) ```gradle spotless { // if you are using build.gradle.kts, instead of 'spotless {' use: @@ -422,7 +422,7 @@ spotless { ## Scala -`com.diffplug.gradle.spotless.ScalaExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/ScalaExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java) +`com.diffplug.gradle.spotless.ScalaExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/ScalaExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java) ```gradle spotless { @@ -454,7 +454,7 @@ spotless { ## C/C++ -`com.diffplug.gradle.spotless.CppExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/CppExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/CppExtension.java) +`com.diffplug.gradle.spotless.CppExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/CppExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/CppExtension.java) ```gradle spotless { @@ -486,7 +486,7 @@ spotles { ## Python -`com.diffplug.gradle.spotless.PythonExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/PythonExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PythonExtension.java) +`com.diffplug.gradle.spotless.PythonExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/PythonExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/PythonExtension.java) ```gradle spotless { @@ -522,7 +522,7 @@ black().pathToExe('C:/myuser/.pyenv/versions/3.8.0/scripts/black.exe') ### buf -`com.diffplug.gradle.spotless.ProtobufExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/ProtobufExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ProtobufExtension.java) +`com.diffplug.gradle.spotless.ProtobufExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/ProtobufExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ProtobufExtension.java) **WARNING** this step **must** be the first step in the chain, steps before it will be ignored. Thumbs up [this issue](https://github.com/bufbuild/buf/issues/1035) for a resolution, see [here](https://github.com/diffplug/spotless/pull/1208#discussion_r1264439669) for more details on the problem. @@ -554,7 +554,7 @@ buf { ## FreshMark -`com.diffplug.gradle.spotless.FreshMarkExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FreshMarkExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FreshMarkExtension.java) +`com.diffplug.gradle.spotless.FreshMarkExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FreshMarkExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FreshMarkExtension.java) [homepage](https://github.com/diffplug/freshmark). [changelog](https://github.com/diffplug/freshmark/blob/master/CHANGES.md). FreshMark lets you generate markdown in the comments of your markdown. This helps to keep badges and links up-to-date (see the source for this file), and can also be helpful for generating complex tables (see the source for [the parent readme](../README.md)). @@ -575,7 +575,7 @@ spotless { ## Antlr4 -`com.diffplug.gradle.spotless.Antlr4Extension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/Antlr4Extension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/Antlr4Extension.java) +`com.diffplug.gradle.spotless.Antlr4Extension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/Antlr4Extension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/Antlr4Extension.java) ```gradle spotless { @@ -600,7 +600,7 @@ antlr4formatter('1.2.1') // version is optional ## SQL -`com.diffplug.gradle.spotless.SqlExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/SqlExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SqlExtension.java) +`com.diffplug.gradle.spotless.SqlExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/SqlExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SqlExtension.java) ```gradle spotless { @@ -640,7 +640,7 @@ sql.formatter.indent.size=4 ## Typescript -- `com.diffplug.gradle.spotless.TypescriptExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/TypescriptExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/TypescriptExtension.java) +- `com.diffplug.gradle.spotless.TypescriptExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/TypescriptExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/TypescriptExtension.java) ```gradle spotless { @@ -734,7 +734,7 @@ For details, see the [npm detection](#npm-detection), [`.npmrc` detection](#npmr ## Javascript -- `com.diffplug.gradle.spotless.JavascriptExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/JavascriptExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavascriptExtension.java) +- `com.diffplug.gradle.spotless.JavascriptExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/JavascriptExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavascriptExtension.java) ```gradle spotless { @@ -799,7 +799,7 @@ For details, see the [npm detection](#npm-detection), [`.npmrc` detection](#npmr ## JSON -- `com.diffplug.gradle.spotless.JsonExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/JsonExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java) +- `com.diffplug.gradle.spotless.JsonExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/JsonExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java) ```gradle spotless { @@ -875,7 +875,7 @@ spotless { ## YAML -- `com.diffplug.gradle.spotless.YamlExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/JsonExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/YamlExtension.java) +- `com.diffplug.gradle.spotless.YamlExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/JsonExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/YamlExtension.java) ```gradle spotless { @@ -906,7 +906,7 @@ spotless { ## Gherkin -- `com.diffplug.gradle.spotless.GherkinExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/GherkinExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GherkinExtension.java) +- `com.diffplug.gradle.spotless.GherkinExtension` [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/GherkinExtension.html), [code](https://github.com/diffplug/spotless/blob/main/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GherkinExtension.java) ```gradle spotless { @@ -1294,7 +1294,7 @@ Once a file's license header has a valid year, whether it is a year (`2020`) or * `2017` -> `2017-2020` * `2017-2019` -> `2017-2020` -See the [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.LicenseHeaderConfig.html) for a complete listing of options. +See the [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.LicenseHeaderConfig.html) for a complete listing of options. @@ -1367,9 +1367,9 @@ spotless { custom 'lowercase', { str -> str.toLowerCase() } ``` -However, custom rules will disable up-to-date checking and caching, unless you read [this javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#bumpThisNumberIfACustomStepChanges-int-) and follow its instructions carefully. +However, custom rules will disable up-to-date checking and caching, unless you read [this javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#bumpThisNumberIfACustomStepChanges-int-) and follow its instructions carefully. -Another option is to create proper `FormatterStep` in your `buildSrc`, and then call [`addStep`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#addStep-com.diffplug.spotless.FormatterStep-). The contributing guide describes [how to do this](https://github.com/diffplug/spotless/blob/main/CONTRIBUTING.md#how-to-add-a-new-formatterstep). If the step is generally-useful, we hope you'll open a PR to share it! +Another option is to create proper `FormatterStep` in your `buildSrc`, and then call [`addStep`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#addStep-com.diffplug.spotless.FormatterStep-). The contributing guide describes [how to do this](https://github.com/diffplug/spotless/blob/main/CONTRIBUTING.md#how-to-add-a-new-formatterstep). If the step is generally-useful, we hope you'll open a PR to share it! ```gradle @@ -1402,11 +1402,11 @@ spotless { format 'foo', com.acme.FooLanguageExtension, { ``` -If you'd like to create a one-off Spotless task outside of the `check`/`apply` framework, see [`FormatExtension.createIndependentApplyTask`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#createIndependentApplyTask-java.lang.String-). +If you'd like to create a one-off Spotless task outside of the `check`/`apply` framework, see [`FormatExtension.createIndependentApplyTask`](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#createIndependentApplyTask-java.lang.String-). ## Inception (languages within languages within...) -In very rare cases, you might want to format e.g. javascript which is written inside JSP templates, or maybe java within a markdown file, or something wacky like that. You can specify hunks within a file using either open/close tags or a regex with a single capturing group, and then specify rules within it, like so. See [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.19.0/com/diffplug/gradle/spotless/FormatExtension.html#withinBlocks-java.lang.String-java.lang.String-java.lang.String-org.gradle.api.Action-) for more details. +In very rare cases, you might want to format e.g. javascript which is written inside JSP templates, or maybe java within a markdown file, or something wacky like that. You can specify hunks within a file using either open/close tags or a regex with a single capturing group, and then specify rules within it, like so. See [javadoc](https://javadoc.io/doc/com.diffplug.spotless/spotless-plugin-gradle/6.20.0/com/diffplug/gradle/spotless/FormatExtension.html#withinBlocks-java.lang.String-java.lang.String-java.lang.String-org.gradle.api.Action-) for more details. ```gradle import com.diffplug.gradle.spotless.JavaExtension From 0c0be38a31eafff3060faed169841256fabc652f Mon Sep 17 00:00:00 2001 From: runner Date: Mon, 17 Jul 2023 22:10:19 +0000 Subject: [PATCH 04/49] Published maven/2.38.0 --- plugin-maven/CHANGES.md | 2 ++ plugin-maven/README.md | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 231cee0edb..72d40dfe10 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -3,6 +3,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] + +## [2.38.0] - 2023-07-17 ### Added * Support pass skip (`-Dspotless.skip=true`) from command-line. ([#1729](https://github.com/diffplug/spotless/pull/1729)) ### Fixed diff --git a/plugin-maven/README.md b/plugin-maven/README.md index dc450d7ddd..c1ffd31e40 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -8,8 +8,8 @@ output = [ ].join('\n'); --> [![Maven central](https://img.shields.io/badge/mavencentral-com.diffplug.spotless%3Aspotless--maven--plugin-blue.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.diffplug.spotless%22%20AND%20a%3A%22spotless-maven-plugin%22) -[![Changelog](https://img.shields.io/badge/changelog-2.37.0-blue.svg)](CHANGES.md) -[![Javadoc](https://img.shields.io/badge/javadoc-here-blue.svg)](https://javadoc.io/doc/com.diffplug.spotless/spotless-maven-plugin/2.37.0/index.html) +[![Changelog](https://img.shields.io/badge/changelog-2.38.0-blue.svg)](CHANGES.md) +[![Javadoc](https://img.shields.io/badge/javadoc-here-blue.svg)](https://javadoc.io/doc/com.diffplug.spotless/spotless-maven-plugin/2.38.0/index.html) + ``` From 41138c92343f823973b0c07ec4712a181138bc42 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 13:59:51 +0200 Subject: [PATCH 15/49] docs: adapt for actual PR number --- CHANGES.md | 6 +++--- plugin-gradle/CHANGES.md | 6 +++--- plugin-maven/CHANGES.md | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 67cc01a40c..00241182b0 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,15 +17,15 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * `enum OnMatch { INCLUDE, EXCLUDE }` so that `FormatterStep.filterByContent` can not only include based on the pattern but also exclude. ([#1749](https://github.com/diffplug/spotless/pull/1749)) ### Fixed * Update documented default `semanticSort` to `false`. ([#1728](https://github.com/diffplug/spotless/pull/1728)) -* Add support for `prettier` version `3.0.0` and newer. ([#9999]https://github.com/diffplug/spotless/pull/9999), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#9999]https://github.com/diffplug/spotless/pull/9999), [#1750](https://github.com/diffplug/spotless/issues/1750)) +* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `cleanthat` version to latest `2.13` -> `2.17`. ([#1734](https://github.com/diffplug/spotless/pull/1734)) * Bump default `ktlint` version to latest `0.49.1` -> `0.50.0`. ([#1741](https://github.com/diffplug/spotless/issues/1741)) * Dropped support for `ktlint 0.47.x` following our policy of supporting two breaking changes at a time. * Dropped support for deprecated `useExperimental` parameter in favor of the `ktlint_experimental` property. -* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#9999](https://github.com/diffplug/spotless/pull/9999)) +* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [2.39.0] - 2023-05-24 ### Added diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 658f65f420..4358e9f26c 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -18,14 +18,14 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( } } ``` -* Add support for `prettier` version `3.0.0` and newer. ([#9999]https://github.com/diffplug/spotless/pull/9999), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#9999]https://github.com/diffplug/spotless/pull/9999), [#1750](https://github.com/diffplug/spotless/issues/1750)) +* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `cleanthat` version to latest `2.13` -> `2.17`. ([#1734](https://github.com/diffplug/spotless/pull/1734)) * Bump default `ktlint` version to latest `0.49.1` -> `0.50.0`. ([#1741](https://github.com/diffplug/spotless/issues/1741)) * Dropped support for `ktlint 0.47.x` following our policy of supporting two breaking changes at a time. * Dropped support for deprecated `useExperimental` parameter in favor of the `ktlint_experimental` property. -* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#9999](https://github.com/diffplug/spotless/pull/9999)) +* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [6.19.0] - 2023-05-24 ### Added diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 98655ba3fe..823841a328 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -9,14 +9,14 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Support pass skip (`-Dspotless.skip=true`) from command-line. ([#1729](https://github.com/diffplug/spotless/pull/1729)) ### Fixed * Update documented default `semanticSort` to `false`. ([#1728](https://github.com/diffplug/spotless/pull/1728)) -* Add support for `prettier` version `3.0.0` and newer. ([#9999]https://github.com/diffplug/spotless/pull/9999), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#9999]https://github.com/diffplug/spotless/pull/9999), [#1750](https://github.com/diffplug/spotless/issues/1750)) +* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `cleanthat` version to latest `2.13` -> `2.17`. ([#1734](https://github.com/diffplug/spotless/pull/1734)) * Bump default `ktlint` version to latest `0.49.1` -> `0.50.0`. ([#1741](https://github.com/diffplug/spotless/issues/1741)) * Dropped support for `ktlint 0.47.x` following our policy of supporting two breaking changes at a time. * Dropped support for deprecated `useExperimental` parameter in favor of the `ktlint_experimental` property. -* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#9999](https://github.com/diffplug/spotless/pull/9999)) +* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [2.37.0] - 2023-05-24 ### Added From 7a4268b7e6768c072527432b160e00d071c36c57 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 14:50:25 +0200 Subject: [PATCH 16/49] fix: resolves spotbugs issue (serializability of exception) --- .../java/com/diffplug/spotless/npm/NpmProcessException.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/java/com/diffplug/spotless/npm/NpmProcessException.java b/lib/src/main/java/com/diffplug/spotless/npm/NpmProcessException.java index 33c6fb8d28..c2e8444bcc 100644 --- a/lib/src/main/java/com/diffplug/spotless/npm/NpmProcessException.java +++ b/lib/src/main/java/com/diffplug/spotless/npm/NpmProcessException.java @@ -21,7 +21,7 @@ public class NpmProcessException extends RuntimeException { private static final long serialVersionUID = 6424331316676759525L; - private final ProcessRunner.Result result; + private final transient ProcessRunner.Result result; public NpmProcessException(String message, ProcessRunner.Result result) { super(message); From a24908528cb3c7c35f3eee576814ce067bc60e7a Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 15:01:42 +0200 Subject: [PATCH 17/49] docs: move to Unreleased --- CHANGES.md | 9 +++++---- plugin-gradle/CHANGES.md | 9 +++++---- plugin-maven/CHANGES.md | 8 +++++--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 00241182b0..e54f6f6108 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,11 @@ This document is intended for Spotless developers. We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] +### Fixed +* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) +### Changes +* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [2.40.0] - 2023-07-17 ### Added @@ -17,15 +22,11 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * `enum OnMatch { INCLUDE, EXCLUDE }` so that `FormatterStep.filterByContent` can not only include based on the pattern but also exclude. ([#1749](https://github.com/diffplug/spotless/pull/1749)) ### Fixed * Update documented default `semanticSort` to `false`. ([#1728](https://github.com/diffplug/spotless/pull/1728)) -* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) - ### Changes * Bump default `cleanthat` version to latest `2.13` -> `2.17`. ([#1734](https://github.com/diffplug/spotless/pull/1734)) * Bump default `ktlint` version to latest `0.49.1` -> `0.50.0`. ([#1741](https://github.com/diffplug/spotless/issues/1741)) * Dropped support for `ktlint 0.47.x` following our policy of supporting two breaking changes at a time. * Dropped support for deprecated `useExperimental` parameter in favor of the `ktlint_experimental` property. -* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [2.39.0] - 2023-05-24 ### Added diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 4358e9f26c..b2e3972bba 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,11 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] +### Fixed +* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) +### Changes +* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [6.20.0] - 2023-07-17 ### Added @@ -18,15 +23,11 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( } } ``` -* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `cleanthat` version to latest `2.13` -> `2.17`. ([#1734](https://github.com/diffplug/spotless/pull/1734)) * Bump default `ktlint` version to latest `0.49.1` -> `0.50.0`. ([#1741](https://github.com/diffplug/spotless/issues/1741)) * Dropped support for `ktlint 0.47.x` following our policy of supporting two breaking changes at a time. * Dropped support for deprecated `useExperimental` parameter in favor of the `ktlint_experimental` property. -* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) - ## [6.19.0] - 2023-05-24 ### Added * Support Rome as a formatter for JavaScript and TypeScript code. Adds a new `rome` step to `javascript` and `typescript` formatter configurations. ([#1663](https://github.com/diffplug/spotless/pull/1663)) diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 823841a328..dcccd5d2ba 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -3,20 +3,22 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] +### Fixed +* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) +### Changes +* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [2.38.0] - 2023-07-17 ### Added * Support pass skip (`-Dspotless.skip=true`) from command-line. ([#1729](https://github.com/diffplug/spotless/pull/1729)) ### Fixed * Update documented default `semanticSort` to `false`. ([#1728](https://github.com/diffplug/spotless/pull/1728)) -* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `cleanthat` version to latest `2.13` -> `2.17`. ([#1734](https://github.com/diffplug/spotless/pull/1734)) * Bump default `ktlint` version to latest `0.49.1` -> `0.50.0`. ([#1741](https://github.com/diffplug/spotless/issues/1741)) * Dropped support for `ktlint 0.47.x` following our policy of supporting two breaking changes at a time. * Dropped support for deprecated `useExperimental` parameter in favor of the `ktlint_experimental` property. -* Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) ## [2.37.0] - 2023-05-24 ### Added From 3577f4e2d4d42b7bf055067827e36194a984afef Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 15:27:13 +0200 Subject: [PATCH 18/49] fix: provide "lower" default versions for ts_standard as the upstream package has incompatible version restrictions otherwise --- .../main/java/com/diffplug/spotless/npm/EslintStyleGuide.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java b/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java index ad5cb2ba2e..cb6f1325df 100644 --- a/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java +++ b/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java @@ -29,7 +29,9 @@ public enum EslintStyleGuide { @Override public @Nonnull Map devDependencies() { Map dependencies = new LinkedHashMap<>(); - dependencies.put("eslint-config-standard-with-typescript", "^36.1.0"); + dependencies.put("@typescript-eslint/eslint-plugin", "^5.62.0"); + dependencies.put("@typescript-eslint/parser", "^5.62.0"); + dependencies.put("eslint-config-standard-with-typescript", "^36.0.1"); dependencies.put("eslint-plugin-import", "^2.27.5"); dependencies.put("eslint-plugin-n", "^16.0.1"); dependencies.put("eslint-plugin-promise", "^6.1.1"); From 7be049efc08def31b0a3f98d75a9253e959da960 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 15:35:18 +0200 Subject: [PATCH 19/49] fix: adapt tests to work with newer prettier versions --- .../NpmTestsWithoutNpmInstallationTest.java | 16 ++++++++-------- ...ationTest_gradle_node_plugin_example_1.gradle | 2 +- ...ationTest_gradle_node_plugin_example_2.gradle | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java index 03d14292e9..363d88c0c0 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java @@ -40,7 +40,7 @@ void useNodeAndNpmFromNodeGradlePlugin() throws Exception { " npmWorkDir = file(\"${buildDir}/npm\")", "}", "def prettierConfig = [:]", - "prettierConfig['printWidth'] = 50", + "prettierConfig['printWidth'] = 20", "prettierConfig['parser'] = 'typescript'", "def npmExec = System.getProperty('os.name').toLowerCase().contains('windows') ? '/npm.cmd' : '/bin/npm'", "def nodeExec = System.getProperty('os.name').toLowerCase().contains('windows') ? '/node.exe' : '/bin/node'", @@ -59,7 +59,7 @@ void useNodeAndNpmFromNodeGradlePlugin() throws Exception { // then run spotless using that node installation final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").build(); Assertions.assertThat(spotlessApply.getOutput()).contains("BUILD SUCCESSFUL"); - assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile.clean"); + assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile_prettier_2.clean"); } catch (Exception e) { printContents(); throw e; @@ -79,7 +79,7 @@ void useNodeAndNpmFromNodeGradlePlugin_example1() throws Exception { setFile("test.ts").toResource("npm/prettier/config/typescript.dirty"); final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").build(); Assertions.assertThat(spotlessApply.getOutput()).contains("BUILD SUCCESSFUL"); - assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile.clean"); + assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile_prettier_2.clean"); } catch (Exception e) { printContents(); throw e; @@ -93,7 +93,7 @@ void useNpmFromNodeGradlePlugin_example2() throws Exception { setFile("test.ts").toResource("npm/prettier/config/typescript.dirty"); final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").build(); Assertions.assertThat(spotlessApply.getOutput()).contains("BUILD SUCCESSFUL"); - assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile.clean"); + assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile_prettier_2.clean"); } catch (Exception e) { printContents(); throw e; @@ -115,7 +115,7 @@ void useNpmFromNodeGradlePlugin() throws Exception { " workDir = file(\"${buildDir}/nodejs\")", "}", "def prettierConfig = [:]", - "prettierConfig['printWidth'] = 50", + "prettierConfig['printWidth'] = 20", "prettierConfig['parser'] = 'typescript'", "def npmExec = System.getProperty('os.name').toLowerCase().contains('windows') ? '/npm.cmd' : '/bin/npm'", "spotless {", @@ -132,7 +132,7 @@ void useNpmFromNodeGradlePlugin() throws Exception { // then run spotless using that node installation final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").build(); Assertions.assertThat(spotlessApply.getOutput()).contains("BUILD SUCCESSFUL"); - assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile.clean"); + assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile_prettier_2.clean"); } catch (Exception e) { printContents(); throw e; @@ -154,7 +154,7 @@ void useNpmNextToConfiguredNodePluginFromNodeGradlePlugin() throws Exception { " workDir = file(\"${buildDir}/nodejs\")", "}", "def prettierConfig = [:]", - "prettierConfig['printWidth'] = 50", + "prettierConfig['printWidth'] = 20", "prettierConfig['parser'] = 'typescript'", "def nodeExec = System.getProperty('os.name').toLowerCase().contains('windows') ? '/node.exe' : '/bin/node'", "spotless {", @@ -171,7 +171,7 @@ void useNpmNextToConfiguredNodePluginFromNodeGradlePlugin() throws Exception { // then run spotless using that node installation final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").build(); Assertions.assertThat(spotlessApply.getOutput()).contains("BUILD SUCCESSFUL"); - assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile.clean"); + assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile_prettier_2.clean"); } catch (Exception e) { printContents(); throw e; diff --git a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle index 7ec7a2c592..c5acf5bbc5 100644 --- a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle +++ b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle @@ -16,7 +16,7 @@ node { npmWorkDir = file("${buildDir}/npm") } def prettierConfig = [:] -prettierConfig['printWidth'] = 50 +prettierConfig['printWidth'] = 20 prettierConfig['parser'] = 'typescript' // the executable names diff --git a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle index eb59b85cf0..ef843a8475 100644 --- a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle +++ b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle @@ -14,7 +14,7 @@ node { workDir = file("${buildDir}/nodejs") } def prettierConfig = [:] -prettierConfig['printWidth'] = 50 +prettierConfig['printWidth'] = 20 prettierConfig['parser'] = 'typescript' // the executable name From aa4893b1942778c3d7b69dae89977cb0aba2b13c Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 15:55:50 +0200 Subject: [PATCH 20/49] fix: create valid poms when using eslint styleguides (and enable the missed and disabled xo test in maven part) --- .../spotless/maven/typescript/TypescriptFormatStepTest.java | 2 -- .../main/java/com/diffplug/spotless/npm/EslintStyleGuide.java | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/typescript/TypescriptFormatStepTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/typescript/TypescriptFormatStepTest.java index 911cfad201..a09111d30d 100644 --- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/typescript/TypescriptFormatStepTest.java +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/typescript/TypescriptFormatStepTest.java @@ -19,7 +19,6 @@ import java.io.IOException; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import com.diffplug.spotless.ProcessRunner; @@ -211,7 +210,6 @@ void eslintStyleguideStandardWithTypescript() throws Exception { } @Test - @Disabled("https://github.com/diffplug/spotless/issues/1756") void eslintStyleguideXo() throws Exception { writePomWithTypescriptSteps( TEST_FILE_PATH, diff --git a/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java b/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java index cb6f1325df..874ae1905d 100644 --- a/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java +++ b/testlib/src/main/java/com/diffplug/spotless/npm/EslintStyleGuide.java @@ -115,8 +115,8 @@ public String asGradleMapStringMergedWith(Map devDependencies) { public String asMavenXmlStringMergedWith(Map devDependencies) { return mergedWith(devDependencies).entrySet().stream() - .map(entry -> "<" + entry.getKey() + ">" + entry.getValue() + "") - .collect(Collectors.joining("", "", "")); + .map(entry -> String.format("%s%s", entry.getKey(), entry.getValue())) + .collect(Collectors.joining("", "", "")); } } From 98943c33a41db287054569cbf3cfcfb01ee9a0ba Mon Sep 17 00:00:00 2001 From: David Gregory <2992938+DavidGregory084@users.noreply.github.com> Date: Tue, 18 Jul 2023 15:05:10 +0100 Subject: [PATCH 21/49] Update changelogs and documentation --- CHANGES.md | 2 ++ README.md | 2 ++ plugin-gradle/CHANGES.md | 2 ++ plugin-gradle/README.md | 44 ++++++++++++++++++++++++++++++++++++++++ plugin-maven/CHANGES.md | 2 ++ plugin-maven/README.md | 24 ++++++++++++++++++---- 6 files changed, 72 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index cc6dcd7331..c026b4a099 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,8 @@ This document is intended for Spotless developers. We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] +### Added +* Add an `applyJsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) ## [2.40.0] - 2023-07-17 ### Added diff --git a/README.md b/README.md index 3e0c4e17e1..255dbe6813 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ lib('java.CleanthatJavaStep') +'{{yes}} | {{yes}} lib('json.gson.GsonStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('json.JacksonJsonStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('json.JsonSimpleStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', +lib('json.ApplyJsonPatchStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('kotlin.KtLintStep') +'{{yes}} | {{yes}} | {{yes}} | {{no}} |', lib('kotlin.KtfmtStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('kotlin.DiktatStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', @@ -140,6 +141,7 @@ lib('yaml.JacksonYamlStep') +'{{yes}} | {{yes}} | [`json.gson.GsonStep`](lib/src/main/java/com/diffplug/spotless/json/gson/GsonStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`json.JacksonJsonStep`](lib/src/main/java/com/diffplug/spotless/json/JacksonJsonStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`json.JsonSimpleStep`](lib/src/main/java/com/diffplug/spotless/json/JsonSimpleStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | +| [`json.ApplyJsonPatchStep`](lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`kotlin.KtLintStep`](lib/src/main/java/com/diffplug/spotless/kotlin/KtLintStep.java) | :+1: | :+1: | :+1: | :white_large_square: | | [`kotlin.KtfmtStep`](lib/src/main/java/com/diffplug/spotless/kotlin/KtfmtStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`kotlin.DiktatStep`](lib/src/main/java/com/diffplug/spotless/kotlin/DiktatStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 6d8bee7169..27541bc568 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] +### Added +* Add an `applyJsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) ## [6.20.0] - 2023-07-17 ### Added diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index e04697766a..a8ebf45cbe 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -811,6 +811,7 @@ spotless { gson() // has its own section below jackson() // has its own section below rome() // has its own section below + applyJsonPatch([]) // has its own section below } } ``` @@ -872,6 +873,49 @@ spotless { } ``` +### applyJsonPatch + +Uses [zjsonpatch](https://github.com/flipkart-incubator/zjsonpatch) to apply [JSON Patches](https://jsonpatch.com/) as per [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902/) to JSON documents. + +This enables you to add, replace or remove properties at locations in the JSON document that you specify using [JSON Pointers](https://datatracker.ietf.org/doc/html/rfc6901/). + +In Spotless Gradle, these JSON patches are represented as a `List>`, or a list of patch operations. + +Each patch operation must be a map with the following properties: + +* `"op"` - the operation to apply, one of `"replace"`, `"add"` or `"remove"`. +* `"path"` - a JSON Pointer string, for example `"/foo"` +* `"value"` - the value to `"add"` or `"replace"` at the specified path. Not needed for `"remove"` operations. + +For example, to apply the patch from the [JSON Patch homepage](https://jsonpatch.com/#the-patch): + +```gradle +spotless { + json { + target 'src/**/*.json' + applyJsonPatch([ + [op: 'replace', path: '/baz', value: 'boo'], + [op: 'add', path: '/hello', value: ['world']], + [op: 'remove', path: '/foo'] + ]) + } +} +``` + +Or using the Kotlin DSL: + +```kotlin +spotless { + json { + target("src/**/*.json") + applyJsonPatch(listOf( + mapOf("op" to "replace", "path" to "/baz", "value" to "boo"), + mapOf("op" to "add", "path" to "/hello", "value" to listOf("world")), + mapOf("op" to "remove", "path" to "/foo") + )) + } +} +``` ## YAML diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 72d40dfe10..fd471afdcc 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -3,6 +3,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] +### Added +* Add an `applyJsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) ## [2.38.0] - 2023-07-17 ### Added diff --git a/plugin-maven/README.md b/plugin-maven/README.md index c1ffd31e40..1332829dc2 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -897,10 +897,11 @@ For details, see the [npm detection](#npm-detection), [`.npmrc` detection](#npmr src/**/*.json - - - - + + + + + ``` @@ -957,6 +958,21 @@ Uses Jackson for formatting. +### applyJsonPatch + +Uses [zjsonpatch](https://github.com/flipkart-incubator/zjsonpatch) to apply [JSON Patches](https://jsonpatch.com/) as per [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902/) to JSON documents. + +This enables you to add, replace or remove properties at locations in the JSON document that you specify using [JSON Pointers](https://datatracker.ietf.org/doc/html/rfc6901/). + +For example, to apply the patch from the [JSON Patch homepage](https://jsonpatch.com/#the-patch): + +```xml +[ + { "op": "replace", "path": "/baz", "value": "boo" }, + { "op": "add", "path": "/hello", "value": ["world"] }, + { "op": "remove", "path": "/foo" } +] +``` ## YAML From 217c56198d0997a62a56a38f6dfa6509085bed93 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 16:16:15 +0200 Subject: [PATCH 22/49] fix: adapt for prettier upgrades --- .../NpmInstallCacheIntegrationTests.java | 4 +- .../spotless/PrettierIntegrationTest.java | 24 +++++----- .../prettier/PrettierFormatStepTest.java | 12 ++--- .../npm/prettier/plugins/java-test.clean | 5 ++- .../resources/npm/prettier/plugins/php.clean | 44 +++++++++---------- .../npm/PrettierFormatterStepTest.java | 2 +- 6 files changed, 46 insertions(+), 45 deletions(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmInstallCacheIntegrationTests.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmInstallCacheIntegrationTests.java index 3a690fbc55..e7ad5f1654 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmInstallCacheIntegrationTests.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmInstallCacheIntegrationTests.java @@ -112,8 +112,8 @@ private BuildResult runPhpPrettierOnDir(File projDir, File cacheDir) throws IOEx "prettierConfig['tabWidth'] = 3", "prettierConfig['parser'] = 'php'", "def prettierPackages = [:]", - "prettierPackages['prettier'] = '2.0.5'", - "prettierPackages['@prettier/plugin-php'] = '0.14.2'", + "prettierPackages['prettier'] = '2.8.8'", + "prettierPackages['@prettier/plugin-php'] = '0.19.6'", "spotless {", " format 'php', {", " target 'php-example.php'", diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java index a6b2ea9dc8..4d5069c1b5 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PrettierIntegrationTest.java @@ -33,7 +33,7 @@ void useInlineConfig() throws IOException { "}", "repositories { mavenCentral() }", "def prettierConfig = [:]", - "prettierConfig['printWidth'] = 50", + "prettierConfig['printWidth'] = 20", "prettierConfig['parser'] = 'typescript'", "spotless {", " format 'mytypescript', {", @@ -44,7 +44,7 @@ void useInlineConfig() throws IOException { setFile("test.ts").toResource("npm/prettier/config/typescript.dirty"); final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").build(); Assertions.assertThat(spotlessApply.getOutput()).contains("BUILD SUCCESSFUL"); - assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile.clean"); + assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile_prettier_2.clean"); } @Test @@ -88,7 +88,7 @@ void useFileConfig() throws IOException { setFile("test.ts").toResource("npm/prettier/config/typescript.dirty"); final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").build(); Assertions.assertThat(spotlessApply.getOutput()).contains("BUILD SUCCESSFUL"); - assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile.clean"); + assertFile("test.ts").sameAsResource("npm/prettier/config/typescript.configfile_prettier_2.clean"); } @Test @@ -121,8 +121,8 @@ void useJavaCommunityPlugin() throws IOException { "prettierConfig['tabWidth'] = 4", "prettierConfig['parser'] = 'java'", "def prettierPackages = [:]", - "prettierPackages['prettier'] = '2.0.5'", - "prettierPackages['prettier-plugin-java'] = '0.8.0'", + "prettierPackages['prettier'] = '2.8.8'", + "prettierPackages['prettier-plugin-java'] = '2.2.0'", "spotless {", " format 'java', {", " target 'JavaTest.java'", @@ -145,7 +145,7 @@ void suggestsMissingJavaCommunityPlugin() throws IOException { "def prettierConfig = [:]", "prettierConfig['tabWidth'] = 4", "def prettierPackages = [:]", - "prettierPackages['prettier'] = '2.0.5'", + "prettierPackages['prettier'] = '2.8.8'", "spotless {", " format 'java', {", " target 'JavaTest.java'", @@ -169,8 +169,8 @@ void usePhpCommunityPlugin() throws IOException { "prettierConfig['tabWidth'] = 3", "prettierConfig['parser'] = 'php'", "def prettierPackages = [:]", - "prettierPackages['prettier'] = '2.0.5'", - "prettierPackages['@prettier/plugin-php'] = '0.14.2'", + "prettierPackages['prettier'] = '2.8.8'", + "prettierPackages['@prettier/plugin-php'] = '0.19.6'", "spotless {", " format 'php', {", " target 'php-example.php'", @@ -199,14 +199,14 @@ void usePhpAndJavaCommunityPlugin() throws IOException { "prettierConfigPhp['tabWidth'] = 3", "prettierConfigPhp['parser'] = 'php'", "def prettierPackagesPhp = [:]", - "prettierPackagesPhp['prettier'] = '2.0.5'", - "prettierPackagesPhp['@prettier/plugin-php'] = '0.14.2'", + "prettierPackagesPhp['prettier'] = '2.8.8'", + "prettierPackagesPhp['@prettier/plugin-php'] = '0.19.6'", "def prettierConfigJava = [:]", "prettierConfigJava['tabWidth'] = 4", "prettierConfigJava['parser'] = 'java'", "def prettierPackagesJava = [:]", - "prettierPackagesJava['prettier'] = '2.0.5'", - "prettierPackagesJava['prettier-plugin-java'] = '0.8.0'", + "prettierPackagesJava['prettier'] = '2.8.8'", + "prettierPackagesJava['prettier-plugin-java'] = '2.2.0'", "spotless {", " format 'php', {", " target 'php-example.php'", diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/prettier/PrettierFormatStepTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/prettier/PrettierFormatStepTest.java index 78a0fc30ff..9cd1a313eb 100644 --- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/prettier/PrettierFormatStepTest.java +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/prettier/PrettierFormatStepTest.java @@ -120,11 +120,11 @@ void multiple_prettier_configs() throws Exception { " ", " ", " prettier", - " 2.0.5", + " 2.8.8", " ", " ", " @prettier/plugin-php", - " 0.14.2", + " 0.19.6", " ", " ", " ", @@ -137,11 +137,11 @@ void multiple_prettier_configs() throws Exception { " ", " ", " prettier", - " 2.0.5", + " 2.8.8", " ", " ", " prettier-plugin-java", - " 0.8.0", + " 2.2.0", " ", " ", " ", @@ -166,11 +166,11 @@ void custom_plugin() throws Exception { " ", " ", " prettier", - " 2.0.5", + " 2.8.8", " ", " ", " @prettier/plugin-php", - " 0.14.2", + " 0.19.6", " ", " ", " ", diff --git a/testlib/src/main/resources/npm/prettier/plugins/java-test.clean b/testlib/src/main/resources/npm/prettier/plugins/java-test.clean index c45ffe5183..93cf43955f 100644 --- a/testlib/src/main/resources/npm/prettier/plugins/java-test.clean +++ b/testlib/src/main/resources/npm/prettier/plugins/java-test.clean @@ -4,6 +4,7 @@ import java.util.List; import java.util.function.Consumer; public class JavaTest { + private static final String NAME = "JavaTest"; private List strings = new ArrayList<>(); @@ -30,8 +31,8 @@ public class JavaTest { JavaTest javaTest = new JavaTest("1", "2", "3"); System.out.println("joined: " + javaTest.join(',')); StringBuilder builder = new StringBuilder(); - javaTest.operateOn( - strings -> builder.append(String.join("---", strings)) + javaTest.operateOn(strings -> + builder.append(String.join("---", strings)) ); } } diff --git a/testlib/src/main/resources/npm/prettier/plugins/php.clean b/testlib/src/main/resources/npm/prettier/plugins/php.clean index 4c8710bbee..067647a029 100644 --- a/testlib/src/main/resources/npm/prettier/plugins/php.clean +++ b/testlib/src/main/resources/npm/prettier/plugins/php.clean @@ -27,17 +27,17 @@ abstract class ReallyReallyReallyLongClassName // variable doc public $test; public $other = 1; - public static $staticTest = ['hi']; + public static $staticTest = ["hi"]; static $cache; protected static $_instance; - protected $fillable = ['title', 'requester_id', 'type', 'summary', 'proof']; + protected $fillable = ["title", "requester_id", "type", "summary", "proof"]; protected $fillable2 = [ - 'title', - 'description', - 'requester_id', - 'type', - 'summary', - 'proof', + "title", + "description", + "requester_id", + "type", + "summary", + "proof", ]; protected $test = [ //test @@ -52,7 +52,7 @@ abstract class ReallyReallyReallyLongClassName * * @return \Some\Test */ - public function __construct($test, $test_int = null, $test_string = 'hi') + public function __construct($test, $test_int = null, $test_string = "hi") { parent::__construct($test_int ?: 1); $this->other = $test_string; @@ -108,7 +108,7 @@ abstract class ReallyReallyReallyLongClassName public function returnTypeTest(): string { - return 'hi'; + return "hi"; } final public static function bar() @@ -125,17 +125,17 @@ abstract class ReallyReallyReallyLongClassName public function method1() { - return 'hi'; + return "hi"; } public function method2() { - return 'hi'; + return "hi"; } public function method3() { - return 'hi'; + return "hi"; } public function testReturn(?string $name): ?string @@ -164,7 +164,7 @@ abstract class ReallyReallyReallyLongClassName string $bar, int $baz ): string { - return 'foo'; + return "foo"; } public function longLongAnotherFunctionOther( @@ -172,7 +172,7 @@ abstract class ReallyReallyReallyLongClassName string $bar, int $baz ) { - return 'foo'; + return "foo"; } public function testReturnTypeDeclaration(): object @@ -297,13 +297,13 @@ class field extends \models\base { protected function pre_save($input, $fields) { - $input['configs'] = json_encode( + $input["configs"] = json_encode( array_merge( $configs, - $field_type->process_field_config_from_user($input['definition']) + $field_type->process_field_config_from_user($input["definition"]) ) ); - unset($input['definition']); + unset($input["definition"]); } } @@ -311,8 +311,8 @@ class test { public function test_method() { - $customer = (object) ['name' => 'Bob']; - $job = (object) ['customer' => $customer]; + $customer = (object) ["name" => "Bob"]; + $job = (object) ["customer" => $customer]; return "The customer for that job, {$job->customer->name} has an error that shows up after the line gets waaaaay toooo long."; } @@ -488,9 +488,9 @@ class User { public int $id; public string $name; - public ?string $b = 'foo'; + public ?string $b = "foo"; private Foo $prop; - protected static string $static = 'default'; + protected static string $static = "default"; public function __construct(int $id, string $name) { diff --git a/testlib/src/test/java/com/diffplug/spotless/npm/PrettierFormatterStepTest.java b/testlib/src/test/java/com/diffplug/spotless/npm/PrettierFormatterStepTest.java index 672aec740b..769d91bc01 100644 --- a/testlib/src/test/java/com/diffplug/spotless/npm/PrettierFormatterStepTest.java +++ b/testlib/src/test/java/com/diffplug/spotless/npm/PrettierFormatterStepTest.java @@ -128,7 +128,7 @@ void parserInferenceBasedOnFilenameIsWorking(String prettierVersion) throws Exce @Test void verifyPrettierErrorMessageIsRelayed() throws Exception { FormatterStep formatterStep = PrettierFormatterStep.create( - PrettierFormatterStep.defaultDevDependenciesWithPrettier("2.0.5"), + PrettierFormatterStep.defaultDevDependenciesWithPrettier("2.8.8"), TestProvisioner.mavenCentral(), projectDir(), buildDir(), From 6188a820f5ca18dd375164ccbcadc8a5a2f9e621 Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 16:16:28 +0200 Subject: [PATCH 23/49] docs: adapt for newer base versions --- plugin-gradle/README.md | 4 ++-- plugin-maven/README.md | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 2334c3ff71..3484e3cd59 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -979,11 +979,11 @@ Since spotless uses the actual npm prettier package behind the scenes, it is pos ```gradle spotless { java { - prettier(['prettier': '2.0.5', 'prettier-plugin-java': '0.8.0']).config(['parser': 'java', 'tabWidth': 4]) + prettier(['prettier': '2.8.8', 'prettier-plugin-java': '2.2.0']).config(['parser': 'java', 'tabWidth': 4]) } format 'php', { target 'src/**/*.php' - prettier(['prettier': '2.0.5', '@prettier/plugin-php': '0.14.2']).config(['parser': 'php', 'tabWidth': 3]) + prettier(['prettier': '2.8.8', '@prettier/plugin-php': '0.19.6']).config(['parser': 'php', 'tabWidth': 3]) } } ``` diff --git a/plugin-maven/README.md b/plugin-maven/README.md index af32c092fd..62f2a4ea57 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -1047,11 +1047,11 @@ You can use prettier in any language-specific format, but usually you will be cr prettier - 2.0.5 + 2.8.8 @prettier/plugin-php - 0.14.2 + 0.19.6 @@ -1097,8 +1097,8 @@ Since spotless uses the actual npm prettier package behind the scenes, it is pos - 2.0.5 - 0.8.0 + 2.8.8 + 2.2.0 4 @@ -1118,11 +1118,11 @@ Since spotless uses the actual npm prettier package behind the scenes, it is pos prettier - 2.0.5 + 2.8.8 @prettier/plugin-php - 0.14.2 + 0.19.6 From b4a118a41e8d0244d80c249bdcb74c9557c0f57c Mon Sep 17 00:00:00 2001 From: Simon Gamma Date: Tue, 18 Jul 2023 17:21:48 +0200 Subject: [PATCH 24/49] fix: upgrade to newer npm version for maybe fixing windows build --- .../gradle/spotless/NpmTestsWithoutNpmInstallationTest.java | 6 +++--- ...tNpmInstallationTest_gradle_node_plugin_example_1.gradle | 4 ++-- ...tNpmInstallationTest_gradle_node_plugin_example_2.gradle | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java index 363d88c0c0..d01d1ab006 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest.java @@ -34,8 +34,8 @@ void useNodeAndNpmFromNodeGradlePlugin() throws Exception { "repositories { mavenCentral() }", "node {", " download = true", - " version = '18.13.0'", - " npmVersion = '8.19.2'", + " version = '18.16.1'", + " npmVersion = '9.5.1'", " workDir = file(\"${buildDir}/nodejs\")", " npmWorkDir = file(\"${buildDir}/npm\")", "}", @@ -111,7 +111,7 @@ void useNpmFromNodeGradlePlugin() throws Exception { "repositories { mavenCentral() }", "node {", " download = true", - " version = '18.13.0'", + " version = '18.16.1'", " workDir = file(\"${buildDir}/nodejs\")", "}", "def prettierConfig = [:]", diff --git a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle index c5acf5bbc5..c0fa255bcc 100644 --- a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle +++ b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_1.gradle @@ -9,8 +9,8 @@ plugins { repositories { mavenCentral() } node { download = true - version = '18.13.0' - npmVersion = '8.19.2' + version = '18.16.1' + npmVersion = '9.5.1' // when setting both these directories, npm and node will be in separate directories workDir = file("${buildDir}/nodejs") npmWorkDir = file("${buildDir}/npm") diff --git a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle index ef843a8475..6d77bc3d69 100644 --- a/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle +++ b/plugin-gradle/src/test/resources/com/diffplug/gradle/spotless/NpmTestsWithoutNpmInstallationTest_gradle_node_plugin_example_2.gradle @@ -9,7 +9,7 @@ plugins { repositories { mavenCentral() } node { download = true - version = '18.13.0' + version = '18.16.1' // when not setting an explicit `npmWorkDir`, the npm binary will be installed next to the node binary workDir = file("${buildDir}/nodejs") } From e3e8cdb0928df14d3f93e2a69739af24133f363c Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Fri, 28 Jul 2023 15:04:57 +0200 Subject: [PATCH 25/49] Add information about using ratchetFrom on CI systems Add the important TL;DR from #710 to the documentation where it is pertinent. --- plugin-gradle/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 3484e3cd59..33d3ede9d6 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -1326,6 +1326,15 @@ However, we strongly recommend that you use a non-local branch, such as a tag or This is especially helpful for injecting accurate copyright dates using the [license step](#license-header). +### Using ratchetFrom on CI systems + +If you are running Spotless on a CI system, make sure you do not have a shallow clone, or `ratchetFrom` will fail with `No such reference`. Many CI systems use a shallow clone by default for performance reasons. Here is how you turn off shallow clones for some common CI systems: + +* **GitHub Actions**: Ad `fetch-depth: 0` to `.yml` +* **GitLab CI**: Add `GIT_DEPTH: 0` under the `variables:` section of `.gitlab-ci.yml` +* **BitBucket Pipelines**: Add `clone: depth: full` to the build step +* **Travis**: Add `git: depth: false` in `travis.yml` + ## `spotless:off` and `spotless:on` Sometimes there is a chunk of code which you have carefully handcrafted, and you would like to exclude just this one little part from getting clobbered by the autoformat. Some formatters have a way to do this, many don't, but who cares. If you setup your spotless like this: From 16f41e7d25a86913e5d0e97bc2265779466c59bb Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Fri, 28 Jul 2023 13:58:45 -0700 Subject: [PATCH 26/49] Condense the `ratchetFrom` CI info. --- plugin-gradle/README.md | 10 ++++------ plugin-maven/README.md | 7 +++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 33d3ede9d6..fc0aa45a3f 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -1326,14 +1326,12 @@ However, we strongly recommend that you use a non-local branch, such as a tag or This is especially helpful for injecting accurate copyright dates using the [license step](#license-header). -### Using ratchetFrom on CI systems +### Using `ratchetFrom` on CI systems -If you are running Spotless on a CI system, make sure you do not have a shallow clone, or `ratchetFrom` will fail with `No such reference`. Many CI systems use a shallow clone by default for performance reasons. Here is how you turn off shallow clones for some common CI systems: +Many popular CI systems (GitHub, GitLab, BitBucket, and Travis) use a "shallow clone". This means that `ratchetFrom 'origin/main'` will fail with `No such reference`. You can fix this by: -* **GitHub Actions**: Ad `fetch-depth: 0` to `.yml` -* **GitLab CI**: Add `GIT_DEPTH: 0` under the `variables:` section of `.gitlab-ci.yml` -* **BitBucket Pipelines**: Add `clone: depth: full` to the build step -* **Travis**: Add `git: depth: false` in `travis.yml` +- calling `git fetch origin main` before you call Spotless +- disabling the shallow clone [like so](https://github.com/diffplug/spotless/issues/710) ## `spotless:off` and `spotless:on` diff --git a/plugin-maven/README.md b/plugin-maven/README.md index 62f2a4ea57..2d14c6edc7 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -1526,6 +1526,13 @@ You can explicitly disable ratchet functionality by providing the value 'NONE': ``` This is useful for disabling the ratchet functionality in child projects where the parent defines a ratchetFrom value. +### Using `ratchetFrom` on CI systems + +Many popular CI systems (GitHub, GitLab, BitBucket, and Travis) use a "shallow clone". This means that `origin/main` will fail with `No such reference`. You can fix this by: + +- calling `git fetch origin main` before you call Spotless +- disabling the shallow clone [like so](https://github.com/diffplug/spotless/issues/710) + ## `spotless:off` and `spotless:on` Sometimes there is a chunk of code which you have carefully handcrafted, and you would like to exclude just this one little part from getting clobbered by the autoformat. Some formatters have a way to do this, many don't, but who cares. If you setup your spotless like this: From 1eb2a4f59ff3e9cd8a551cc79b312a2243a84b6d Mon Sep 17 00:00:00 2001 From: David Gregory <2992938+DavidGregory084@users.noreply.github.com> Date: Mon, 31 Jul 2023 16:02:32 +0100 Subject: [PATCH 27/49] Rename `applyJsonPatch` functionality to `jsonPatch` --- CHANGES.md | 2 +- README.md | 4 ++-- ...yJsonPatchStep.java => JsonPatchStep.java} | 6 +++--- ...rFunc.java => JsonPatchFormatterFunc.java} | 6 +++--- plugin-gradle/CHANGES.md | 2 +- plugin-gradle/README.md | 8 ++++---- .../gradle/spotless/JsonExtension.java | 20 +++++++++---------- .../gradle/spotless/JsonExtensionTest.java | 8 ++++---- plugin-maven/CHANGES.md | 2 +- plugin-maven/README.md | 8 ++++---- .../diffplug/spotless/maven/json/Json.java | 4 ++-- .../{ApplyJsonPatch.java => JsonPatch.java} | 8 ++++---- .../spotless/maven/json/JsonTest.java | 8 ++++---- 13 files changed, 43 insertions(+), 43 deletions(-) rename lib/src/main/java/com/diffplug/spotless/json/{ApplyJsonPatchStep.java => JsonPatchStep.java} (96%) rename lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/{ApplyJsonPatchFormatterFunc.java => JsonPatchFormatterFunc.java} (88%) rename plugin-maven/src/main/java/com/diffplug/spotless/maven/json/{ApplyJsonPatch.java => JsonPatch.java} (80%) diff --git a/CHANGES.md b/CHANGES.md index f65f4f23fc..2b60913d67 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,7 +11,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added -* Add an `applyJsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) ### Fixed * Use latest versions of popular style guides for `eslint` tests to fix failing `useEslintXoStandardRules` test. ([#1761](https://github.com/diffplug/spotless/pull/1761), [#1756](https://github.com/diffplug/spotless/issues/1756)) * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) diff --git a/README.md b/README.md index 255dbe6813..cd1e736014 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ lib('java.CleanthatJavaStep') +'{{yes}} | {{yes}} lib('json.gson.GsonStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('json.JacksonJsonStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('json.JsonSimpleStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', -lib('json.ApplyJsonPatchStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', +lib('json.JsonPatchStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('kotlin.KtLintStep') +'{{yes}} | {{yes}} | {{yes}} | {{no}} |', lib('kotlin.KtfmtStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', lib('kotlin.DiktatStep') +'{{yes}} | {{yes}} | {{no}} | {{no}} |', @@ -141,7 +141,7 @@ lib('yaml.JacksonYamlStep') +'{{yes}} | {{yes}} | [`json.gson.GsonStep`](lib/src/main/java/com/diffplug/spotless/json/gson/GsonStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`json.JacksonJsonStep`](lib/src/main/java/com/diffplug/spotless/json/JacksonJsonStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`json.JsonSimpleStep`](lib/src/main/java/com/diffplug/spotless/json/JsonSimpleStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | -| [`json.ApplyJsonPatchStep`](lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | +| [`json.JsonPatchStep`](lib/src/main/java/com/diffplug/spotless/json/JsonPatchStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`kotlin.KtLintStep`](lib/src/main/java/com/diffplug/spotless/kotlin/KtLintStep.java) | :+1: | :+1: | :+1: | :white_large_square: | | [`kotlin.KtfmtStep`](lib/src/main/java/com/diffplug/spotless/kotlin/KtfmtStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | | [`kotlin.DiktatStep`](lib/src/main/java/com/diffplug/spotless/kotlin/DiktatStep.java) | :+1: | :+1: | :white_large_square: | :white_large_square: | diff --git a/lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java b/lib/src/main/java/com/diffplug/spotless/json/JsonPatchStep.java similarity index 96% rename from lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java rename to lib/src/main/java/com/diffplug/spotless/json/JsonPatchStep.java index 84f39f5b23..71f4380264 100644 --- a/lib/src/main/java/com/diffplug/spotless/json/ApplyJsonPatchStep.java +++ b/lib/src/main/java/com/diffplug/spotless/json/JsonPatchStep.java @@ -28,12 +28,12 @@ import com.diffplug.spotless.JarState; import com.diffplug.spotless.Provisioner; -public class ApplyJsonPatchStep { +public class JsonPatchStep { // https://mvnrepository.com/artifact/com.flipkart.zjsonpatch/zjsonpatch static final String MAVEN_COORDINATE = "com.flipkart.zjsonpatch:zjsonpatch"; static final String DEFAULT_VERSION = "0.4.14"; - private ApplyJsonPatchStep() {} + private JsonPatchStep() {} public static FormatterStep create(String patchString, Provisioner provisioner) { return create(DEFAULT_VERSION, patchString, provisioner); @@ -77,7 +77,7 @@ private State(String zjsonPatchVersion, String patchString, Provisioner provisio } FormatterFunc toFormatter() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { - Class formatterFunc = jarState.getClassLoader().loadClass("com.diffplug.spotless.glue.json.ApplyJsonPatchFormatterFunc"); + Class formatterFunc = jarState.getClassLoader().loadClass("com.diffplug.spotless.glue.json.JsonPatchFormatterFunc"); if (this.patch != null) { Constructor constructor = formatterFunc.getConstructor(List.class); return (FormatterFunc) constructor.newInstance(patch); diff --git a/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java b/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/JsonPatchFormatterFunc.java similarity index 88% rename from lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java rename to lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/JsonPatchFormatterFunc.java index 1ba6084a67..dd2f053791 100644 --- a/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/ApplyJsonPatchFormatterFunc.java +++ b/lib/src/zjsonPatch/java/com/diffplug/spotless/glue/json/JsonPatchFormatterFunc.java @@ -23,18 +23,18 @@ import com.diffplug.spotless.FormatterFunc; -public class ApplyJsonPatchFormatterFunc implements FormatterFunc { +public class JsonPatchFormatterFunc implements FormatterFunc { private final ObjectMapper objectMapper; private final List> patch; private final String patchString; - public ApplyJsonPatchFormatterFunc(String patchString) { + public JsonPatchFormatterFunc(String patchString) { this.objectMapper = new ObjectMapper(); this.patch = null; this.patchString = patchString; } - public ApplyJsonPatchFormatterFunc(List> patch) { + public JsonPatchFormatterFunc(List> patch) { this.objectMapper = new ObjectMapper(); this.patch = patch; this.patchString = null; diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index ee7ea85658..b21debb36f 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -4,7 +4,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added -* Add an `applyJsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 0edd2a893a..b08c8b85bc 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -811,7 +811,7 @@ spotless { gson() // has its own section below jackson() // has its own section below rome() // has its own section below - applyJsonPatch([]) // has its own section below + jsonPatch([]) // has its own section below } } ``` @@ -873,7 +873,7 @@ spotless { } ``` -### applyJsonPatch +### jsonPatch Uses [zjsonpatch](https://github.com/flipkart-incubator/zjsonpatch) to apply [JSON Patches](https://jsonpatch.com/) as per [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902/) to JSON documents. @@ -893,7 +893,7 @@ For example, to apply the patch from the [JSON Patch homepage](https://jsonpatch spotless { json { target 'src/**/*.json' - applyJsonPatch([ + jsonPatch([ [op: 'replace', path: '/baz', value: 'boo'], [op: 'add', path: '/hello', value: ['world']], [op: 'remove', path: '/foo'] @@ -908,7 +908,7 @@ Or using the Kotlin DSL: spotless { json { target("src/**/*.json") - applyJsonPatch(listOf( + jsonPatch(listOf( mapOf("op" to "replace", "path" to "/baz", "value" to "boo"), mapOf("op" to "add", "path" to "/hello", "value" to listOf("world")), mapOf("op" to "remove", "path" to "/foo") diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java index 5e587dbd9f..8648cacea9 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JsonExtension.java @@ -22,9 +22,9 @@ import javax.inject.Inject; import com.diffplug.spotless.FormatterStep; -import com.diffplug.spotless.json.ApplyJsonPatchStep; import com.diffplug.spotless.json.JacksonJsonConfig; import com.diffplug.spotless.json.JacksonJsonStep; +import com.diffplug.spotless.json.JsonPatchStep; import com.diffplug.spotless.json.JsonSimpleStep; import com.diffplug.spotless.json.gson.GsonStep; @@ -75,12 +75,12 @@ public RomeJson rome(String version) { return romeConfig; } - public ApplyJsonPatchConfig applyJsonPatch(List> patch) { - return new ApplyJsonPatchConfig(patch); + public JsonPatchConfig jsonPatch(List> patch) { + return new JsonPatchConfig(patch); } - public ApplyJsonPatchConfig applyJsonPatch(String zjsonPatchVersion, List> patch) { - return new ApplyJsonPatchConfig(zjsonPatchVersion, patch); + public JsonPatchConfig jsonPatch(String zjsonPatchVersion, List> patch) { + return new JsonPatchConfig(zjsonPatchVersion, patch); } public class SimpleConfig { @@ -204,28 +204,28 @@ protected RomeJson getThis() { } } - public class ApplyJsonPatchConfig { + public class JsonPatchConfig { private String zjsonPatchVersion; private List> patch; - public ApplyJsonPatchConfig(List> patch) { + public JsonPatchConfig(List> patch) { this(DEFAULT_ZJSONPATCH_VERSION, patch); } - public ApplyJsonPatchConfig(String zjsonPatchVersion, List> patch) { + public JsonPatchConfig(String zjsonPatchVersion, List> patch) { this.zjsonPatchVersion = zjsonPatchVersion; this.patch = patch; addStep(createStep()); } - public ApplyJsonPatchConfig version(String zjsonPatchVersion) { + public JsonPatchConfig version(String zjsonPatchVersion) { this.zjsonPatchVersion = zjsonPatchVersion; replaceStep(createStep()); return this; } private FormatterStep createStep() { - return ApplyJsonPatchStep.create(zjsonPatchVersion, patch, provisioner()); + return JsonPatchStep.create(zjsonPatchVersion, patch, provisioner()); } } } diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java index ea1358ccee..73e443b915 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JsonExtensionTest.java @@ -158,7 +158,7 @@ void jacksonFormattingWithSortingByKeys() throws IOException { } @Test - void applyJsonPatchReplaceString() throws IOException { + void jsonPatchReplaceString() throws IOException { setFile("build.gradle").toLines( "plugins {", " id 'java'", @@ -168,7 +168,7 @@ void applyJsonPatchReplaceString() throws IOException { "spotless {", " json {", " target 'src/**/*.json'", - " applyJsonPatch([[op: 'replace', path: '/abc', value: 'ghi']])", + " jsonPatch([[op: 'replace', path: '/abc', value: 'ghi']])", " gson()", " }", "}"); @@ -178,7 +178,7 @@ void applyJsonPatchReplaceString() throws IOException { } @Test - void applyJsonPatchReplaceWithObject() throws IOException { + void jsonPatchReplaceWithObject() throws IOException { setFile("build.gradle").toLines( "plugins {", " id 'java'", @@ -188,7 +188,7 @@ void applyJsonPatchReplaceWithObject() throws IOException { "spotless {", " json {", " target 'src/**/*.json'", - " applyJsonPatch([[op: 'replace', path: '/abc', value: [def: 'ghi']]])", + " jsonPatch([[op: 'replace', path: '/abc', value: [def: 'ghi']]])", " gson()", " }", "}"); diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 06f8cc1e46..bab8fca7b3 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -4,7 +4,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added -* Add an `applyJsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) diff --git a/plugin-maven/README.md b/plugin-maven/README.md index 5892a401c9..8c56aaefa1 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -901,7 +901,7 @@ For details, see the [npm detection](#npm-detection), [`.npmrc` detection](#npmr - + ``` @@ -958,7 +958,7 @@ Uses Jackson for formatting. -### applyJsonPatch +### jsonPatch Uses [zjsonpatch](https://github.com/flipkart-incubator/zjsonpatch) to apply [JSON Patches](https://jsonpatch.com/) as per [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902/) to JSON documents. @@ -967,11 +967,11 @@ This enables you to add, replace or remove properties at locations in the JSON d For example, to apply the patch from the [JSON Patch homepage](https://jsonpatch.com/#the-patch): ```xml -[ +[ { "op": "replace", "path": "/baz", "value": "boo" }, { "op": "add", "path": "/hello", "value": ["world"] }, { "op": "remove", "path": "/foo" } -] +] ``` ## YAML diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java index 76a5c43221..be5782b651 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/Json.java @@ -54,7 +54,7 @@ public void addRome(RomeJson rome) { addStepFactory(rome); } - public void addApplyJsonPatch(ApplyJsonPatch applyJsonPatch) { - addStepFactory(applyJsonPatch); + public void addJsonPatch(JsonPatch jsonPatch) { + addStepFactory(jsonPatch); } } diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/ApplyJsonPatch.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/JsonPatch.java similarity index 80% rename from plugin-maven/src/main/java/com/diffplug/spotless/maven/json/ApplyJsonPatch.java rename to plugin-maven/src/main/java/com/diffplug/spotless/maven/json/JsonPatch.java index 6e18ea9388..a822ad09e2 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/ApplyJsonPatch.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/json/JsonPatch.java @@ -18,14 +18,14 @@ import org.apache.maven.plugins.annotations.Parameter; import com.diffplug.spotless.FormatterStep; -import com.diffplug.spotless.json.ApplyJsonPatchStep; +import com.diffplug.spotless.json.JsonPatchStep; import com.diffplug.spotless.maven.FormatterStepConfig; import com.diffplug.spotless.maven.FormatterStepFactory; /** - * A {@link FormatterStepFactory} implementation that corresponds to {@code ...} configuration element. + * A {@link FormatterStepFactory} implementation that corresponds to {@code ...} configuration element. */ -public class ApplyJsonPatch implements FormatterStepFactory { +public class JsonPatch implements FormatterStepFactory { private static final String DEFAULT_ZJSONPATCH_VERSION = "0.4.14"; @Parameter @@ -36,6 +36,6 @@ public class ApplyJsonPatch implements FormatterStepFactory { @Override public FormatterStep newFormatterStep(FormatterStepConfig stepConfig) { - return ApplyJsonPatchStep.create(zjsonPatchVersion, patch, stepConfig.getProvisioner()); + return JsonPatchStep.create(zjsonPatchVersion, patch, stepConfig.getProvisioner()); } } diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java index 49becde33a..4c2f05532c 100644 --- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/json/JsonTest.java @@ -91,8 +91,8 @@ public void testFormatJson_WithJackson_sortByKeys_spaceAfterKeySeparator() throw } @Test - public void testFormatJson_ApplyJsonPatch_replaceString() throws Exception { - writePomWithJsonSteps("[{\"op\":\"replace\",\"path\":\"/abc\",\"value\":\"ghi\"}]"); + public void testFormatJson_JsonPatch_replaceString() throws Exception { + writePomWithJsonSteps("[{\"op\":\"replace\",\"path\":\"/abc\",\"value\":\"ghi\"}]"); setFile("json_test.json").toResource("json/patchObjectBefore.json"); @@ -101,8 +101,8 @@ public void testFormatJson_ApplyJsonPatch_replaceString() throws Exception { } @Test - public void testFormatJson_ApplyJsonPatch_replaceWithObject() throws Exception { - writePomWithJsonSteps("[{\"op\":\"replace\",\"path\":\"/abc\",\"value\":{\"def\":\"ghi\"}}]"); + public void testFormatJson_JsonPatch_replaceWithObject() throws Exception { + writePomWithJsonSteps("[{\"op\":\"replace\",\"path\":\"/abc\",\"value\":{\"def\":\"ghi\"}}]"); setFile("json_test.json").toResource("json/patchObjectBefore.json"); From 8b1713d88bf575730da921c910da72718b5da4e0 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 31 Jul 2023 12:35:10 -0700 Subject: [PATCH 28/49] Update README index at plugin-gradle and plugin-maven. --- plugin-gradle/README.md | 2 +- plugin-maven/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 852aed2bc7..325093796e 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -66,7 +66,7 @@ Spotless supports all of Gradle's built-in performance features (incremental bui - [SQL](#sql) ([dbeaver](#dbeaver), [prettier](#prettier)) - [Typescript](#typescript) ([tsfmt](#tsfmt), [prettier](#prettier), [ESLint](#eslint-typescript), [Rome](#rome)) - [Javascript](#javascript) ([prettier](#prettier), [ESLint](#eslint-javascript), [Rome](#rome)) - - [JSON](#json) + - [JSON](#json) ([simple](#simple), [gson](#gson), [jackson](#jackson), [rome](#rome), [jsonPatch](#jsonPatch)) - [YAML](#yaml) - [Gherkin](#gherkin) - Multiple languages diff --git a/plugin-maven/README.md b/plugin-maven/README.md index eb9bc35c1f..cb770099ac 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -51,7 +51,7 @@ user@machine repo % mvn spotless:check - [Markdown](#markdown) ([flexmark](#flexmark)) - [Typescript](#typescript) ([tsfmt](#tsfmt), [prettier](#prettier), [ESLint](#eslint-typescript), [Rome](#rome)) - [Javascript](#javascript) ([prettier](#prettier), [ESLint](#eslint-javascript), [Rome](#rome)) - - [JSON](#json) + - [JSON](#json) ([simple](#simple), [gson](#gson), [jackson](#jackson), [rome](#rome), [jsonPatch](#jsonPatch)) - [YAML](#yaml) - [Gherkin](#gherkin) - Multiple languages From b2db0f55af0d5e20435355f2232c6f54ad7458ae Mon Sep 17 00:00:00 2001 From: jochenberger Date: Wed, 2 Aug 2023 15:42:51 +0200 Subject: [PATCH 29/49] Add support for Eclipse 4.28 --- .../spotless/extra/groovy/GrEclipseFormatterStep.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java b/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java index 3b57df889b..0d6287caea 100644 --- a/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java +++ b/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java @@ -50,7 +50,9 @@ protected P2Model model(String version) { throw new IllegalArgumentException("4.8 is the oldest version we support, this was " + version); } String greclipseVersion; - if (eVersion >= 18) { + if (eVersion >= 28) { + greclipseVersion = "5." + (eVersion - 28) + ".0"; + } else if (eVersion >= 18) { greclipseVersion = "4." + (eVersion - 18) + ".0"; } else { greclipseVersion = "3." + (eVersion - 8) + ".0"; From 74d840dc06f8e10cc622cf6b0bd1799e7aa91860 Mon Sep 17 00:00:00 2001 From: jochenberger Date: Thu, 3 Aug 2023 08:08:51 +0200 Subject: [PATCH 30/49] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 2b60913d67..c64220d445 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ### Fixed * Use latest versions of popular style guides for `eslint` tests to fix failing `useEslintXoStandardRules` test. ([#1761](https://github.com/diffplug/spotless/pull/1761), [#1756](https://github.com/diffplug/spotless/issues/1756)) * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) From effba12acd62aebb8ed66eaed3067289aa556893 Mon Sep 17 00:00:00 2001 From: jochenberger Date: Thu, 3 Aug 2023 08:09:11 +0200 Subject: [PATCH 31/49] Update CHANGES.md --- plugin-gradle/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index b21debb36f..4fef72db7e 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -5,6 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) From 4c568b4f1da656771e5b95d6d77e74d3eedb5d0d Mon Sep 17 00:00:00 2001 From: jochenberger Date: Thu, 3 Aug 2023 08:09:45 +0200 Subject: [PATCH 32/49] Update CHANGES.md --- plugin-maven/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index bab8fca7b3..e4f3441357 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -5,6 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) From d1c663a7ad83e1c9b6a2df0e5bf10f2f8053035d Mon Sep 17 00:00:00 2001 From: jochenberger Date: Thu, 3 Aug 2023 08:18:12 +0200 Subject: [PATCH 33/49] Fix formatting --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index c64220d445..566d13cf94 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,7 +12,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) -* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) +* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ### Fixed * Use latest versions of popular style guides for `eslint` tests to fix failing `useEslintXoStandardRules` test. ([#1761](https://github.com/diffplug/spotless/pull/1761), [#1756](https://github.com/diffplug/spotless/issues/1756)) * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) From 4c48360ef0b02af8494ea06ac47d382d259fd10e Mon Sep 17 00:00:00 2001 From: jochenberger Date: Thu, 3 Aug 2023 08:18:31 +0200 Subject: [PATCH 34/49] Fix formatting --- 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 4fef72db7e..bef3d961f8 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -5,7 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) -* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) +* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) From 413cac88aa17a435ed55d1de89739fcfc6968e65 Mon Sep 17 00:00:00 2001 From: jochenberger Date: Thu, 3 Aug 2023 08:18:49 +0200 Subject: [PATCH 35/49] Fix formatting --- plugin-maven/CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index e4f3441357..d0977c05bf 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -5,7 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) -* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) +* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) From 595cecdb97437e3b7440ac1ec9cab2c7567c1c12 Mon Sep 17 00:00:00 2001 From: Tyler Bertrand Date: Tue, 1 Aug 2023 19:54:44 -0500 Subject: [PATCH 36/49] Utilize providers for line endings This way the external git processes are launched at execution time and not during configuration --- .../com/diffplug/gradle/spotless/FormatExtension.java | 4 +++- .../java/com/diffplug/gradle/spotless/SpotlessTask.java | 9 +++++---- .../gradle/spotless/DiffMessageFormatterTest.java | 4 ++-- .../com/diffplug/gradle/spotless/FormatTaskTest.java | 2 +- .../com/diffplug/gradle/spotless/PaddedCellTaskTest.java | 2 +- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java index e28ec13dcd..7a62f8cabf 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java @@ -40,6 +40,7 @@ import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.file.ConfigurableFileTree; +import org.gradle.api.file.Directory; import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.BasePlugin; import org.gradle.api.tasks.TaskProvider; @@ -925,7 +926,8 @@ protected void setupTask(SpotlessTask task) { steps.replaceAll(formatterStep -> formatterStep.filterByContent(OnMatch.EXCLUDE, targetExcludeContentPattern)); } task.setSteps(steps); - task.setLineEndingsPolicy(getLineEndings().createPolicy(getProject().getProjectDir(), () -> totalTarget)); + Directory projectDir = getProject().getLayout().getProjectDirectory(); + task.setLineEndingsPolicy(getProject().provider(() -> getLineEndings().createPolicy(projectDir.getAsFile(), () -> totalTarget))); spotless.getRegisterDependenciesTask().hookSubprojectTask(task); task.setupRatchet(getRatchetFrom() != null ? getRatchetFrom() : ""); } diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessTask.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessTask.java index c23cea0845..2af9a80b7a 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessTask.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessTask.java @@ -28,6 +28,7 @@ import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.FileCollection; import org.gradle.api.provider.Property; +import org.gradle.api.provider.Provider; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.Internal; @@ -64,14 +65,14 @@ public void setEncoding(String encoding) { this.encoding = Objects.requireNonNull(encoding); } - protected final LiveCache lineEndingsPolicy = createLive("lineEndingsPolicy"); + protected final LiveCache> lineEndingsPolicy = createLive("lineEndingsPolicy"); @Input - public LineEnding.Policy getLineEndingsPolicy() { + public Provider getLineEndingsPolicy() { return lineEndingsPolicy.get(); } - public void setLineEndingsPolicy(LineEnding.Policy lineEndingsPolicy) { + public void setLineEndingsPolicy(Provider lineEndingsPolicy) { this.lineEndingsPolicy.set(lineEndingsPolicy); } @@ -185,7 +186,7 @@ String formatName() { Formatter buildFormatter() { return Formatter.builder() .name(formatName()) - .lineEndingsPolicy(lineEndingsPolicy.get()) + .lineEndingsPolicy(lineEndingsPolicy.get().get()) .encoding(Charset.forName(encoding)) .rootDir(getProjectDir().get().getAsFile().toPath()) .steps(steps.get()) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java index ef72043a47..c564664f10 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java @@ -62,7 +62,7 @@ public BuildServiceParameters.None getParameters() { private SpotlessTaskImpl createFormatTask(String name) { SpotlessTaskImpl task = project.getTasks().create("spotless" + SpotlessPlugin.capitalize(name), SpotlessTaskImpl.class); task.init(taskService); - task.setLineEndingsPolicy(LineEnding.UNIX.createPolicy()); + task.setLineEndingsPolicy(project.provider(LineEnding.UNIX::createPolicy)); task.setTarget(Collections.singletonList(file)); return task; } @@ -100,7 +100,7 @@ private Bundle create(File... files) throws IOException { private Bundle create(List files) throws IOException { Bundle bundle = new Bundle("underTest"); - bundle.task.setLineEndingsPolicy(LineEnding.UNIX.createPolicy()); + bundle.task.setLineEndingsPolicy(bundle.project.provider(LineEnding.UNIX::createPolicy)); bundle.task.setTarget(files); return bundle; } diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java index 8985cd7a14..c4c055c799 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java @@ -35,7 +35,7 @@ class FormatTaskTest extends ResourceHarness { void createTask() { Project project = TestProvisioner.gradleProject(rootFolder()); spotlessTask = project.getTasks().create("spotlessTaskUnderTest", SpotlessTaskImpl.class); - spotlessTask.setLineEndingsPolicy(LineEnding.UNIX.createPolicy()); + spotlessTask.setLineEndingsPolicy(project.provider(LineEnding.UNIX::createPolicy)); spotlessTask.init(GradleIntegrationHarness.providerOf(new SpotlessTaskService() { @Override public BuildServiceParameters.None getParameters() { diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java index bc7a2fdc96..db55077d00 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java @@ -66,7 +66,7 @@ private SpotlessTaskImpl createFormatTask(String name, FormatterStep step) { SpotlessTaskImpl task = project.getTasks().create("spotless" + SpotlessPlugin.capitalize(name), SpotlessTaskImpl.class); task.init(taskService); task.addStep(step); - task.setLineEndingsPolicy(LineEnding.UNIX.createPolicy()); + task.setLineEndingsPolicy(project.provider(LineEnding.UNIX::createPolicy)); task.setTarget(Collections.singletonList(file)); return task; } From 2c33cd319b73f1aa5b86cef2414ebd6656f8f6f1 Mon Sep 17 00:00:00 2001 From: Tyler Bertrand Date: Wed, 2 Aug 2023 15:29:22 -0500 Subject: [PATCH 37/49] Update plugin-gradle changelog --- plugin-gradle/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index b21debb36f..5ffc7912ba 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -8,6 +8,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) +* Fix configuration cache failure when using LineEnding.GIT_ATTRIBUTES ([#1644](https://github.com/diffplug/spotless/issues/1644)) ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) From 35be272b300d9a3a4a939b706728050cbf1b9c69 Mon Sep 17 00:00:00 2001 From: Tyler Bertrand Date: Thu, 3 Aug 2023 20:17:56 -0500 Subject: [PATCH 38/49] spotlessApply --- .../com/diffplug/gradle/spotless/DiffMessageFormatterTest.java | 2 +- .../test/java/com/diffplug/gradle/spotless/FormatTaskTest.java | 2 +- .../java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java index c564664f10..bc556ac06e 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/DiffMessageFormatterTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2022 DiffPlug + * Copyright 2016-2023 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java index c4c055c799..ddd813468d 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/FormatTaskTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 DiffPlug + * Copyright 2016-2023 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java index db55077d00..4fe78d884d 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/PaddedCellTaskTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 DiffPlug + * Copyright 2016-2023 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 14e4e62aa76768e8d9110478731668fe73dec843 Mon Sep 17 00:00:00 2001 From: jochenberger Date: Fri, 4 Aug 2023 07:12:36 +0200 Subject: [PATCH 39/49] Update default to 4.28 --- .../diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java b/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java index 0d6287caea..b79918d555 100644 --- a/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java +++ b/lib-extra/src/main/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStep.java @@ -32,7 +32,7 @@ public final class GrEclipseFormatterStep { private GrEclipseFormatterStep() {} private static final String NAME = "eclipse groovy formatter"; - private static final Jvm.Support JVM_SUPPORT = Jvm. support(NAME).add(11, "4.26").add(17, "4.27"); + private static final Jvm.Support JVM_SUPPORT = Jvm. support(NAME).add(11, "4.26").add(17, "4.28"); public static String defaultVersion() { return JVM_SUPPORT.getRecommendedFormatterVersion(); From 696a3c628117aca1608ebbf111768ba0411a4b0f Mon Sep 17 00:00:00 2001 From: Simon Le Bras Date: Tue, 8 Aug 2023 12:09:53 +0200 Subject: [PATCH 40/49] Fix configuration cache issue with BufStep --- .../diffplug/spotless/protobuf/BufStep.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java b/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java index c9b9efa543..acddff85cf 100644 --- a/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java +++ b/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java @@ -21,6 +21,7 @@ import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.regex.Pattern; import javax.annotation.Nullable; @@ -61,13 +62,12 @@ public FormatterStep create() { return FormatterStep.createLazy(name(), this::createState, State::toFunc); } - private State createState() throws IOException, InterruptedException { + private State createState() { String instructions = "https://docs.buf.build/installation"; - String exeAbsPath = ForeignExe.nameAndVersion("buf", version) - .pathToExe(pathToExe) - .versionRegex(Pattern.compile("(\\S*)")) - .fixCantFind("Try following the instructions at " + instructions + ", or else tell Spotless where it is with {@code buf().pathToExe('path/to/executable')}") - .confirmVersionAndGetAbsolutePath(); + ForeignExe exeAbsPath = ForeignExe.nameAndVersion("buf", version) + .pathToExe(pathToExe) + .versionRegex(Pattern.compile("(\\S*)")) + .fixCantFind("Try following the instructions at " + instructions + ", or else tell Spotless where it is with {@code buf().pathToExe('path/to/executable')}"); return new State(this, exeAbsPath); } @@ -76,19 +76,23 @@ static class State implements Serializable { private static final long serialVersionUID = -1825662356883926318L; // used for up-to-date checks and caching final String version; + final transient ForeignExe exe; // used for executing - final transient List args; + private transient @Nullable List args; - State(BufStep step, String exeAbsPath) { + State(BufStep step, ForeignExe exeAbsPath) { this.version = step.version; - this.args = Arrays.asList(exeAbsPath, "format"); + this.exe = Objects.requireNonNull(exeAbsPath); } String format(ProcessRunner runner, String input, File file) throws IOException, InterruptedException { - String[] processArgs = args.toArray(new String[args.size() + 1]); - // add an argument to the end - processArgs[args.size()] = file.getAbsolutePath(); - return runner.exec(input.getBytes(StandardCharsets.UTF_8), processArgs).assertExitZero(StandardCharsets.UTF_8); + if (args == null) { + args = Arrays.asList( + exe.confirmVersionAndGetAbsolutePath(), + "format", + file.getAbsolutePath()); + } + return runner.exec(input.getBytes(StandardCharsets.UTF_8), args).assertExitZero(StandardCharsets.UTF_8); } FormatterFunc.Closeable toFunc() { From 7878351838617e58959df3b47528a77f17efd4fa Mon Sep 17 00:00:00 2001 From: Simon Le Bras Date: Tue, 8 Aug 2023 12:20:17 +0200 Subject: [PATCH 41/49] Update CHANGES.md --- plugin-gradle/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 5ffc7912ba..907f1a1cb0 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -9,6 +9,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) * Fix configuration cache failure when using LineEnding.GIT_ATTRIBUTES ([#1644](https://github.com/diffplug/spotless/issues/1644)) +* Fix configuration cache failure when formatting proto files with Buf. ([#1779]https://github.com/diffplug/spotless/pull/1779)) ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) From 19f68d6763969e289591a82c353b3638f1c40210 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Tue, 8 Aug 2023 09:11:17 -0700 Subject: [PATCH 42/49] spotlessApply --- .../java/com/diffplug/spotless/protobuf/BufStep.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java b/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java index acddff85cf..a5a6a6cdef 100644 --- a/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java +++ b/lib/src/main/java/com/diffplug/spotless/protobuf/BufStep.java @@ -65,9 +65,9 @@ public FormatterStep create() { private State createState() { String instructions = "https://docs.buf.build/installation"; ForeignExe exeAbsPath = ForeignExe.nameAndVersion("buf", version) - .pathToExe(pathToExe) - .versionRegex(Pattern.compile("(\\S*)")) - .fixCantFind("Try following the instructions at " + instructions + ", or else tell Spotless where it is with {@code buf().pathToExe('path/to/executable')}"); + .pathToExe(pathToExe) + .versionRegex(Pattern.compile("(\\S*)")) + .fixCantFind("Try following the instructions at " + instructions + ", or else tell Spotless where it is with {@code buf().pathToExe('path/to/executable')}"); return new State(this, exeAbsPath); } @@ -88,9 +88,9 @@ static class State implements Serializable { String format(ProcessRunner runner, String input, File file) throws IOException, InterruptedException { if (args == null) { args = Arrays.asList( - exe.confirmVersionAndGetAbsolutePath(), - "format", - file.getAbsolutePath()); + exe.confirmVersionAndGetAbsolutePath(), + "format", + file.getAbsolutePath()); } return runner.exec(input.getBytes(StandardCharsets.UTF_8), args).assertExitZero(StandardCharsets.UTF_8); } From 012c13569c101086137cee96ac2ec4e5c5398749 Mon Sep 17 00:00:00 2001 From: Goooler Date: Wed, 9 Aug 2023 09:22:34 +0800 Subject: [PATCH 43/49] Support GJF own import order --- CHANGES.md | 1 + .../java/GoogleJavaFormatFormatterFunc.java | 12 ++++++---- .../spotless/java/GoogleJavaFormatStep.java | 23 ++++++++++++++----- plugin-gradle/CHANGES.md | 1 + plugin-gradle/README.md | 2 +- .../gradle/spotless/JavaExtension.java | 9 +++++++- plugin-maven/CHANGES.md | 1 + .../spotless/maven/java/GoogleJavaFormat.java | 8 +++++-- 8 files changed, 42 insertions(+), 15 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2b60913d67..81af46a526 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ### Fixed * Use latest versions of popular style guides for `eslint` tests to fix failing `useEslintXoStandardRules` test. ([#1761](https://github.com/diffplug/spotless/pull/1761), [#1756](https://github.com/diffplug/spotless/issues/1756)) * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) diff --git a/lib/src/googleJavaFormat/java/com/diffplug/spotless/glue/java/GoogleJavaFormatFormatterFunc.java b/lib/src/googleJavaFormat/java/com/diffplug/spotless/glue/java/GoogleJavaFormatFormatterFunc.java index 87e086b440..8c6aa42575 100644 --- a/lib/src/googleJavaFormat/java/com/diffplug/spotless/glue/java/GoogleJavaFormatFormatterFunc.java +++ b/lib/src/googleJavaFormat/java/com/diffplug/spotless/glue/java/GoogleJavaFormatFormatterFunc.java @@ -29,6 +29,8 @@ import com.diffplug.spotless.FormatterFunc; +// Used via reflection by the Gradle plugin. +@SuppressWarnings("unused") public class GoogleJavaFormatFormatterFunc implements FormatterFunc { @Nonnull @@ -42,10 +44,13 @@ public class GoogleJavaFormatFormatterFunc implements FormatterFunc { private final boolean reflowStrings; - public GoogleJavaFormatFormatterFunc(@Nonnull String version, @Nonnull String style, boolean reflowStrings) { + private final boolean reorderImports; + + public GoogleJavaFormatFormatterFunc(@Nonnull String version, @Nonnull String style, boolean reflowStrings, boolean reorderImports) { this.version = Objects.requireNonNull(version); this.formatterStyle = Style.valueOf(Objects.requireNonNull(style)); this.reflowStrings = reflowStrings; + this.reorderImports = reorderImports; this.formatter = new Formatter(JavaFormatterOptions.builder() .style(formatterStyle) @@ -57,10 +62,7 @@ public GoogleJavaFormatFormatterFunc(@Nonnull String version, @Nonnull String st public String apply(@Nonnull String input) throws Exception { String formatted = formatter.formatSource(input); String removedUnused = RemoveUnusedImports.removeUnusedImports(formatted); - // Issue #1679: we used to call ImportOrderer.reorderImports(String) here, but that is deprecated. - // Replacing the call with (the correct) reorderImports(String, Style) causes issues for Style.AOSP, - // so we force the style to GOOGLE for now (which is what the deprecated method did) - String sortedImports = ImportOrderer.reorderImports(removedUnused, Style.GOOGLE); + String sortedImports = ImportOrderer.reorderImports(removedUnused, reorderImports ? formatterStyle : Style.GOOGLE); return reflowLongStrings(sortedImports); } diff --git a/lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java b/lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java index 321d05420f..a0f796af4d 100644 --- a/lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java +++ b/lib/src/main/java/com/diffplug/spotless/java/GoogleJavaFormatStep.java @@ -32,6 +32,7 @@ private GoogleJavaFormatStep() {} private static final String DEFAULT_STYLE = "GOOGLE"; private static final boolean DEFAULT_REFLOW_LONG_STRINGS = false; + private static final boolean DEFAULT_REORDER_IMPORTS = false; static final String NAME = "google-java-format"; static final String MAVEN_COORDINATE = "com.google.googlejavaformat:google-java-format"; @@ -55,8 +56,12 @@ public static FormatterStep create(String version, String style, Provisioner pro return create(MAVEN_COORDINATE, version, style, provisioner, reflowLongStrings); } - /** Creates a step which formats everything - groupArtifact, code, import order, and unused imports - and optionally reflows long strings. */ public static FormatterStep create(String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings) { + return create(groupArtifact, version, style, provisioner, reflowLongStrings, false); + } + + /** Creates a step which formats everything - groupArtifact, code, import order, and unused imports - and optionally reflows long strings. */ + public static FormatterStep create(String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings, boolean reorderImports) { Objects.requireNonNull(groupArtifact, "groupArtifact"); if (groupArtifact.chars().filter(ch -> ch == ':').count() != 1) { throw new IllegalArgumentException("groupArtifact must be in the form 'groupId:artifactId'"); @@ -65,7 +70,7 @@ public static FormatterStep create(String groupArtifact, String version, String Objects.requireNonNull(style, "style"); Objects.requireNonNull(provisioner, "provisioner"); return FormatterStep.createLazy(NAME, - () -> new State(NAME, groupArtifact, version, style, provisioner, reflowLongStrings), + () -> new State(NAME, groupArtifact, version, style, provisioner, reflowLongStrings, reorderImports), State::createFormat); } @@ -92,6 +97,10 @@ public static boolean defaultReflowLongStrings() { return DEFAULT_REFLOW_LONG_STRINGS; } + public static boolean defaultReorderImports() { + return DEFAULT_REORDER_IMPORTS; + } + static final class State implements Serializable { private static final long serialVersionUID = 1L; @@ -101,6 +110,7 @@ static final class State implements Serializable { final String version; final String style; final boolean reflowLongStrings; + final boolean reorderImports; State(String stepName, String version, Provisioner provisioner) throws Exception { this(stepName, version, DEFAULT_STYLE, provisioner); @@ -111,10 +121,10 @@ static final class State implements Serializable { } State(String stepName, String version, String style, Provisioner provisioner, boolean reflowLongStrings) throws Exception { - this(stepName, MAVEN_COORDINATE, version, style, provisioner, reflowLongStrings); + this(stepName, MAVEN_COORDINATE, version, style, provisioner, reflowLongStrings, DEFAULT_REORDER_IMPORTS); } - State(String stepName, String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings) throws Exception { + State(String stepName, String groupArtifact, String version, String style, Provisioner provisioner, boolean reflowLongStrings, boolean reorderImports) throws Exception { JVM_SUPPORT.assertFormatterSupported(version); ModuleHelper.doOpenInternalPackagesIfRequired(); this.jarState = JarState.from(groupArtifact + ":" + version, provisioner); @@ -122,13 +132,14 @@ static final class State implements Serializable { this.version = version; this.style = style; this.reflowLongStrings = reflowLongStrings; + this.reorderImports = reorderImports; } FormatterFunc createFormat() throws Exception { final ClassLoader classLoader = jarState.getClassLoader(); Class formatterFunc = classLoader.loadClass("com.diffplug.spotless.glue.java.GoogleJavaFormatFormatterFunc"); - Constructor constructor = formatterFunc.getConstructor(String.class, String.class, boolean.class); - FormatterFunc googleJavaFormatFormatterFunc = (FormatterFunc) constructor.newInstance(version, style, reflowLongStrings); + Constructor constructor = formatterFunc.getConstructor(String.class, String.class, boolean.class, boolean.class); + FormatterFunc googleJavaFormatFormatterFunc = (FormatterFunc) constructor.newInstance(version, style, reflowLongStrings, reorderImports); return JVM_SUPPORT.suggestLaterVersionOnError(version, googleJavaFormatFormatterFunc); } diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 907f1a1cb0..1ce2f06a42 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -5,6 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index 325093796e..dbc61207e5 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -206,7 +206,7 @@ spotless { // optional: you can specify a specific version (>= 1.8) and/or switch to AOSP style // and/or reflow long strings // and/or use custom group artifact (you probably don't need this) - googleJavaFormat('1.8').aosp().reflowLongStrings().groupArtifact('com.google.googlejavaformat:google-java-format') + googleJavaFormat('1.8').aosp().reflowLongStrings().reorderImports(false).groupArtifact('com.google.googlejavaformat:google-java-format') ``` ### palantir-java-format diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java index 13fe674168..fcd1a0d105 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java @@ -173,6 +173,7 @@ public class GoogleJavaFormatConfig { String groupArtifact; String style; boolean reflowLongStrings; + boolean reorderImports; GoogleJavaFormatConfig(String version) { this.version = Objects.requireNonNull(version); @@ -207,13 +208,19 @@ public GoogleJavaFormatConfig reflowLongStrings(boolean reflowLongStrings) { return this; } + public GoogleJavaFormatConfig reorderImports(boolean reorderImports) { + this.reorderImports = reorderImports; + return this; + } + private FormatterStep createStep() { return GoogleJavaFormatStep.create( groupArtifact, version, style, provisioner(), - reflowLongStrings); + reflowLongStrings, + reorderImports); } } diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index bab8fca7b3..65a557b14f 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -5,6 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/java/GoogleJavaFormat.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/java/GoogleJavaFormat.java index 3597e84e25..98296beb5f 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/java/GoogleJavaFormat.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/java/GoogleJavaFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 DiffPlug + * Copyright 2016-2023 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,12 +35,16 @@ public class GoogleJavaFormat implements FormatterStepFactory { @Parameter private Boolean reflowLongStrings; + @Parameter + private Boolean reorderImports; + @Override public FormatterStep newFormatterStep(FormatterStepConfig config) { String groupArtifact = this.groupArtifact != null ? this.groupArtifact : GoogleJavaFormatStep.defaultGroupArtifact(); String version = this.version != null ? this.version : GoogleJavaFormatStep.defaultVersion(); String style = this.style != null ? this.style : GoogleJavaFormatStep.defaultStyle(); boolean reflowLongStrings = this.reflowLongStrings != null ? this.reflowLongStrings : GoogleJavaFormatStep.defaultReflowLongStrings(); - return GoogleJavaFormatStep.create(groupArtifact, version, style, config.getProvisioner(), reflowLongStrings); + boolean reorderImports = this.reorderImports != null ? this.reorderImports : GoogleJavaFormatStep.defaultReorderImports(); + return GoogleJavaFormatStep.create(groupArtifact, version, style, config.getProvisioner(), reflowLongStrings, reorderImports); } } From 959fd854c36080caa13123de2089ebcb7396adb4 Mon Sep 17 00:00:00 2001 From: Goooler Date: Thu, 24 Aug 2023 09:42:44 +0800 Subject: [PATCH 44/49] Check if EditorConfig file exist for Ktlint --- plugin-gradle/CHANGES.md | 1 + .../gradle/spotless/KotlinExtension.java | 10 +++++--- .../gradle/spotless/KotlinExtensionTest.java | 24 +++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 1ce2f06a42..27d60e7270 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -6,6 +6,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) * Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) +* Check if EditorConfig file exist for Ktlint. ([#1788](https://github.com/diffplug/spotless/pull/1788) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java index f2c3a29d75..27d93717f4 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java @@ -85,11 +85,15 @@ public class KotlinFormatExtension { addStep(createStep()); } - public KotlinFormatExtension setEditorConfigPath(Object editorConfigFile) throws IOException { - if (editorConfigFile == null) { + public KotlinFormatExtension setEditorConfigPath(Object editorConfigPath) throws IOException { + if (editorConfigPath == null) { this.editorConfigPath = null; } else { - this.editorConfigPath = FileSignature.signAsList(getProject().file(editorConfigFile)); + File editorConfigFile = getProject().file(editorConfigPath); + if (!editorConfigFile.exists()) { + throw new IllegalArgumentException("EditorConfig file does not exist: " + editorConfigFile); + } + this.editorConfigPath = FileSignature.signAsList(editorConfigFile); } replaceStep(createStep()); return this; diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java index 10fbe5bd90..98e2259be4 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java @@ -15,6 +15,9 @@ */ package com.diffplug.gradle.spotless; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; import java.io.IOException; import org.junit.jupiter.api.Test; @@ -81,6 +84,27 @@ void withExperimentalEditorConfigOverride() throws IOException { assertFile("src/main/kotlin/Main.kt").sameAsResource("kotlin/ktlint/experimentalEditorConfigOverride.clean"); } + @Test + void testWithInvalidEditorConfigFile() throws IOException { + String invalidPath = "invalid/path/to/.editorconfig".replace('/', File.separatorChar); + + setFile("build.gradle").toLines( + "plugins {", + " id 'org.jetbrains.kotlin.jvm' version '1.5.31'", + " id 'com.diffplug.spotless'", + "}", + "repositories { mavenCentral() }", + "spotless {", + " kotlin {", + " ktlint().setEditorConfigPath('" + invalidPath + "')", + " }", + "}"); + setFile("src/main/kotlin/Main.kt").toResource("kotlin/ktlint/experimentalEditorConfigOverride.dirty"); + String buildOutput = gradleRunner().withArguments("spotlessApply").buildAndFail().getOutput(); + assertTrue(buildOutput.contains("EditorConfig file does not exist: ")); + assertTrue(buildOutput.contains(invalidPath)); + } + @Test void testWithHeader() throws IOException { setFile("build.gradle").toLines( From b3c59f7d4b9e214c3f4c14d9333b816e3a90a34b Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Thu, 24 Aug 2023 12:31:36 -0700 Subject: [PATCH 45/49] Fix on windows. --- .../com/diffplug/gradle/spotless/KotlinExtensionTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java index 98e2259be4..1c23728244 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java @@ -15,7 +15,7 @@ */ package com.diffplug.gradle.spotless; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.io.IOException; @@ -96,13 +96,13 @@ void testWithInvalidEditorConfigFile() throws IOException { "repositories { mavenCentral() }", "spotless {", " kotlin {", - " ktlint().setEditorConfigPath('" + invalidPath + "')", + " ktlint().setEditorConfigPath('" + invalidPath.replace("\\", "\\\\") + "')", " }", "}"); setFile("src/main/kotlin/Main.kt").toResource("kotlin/ktlint/experimentalEditorConfigOverride.dirty"); String buildOutput = gradleRunner().withArguments("spotlessApply").buildAndFail().getOutput(); - assertTrue(buildOutput.contains("EditorConfig file does not exist: ")); - assertTrue(buildOutput.contains(invalidPath)); + assertThat(buildOutput).contains("EditorConfig file does not exist: "); + assertThat(buildOutput).contains(invalidPath); } @Test From 62a957e51b723b3572bbe4beef9255e910d9c036 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Thu, 24 Aug 2023 12:31:48 -0700 Subject: [PATCH 46/49] Categorize as fix rather than new feature. --- 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 27d60e7270..2a5bd5db46 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -6,12 +6,12 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) * Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) -* Check if EditorConfig file exist for Ktlint. ([#1788](https://github.com/diffplug/spotless/pull/1788) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) * Fix configuration cache failure when using LineEnding.GIT_ATTRIBUTES ([#1644](https://github.com/diffplug/spotless/issues/1644)) * Fix configuration cache failure when formatting proto files with Buf. ([#1779]https://github.com/diffplug/spotless/pull/1779)) +* Check if EditorConfig file exist for Ktlint. ([#1788](https://github.com/diffplug/spotless/pull/1788) ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) From 83aace9d39b7037a430945e152b72580797c2a8a Mon Sep 17 00:00:00 2001 From: Goooler Date: Fri, 25 Aug 2023 09:35:35 +0800 Subject: [PATCH 47/49] Fix changelog link formats --- CHANGES.md | 4 ++-- plugin-gradle/CHANGES.md | 8 ++++---- plugin-maven/CHANGES.md | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 81af46a526..905a78b8e6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,8 +15,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ### Fixed * Use latest versions of popular style guides for `eslint` tests to fix failing `useEslintXoStandardRules` test. ([#1761](https://github.com/diffplug/spotless/pull/1761), [#1756](https://github.com/diffplug/spotless/issues/1756)) -* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) +* Add support for `prettier` version `3.0.0` and newer. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 2a5bd5db46..4e7f0d21be 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -7,11 +7,11 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) * Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ### Fixed -* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) +* Add support for `prettier` version `3.0.0` and newer. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) * Fix configuration cache failure when using LineEnding.GIT_ATTRIBUTES ([#1644](https://github.com/diffplug/spotless/issues/1644)) -* Fix configuration cache failure when formatting proto files with Buf. ([#1779]https://github.com/diffplug/spotless/pull/1779)) -* Check if EditorConfig file exist for Ktlint. ([#1788](https://github.com/diffplug/spotless/pull/1788) +* Fix configuration cache failure when formatting proto files with Buf. ([#1779](https://github.com/diffplug/spotless/pull/1779)) +* Check if EditorConfig file exist for Ktlint. ([#1788](https://github.com/diffplug/spotless/pull/1788)) ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 65a557b14f..d5526dd3c6 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -7,8 +7,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) * Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ### Fixed -* Add support for `prettier` version `3.0.0` and newer. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) -* Fix npm install calls when npm cache is not up-to-date. ([#1760]https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) +* Add support for `prettier` version `3.0.0` and newer. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) +* Fix npm install calls when npm cache is not up-to-date. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) From c23f89b5f01c2f8366ef127665351bc83bf10bd7 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 28 Aug 2023 23:16:54 -0700 Subject: [PATCH 48/49] Update changelogs. --- CHANGES.md | 2 +- plugin-gradle/CHANGES.md | 2 +- plugin-maven/CHANGES.md | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index fd8bbb4875..12b8609f82 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,7 +20,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) -* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) +* Bump default `greclipse` version to latest `4.27` -> `4.28`. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ## [2.40.0] - 2023-07-17 ### Added diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index a04bf7987b..4d9832ebf5 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -15,7 +15,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) -* Add support for Eclipse 4.28 to the Groovy formatter. ([#1775](https://github.com/diffplug/spotless/pull/1775)) +* Bump default `greclipse` version to latest `4.27` -> `4.28`. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ## [6.20.0] - 2023-07-17 ### Added diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index 5da66951fd..8278e16792 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -5,12 +5,14 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) +* Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ### Fixed * Add support for `prettier` version `3.0.0` and newer. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1751](https://github.com/diffplug/spotless/issues/1751)) * Fix npm install calls when npm cache is not up-to-date. ([#1760](https://github.com/diffplug/spotless/pull/1760), [#1750](https://github.com/diffplug/spotless/issues/1750)) ### Changes * Bump default `eslint` version to latest `8.31.0` -> `8.45.0` ([#1761](https://github.com/diffplug/spotless/pull/1761)) * Bump default `prettier` version to latest (v2) `2.8.1` -> `2.8.8`. ([#1760](https://github.com/diffplug/spotless/pull/1760)) +* Bump default `greclipse` version to latest `4.27` -> `4.28`. ([#1775](https://github.com/diffplug/spotless/pull/1775)) ## [2.38.0] - 2023-07-17 ### Added @@ -22,7 +24,6 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( * Bump default `ktlint` version to latest `0.49.1` -> `0.50.0`. ([#1741](https://github.com/diffplug/spotless/issues/1741)) * Dropped support for `ktlint 0.47.x` following our policy of supporting two breaking changes at a time. * Dropped support for deprecated `useExperimental` parameter in favor of the `ktlint_experimental` property. -* Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780)) ## [2.37.0] - 2023-05-24 ### Added From 7e574c6159954115ced357f0e5e1f0adcf9e3e24 Mon Sep 17 00:00:00 2001 From: runner Date: Tue, 29 Aug 2023 06:44:20 +0000 Subject: [PATCH 49/49] Published lib/2.41.0 --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 12b8609f82..1d78e8d932 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,8 @@ This document is intended for Spotless developers. We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] + +## [2.41.0] - 2023-08-29 ### Added * Add a `jsonPatch` step to `json` formatter configurations. This allows patching of JSON documents using [JSON Patches](https://jsonpatch.com). ([#1753](https://github.com/diffplug/spotless/pull/1753)) * Support GJF own import order. ([#1780](https://github.com/diffplug/spotless/pull/1780))