Releases: pinterest/ktlint
1.8.0
🆕 Features
-
Set languageVersion to KOTLIN_2_0 to ensure metadata compatibility with Kotlin 2.0 - #3110, by @hugoncosta
-
Simplify creation of a custom ruleset - #3118, by @paul-dingemans
-
Add rule
then-spacing- #3129, by @paul-dingemans -
Add CLI option '--ignore-autocorrect-failures' - #3157, by @paul-dingemans
-
Allow
_as backing property name (needed for KEEP-412) - #3166, by @serras -
Promote experimental rules to standard rules - #3171, by @paul-dingemans:
- blank-line-between-when-conditions
- kdoc
- "mixed-condition-operators"
- square-brackets-spacing
- when-entry-bracing
🔧 Fixes
-
Fix link to maven wrapper - #3112, by @paul-dingemans
-
Fix links in documentation, and fix some typo's/formatting - #3127, by @paul-dingemans
-
Fix indent of function parameter with multiline expression in
android_studio- #3131, by @paul-dingemans -
fix(deps): update dependency com.vanniktech:gradle-maven-publish-plugin to v0.35.0 - #3169, by @renovate[bot]
💬 Other
-
Validate @SinceKtlint annotations with test and uniformize existing rules - #3101, by @hugoncosta
-
Fix snapshot repository location - #3106, by @paul-dingemans
-
Add code vulnerability scanning with CodeQL - #3113, by @paul-dingemans
-
Disable gradle build cache in code scanning workflow - #3116, by @paul-dingemans
-
Restrict access to GitHub token to "contents: read" - #3115, by @paul-dingemans
-
Change language for code-scanning workflow to 'kotlin' - #3117, by @paul-dingemans
-
Allow publication documents workflow to write to Github pages - #3121, by @paul-dingemans
-
Allow manual dispatch of workflow for publishing documentation - #3122, by @paul-dingemans
-
Set contents write permission on workflows for publishing documentation - #3123, by @paul-dingemans
-
Switch publication config to vanniktech's maven-publish plugin - #3068, by @mateuszkwiecinski
-
Add SECURITY.md file - #3114, by @paul-dingemans
-
Add public key to GitHub - #3139, by @shashachu
-
Ignore renovate updates for JUnit v6 as it requires Java17+ - #3146, by @paul-dingemans
1.7.1
🔧 Fixes
- Make Ktlint code backwards compatible with lower Kotlin versions (down to 2.0) - #3063, by @mateuszkwiecinski
- Fix conflict between
modifier-list-spacingandcontext-receiver-list-wrapping- #3077, by @paul-dingemans - Mark
operand-expression-wrappingrule as experimental - #3081, by @paul-dingemans
💬 Other
- Update signing config, fix configuration-cache compatibility - #3058, by @mateuszkwiecinski
- Refactor ShadowJarExecutableTask to KtlintCLiTask - #3078, by @paul-dingemans
1.7.0
🆕 Features
Context receiver / parameters
With upgrade to Kotlin 2.2.0, Ktlint 1.7.0 supports context parameters.
-
Add
context-receiver-list-wrappingrule - #3034, by @paul-dingemans -
Add context receiver list to
modifier-orderrule - #3031, by @paul-dingemans -
Ignore context parameters in rule
context-receiver-wrapping- #3033, by @paul-dingemans
Other rule changes
-
Do not run
no-unused-importsrule by default - #3039, by @paul-dingemans
Theno-unused-importrule is no longer run by default as it keeps causing problems. It will be removed in Ktlint2.0. Until then, the rule can still be run, when enabled explicitly in.editorconfig. -
Add experimental rule
expression-operand-wrapping- #3056, by @paul-dingemans
This rule aligns wrapping of arithmetic and logical multiline expressions. Thecondition-wrappingrule which did something similar for logical multiline expressions only no longer reports and fixes violations. It will be removed in Ktlint2.0.
Other features
-
Deprecate functions in
ASTNodeExtensions, and where applicable provide property accessors - #3026, by @paul-dingemans
When usingASTNodeExtensionsplease replace function calls with the new (temporary) property accessors. The temporary property accessors are needed to maintain backwards compatability with Java integration. In Ktlint2.0the functions will be removed, and the temporary property accessors will be replaced with final names. -
Suppress warning "sun.misc.Unsafe::objectFieldOffset" in Ktlint CLI (Java24+) - #3040, by @paul-dingemans
-
Suppress error "A restricted method in java.lang.System has been called" on Java 24 in KtLint CLI only - #3043, by @paul-dingemans
-
Remove unneeded "--add-opens=java.base/java.lang=ALL-UNNAMED" - #3044, by @paul-dingemans
🔧 Fixes
-
Do not remove an empty value parameter list from a call expression when it is nested - #3017, by @paul-dingemans
-
Clarify violation message in
filenamerule - #3046, by @paul-dingemans
📦 Dependencies
-
chore(deps): update plugin org.gradle.toolchains.foojay-resolver-convention to v1 - #2989, by @renovate[bot]
-
chore(deps): update plugin com.gradle.develocity to v4.0.2 - #2996, by @renovate[bot]
-
fix(deps): update junit5 monorepo - #3005, by @renovate[bot]
-
fix(deps): update dependency org.jetbrains.kotlin:kotlin-gradle-plugin to v2.2.0-rc3 - #3015, by @renovate[bot]
-
fix(deps): update dependency org.junit.jupiter:junit-jupiter to v5.13.2 - #3020, by @renovate[bot]
-
fix(deps): update dependency org.junit.platform:junit-platform-launcher to v1.13.2 - #3021, by @renovate[bot]
-
fix(deps): update kotlin monorepo to v2.2.0 - #3018, by @renovate[bot]
-
chore(deps): update plugin shadow to v8.3.8 - #3030, by @renovate[bot]
-
fix(deps): update junit-framework monorepo - #3037, by @renovate[bot]
-
chore(deps): update plugin kotlinx-binary-compatibiltiy-validator to v0.18.1 - #3050, by @renovate[bot]
-
fix(deps): update dependency dev.drewhamilton.poko:poko-gradle-plugin to v0.19.1 - #3053, by @renovate[bot]
-
fix(deps): update dependency com.google.jimfs:jimfs to v1.3.1 - #3054, by @renovate[bot]
-
chore(deps): update dependency gradle to v9.0.0-rc-2 - #3055, by @renovate[bot]
💬 Other
-
Update publishing URLs to point to Central Portal OSSRH staging API - #3006, by @shashachu
-
Update publishing credentials to use new Central Portal username/token - #3007, by @shashachu
-
Improve build - #3025, by @mateuszkwiecinski
-
Bump
poko-gradle-pluginwith a workaround (enforce compatible Kotlin version) - #3035, by @mateuszkwiecinski -
Java 24 - #3049, by @paul-dingemans
-
Make
build-logicplugins expose binary plugins - #3047, by @mateuszkwiecinski -
Cleanup Java 24 bump - #3051, by @mateuszkwiecinski
1.6.0
🆕 Features
-
Add configuration option to handle (certain) annotation with parameters identical to annotations without parameters - #2950, by @paul-dingemans
-
Set system properties to prevent failure when running in ktlint-intellij-plugin with custom installation - #2970, by @paul-dingemans
🔧 Fixes
-
Deprecations in 1.5.0 - #2913, by @paul-dingemans
-
Fix incorrect error message in PropertyNamingRule when enforcing PascalCase - [#2934](#2934), by @lsurvila
-
Sort RuleProvider declarations in StandardRuleSetProvider - [#2941](#2941), by @3flex
-
Refactor KotlinPsiFileFactory to KotlinCompiler - [#2951](#2951), by @paul-dingemans
-
Reduces the number of conversions between "psi" and ASTNode - [#2964](#2964), by @paul-dingemans
-
Fix slow response of the git pre commit hook as generated by ktlint - [#2978](#2978), by @paul-dingemans
-
Move logic of missing whitespace before block comment to NoSingleLineBlockCommentRule - #2979, by @paul-dingemans
-
Report and fix a single line condition wrapped between parentheses with an unexpected newline - [#2980](#2980), by @paul-dingemans
-
Do not wrap an operation reference after an annotated expression to a separate new line - #2983, by @paul-dingemans
📦 Dependencies
-
fix(deps): update dependency org.jetbrains.dokka:dokka-gradle-plugin to v2 - #2906, by @renovate[bot]
-
chore(deps): update plugin kotlinx-binary-compatibiltiy-validator to v0.17.0 - #2907, by @renovate[bot]
-
Complete upgrade Dokka to V2 - #2914, by @paul-dingemans
-
fix(deps): update dependency ch.qos.logback:logback-classic to v1.3.15 - #2917, by @renovate[bot]
-
fix(deps): update dependency org.assertj:assertj-core to v3.27.3 - #2927, by @renovate[bot]
-
chore(deps): update plugin shadow to v8.3.6 - #2935, by @renovate[bot]
-
fix(deps): update dependency com.github.ajalt.clikt:clikt to v5.0.3 - #2938, by @renovate[bot]
-
fix(deps): update dependency org.slf4j:slf4j-simple to v2.0.17 - #2947, by @renovate[bot]
-
chore(deps): update plugin org.gradle.toolchains.foojay-resolver-convention to v0.10.0 - #2963, by @renovate[bot]
-
fix(deps): update dependency org.junit.jupiter:junit-jupiter to v5.12.2 - #2945, by @renovate[bot]
-
fix(deps): update dependency io.github.oshai:kotlin-logging-jvm to v7.0.7 - #2965, by @renovate[bot]
-
fix(deps): update dependency io.github.hakky54:logcaptor to v2.11.0 - #2968, by @renovate[bot]
-
chore(deps): update dependency gradle to v8.14 - #2971, by @renovate[bot]
-
chore(deps): update plugin com.gradle.develocity to v4.0.1 - #2972, by @renovate[bot]
-
fix(deps): update dependency org.jetbrains.kotlin:kotlin-gradle-plugin to v2.2.0-beta2 - #2977, by @renovate[bot]
-
fix(deps): update dependency org.ec4j.core:ec4j-core to v1.1.1 - #2987, by @renovate[bot]
-
fix(deps): update dependency dev.drewhamilton.poko:poko-gradle-plugin to v0.18.7 - #2986, by @renovate[bot]
-
fix(deps): update kotlin monorepo to 2.1.21 - #2985, by @renovate[bot]
💬 Other
1.5.0
The release of Kotlin 2.1 is the primary reason for publishing this release earlier than planned. Because of the removal of some language elements in Kotlin 2.1, the embedded Kotlin compiler in KtLint blocked Kotlinter users from upgrading to Kotlin 2.1.
🆕 Features
-
Add missing space between
funkeyword and identifier when latter is wrapped between backticks - #2890, by @paul-dingemans -
Add configuration setting for constant names in
property-namingrule - #2893, by @paul-dingemans -
Allow backing property to be defined in the companion object (
backing-property-naming) - #2895, by @paul-dingemans
🔧 Fixes
-
Ignore multi dollar string interpolation prefix in
string-template-indentrule - #2888, by @paul-dingemans -
Wrap the expression body in case
.editorconfigpropertyktlint_function_signature_body_expression_wrappingis set toalways- #2873, by @paul-dingemans -
Fix false positive when empty parameter list is in between trailing lambda's of a nested call expression - #2891, by @paul-dingemans
-
Do not wrap a context receiver in a function parameter type reference - #2892, by @paul-dingemans
-
Allow comment before parameter list in function literal (
function-literal) - #2894, by @paul-dingemans
📦 Dependencies
-
chore(deps): update plugin com.gradle.develocity to v3.18.2 - #2865, by @renovate[bot]
-
chore(deps): update dependency gradle to v8.11.1 - #2875, by @renovate[bot]
-
fix(deps): update dependency io.github.hakky54:logcaptor to v2.10.0 - #2874, by @renovate[bot]
-
fix(deps): update dependency org.jetbrains.kotlin:kotlin-gradle-plugin to v2.1.0-rc2 - #2871, by @renovate[bot]
-
fix(deps): update dependency io.github.oshai:kotlin-logging-jvm to v7.0.3 - #2883, by @renovate[bot]
-
fix(deps): update kotlin monorepo to v2.1.0 - #2880, by @renovate[bot]
-
fix(deps): update dependency com.github.ajalt.clikt:clikt to v5.0.2 - #2886, by @renovate[bot]
-
chore(deps): update plugin org.gradle.toolchains.foojay-resolver-convention to v0.9.0 - #2887, by @renovate[bot]
-
fix(deps): update dependency dev.drewhamilton.poko:poko-gradle-plugin to v0.18.0 - #2889, by @renovate[bot]
1.4.1
🔧 Fixes
- Catch java.lang.NoSuchFieldError when looking for WHEN_ENTRY_GUARD in kotlin version 2.0.1 - #2857, by @paul-dingemans
📦 Dependencies
1.4.0
🆕 Features
-
Suppress
backing-property-namingon@Suppress("PropertyName")- #2741, by @paul-dingemans -
Check that code can still be parsed after a format - #2742, by @paul-dingemans
-
Support suppressing backing-property-naming via ObjectPropertyName - #2751, by @Goooler
-
Ignore properties starting with
_inbacking-property-namingrule - #2753, by @paul-dingemans -
Suppress
backing-property-namingrule with@Suppress("LocalVariableName")- #2785, by @paul-dingemans -
Do not repeat formatting if file is unchanged - #2805, by @paul-dingemans
-
Add new rule
when-entry-bracing- #2829, by @paul-dingemans -
Add
.editorconfigpropertyij_kotlin_indent_before_arrow_on_new_line- #2838, by @paul-dingemans -
Add CLI option
--stdin-pathto provide a virtual file location for stdin - #2836, by @adecker89 -
Add property
.editorconfigpropertyktlint_enum_entry_name_casing- #2839, by @paul-dingemans
🔧 Fixes
-
Prevent line separators to be changed from CRLF to LF - #2752, by @paul-dingemans
-
fix: don't remove arrow from lambdas that are when/if leaf nodes - #2758, by @tKe
-
Fix false positive in
no-semirule for enum class without enum entries - #2774, by @paul-dingemans -
Prevent conflict between
multiline-expression-wrappingandfunction-signature- #2775, by @paul-dingemans -
Ignore
max_line_lengthproperty unlessmax-line-lengthrule is enabled - #2783, by @paul-dingemans -
Fix false positive in
class-signaturewhen EOL comment is between a class annotation and other class modifier - #2786, by @paul-dingemans -
Fix globs ending with
**- #2787, by @paul-dingemans -
Return exit code 1 in case violations have been found but file is unchanged - #2803, by @paul-dingemans
-
Ignore missing whitespace after trailing comma in single line parameter value list - #2806, by @paul-dingemans
-
Function signature rule ignores context receiver when on separate line - #2814, by @paul-dingemans
-
Do not remove imports for which the fully qualified path is identical to the package name - #2822, by @paul-dingemans
-
Fix indentation of a multiline parameter list inside a function literal for code style
ktlint_official- #2823, by @paul-dingemans -
Do not insert a trailing comma in a multiline when-entry containing a guard - #2825, by @paul-dingemans
-
Fix wrapping of expression body when
max_line_lengthnot set - #2833, by @paul-dingemans
📦 Dependencies
-
Update dependency io.github.oshai:kotlin-logging-jvm to v7 - #2701, by @renovate[bot]
-
Update dependency org.assertj:assertj-core to v3.26.3 - #2738, by @renovate[bot]
-
Update mikepenz/release-changelog-builder-action action to v5 - #2756, by @renovate[bot]
-
chore(deps): update plugin kotlinx-binary-compatibiltiy-validator to v0.16.3 - #2759, by @renovate[bot]
-
fix(deps): update dependency org.slf4j:slf4j-simple to v2.0.16 - #2764, by @renovate[bot]
-
chore(deps): update gradle/actions action to v4 - #2760, by @renovate[bot]
-
chore(deps): update plugin com.gradle.develocity to v3.18.1 - #2792, by @renovate[bot]
-
chore(deps): update dependency gradle to v8.10.2 - #2812, by @renovate[bot]
-
chore(deps): update plugin shadow to v8.3.3 - #2820, by @renovate[bot]
-
fix(deps): update dependency com.github.ajalt.clikt:clikt to v5.0.1 - #2828, by @renovate[bot]
-
chore(deps): update kotlin monorepo to v2.0.21 - #2831, by @renovate[bot]
-
fix(deps): update dependency org.ec4j.core:ec4j-core to v1.1.0 - #2832, by @renovate[bot]
-
fix(deps): update dependency org.jetbrains.kotlin:kotlin-gradle-plugin to v2.1.0-beta2 - #2834, by @renovate[bot]
-
fix(deps): update dependency dev.drewhamilton.poko:poko-gradle-plugin to v0.17.2 - #2837, by @renovate[bot]
-
fix(deps): update dependency org.junit.jupiter:junit-jupiter to v5.11.3 - #2840, by @renovate[bot]
-
chore(deps): update actions/checkout digest to 11bd719 - #2841, by @renovate[bot]
1.3.1
🔧 Fixes
- Add link for backing-property-naming, correct binary-expression-wrapping - #2704, by @rsmith20
- Do not insert a whitespace element as first or last child inside a composite element - #2715, by @paul-dingemans
- Do not rewrite a class to a single line signature in case it contains an EOL comment - #2716, by @paul-dingemans
- Fix false positive when anonymous function is used as value argument - #2718, by @paul-dingemans
- Fix suppression handling when 'formatter:on' not properly specified - #2719, by @paul-dingemans
- Fix false positive when primary constructor has no arguments and a secondary constructor exists - #2717, by @paul-dingemans
- Ignore suppressions for no-unused-imports rule - #2720, by @paul-dingemans
- Ignore suppressions in rule
no-unused-imports- #2725, by @paul-dingemans - Fix false alert
Format was not able to resolve all violations which (theoretically) can be autocorrected- #2727, by @paul-dingemans - Fix "unset" value for property ktlint_chain_method_rule_force_multiline_when_chain_operator_count_greater_or_equal_than - #2728, by @paul-dingemans
📦 Dependencies
- Update dependency gradle to v8.8 - #2680, by @renovate[bot]
- Update plugin com.gradle.develocity to v3.17.5 - #2697, by @renovate[bot]
- Update actions/checkout digest to 692973e - #2699, by @renovate[bot]
- Update dependency io.github.hakky54:logcaptor to v2.9.3 - #2707, by @renovate[bot]
- Update dependency org.junit.jupiter:junit-jupiter to v5.10.3 - #2721, by @renovate[bot]
💬 Other
- Remove sdkman - #2693, by @paul-dingemans
1.3.0
🆕 Features
-
Support partial formatting - #2631, by @paul-dingemans
-
Suppress
property-namerule forObjectPropertyNameorPrivatePropertyName- #2643, by @paul-dingemans -
Let API Consumer decide whether a LintError has to be autocorrected, or not - #2671, by @paul-dingemans
-
Promote experimental rules to non-experimental - #2674, by @paul-dingemans
🔧 Fixes
-
Do not wrap operation reference after multiline string template - #2591, by @paul-dingemans
-
Ignore max line length in case the line contains only a string template followed by a comma - #2598, by @paul-dingemans
-
Ignore nested reference expressions in
chain-method-continuation- #2606, by @paul-dingemans -
Prevent exception in
binary-expression-wrappingrule - #2607, by @paul-dingemans -
Do not merge opening quotes of multiline string template with (single line) function signature - #2609, by @paul-dingemans
-
Fix replacement of redundant curly braces - #2617, by @paul-dingemans
-
Set and reset Locale to pass test for non-english contributor. - #2622, by @Jaehwa-Noh
-
Fix unwanted whitespace between super class constructor and its argument list - #2630, by @tKe
-
Fix typo's - #2641, by @paul-dingemans
-
Handle trailing space on preceding line in call to
lineLengthWithoutNewlinePrefix- #2644, by @paul-dingemans -
Fix not checking for spacing around binary operators inside unary expression - #2653, by @cflee
-
Fix
blank line before declarationsrule code example - #2657, by @k-taro56 -
Fixed [{ }] notation for issue #2675 - #2677, by @Jolanrensen
📦 Dependencies
-
Update dependency org.jetbrains.dokka:dokka-gradle-plugin to v1.9.20 - #2590, by @renovate[bot]
-
Update softprops/action-gh-release action to v2 - #2600, by @renovate[bot]
-
Update dependency io.github.detekt.sarif4k:sarif4k to v0.6.0 - #2605, by @renovate[bot]
-
Update dependency org.slf4j:slf4j-simple to v2.0.13 - #2632, by @renovate[bot]
-
Update gradle/wrapper-validation-action action to v3 - #2633, by @renovate[bot]
-
Update dependency io.github.oshai:kotlin-logging-jvm to v6.0.9 - #2634, by @renovate[bot]
-
Update dependency com.github.ajalt.clikt:clikt to v4.4.0 - #2647, by @renovate[bot]
-
Update kotlin monorepo to v1.9.24 - #2649, by @renovate[bot]
-
Update plugin com.gradle.develocity to v3.17.4 - #2660, by @renovate[bot]
-
Update dependency dev.drewhamilton.poko:poko-gradle-plugin to v0.15.3 - #2662, by @renovate[bot]
-
Update actions/checkout digest to a5ac7e5 - #2664, by @renovate[bot]
-
Update dependency org.assertj:assertj-core to v3.26.0 - #2669, by @renovate[bot]
1.2.1
🆕 Features
None
🔧 Fixes
- Mark new rules as experimental - #2579, by @paul-dingemans
- Fix null byte as default value for "--pattern-from-stdin" - #2580, by @paul-dingemans
- Fix handling of "--reporter" CLI parameter - #2581, by @paul-dingemans