We adhere to the keepachangelog format (starting after version 1.27.0
).
- Introduce
<json><jackson/></json>
(#1492)- POTENTIALLY BREAKING
JacksonYaml
is now configured with aMap<String, Boolean>
to configure features
- POTENTIALLY BREAKING
- Jackson (
json
andyaml
) has newspaceBeforeSeparator
option- POTENTIALLY BREAKING
spaceBeforeSeparator
is defaulted to false while the formatter was behaving with<spaceBeforeSeparator>true<spaceBeforeSeparator/>
- POTENTIALLY BREAKING
- Allow to specify node executable for node-based formatters using
nodeExecutable
parameter (#1500)
- The default list of type annotations used by
formatAnnotations
has had 8 more annotations from the Checker Framework added #1494
- Spotless' custom build was replaced by
maven-plugin-development
. (#1496 fixes #554) - Prettier will now suggest to install plugins if a parser cannot be inferred from the file extension (#1511)
- POTENTIALLY BREAKING Removed support for KtLint 0.3x and 0.45.2 (#1475)
KtLint
does not maintain a stable API - before this PR, we supported every breaking change in the API since 2019.- From now on, we will support no more than 2 breaking changes at a time.
- Add option
editorConfigFile
forktLint
#142- POTENTIALLY BREAKING
ktlint
step now modifies license headers. Make sure to putlicenseHeader
afterktlint
.
- POTENTIALLY BREAKING
- Added
skipLinesMatching
option tolicenseHeader
to support formats where license header cannot be immediately added to the top of the file (e.g. xml, sh). (#1441) - Add JSON support (#1446)
- Add YAML support through Jackson (#1478)
- Added support for npm-based ESLint-formatter for javascript and typescript (#1453)
- Better suggested messages when user's default is set by JVM limitation. (#995)
- Support
ktlint
0.48+ new rule disabling syntax (#1456) fixes (#1444) - Fix subgroups leading catch all matcher.
- Bump default
ktlint
version to latest0.47.1
->0.48.1
(#1456) - Reduce spurious invalidations of the up-to-date index file (#1461)
- Bump default version for
prettier
from2.0.5
to2.8.1
(#1453)
- Bump default
ktlint
version to latest0.47.1
->0.48.0
(#1432) - Bump default
ktfmt
version to latest0.41
->0.42
(#1421)
importOrder
now support groups of imports without blank lines (#1401)
- Don't treat
@Value
as a type annotation #1367 - Support
ktlint_disabled_rules
inktlint
0.47.x #1378 - Share git repositories across projects when using ratchet (#1426)
- Bump default
ktfmt
version to latest0.40
->0.41
(#1340) - Bump default
scalafmt
version to latest3.5.9
->3.6.1
(#1373) - Bump default
diktat
version to latest1.2.3
->1.2.4.2
(#1393) - Bump default
palantir-java-format
version to latest2.10
->2.28
(#1393)
replace
andreplaceRegex
steps now allow you to replace something with an empty string, previously this would generate a null pointer exception. (fixes #1359)
formatAnnotations
step to correct formatting of Java type annotations. It puts type annotations on the same line as the type that they qualify. Run it after a Java formatting step, such asgoogleJavaFormat
. (#1275)
- Bump default
ktfmt
version to latest0.39
->0.40
(#1312) - Bump default
ktlint
version to latest0.46.1
->0.47.1
(#1303)- Also restored support for older versions of ktlint back to
0.31.0
- Also restored support for older versions of ktlint back to
scalafmt
integration now has a configuration optionmajorScalaVersion
that allows you to configure the Scala version that gets resolved from the maven artifact (#1283)
- Add the
ktlint
rule in error messages whenktlint
fails to apply a fix (#1279) - Bump default
scalafmt
to latest3.0.8
->3.5.9
(removed support for pre-3.0.0
) (#1283)
- Bump default
diktat
version to latest1.2.1
->1.2.3
(#1266)
- Clang and Black no longer break the build when the binary is unavailable, if they will not be run during that build (#1257).
- License header support for Kotlin files without
package
or@file
but do at least haveimport
(#1263).
- Bump default
ktlint
version to latest0.45.2
->0.46.1
(#1239)- Minimum supported version also bumped to
0.46.0
(we have abandoned strong backward compatibility forktlint
, from here on out Spotless will only support the most-recent breaking change).
- Minimum supported version also bumped to
- Bump default
diktat
version to latest1.1.0
->1.2.1
(#1246)- Minimum supported version also bumped to
1.2.1
(diktat is based on ktlint and has the same backward compatibility issues).
- Minimum supported version also bumped to
- Bump default
ktfmt
version to latest0.37
->0.39
(#1240)
PalantirJavaFormatStep
no longer needs the--add-exports
calls inMAVEN_OPTS
or.mvn/jvm.config
. (#1233)
- (Second try)
googleJavaFormat
andremoveUnusedImports
works on JDK16+ without jvm args workaround. (#1228)- If you have a bunch of
--add-exports
calls inMAVEN_OPTS
or.mvn/jvm.config
, you should be able to remove them. (fixes #834)
- If you have a bunch of
googleJavaFormat
andremoveUnusedImports
works on JDK16+ without jvm args workaround. (#1224)- If you have a bunch of
--add-exports
calls inMAVEN_OPTS
or.mvn/jvm.config
, you should be able to remove them. (fixes #834)
- If you have a bunch of
- Update the
black
version regex to fix19.10b0
and earlier. (fixes #1195, regression introduced in2.22.2
)
- Bump default
ktfmt
version to latest0.36
->0.37
. (#1200)
- Bump default
diktat
version to latest1.0.1
->1.1.0
. (#1190)
- Bump default
ktfmt
version to latest0.35
->0.36
. (#1183) - Bump default
google-java-format
version to latest1.13.0
->1.15.0
.This means it is no longer necessary to use the--add-exports
workaround (fixes #834).--add-exports
workaround is still needed.
- Fixed support for Python Black's new version reporting. (#1170)
- Error messages for unexpected file encoding now works on Java 8. (fixes #1081)
- Bump default
black
version to latest19.10b0
->22.3.0
. (#1170) - Bump default
ktfmt
version to latest0.34
->0.35
. (#1159) - Bump default
ktlint
version to latest0.43.2
->0.45.2
. (#1177)
- Git user config and system config also included for defaultEndings configuration. (#540)
- Added support for setting custom parameters for Kotlin ktfmt in Maven plugin. (#1145)
- Magic value 'NONE' for disabling ratchet functionality (#1134)
- Use SLF4J for logging (#1116)
- Bump default ktfmt
0.30
->0.31
(#1118).
- Add full support for git worktrees (#1119).
- Bump default versions of formatters (#1095).
- google-java-format
1.12.0
->1.13.0
- ktfmt
0.29
->0.30
- google-java-format
- Added support for git property
core.autocrlf
(#540)
- Added support for the palantir-java-format Java formatter (#1083).
- Enabling the upToDateChecking with the plugin configured inside pluginManagement, with an additional dependency and running under Maven 3.6.3 leads to a java.io.NotSerializableException. (#1074).
- Update IndentStep to allow leading space on multiline comments (#1072).
- Support custom index files for incremental up-to-date checking (#1055).
- Remove Java files from default Maven Groovy formatting (#1051).
- Before this release, the default target of groovy was
src/main/groovy/**/*.groovy
src/test/groovy/**/*.groovy
src/main/java/**/*.java
src/test/java/**/*.java
- This release removes the
.java
includes.
- Before this release, the default target of groovy was
- Bumped default DiKTat from
0.4.0
to1.0.1
. This is a breaking change for DiKTat users on the default version, because some rules were renamed/changed. Check DiKTat changelog for details.
ratchetFrom
is now faster (#1038).
- Bumped default ktlint from
0.43.0
to0.43.2
.
- Bump jgit version (#992).
- jgit
5.10.0.202012080955-r
->5.13.0.202109080827-r
- jgit
- Bump default formatter versions (#989)
- google-java-format
1.11.0
->1.12.0
- ktlint
0.42.1
->0.43.0
- ktfmt
0.27
->0.29
- scalafmt
3.0.0
->3.0.8
- google-java-format
- Added support and bump Eclipse formatter default versions to
4.21
foreclipse-groovy
. Change is only applied for JVM 11+. - Added support for ktlint's FilenameRule (#974).
- Revert change from 2.17.2 regarding skip bug because fixing the skip bug caused inconsistent behavior between
check.skip
andapply.skip
. - skip bug if ratchetFrom is specified, the build will still fail in if no Git repository is found, even if
skip
is true (new fix).
- Temporary workspace deletion for Eclipse based formatters on JVM shutdown (#967). Change is only applied for Eclipse versions using JVM 11+, no back-port to older versions is planned.
- skip bug if ratchetFrom is specified, the build will still fail in if no Git repository is found, even if
skip
is true.
- module-info formatting in
eclipse-jdt
versions4.20
and4.21
. Note that the problem also affects older versions. - Added workaround to support projects using git worktrees (#965)
- Added
wildcardsLast
option for JavaimportOrder
(#956)
- Added support for JBDI bind list params in sql formatter (#955)
- Added support for custom JSR223 formatters (#945)
- Added support for formatting and sorting Maven POMs (#946)
- Added support for calling local binary formatters (#949)
- Added support and bump Eclipse formatter default versions to
4.21
foreclipse-cdt
,eclipse-jdt
,eclipse-wtp
. Change is only applied for JVM 11+. - Added
groupArtifact
option forgoogle-java-format
(#944)
- Added support and bump Eclipse formatter default versions for JVM 11+. For older JVMs the previous defaults remain.
eclipse-cdt
from4.16
to4.20
eclipse-groovy
from4.19
to4.20
eclipse-jdt
from4.19
to4.20
eclipse-wtp
from4.18
to4.20
- Added support for
google-java-format
'sskip-reflowing-long-strings
option (#929)
- Added support for scalafmt 3.0.0 and bump default scalafmt version to
3.0.0
(#913). - Bump default versions (#915)
ktfmt
from0.24
to0.27
ktlint
from0.35.0
to0.42.1
google-java-format
from1.10.0
to1.11.0
- Improved SQL formatting with respect to comments
- Fixed IndexOutOfBoundsException in parallel execution of
eclipse-groovy
formatter (#877)
- Added support for
eclipse-cdt
at4.19.0
. Note that version requires Java 11 or higher. - Added support for
eclipse-groovy
at4.18.0
and4.19.0
. - Added support for
eclipse-wtp
at4.19.0
. Note that version requires Java 11 or higher.
- Bump
eclipse-groovy
default version from4.17.0
to4.19.0
.
- Node is re-installed if some other build step removed it (#863)
- Update ktfmt from 0.21 to 0.24
- The
<url>
field in the maven POM is now set correctly (#798)
- Explicitly separate target file from git arguments when parsing year for license header to prevent command from failing on argument-like paths (#847)
- LicenseHeaderStep treats address as copyright year (#716)
- Fix license header bug for years in range (#840).
- Added support for
eclipse-jdt
at4.19.0
.
- Bump
eclipse-jdt
default version from4.18.0
to4.19.0
. - Bump
google-java-format
default version from1.9
to1.10.0
. - Expose configuration exceptions from scalafmt (#837)
- Bump ktfmt to 0.21 and add support to Google and Kotlinlang formats (#812)
- Allow licence headers to be blank (#801).
- Support for diktat (#789)
- Added ability to specify dropbox style for ktfmt
<style>DROPBOX</style>
(#764) - Added support for
eclipse-cdt
,eclipse-jdt
, andeclipse-wtp
at4.18.0
.
- Bump
eclipse-jdt
default version from4.17.0
to4.18.0
. - Bump
eclipse-wtp
default version from4.17.0
to4.18.0
. - Bump
ktfmt
default version from0.16
to0.19
(#748 and #773).
- Fixed
ratchetFrom
support for git-submodule (#746). - Fixed
ratchetFrom
excess memory consumption (#735). ktfmt
v0.19+ with dropbox-style works again (#765).prettier
no longer throws errors on empty files (#751).- Fixed error when running on root of windows mountpoint (#760).
- Fix broken test for spotlessFiles parameter on windows (#737).
- Fixed a bug which occurred if the root directory of the project was also the filesystem root (#732).
- Upgraded org.codehaus.plexus:plexus-utils to its latest version (3.3.0) to improve directory scanning time (#729).
- Whether this helps with the directory scanning time is unconfirmed, please report your experience in the issue above.
- Added support to npm-based steps for picking up
.npmrc
files (#727)
- Fixed bug in import order which woudld cause trailing empty strings to get dropped (731)
- e.g.
<importorder><order>java,javafx,com.mycompany,</order></importorder>
- e.g.
- Bump JGit from
5.8.0
to5.9.0
to improve performance (#726)
- Added support for eclipse-cdt 4.14.0, 4.16.0 and 4.17.0 (#722).
- Added support for eclipse-groovy 4.14.0, 4.15.0, 4.16.0 and 4.17.0 (#722).
- Added support for eclipse-jdt 4.17.0 (#722).
- Added support for eclipse-wtp 4.14.0, 4.15.0, 4.16.0 and 4.17.0 (#722).
- Updated default eclipse-cdt from 4.13.0 to 4.16.0 (#722). Note that version 4.17.0 is supported, but requires Java 11 or higher.
- Updated default eclipse-groovy from 4.13.0 to 4.17.0 (#722).
- Updated default eclipse-jdt from 4.16.0 to 4.17.0 (#722).
- Updated default eclipse-wtp from 4.13.0 to 4.17.0 (#722).
- Improve speed by ~4x when using
<ratchetFrom>
(#701).
- Don't assume that file content passed into Prettier is at least 50 characters (#699).
- Improved JRE parsing to handle strings like
16-loom
(fixes #693). - Added support for groovy formatting (#697)
- New option
<toggleOffOn />
which allows the tagsspotless:off
andspotless:on
to protect sections of code from the rest of the formatters (#691).
- When applying license headers for the first time, we are now more lenient about parsing existing years from the header (#690).
<googleJavaFormat>
default version is now1.9
on JDK 11+, while continuing to be1.7
on earlier JDKs. This is especially helpful to<removeUnusedImports />
, since it always uses the default version of GJF (fixes #681).
- Added support for eclipse-jdt 4.14.0, 4.15.0 and 4.16.0 (#678).
- Updated default eclipse-jdt from 4.13.0 to 4.16.0 (#678).
<ktlint>
is now more robust when parsing version string for version-dependent implementation details, fixes #668.
- Bump default ktfmt from 0.13 to 0.16 (#642).
<importOrder />
was broken (fixes #663).<ratchetFrom>
was broken when set at global level (fixes #664).
- Git-native handling of line endings was broken, now fixed (#639).
- You can now ratchet a project's style by limiting Spotless only to files which have changed since a given git reference, e.g.
ratchetFrom 'origin/main'
. (#590) - Huge speed improvement for multi-module projects thanks to improved cross-project classloader caching (#571, fixes #559).
- If you specify
-DspotlessSetLicenseHeaderYearsFromGitHistory=true
, Spotless will perform an expensive search through git history to determine the oldest and newest commits for each file, and uses that to determine license header years. (#626) prettier
will now autodetect the parser (and formatter) to use based on the filename, unless you override this usingconfig
orconfigFile
with the optionparser
orfilepath
(#620).- Added ANTLR4 support (#326).
- BREAKING the default includes for
<typescript>
and<cpp>
were removed, and will now generate an error if an<include>
is not specified. There is no well-established convention for these languages in the maven ecosystem, and the performance of the default includes is far worse than a user-provided one. If you dislike this change, please complain in #634, it would not be a breaking change to bring the defaults back. - BREAKING inside the
<cpp>
block,<eclipse>
has been renamed to<eclipseCdt>
to avoid any confusion with the java<eclipse>
(#636). - BREAKING the long-deprecated
<xml>
and<css>
formats have been removed, in favor of the long-available<eclipseWtp>
step which is available in every generic format (#630).- This probably doesn't affect you, but if it does, you just need to change
<xml>...
into<formats><format><eclipseWtp><type>XML</type>...
- In
1.15.0
(released 2018-09-23), we added support forxml
andcss
formats using the Eclipse WTP. - In
1.18.0
(released 2019-02-11), we deprecated these, in favor of the genericeclipseWtp
step which is available for all generic formats. This allows you to have multiple XML and CSS formats, rather than just one. - And now we removed them entirely.
- This probably doesn't affect you, but if it does, you just need to change
- Nodejs-based formatters
prettier
andtsfmt
now use native node instead of the J2V8 approach. (#606)- This removes the dependency to the no-longer-maintained Linux/Windows/macOs variants of J2V8.
- This enables spotless to use the latest
prettier
versions (instead of being stuck at prettier version <=1.19.0
) - Bumped default versions, prettier
1.16.4
->2.0.5
, tslint5.12.1
->6.1.2
licenseHeader
is now more robust when parsing years from existing license headers. (#593)
- Shared library used by the nodejs-based steps used to be extracted into the user home directory, but now it is extracted into a temporary directory and deleted on VM shutdown. (#586)
- If you specified a config file for a formatter, it used to be needlessly copied to a randomly-named file in the build folder. This could cause performance to suffer, especially for large multi-project builds that use eclipse. (#572)
- Note: if you are extracting config files from resource jars, we still have bad performance for this case, see #559 for details.
- If the encoding was set incorrectly,
spotless:apply
could clobber special characters. Spotless now prevents this, and helps to suggest the correct encoding. (#575)
- Support for google-java-format 1.8 (requires build to run on Java 11+) (#562)
- Support for ktfmt 0.13 (requires build to run on Java 11+) (#569)
mvn spotless:apply
is now guaranteed to be idempotent, even if some of the formatters are not. SeePADDEDCELL.md
for details if you're curious. (#565)- Updated a bunch of dependencies, most notably jgit
5.5.0.201909110433-r
->5.7.0.202003110725-r
. (#564)
- Support for prettier (#555).
- Support for tsfmt (#548).
- Eclipse-WTP formatter (web tools platform, not java) handles some character encodings incorrectly on OS with non-unicode default file encoding #545. Fixed for Eclipse-WTP formatter Eclipse version 4.13.0 (default version).
- Enable IntelliJ-compatible token
$today.year
for specifying the year in license header files. (#542)
- Fix scala and kotlin maven config documentation.
- Eclipse-WTP formatter (web tools platform, not java) could encounter errors in parallel multiproject builds #492. Fixed for Eclipse-WTP formatter Eclipse version 4.13.0 (default version).
- Should be no changes whatsoever! Released only for consistency with lib and plugin-gradle.
- Revert the change in console display of errors from 1.26.0 (#485) because of these problems.
- Bugfix: Fix NPE in EclipseXmlFormatterStepImpl (#489)
- Fix project URLs in poms. (#478)
- Fix
ImportSorter
crashing with empty files. (#474)- Fixes #305 StringIndexOutOfBoundsException for empty Groovy file when performing importOrder
- Bugfix: CDT version
4.12.0
now properly uses9.8
, whereas before it used9.7
. (#482) - Updated default eclipse-wtp from 4.12.0 to 4.13.0 (#482)
- Updated default eclipse-groovy from 4.12.0 to 4.13.0 (#482)
- Updated default eclipse-jdt from 4.12.0 to 4.13.0 (#482)
- Updated default eclipse-cdt from 4.12.0 to 4.13.0 (#482)
- Bump default version of KtLint from
0.34.2
to0.35.0
. (#473) - Several improvements to the console display of formatting errors. (#465)
- Fixed problem which could cause a stale
.jar
to be published. (#471)
- KNOWN ISSUE: published jar is the same as
1.24.3
, causesInvalid plugin descriptor
. (#470) - Add support for ktlint
0.34+
, and bump default version from0.32.0
to0.34.2
. (#469)
- Update jgit from
5.3.2.201906051522-r
to5.5.0.201909110433-r
. (#445)- Fixes #410 AccessDeniedException in MinGW/ GitBash.
- Also fixes occasional hang on NFS due to filesystem timers.
- Eclipse-based formatters used to leave temporary files around (#447). This is now fixed, but only for eclipse 4.12+, no back-port to older Eclipse formatter versions is planned. (#451)
- Bumped
scalafmt
default version from1.1.0
to2.0.1
, since there are bugs in the old default (#458).
- Fixes class loading issue with Java 9+ (#426).
- Updated default eclipse-wtp from 4.8.0 to 4.12.0 (#423).
- Updated default eclipse-groovy from 4.10 to 4.12.0 (#423).
- Updated default eclipse-jdt from 4.11.0 to 4.12.0 (#423).
- Updated default eclipse-cdt from 4.11.0 to 4.12.0 (#423).
- KNOWN BUG - accidentally published CDT 9.7 rather than 9.8 fixed in 1.26.0
- Added new maven coordinates for scalafmt 2.0.0+, maintains backwards compatability (#415)
- Fixes incorrect M2 cache directory path handling of Eclipse based formatters (#401)
- Update jgit from
4.9.0.201710071750-r
to5.3.2.201906051522-r
because gradle project is sometimes broken byapache httpcomponents
in transitive dependency. (#407)
- Updated default ktlint from 0.21.0 to 0.32.0, and Maven coords to com.pinterest (#394)
- Updated default eclipse-cdt from 4.7.3a to 4.11.0 (#390).
- Added
-DspotlessFiles
switch to allow targeting specific files (#392)
- Fixes incorrect plugin and pom metadata in
1.21.0
(#388).
- Updated default eclipse-wtp from 4.7.3b to 4.8.0 (#382).
- Updated default eclipse-groovy from 4.8.1 to 4.10.0 (#382).
- Updated default eclipse-jdt from 4.10.0 to 4.11.0 (#384).
- Updated default eclipse-wtp from 4.7.3a to 4.7.3b (#371).
- Default behavior of XML formatter changed to ignore external URIs (#369).
- WARNING RESOLVED: By default, xml formatter no longer downloads external entities. You can opt-in to resolve external entities by setting resolveExternalURI to true. However, if you do opt-in, be sure that all external entities are referenced over https and not http, or you may be vulnerable to XXE attacks.
WARNING: xml formatter in this version may be vulnerable to XXE attacks, fixed in 1.20.0 (see #358).
- Security fix: Updated groovy, c/c++, and eclipse WTP formatters so that they download their source jars securely using
https
rather thanhttp
(#360). - Updated default eclipse-jdt from 4.9.0 to 4.10.0 (#368)
- Add a skip parameter to apply mojo to enable to bypass it if desired. (#367).
WARNING: xml formatter in this version may be vulnerable to XXE attacks, fixed in 1.20.0 (see #358).
- Provided eclipse-wtp formatters as part of custom source format element. (#325). This change obsoletes the CSS and XML source elements.
- Updated default google-java-format from 1.5 to 1.7 (#335).
<importOrder><file>somefile</file></importOrder>
is now lazy (#218).
WARNING: xml formatter in this version may be vulnerable to XXE attacks, fixed in 1.20.0 (see #358).
- Updated default eclipse-jdt from 4.7.3a to 4.9.0 (#316). New version addresses enum-tab formatting bug in 4.8 (#314).
WARNING: xml formatter in this version may be vulnerable to XXE attacks, fixed in 1.20.0 (see #358).
- Added support for Eclipse's CSS formatter from WTP (#311).
WARNING: xml formatter in this version may be vulnerable to XXE attacks, fixed in 1.20.0 (see #358).
- Added
xml
support (#140) using formatter of Eclipse WTP 3.9.5 (#241). - Added C/C++ support using formatter of Eclipse CDT 9.4.3 (#232).
- Skip
package-info.java
andmodule-info.java
files from license header formatting. (#273) - Updated JSR305 annotation from 3.0.0 to 3.0.2 (#274)
- Migrated from FindBugs annotations 3.0.0 to SpotBugs annotations 3.1.6 (#274)
- Fix Maven version prerequisite in the generated POM (#289)
- Updated default eclipse-jdt from 4.7.2 to 4.7.3a (#263). New version fixes a bug preventing Java code formatting within JavaDoc comments (#191).
- Updated default groovy-eclipse from 4.6.3 to 4.8.0 (#244). New version allows to ignore internal formatter errors/warnings.
- Require 3.1.0+ version of Maven. (#259)
- Fixed integration with latest versions of scalafmt. (#260)
- Fixed a bug in configuration file resolution on Windows when file is denoted by a URL. (#254)
- Fixed a bug in
LicenseHeaderStep
which caused an exception with some malformed date-aware licenses. (#222) - Added support for Kotlin and Ktlint in Maven plugin (#223).
- Updated default ktlint from 0.14.0 to 0.21.0
- Added support for multiple generic formatters in Maven plugin (#242).
- Fixed published POM to include dependency on plexus-resources (#213).
- Improved support for multi-module Maven projects (#210).
- Added generic format support for maven-plugin (#209).
- Fix build to ensure that published versions never have snapshot deps (#205).
- Maven plugin written by Konstantin Lutovich.
- Full support for the Java and Scala formatters.
- Initial release, after user feedback we will ship
1.x
.