diff --git a/CHANGES.md b/CHANGES.md index 5fac10fd37..d5aeff6add 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] +### Changes +- Bump default `adocfmt` version `0.2.0` -> `0.3.1`, which adds table formatting support (`formatTables`, `tableLayout`, `tableMaxLineWidth`, `tableBlankLines`). ## [4.9.0] - 2026-07-27 ### Added diff --git a/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtConfig.java b/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtConfig.java index c5b1d2cb64..e41c64e305 100644 --- a/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtConfig.java +++ b/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtConfig.java @@ -34,6 +34,10 @@ public class AdocfmtConfig implements Serializable { public boolean normalizeOrderedListMarkers = false; public boolean ensureHeadingBlankLines = true; public boolean ensureSourceDelimiters = false; + public boolean formatTables = true; + public String tableLayout = "AUTO"; + public int tableMaxLineWidth = 120; + public String tableBlankLines = "ALL"; public AdocfmtConfig() {} @@ -53,13 +57,18 @@ public boolean equals(Object o) { && normalizeListBullets == other.normalizeListBullets && normalizeOrderedListMarkers == other.normalizeOrderedListMarkers && ensureHeadingBlankLines == other.ensureHeadingBlankLines - && ensureSourceDelimiters == other.ensureSourceDelimiters; + && ensureSourceDelimiters == other.ensureSourceDelimiters + && formatTables == other.formatTables + && Objects.equals(tableLayout, other.tableLayout) + && tableMaxLineWidth == other.tableMaxLineWidth + && Objects.equals(tableBlankLines, other.tableBlankLines); } @Override public int hashCode() { return Objects.hash(normalizeSetextHeadings, collapseConsecutiveBlankLines, oneSentencePerLine, normalizeBlockDelimiters, removeTrailingHeaderEqualsSign, titleCase, removeTrailingWhitespace, - normalizeListBullets, normalizeOrderedListMarkers, ensureHeadingBlankLines, ensureSourceDelimiters); + normalizeListBullets, normalizeOrderedListMarkers, ensureHeadingBlankLines, ensureSourceDelimiters, + formatTables, tableLayout, tableMaxLineWidth, tableBlankLines); } } diff --git a/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtStep.java b/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtStep.java index 0072a46b8e..69a8b6bd30 100644 --- a/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtStep.java +++ b/lib/src/main/java/com/diffplug/spotless/asciidoc/AdocfmtStep.java @@ -19,6 +19,7 @@ import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Locale; import java.util.Objects; import com.diffplug.spotless.FormatterFunc; @@ -30,7 +31,7 @@ public final class AdocfmtStep implements Serializable { @Serial private static final long serialVersionUID = 1L; - private static final String DEFAULT_VERSION = "0.2.0"; + private static final String DEFAULT_VERSION = "0.3.1"; private static final String NAME = "adocfmt"; private static final String MAVEN_COORDINATE = "org.drjekyll:adocfmt:"; @@ -101,6 +102,20 @@ FormatterFunc createFormat() throws Exception { builder = builderClass.getMethod("normalizeOrderedListMarkers", boolean.class).invoke(builder, config.normalizeOrderedListMarkers); builder = builderClass.getMethod("ensureHeadingBlankLines", boolean.class).invoke(builder, config.ensureHeadingBlankLines); builder = builderClass.getMethod("ensureSourceDelimiters", boolean.class).invoke(builder, config.ensureSourceDelimiters); + builder = builderClass.getMethod("formatTables", boolean.class).invoke(builder, config.formatTables); + if (config.tableLayout != null) { + final Class tableLayoutClass = classLoader.loadClass("org.drjekyll.adocfmt.TableLayout"); + @SuppressWarnings({"rawtypes", "unchecked"}) + final Object layoutEnum = Enum.valueOf((Class) tableLayoutClass, config.tableLayout.toUpperCase(Locale.ROOT)); + builder = builderClass.getMethod("tableLayout", tableLayoutClass).invoke(builder, layoutEnum); + } + builder = builderClass.getMethod("tableMaxLineWidth", int.class).invoke(builder, config.tableMaxLineWidth); + if (config.tableBlankLines != null) { + final Class tableBlankLinesClass = classLoader.loadClass("org.drjekyll.adocfmt.TableBlankLines"); + @SuppressWarnings({"rawtypes", "unchecked"}) + final Object blankLinesEnum = Enum.valueOf((Class) tableBlankLinesClass, config.tableBlankLines.toUpperCase(Locale.ROOT)); + builder = builderClass.getMethod("tableBlankLines", tableBlankLinesClass).invoke(builder, blankLinesEnum); + } final Object adocfmtConfig = builderClass.getMethod("build").invoke(builder); final Object formatter = formatterClass.getConstructor(configClass).newInstance(adocfmtConfig); diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 296d18c172..7923949bb0 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] +### Changes +- Bump default `adocfmt` version `0.2.0` -> `0.3.1`, which adds table formatting support (`formatTables`, `tableLayout`, `tableMaxLineWidth`, `tableBlankLines`). ## [8.9.0] - 2026-07-27 ### Added diff --git a/plugin-gradle/README.md b/plugin-gradle/README.md index d1b082ecca..3c2c25d3bc 100644 --- a/plugin-gradle/README.md +++ b/plugin-gradle/README.md @@ -871,7 +871,7 @@ spotless { [homepage](https://github.com/dheid/adocfmt). [available versions](https://search.maven.org/artifact/org.drjekyll/adocfmt). ```gradle -adocfmt('0.2.0') // version is optional +adocfmt('0.3.1') // version is optional .normalizeSetextHeadings(false) // convert === underlines to ATX == (default: false) .collapseConsecutiveBlankLines(true) // max 1 blank line (default: true) .oneSentencePerLine(false) // each sentence on its own line (default: false) @@ -883,6 +883,10 @@ adocfmt('0.2.0') // version is optional .normalizeOrderedListMarkers(false) // 1. -> . (default: false) .ensureHeadingBlankLines(true) // blank line before/after headings (default: true) .ensureSourceDelimiters(false) // wrap [source] in ---- (default: false) + .formatTables(true) // format AsciiDoc tables (default: true) + .tableLayout('AUTO') // AUTO, EXPANDED, PRESERVE (default: AUTO) + .tableMaxLineWidth(120) // max line width for compact table layout (default: 120) + .tableBlankLines('ALL') // NONE, HEADER, ALL, PRESERVE (default: ALL) ``` Options default to `true` or `false` as shown above. This formatter is designed to help you maintain a clean, consistent AsciiDoc structure. Surface-altering options like `oneSentencePerLine` and `normalizeSetextHeadings` default to `false` so that zero-config formatting is conservative; opt in explicitly if you want those transforms. diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/AsciidocExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/AsciidocExtension.java index cf8f3c883f..1f97815fd4 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/AsciidocExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/AsciidocExtension.java @@ -110,6 +110,30 @@ public AdocfmtFormatterConfig ensureSourceDelimiters(boolean ensureSourceDelimit replaceStep(AdocfmtStep.create(version, provisioner(), config)); return this; } + + public AdocfmtFormatterConfig formatTables(boolean formatTables) { + config.formatTables = formatTables; + replaceStep(AdocfmtStep.create(version, provisioner(), config)); + return this; + } + + public AdocfmtFormatterConfig tableLayout(String tableLayout) { + config.tableLayout = tableLayout; + replaceStep(AdocfmtStep.create(version, provisioner(), config)); + return this; + } + + public AdocfmtFormatterConfig tableMaxLineWidth(int tableMaxLineWidth) { + config.tableMaxLineWidth = tableMaxLineWidth; + replaceStep(AdocfmtStep.create(version, provisioner(), config)); + return this; + } + + public AdocfmtFormatterConfig tableBlankLines(String tableBlankLines) { + config.tableBlankLines = tableBlankLines; + replaceStep(AdocfmtStep.create(version, provisioner(), config)); + return this; + } } @Override diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/AsciidocExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/AsciidocExtensionTest.java index 2025de9b78..546d98c2c5 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/AsciidocExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/AsciidocExtensionTest.java @@ -31,7 +31,7 @@ void missingTargetFails() throws IOException { repositories { mavenCentral() } spotless { asciidoc { - adocfmt('0.2.0') + adocfmt('0.3.1') } } """); @@ -52,7 +52,7 @@ void integration() throws IOException { spotless { asciidoc { target 'test.adoc' - adocfmt('0.2.0') + adocfmt('0.3.1') .normalizeSetextHeadings(true) .collapseConsecutiveBlankLines(true) .oneSentencePerLine(true) @@ -64,6 +64,10 @@ void integration() throws IOException { .normalizeOrderedListMarkers(true) .ensureHeadingBlankLines(true) .ensureSourceDelimiters(true) + .formatTables(true) + .tableLayout('AUTO') + .tableMaxLineWidth(120) + .tableBlankLines('ALL') } } """); diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index d87cc8bedc..6f750cdac6 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] +### Changes +- Bump default `adocfmt` version `0.2.0` -> `0.3.1`, which adds table formatting support (``, ``, ``, ``). ## [3.9.0] - 2026-07-27 ### Added diff --git a/plugin-maven/README.md b/plugin-maven/README.md index efb82242e2..70153c0465 100644 --- a/plugin-maven/README.md +++ b/plugin-maven/README.md @@ -744,7 +744,7 @@ Additionally, `editorConfigOverride` options will override what's supplied in `. ```xml - 0.2.0 + 0.3.1 true true true @@ -756,6 +756,10 @@ Additionally, `editorConfigOverride` options will override what's supplied in `. false true false + true + AUTO + 120 + ALL ``` diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/asciidoc/Adocfmt.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/asciidoc/Adocfmt.java index 51362d3162..8a9b86ced8 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/asciidoc/Adocfmt.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/asciidoc/Adocfmt.java @@ -60,6 +60,18 @@ public class Adocfmt implements FormatterStepFactory { @Parameter private Boolean ensureSourceDelimiters; + @Parameter + private Boolean formatTables; + + @Parameter + private String tableLayout; + + @Parameter + private Integer tableMaxLineWidth; + + @Parameter + private String tableBlankLines; + @Override public FormatterStep newFormatterStep(FormatterStepConfig config) { String version = this.version != null ? this.version : AdocfmtStep.defaultVersion(); @@ -86,6 +98,14 @@ public FormatterStep newFormatterStep(FormatterStepConfig config) { adocfmtConfig.ensureHeadingBlankLines = ensureHeadingBlankLines; if (ensureSourceDelimiters != null) adocfmtConfig.ensureSourceDelimiters = ensureSourceDelimiters; + if (formatTables != null) + adocfmtConfig.formatTables = formatTables; + if (tableLayout != null) + adocfmtConfig.tableLayout = tableLayout; + if (tableMaxLineWidth != null) + adocfmtConfig.tableMaxLineWidth = tableMaxLineWidth; + if (tableBlankLines != null) + adocfmtConfig.tableBlankLines = tableBlankLines; return AdocfmtStep.create(version, config.getProvisioner(), adocfmtConfig); } } diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/asciidoc/AdocfmtMavenTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/asciidoc/AdocfmtMavenTest.java index 87926e0be3..7bc03e32a8 100644 --- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/asciidoc/AdocfmtMavenTest.java +++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/asciidoc/AdocfmtMavenTest.java @@ -27,7 +27,7 @@ public class AdocfmtMavenTest extends MavenIntegrationHarness { public void missingIncludesFails() throws Exception { writePom(groupWithSteps("asciidoc", "", - " 0.2.0", + " 0.3.1", "")); ProcessRunner.Result result = mavenRunner().withArguments("spotless:apply").runHasError(); assertThat(result.stdOutUtf8()).contains("You must specify some files to include"); @@ -38,7 +38,7 @@ public void testAdocfmt() throws Exception { writePomWithAsciidocSteps( """ - 0.2.0 + 0.3.1 true true true @@ -50,6 +50,10 @@ public void testAdocfmt() throws Exception { true true true + true + AUTO + 120 + ALL """); diff --git a/testlib/src/test/java/com/diffplug/spotless/asciidoc/AdocfmtStepTest.java b/testlib/src/test/java/com/diffplug/spotless/asciidoc/AdocfmtStepTest.java index b41a9157f4..9583c80bb7 100644 --- a/testlib/src/test/java/com/diffplug/spotless/asciidoc/AdocfmtStepTest.java +++ b/testlib/src/test/java/com/diffplug/spotless/asciidoc/AdocfmtStepTest.java @@ -36,6 +36,10 @@ void complexBehavior() { config.normalizeListBullets = true; config.normalizeOrderedListMarkers = true; config.ensureSourceDelimiters = true; + config.formatTables = true; + config.tableLayout = "AUTO"; + config.tableMaxLineWidth = 120; + config.tableBlankLines = "ALL"; FormatterStep step = AdocfmtStep.create(AdocfmtStep.defaultVersion(), TestProvisioner.mavenCentral(), config); StepHarness.forStep(step).testResource("asciidoc/adocfmt/dirty.adoc", "asciidoc/adocfmt/clean_complex.adoc"); } @@ -56,6 +60,8 @@ void equality() { // fields drive create(); never mutate a config object after passing it to create() boolean titleCase = false; boolean normalizeListBullets = false; + boolean formatTables = true; + String tableLayout = "AUTO"; @Override protected void setupTest(API api) { @@ -68,6 +74,12 @@ protected void setupTest(API api) { titleCase = false; normalizeListBullets = true; api.areDifferentThan(); + normalizeListBullets = false; + formatTables = false; + api.areDifferentThan(); + formatTables = true; + tableLayout = "EXPANDED"; + api.areDifferentThan(); } @Override @@ -75,6 +87,8 @@ protected FormatterStep create() { AdocfmtConfig config = new AdocfmtConfig(); config.titleCase = titleCase; config.normalizeListBullets = normalizeListBullets; + config.formatTables = formatTables; + config.tableLayout = tableLayout; return AdocfmtStep.create(AdocfmtStep.defaultVersion(), TestProvisioner.mavenCentral(), config); } }.testEquals();