Releases: detekt/detekt
v1.23.0
We're so proud to announce the next upcoming stable release of detekt: 1.23.0 🚀
This release is coming with 25 new rules and much more.
We moved the detekt-compiler-plugin to the main repo, and you can now use it in your builds following the official documentation.
This release also marks the beginning of development of 2.x from the main branch! You can follow the progress here
We want to take the opportunity to thank our Sponsors and our Contributors for testing, bug reporting and helping us release this new version of Detekt. You're more than welcome to join our community on the #detekt channel on KotlinLang's Slack (you can get an invite here).
Notable Changes
- This is the first version of Detekt that ships with the
detekt-compiler-plugin. The Detekt Compiler plugin is still experimental, but we're moving it closer to Detekt to make it easier to integrate. From now on the compiler plugin will follow the same versioning schema as Detekt. We invite you to try it and provide feedback till we stabilize it. You can read more about it in the official documentation page - #5492 - We added 25 new Rules to detekt
BracesOnIfStatements- #5700BracesOnWhenStatements- #5838CastNullableToNonNullableType- #5653DoubleNegativeLambda- #5937ForbiddenAnnotation- #5515PropertyUsedBeforeDeclaration- #6062StringShouldBeRawString- #5705SuspendFunSwallowedCancellation- #5666UnusedParameter- #5722UnusedPrivateProperty- #5722UseLet- #6091UnnecessaryBracesAroundTrailingLambda- #6029- Plus the bump to KtLint 0.49.1 added the following rules to the
detekt-formattingruleset:ClassName- #6037EnumWrapping- #6028FunctionName- #6037IfElseBracing- #6028IfElseWrapping- #6028MultilineExpressionWrapping- #6028NoBlankLineInList- #6028NoConsecutiveComments- #6028NoEmptyFirstLineInClassBody- #6028NoSingleLineBlockCommentRule- #6104ParameterWrapping- #6028PropertyName- #6037PropertyWrapping- #6028StringTemplateIndent- #6028TryCatchFinallySpacing- #6028
- Notable changes to existing rules:
UnnecessaryAbstractClassnow only runs with type resolution - #5829UnusedPrivateMemberhas been refactored with some of its logic moved toUnusedParameterandUnusedPrivateProperty- #5722- Removed the
ignoreOverriddenconfig fromBooleanPropertyNaming,ConstructorParameterNaming,FunctionNaming,VariableNamingandFunctionParameterNamingas not useful for those rules - #5718 - Added
ignoredSubjectTypesto ruleElseCaseInsteadOfExhaustiveWhento specify types that should be ignored by the rule (#5623) - #5634 - Added
allowOperatorsto ruleDataClassContainsFunctions- #5658 MandatoryBracesIfStatementshas been removed in favor ofBracesOnIfStatements- #5700- Added
ignoreWhenContainingVariableDeclarationtoUseIfInsteadOfWhento ignore captured variables - #5681 - Several rules in the
detekt-formattingruleset now accepts anindentSizeparameter (see the full list here). - We followed the KtLint decisions on turning on some rules by default, so several rules in the
detekt-formattingruleset are now turned on by default (see the full list here).
- We added support for Gradle's Worker API inside Detekt Gradle Plugin, for faster execution on bigger projects. - #4128
- We fixed the
includes/excludeslogic on the config file as they were overriding each other - #5782 - We fully removed support for Spek from
detekt-test-utils. The recommended testing framework is JUnit - #5785 - The minimum supported Gradle version is now
v6.8.3- #5616 - This version of detekt is built with Gradle
v8.1, AGP8.0.1, Kotlin1.8.21and KtLint0.49.1(see #5893 #5723 #5877 #6028 #6043 #5995 #5996) - We now added a Code of Conduct to our repo. Please read it and follow it when interacting with our community on our channels.
Changelog
- SerialVersionUIDInSerializableClass - Update the error location - #6114
- Reduce LoopWithTooManyJumpStatements finding scope - #6110
- Add alias for SuspendFunWithCoroutineScopeReceiver - #6089
- CastNullableToNonNullableType - Check the SimpleType instead of typeElement - #6071
- Update plugin com.gradle.enterprise to v3.13.1 - #6069
- CanBeNonNullable: Check parent condition for checking if nullability info is used or not - #6064
- Add configuration to add alternate trimming methods - #6063
- Check if property is documented at class header - #6061
- OutdatedDocumentation - Check if only public property is documented - #6057
- UnnecessaryLet: fix false positive in call chains - #6052
- Add
commentswith a list of regexes toForbiddenComment- #5981 - Fix incomplete
requireRootInDeclarationcheck inInvalidPackageDeclaration- #6045 - BracesOnWhenStatements: fix false positive for necessary braces - #6042
- Fix redundant ClassOrdering violations using maximum increasing section - #6003
- UseIsNullOrEmpty: fix false negative with chained call - #6027
- Create docs for Gradle Worker API - #6016
- Compile compiler plugin against kotlin-compiler-embeddable - #6012
- Update intro.mdx to use setFrom() on detekt config - #6010
- Use
detekt-versions.propertiesinstead ofversions.properties- #6006 - Implement parentPath accessor in concrete config implementations - #6002
- Increase ALIASES_LIMIT to 100 for YamlConfig - #5986
- Fix elvis to +/- case in case UnnecessaryParentheses when precedence is unclear - #5983
- jdkHome as @internal - #5978
- Fix broken POM file for detetk-compiler-plugin - #5971
- Fix broken publishToMavenLocal - #5970
- Add
allowOmitUnitto ruleLibraryCodeMustSpecifyReturnType- #5861 - Remove dependency that creates a cycle. - [#5777](https://github.com/de...
v1.23.0-RC3
1.23.0-RC3 - 2023-04-29
Notable Changes
- This is the first version of Detekt that ships with the
detekt-compiler-plugin. The Detekt Compiler plugin is still experimental but we're moving it closer to Detekt to make it easier to integrate. From now on the compiler plugin will follow the same versioning schema as Detekt. We invite you to try it and provide feedback till we stabilize it. - #5492 - We added 20 new Rules to detekt
BracesOnIfStatements- #5700BracesOnWhenStatements- #5838CastNullableToNonNullableType- #5653DoubleNegativeLambda- #5937ForbiddenAnnotation- #5515StringShouldBeRawString- #5705SuspendFunSwallowedCancellation- #5666UnusedParameter- #5722UnusedPrivateProperty- #5722- Plus the bump to KtLint 0.49.0 added the following rules to the
detekt-formattingruleset:EnumWrapping- #6028IfElseBracing- #6028IfElseWrapping- #6028MultilineExpressionWrapping- #6028NoBlankLineInList- #6028NoConsecutiveComments- #6028NoEmptyFirstLineInClassBody- #6028ParameterWrapping- #6028PropertyWrapping- #6028StringTemplateIndent- #6028TryCatchFinallySpacing- #6028
- Notable changes to existing rules:
UnnecessaryAbstractClassnow only runs with type resolution - #5829UnusedPrivateMemberhas been refactored with some of its logic moved toUnusedParameterandUnusedPrivateProperty- #5722- Removed the
ignoreOverriddenconfig fromBooleanPropertyNaming,ConstructorParameterNaming,FunctionNaming,VariableNamingandFunctionParameterNamingas not useful for those rules - #5718 - Added
ignoredSubjectTypesto ruleElseCaseInsteadOfExhaustiveWhento specify types that should be ignored by the rule (#5623) - #5634 - Added
allowOperatorsto ruleDataClassContainsFunctions- #5658 MandatoryBracesIfStatementshas been removed in favor ofBracesOnIfStatements- #5700- Added
ignoreWhenContainingVariableDeclarationtoUseIfInsteadOfWhento ignore captured variables - #5681 - Several rules in the
detekt-formattingruleset now accepts anindentSizeparameter (see the full list here). - We followed the KtLint decisions on turning on some rules by default, so several rules in the
detekt-formattingruleset are now turned on by default (see the full list here).
- We added support for Gradle's Worker API inside Detekt Gradle Plugin, for faster execution on bigger projects. - #4128
- We fixed the
includes/excludeslogic on the config file as they were overriding each other - #5782 - We fully removed support for Spek from
detekt-test-utils. The recommended testing framework is JUnit - #5785 - The minimum supported Gradle version is now
v6.8.3- #5616 - This version of detekt is built with Gradle
v8.0.2, AGP8.0.0, Kotlin1.8.21and KtLint0.49.0(see #5893 #5723 #5877 #6028 #6043 #5995) - We now added a Code of Conduct to our repo. Please read it and follow it when interacting with our community on our channels.
Changelog
- Fix incomplete
requireRootInDeclarationcheck inInvalidPackageDeclaration- #6045 - BracesOnWhenStatements: fix false positive for necessary braces - #6042
- Fix redundant ClassOrdering violations using maximum increasing section - #6003
- UseIsNullOrEmpty: fix false negative with chained call - #6027
- Create docs for Gradle Worker API - #6016
- Compile compiler plugin against kotlin-compiler-embeddable - #6012
- Update intro.mdx to use setFrom() on detekt config - #6010
- Use
detekt-versions.propertiesinstead ofversions.properties- #6006 - Implement parentPath accessor in concrete config implementations - #6002
- Increase ALIASES_LIMIT to 100 for YamlConfig - #5986
- Fix elvis to +/- case in case UnnecessaryParentheses when precedence is unclear - #5983
- jdkHome as @internal - #5978
- Fix broken POM file for detetk-compiler-plugin - #5971
- Fix broken publishToMavenLocal - #5970
- Add
allowOmitUnitto ruleLibraryCodeMustSpecifyReturnType- #5861 - Remove dependency that creates a cycle. - #5777
- Update dependency org.jetbrains:annotations to v24 - #5969
- Update github/codeql-action digest to 8c8d71d - #5966
- Add functions to ExitOutsideMain rule - #5963
- Update README.md - #5954
- Prevent import statements from counting as references for UnusedPrivateProperty - #5942
- Fix ExpressionBodySyntax not checking property getters/setters - #5938
- Improve correctness of UnusedPrivateProperty - #5935
- Fix documentation for deprecated 'reports' object (Issue #5908) - #5924
- Print file path report as link file - #5921
- "detekt" or "Detekt" - #5898
- Update JSON schema URL - #5881
- Add support for local suppression inside formatting - #5876
- Fix checkExhaustiveness for formatting and third party rules - #5869
- Allow newline style for MaxChainedCallsOnSameLine - #5865
- Declare inputs and outputs to support incremental build for testPluginKotlinc - #5862
- Use code syntax for
Unitfor ImplicitUnitReturnType rule - #5857 - MatchingDeclarationName. KtFilesSpec also remove .common.kt suffix from kotlin files - #5851
- Fix double mutability issues with Gradle plugin's use of ConfigurableFileCollection - #5850
- MagicNumber - Make ignoreNamedArgument catch more complex expression - #5837
- Exclude super call when generating guard clauses - #5835
- Enable test retry for all our modules - #5825
- Stop configuring report merge tasks while configuring Detekt tasks - #5813
- FunctionMatcher support for fully qualified function names - #5812
- Boy Scout - #5808
- Simplify
TestConfigusages - #5801 - Reduce configuration of UnusedPrivateMember's split rules - #5800
- Force SerialVerionUID to be private - #5798
- Exclude the KMP test folders for android - #5797
- Add aliases for PackageNaming and Inv...
v1.23.0-RC2
1.23.0-RC2 - 2023-04-23
Notable Changes
- This is the first version of Detekt that ships with the
detekt-compiler-plugin. The Detekt Compiler plugin is still experimental but we're moving it closer to Detekt to make it easier to integrate. From now on the compiler plugin will follow the same versioning schema as Detekt. We invite you to try it and provide feedback till we stabilize it. - #5492 - We added 20 new Rules to detekt
BracesOnIfStatements- #5700BracesOnWhenStatements- #5838CastNullableToNonNullableType- #5653DoubleNegativeLambda- #5937ForbiddenAnnotation- #5515StringShouldBeRawString- #5705SuspendFunSwallowedCancellation- #5666UnusedParameter- #5722UnusedPrivateProperty- #5722- Plus the bump to KtLint 0.49.0 added the following rules to the
detekt-formattingruleset:EnumWrapping- #6028IfElseBracing- #6028IfElseWrapping- #6028MultilineExpressionWrapping- #6028NoBlankLineInList- #6028NoConsecutiveComments- #6028NoEmptyFirstLineInClassBody- #6028ParameterWrapping- #6028PropertyWrapping- #6028StringTemplateIndent- #6028TryCatchFinallySpacing- #6028
- Notable changes to existing rules:
UnnecessaryAbstractClassnow only runs with type resolution - #5829UnusedPrivateMemberhas been refactored with some of its logic moved toUnusedParameterandUnusedPrivateProperty- #5722- Removed the
ignoreOverriddenconfig fromBooleanPropertyNaming,ConstructorParameterNaming,FunctionNaming,VariableNamingandFunctionParameterNamingas not useful for those rules - #5718 - Added
ignoredSubjectTypesto ruleElseCaseInsteadOfExhaustiveWhento specify types that should be ignored by the rule (#5623) - #5634 - Added
allowOperatorsto ruleDataClassContainsFunctions- #5658 MandatoryBracesIfStatementshas been removed in favor ofBracesOnIfStatements- #5700- Added
ignoreWhenContainingVariableDeclarationtoUseIfInsteadOfWhento ignore captured variables - #5681 - Several rules in the
detekt-formattingruleset now accepts anindentSizeparameter (see the full list here). - We followed the KtLint decisions on turning on some rules by default, so several rules in the
detekt-formattingruleset are now turned on by default (see the full list here).
- We added support for Gradle's Worker API inside Detekt Gradle Plugin, for faster execution on bigger projects. - #4128
- We fixed the
includes/excludeslogic on the config file as they were overriding each other - #5782 - We fully removed support for Spek from
detekt-test-utils. The recommended testing framework is JUnit - #5785 - The minimum supported Gradle version is now
v6.8.3- #5616 - This version of detekt is built with Gradle
v8.0.2, AGP7.4.2, Kotlin1.8.20and KtLint0.49.0(see #5893 #5723 #5877 #6028)
Changelog
- UseIsNullOrEmpty: fix false negative with chained call - #6027
- Create docs for Gradle Worker API - #6016
- Compile compiler plugin against kotlin-compiler-embeddable - #6012
- Update intro.mdx to use setFrom() on detekt config - #6010
- Use
detekt-versions.propertiesinstead ofversions.properties- #6006 - Implement parentPath accessor in concrete config implementations - #6002
- Increase ALIASES_LIMIT to 100 for YamlConfig - #5986
- Fix elvis to +/- case in case UnnecessaryParentheses when precedence is unclear - #5983
- jdkHome as
@Internal- #5978 - Fix broken POM file for detetk-compiler-plugin - #5971
- Fix broken publishToMavenLocal - #5970
- Add
allowOmitUnitto ruleLibraryCodeMustSpecifyReturnType- #5861 - Remove dependency that creates a cycle. - #5777
- Update dependency org.jetbrains:annotations to v24 - #5969
- Update github/codeql-action digest to 8c8d71d - #5966
- Add functions to ExitOutsideMain rule - #5963
- Update README.md - #5954
- Prevent import statements from counting as references for UnusedPrivateProperty - #5942
- Fix ExpressionBodySyntax not checking property getters/setters - #5938
- Improve correctness of UnusedPrivateProperty - #5935
- Fix documentation for deprecated 'reports' object (Issue #5908) - #5924
- Print file path report as link file - #5921
- "detekt" or "Detekt" - #5898
- Update JSON schema URL - #5881
- Add support for local suppression inside formatting - #5876
- Fix checkExhaustiveness for formatting and third party rules - #5869
- Allow newline style for MaxChainedCallsOnSameLine - #5865
- Declare inputs and outputs to support incremental build for testPluginKotlinc - #5862
- Use code syntax for
Unitfor ImplicitUnitReturnType rule - #5857 - MatchingDeclarationName. KtFilesSpec also remove .common.kt suffix from kotlin files - #5851
- Fix double mutability issues with Gradle plugin's use of ConfigurableFileCollection - #5850
- MagicNumber - Make ignoreNamedArgument catch more complex expression - #5837
- Exclude super call when generating guard clauses - #5835
- Enable test retry for all our modules - #5825
- Stop configuring report merge tasks while configuring Detekt tasks - #5813
- FunctionMatcher support for fully qualified function names - #5812
- Boy Scout - #5808
- Simplify
TestConfigusages - #5801 - Reduce configuration of UnusedPrivateMember's split rules - #5800
- Force SerialVerionUID to be private - #5798
- Exclude the KMP test folders for android - #5797
- Add aliases for PackageNaming and InvalidPackageDeclaration - #5795
- Forbid using Jupiter Kotlin assertions - #5794
- ModifierOrder: fix false positive with block comments - #5791
- Fixed ProtectedMemberInFinalClass rule reporting valid JVM finalize - #5788
- Remove unnecessary usage of BeforeAll in tests - #5781
- Run Kotlin compiler plugin CLI test as part of standard build - [#5766](https://gith...
v1.23.0-RC1
1.23.0-RC1 - 2023-04-06
Notable Changes
- This is the first version of detekt that ships with the
detekt-compiler-plugin. From now on the compiler plugin will follow the same versioning schema as detekt. While still experimental, we invite you to try it and provide feedback till we stabilize it. - #5492 - We added 8 new Rules to detekt
- Notable changes to existing rules:
UnnecessaryAbstractClassnow only runs with type resolution - #5829UnusedPrivateMemberhas been refactored with some of its logic moved toUnusedParameterandUnusedPrivateProperty- #5722- Removed the
ignoreOverriddenconfig fromBooleanPropertyNaming,ConstructorParameterNaming,FunctionNaming,VariableNamingandFunctionParameterNamingas not useful for those rules - #5718 - Added
ignoredSubjectTypesto ruleElseCaseInsteadOfExhaustiveWhento specify types that should be ignored by the rule (#5623) - #5634 - Added
allowOperatorsto ruleDataClassContainsFunctions- #5658 MandatoryBracesIfStatementshas been removed in favor ofBracesOnIfStatements- #5700- Added
ignoreWhenContainingVariableDeclarationtoUseIfInsteadOfWhento ignore captured variables - #5681
- We added support for Gradle's Worker API inside Detekt Gradle Plugin, for faster execution on bigger projects. - #4128
- We fixed the
includes/excludeslogic on the config file as they were overriding each other - #5782 - We fully removed support for Spek from
detekt-test-utils. The recommended testing framework is JUnit - #5785 - The minimum supported Gradle version is now
v6.8.3- #5616 - This version of detekt is built with Gradle
v8.0.2, AGP7.4.2, Kotlin1.8.20and KtLint0.48.2(see #5893 #5723 #5877)
Changelog
- Update dependency org.jetbrains:annotations to v24 - #5969
- Update github/codeql-action digest to 8c8d71d - #5966
- Add functions to ExitOutsideMain rule - #5963
- Update README.md - #5954
- Prevent import statements from counting as references for UnusedPrivateProperty - #5942
- Fix ExpressionBodySyntax not checking property getters/setters - #5938
- Improve correctness of UnusedPrivateProperty - #5935
- Fix documentation for deprecated 'reports' object (Issue #5908) - #5924
- Print file path report as link file - #5921
- "detekt" or "Detekt" - #5898
- Update JSON schema URL - #5881
- Add support for local suppression inside formatting - #5876
- Fix checkExhaustiveness for formatting and third party rules - #5869
- Allow newline style for MaxChainedCallsOnSameLine - #5865
- Declare inputs and outputs to support incremental build for testPluginKotlinc - #5862
- Use code syntax for
Unitfor ImplicitUnitReturnType rule - #5857 - MatchingDeclarationName. KtFilesSpec also remove .common.kt suffix from kotlin files - #5851
- Fix double mutability issues with Gradle plugin's use of ConfigurableFileCollection - #5850
- MagicNumber - Make ignoreNamedArgument catch more complex expression - #5837
- Exclude super call when generating guard clauses - #5835
- Enable test retry for all our modules - #5825
- Stop configuring report merge tasks while configuring Detekt tasks - #5813
- FunctionMatcher support for fully qualified function names - #5812
- Boy Scout - #5808
- Simplify
TestConfigusages - #5801 - Reduce configuration of UnusedPrivateMember's split rules - #5800
- Force SerialVerionUID to be private - #5798
- Exclude the KMP test folders for android - #5797
- Add aliases for PackageNaming and InvalidPackageDeclaration - #5795
- Forbid using Jupiter Kotlin assertions - #5794
- ModifierOrder: fix false positive with block comments - #5791
- Fixed ProtectedMemberInFinalClass rule reporting valid JVM finalize - #5788
- Remove unnecessary usage of BeforeAll in tests - #5781
- Run Kotlin compiler plugin CLI test as part of standard build - #5766
- Refactor to remove java.util.Array* imports - #5761
- Replace java.util.Stack with Kotlin's ArrayDeque implementation - #5760
- Replace java.time.Duration with kotlin.time.Duration - #5759
- Add NixOS installation method to doc - #5757
- Remove & forbid usage of java.util.stream - #5756
- Use stdlib functions for file & path operations - #5754
- Enable UnnecessaryBackticks in detekt project - #5753
- Update docusaurus monorepo to v2.3.1 - #5752
- Resolve runtime classpaths consistently with compile classpaths - #5730
- Exclude new Kotlin Test directories in default config - #5727
- Fail when unexpected version of kotlin-compiler-embeddable is on runtime classpath - #5726
- Fix IgnoredReturnValue rule crash in parallel mode - #5724
- Use
namethat return name after backticks - #5719 - UnusedPrivateMember - Fix false positive in case of invoke operator - #5717
- Fix false positive for
CanBeNonNullablerule - #5714 - IgnoredReturnValue: fix false negative when annotation is on the package - #5706
- Check Thread.sleep for block expression - #5699
- Fix false positive of in UnnecessaryParentheses - #5684
- Fix url and kotlin reference support in kdoc - #5683
- Add config for variable expression in when - #5681
- Enable NoSemicolons rule - #5663
- Use correct resolvable/consumable flags on detekt's configurations - #5657
- Prepare for Gradle 8 - #5656
- ExplicitCollectionElementAccessMethod rule update - #5654
- Cast nullable to non nullable type - #5653
- Enable verbose mode for Codecov GH Action - #5652
- Fail build when issues found with JVM target compatibility of related compile tasks - #5651
- Don't silently use Kotlin compiler fallback strategy - #5650
- Documentation tweaks - #5639
- Have consistent compile-test-snippets between project and system prope...
v1.22.0
We're extremely excited to announce the next upcoming stable release of Detekt: 1.22.0 🚀
This release is coming with 16 new rules, 2 new rulesets and several new functionalities & APIs.
We've also introduced the Detekt Marketplace, a place for users to share their 3rd party rules and extensions.
We want to take the opportunity to thank our Sponsors and our Contributors for testing, bug reporting and helping us release this new version of Detekt. You're more than welcome to join our community on the #detekt channel on KotlinLang's Slack (you can get an invite here).
Notable Changes
- We're introducing the Detekt Marketplace, a place where you can add your own 3rd party extension such as rule, plugins, custom reporter, etc. - #5191
- Our website is now versioned. You can find the changes for each version using the dropdown menu on the top bar. Documentation for the upcoming version (next) can be found here.
- We added 16 new Rules to Detekt
AlsoCouldBeApply- #5333MultilineRawStringIndentation- #5058TrimMultilineRawString- #5051UnnecessaryNotNullCheck- #5218UnnecessaryPartOfBinaryExpression- #5203UseSumOfInsteadOfFlatMapSize- #5405FunctionReturnTypeSpacingfrom KtLint - #5256FunctionSignaturefrom KtLint - #5256FunctionStartOfBodySpacingfrom KtLint - #5256NullableTypeSpacingfrom KtLint - #5256ParameterListSpacingfrom KtLint - #5256SpacingBetweenFunctionNameAndOpeningParenthesisfrom KtLint - #5256TrailingCommaOnCallSitefrom KtLint - #5312TrailingCommaOnDeclarationSitefrom KtLint - #5312TypeParameterListSpacingfrom KtLint - #5256
- We added a new ruleset called
detekt-rules-ruleauthorscontaining rules for Rule Authors to enforce best practices on Detekt rules such as the newViolatesTypeResolutionRequirements- #5129 #5182 - We added a new ruleset called
detekt-rules-librariescontaining rules mostly useful for Library Authors - We moved the following rules insideForbiddenPublicDataClass,LibraryCodeMustSpecifyReturnType,LibraryEntitiesShouldNotBePublicthis new ruleset - See Migration below on how to migrate #5360 - We added support for JVM toolchain. This means that Detekt will now respect the JDK toolchain you specify on your Gradle configuration. You will also be able to specify a custom JDK home with the
--jdk-homeCLI parameter - #5269 - Improvement for Type Resolution
- Improvement for Config Management
- Deprecations & Removals
- We deprecated the MultiRule class as it was overly complicated. The suggested approach is to just provide separated rules. - #5161
- The
--fail-fastCLI flag (andfailFastGradle property) has been removed. It was deprecated since 1.16.x - #5290 - We deprecated the following rules
DuplicateCaseInWhenExpression,MissingWhenCase,RedundantElseInWhenas the Kotlin Compiler is already reporting errors for those scenarios - #5309 - We removed the
--print-astCLI flag as PsiViewer provides the same features - #5418
- Notable changes to existing rules
ArrayPrimitiveis now working only with Type Resolution - #5175WildcardImportis now running also on tests by default - #5121ForbiddenImportallows now to specify a reason for every forbidden import - #4909IgnoredReturnValue: optionrestrictToAnnotatedMethodsis now deprecated in favor ofrestrictToConfig- #4922
- This version of Detekt is built with Gradle
v7.5.1, AGP7.3.1, Kotlin1.7.21and KtLint0.47.1(see #5363 #5189 #5411 #5312 #5519) - The minimum supported Gradle version is now
v6.7.1- #4964
Migration
We deprecated a number of rules in this release.
You should update your config file as follows:
potential-bugs:
active: true
...
- DuplicateCaseInWhenExpression:
- active: true
...
- MissingWhenCase:
- active: true
- allowElseExpression: true
...
- RedundantElseInWhen:
- active: true
style:
active: true
...
- ForbiddenPublicDataClass:
- active: true
- excludes: ['**']
- ignorePackages:
- - '*.internal'
- - '*.internal.*'
...
- LibraryCodeMustSpecifyReturnType:
- active: true
- excludes: ['**']
...
- LibraryEntitiesShouldNotBePublic:
- active: true
- excludes: ['**']If you wish to use the libraries ruleset we introduced you should add the following to your config file:
+ libraries:
+ active: true
+ ForbiddenPublicDataClass:
+ active: false
+ LibraryEntitiesShouldNotBePublic:
+ active: false
+ LibraryCodeMustSpecifyReturnType:
+ active: trueand add the following to you build.gradle file:
detektPlugins("io.gitlab.arturbosch.detekt:detekt-rules-libraries:$version")If you're using our KtLint wrapper (i.e. detekt-formatting) you should also update your config file as follows:
formatting:
active: true
...
- TrailingComma:
- active: false
- autoCorrect: true
- allowTrailingComma: false
- allowTrailingCommaOnCallSite: false
...
+ TrailingCommaOnCallSite:
+ active: false
+ autoCorrect: true
+ useTrailingCommaOnCallSite: false
+ TrailingCommaOnDeclarationSite:
+ active: false
+ autoCorrect: true
+ useTrailingCommaOnDeclarationSite: falseChangelog
- ReturnCount: correctly count assignment expressions with elvis return as guard clauses - #5539
- UnnecessaryPartOfBinaryExpression: fix false positive with pair creation - #5516
- False positive at
UnnecessaryPartOfBinaryExpression- #5514 - Update documentation for TrailingComma rules - #5513
TrimMultilineRawStringfalse-positive on annotation parameters - #5476- Detekt 1.22.0-RC1 -> 1.22.0-RC2 breaks UnreachableCode - #5435
- Detekt 1.22.0-RC1 -> 1.22.0-RC2 breaks ignoreAnnotated - #5427
- Fix issues introduced by #5152 - #5508
- MultilineLambdaItParameter: fix false positive for one-line statements with a lambda argument - #5505
- UseArrayLiteralsInAnnotations: fix false negative with primitive array factory calls - #5482
- TrimMultilineRawString: fix false positive when it's expected as constant - #5480
- Fix false negative
SafeCastwith no braces - #5479 - Update gradle/wrapper-validation-action digest to 55e685c - #5472
- Grant permission for type resolution Gradle job - #5470
- Fix ObjectPropertyNaming Rule false positive - #5466
- Fix LambdaParameterNaming rule false positive - #5465
- Fix ReturnCount false positive when excludeReturnFromLambda is enabled - [...
v1.22.0-RC3
1.22.0-RC3 - 2022-11-06
Notable Changes
- We're introducing the Detekt Marketplace, a place where you can add your own 3rd party extension such as rule, plugins, custom reporter, etc. - #5191
- Our website is now versioned. You can find the changes for each version using the dropdown menu on the top bar. Documentation for the upcoming version (next) can be found here.
- We added 16 new Rules to Detekt
AlsoCouldBeApply- #5333MultilineRawStringIndentation- #5058TrimMultilineRawString- #5051UnnecessaryNotNullCheck- #5218UnnecessaryPartOfBinaryExpression- #5203UseSumOfInsteadOfFlatMapSize- #5405FunctionReturnTypeSpacingfrom KtLint - #5256FunctionSignaturefrom KtLint - #5256FunctionStartOfBodySpacingfrom KtLint - #5256NullableTypeSpacingfrom KtLint - #5256ParameterListSpacingfrom KtLint - #5256SpacingBetweenFunctionNameAndOpeningParenthesisfrom KtLint - #5256TrailingCommaOnCallSitefrom KtLint - #5312TrailingCommaOnDeclarationSitefrom KtLint - #5312TypeParameterListSpacingfrom KtLint - #5256
- We added a new ruleset called
detekt-rules-ruleauthorscontaining rules for Rule Authors to enforce best practices on Detekt rules such as the newViolatesTypeResolutionRequirements- #5129 #5182 - We added a new ruleset called
detekt-rules-librariescontaining rules mostly useful for Library Authors - We moved the following rules insideForbiddenPublicDataClass,LibraryCodeMustSpecifyReturnType,LibraryEntitiesShouldNotBePublicthis new ruleset - See Migration below on how to migrate #5360 - We added support for JVM toolchain. This means that Detekt will now respect the JDK toolchain you specify on your Gradle configuration. You will also be able to specify a custom JDK home with the
--jdk-homeCLI parameter - #5269 - Improvement for Type Resolution
- Improvement for Config Management
- Deprecations & Removals
- We deprecated the MultiRule class as it was overly complicated. The suggested approach is to just provide separated rules. - #5161
- The
--fail-fastCLI flag (andfailFastGradle property) has been removed. It was deprecated since 1.16.x - #5290 - We deprecated the following rules
DuplicateCaseInWhenExpression,MissingWhenCase,RedundantElseInWhenas the Kotlin Compiler is already reporting errors for those scenarios - #5309 - We removed the
--print-astCLI flag as PsiViewer provides the same features - #5418
- Notable changes to existing rules
ArrayPrimitiveis now working only with Type Resolution - #5175WildcardImportis now running also on tests by default - #5121ForbiddenImportallows now to specify a reason for every forbidden import - #4909IgnoredReturnValue: optionrestrictToAnnotatedMethodsis now deprecated in favor ofrestrictToConfig- #4922
- This version of Detekt is built with Gradle
v7.5.1, AGP7.3.1, Kotlin1.7.20and KtLint0.47.1(see #5363 #5189 #5411 #5312 - The minimum supported Gradle version is now
v6.7.1- #4964
Migration
We deprecated a number of rules in this release.
You should update your config file as follows:
potential-bugs:
active: true
...
- DuplicateCaseInWhenExpression:
- active: true
...
- MissingWhenCase:
- active: true
- allowElseExpression: true
...
- RedundantElseInWhen:
- active: true
style:
active: true
...
- ForbiddenPublicDataClass:
- active: true
- excludes: ['**']
- ignorePackages:
- - '*.internal'
- - '*.internal.*'
...
- LibraryCodeMustSpecifyReturnType:
- active: true
- excludes: ['**']
...
- LibraryEntitiesShouldNotBePublic:
- active: true
- excludes: ['**']If you wish to use the libraries ruleset we introduced you should add the following to your config file:
+ libraries:
+ active: true
+ ForbiddenPublicDataClass:
+ active: false
+ LibraryEntitiesShouldNotBePublic:
+ active: false
+ LibraryCodeMustSpecifyReturnType:
+ active: trueand add the following to you build.gradle file:
detektPlugins("io.gitlab.arturbosch.detekt:detekt-rules-authors:$version")If you're using our KtLint wrapper (i.e. detekt-formatting) you should also update your config file as follows:
formatting:
active: true
...
- TrailingComma:
- active: false
- autoCorrect: true
- allowTrailingComma: false
- allowTrailingCommaOnCallSite: false
...
+ TrailingCommaOnCallSite:
+ active: false
+ autoCorrect: true
+ useTrailingCommaOnCallSite: false
+ TrailingCommaOnDeclarationSite:
+ active: false
+ autoCorrect: true
+ useTrailingCommaOnDeclarationSite: falseChangelog
- Fix issues introduced by #5152 - #5508
- MultilineLambdaItParameter: fix false positive for one-line statements with a lambda argument - #5505
- UseArrayLiteralsInAnnotations: fix false negative with primitive array factory calls - #5482
- TrimMultilineRawString: fix false positive when it's expected as constant - #5480
- Fix false negative
SafeCastwith no braces - #5479 - Update gradle/wrapper-validation-action digest to 55e685c - #5472
- Grant permission for type resolution Gradle job - #5470
- Fix ObjectPropertyNaming Rule false positive - #5466
- Fix LambdaParameterNaming rule false positive - #5465
- Fix ReturnCount false positive when excludeReturnFromLambda is enabled - #5459
- CognitiveComplexity: count else/else-if as one complexity - #5458
- Fix false positive MultilineRawStringIndentation with tab indentation - #5453
- Don't show the number of issues generating the BindingContext - #5449
- Make detekt less noisy - #5448
- New ruleauthors rule for Entity.from(x.nameIdentifier ?: x) -> Entity.atName(x) - #5444
- Separating ComplexMethod rule into CyclomaticComplexMethod and CognitiveComplexMethod - #5442
- Improve error reporting for CascadingCallWrapping - #5439
- TrimMultilineRawString: fix false positive with not a raw string - #5438
- BooleanPropertyNaming highlight only the name of the variable - #5431
- Deprecate
TrailingCommaas it's now split in two rules - #5423 - Remove unused constant - #5421
- Report if/else as issue location instead of block - #5407
- Remove some unnecessary suppressions - #5400
- Check FormattingRule is auto-correctable by information provided by ktlint - #5398
- Fix false negative MultilineLambdaI...
v1.22.0-RC2
Note: This Github Release was accidentally deleted as part of the RC3 release process. We've manually re-created it
1.22.0-RC2 - 2022-10-16
Notable Changes
- We're introducing the Detekt Marketplace, a place where you can add your own 3rd party extension such as rule, plugins, custom reporter, etc. - #5191
- Our website is now versioned. You can find the changes for each version using the dropdown menu on the top bar. Documentation for the upcoming version (next) can be found here.
- We added 16 new Rules to Detekt
AlsoCouldBeApply- #5333MultilineRawStringIndentation- #5058TrimMultilineRawString- #5051UnnecessaryNotNullCheck- #5218UnnecessaryPartOfBinaryExpression- #5203UseSumOfInsteadOfFlatMapSize- #5405FunctionReturnTypeSpacingfrom KtLint - #5256FunctionSignaturefrom KtLint - #5256FunctionStartOfBodySpacingfrom KtLint - #5256NullableTypeSpacingfrom KtLint - #5256ParameterListSpacingfrom KtLint - #5256SpacingBetweenFunctionNameAndOpeningParenthesisfrom KtLint - #5256TrailingCommaOnCallSitefrom KtLint - #5312TrailingCommaOnDeclarationSitefrom KtLint - #5312TypeParameterListSpacingfrom KtLint - #5256
- We added a new ruleset called
detekt-rules-ruleauthorscontaining rules for Rule Authors to enforce best practices on Detekt rules such as the newViolatesTypeResolutionRequirements- #5129 #5182 - We added a new ruleset called
detekt-rules-librariescontaining rules mostly useful for Library Authors - We moved the following rules insideForbiddenPublicDataClass,LibraryCodeMustSpecifyReturnType,LibraryEntitiesShouldNotBePublicthis new ruleset - See Migration below on how to migrate #5360 - We added support for JVM toolchain. This means that Detekt will now respect the JDK toolchain you specify on your Gradle configuration. You will also be able to specify a custom JDK home with the
--jdk-homeCLI parameter - #5269 - Improvement for Type Resolution
- Improvement for Config Management
- Deprecations & Removals
- We deprecated the MultiRule class as it was overly complicated. The suggested approach is to just provide separated rules. - #5161
- The
--fail-fastCLI flag (andfailFastGradle property) has been removed. It was deprecated since 1.16.x - #5290 - We deprecated the following rules
DuplicateCaseInWhenExpression,MissingWhenCase,RedundantElseInWhenas the Kotlin Compiler is already reporting errors for those scenarios - #5309
- Notable changes to existing rules
ArrayPrimitiveis now working only with Type Resolution - #5175WildcardImportis now running also on tests by default - #5121ForbiddenImportallows now to specify a reason for every forbidden import - #4909IgnoredReturnValue: optionrestrictToAnnotatedMethodsis now deprecated in favor ofrestrictToConfig- #4922
- This version of Detekt is built with Gradle
v7.5.1, AGP7.3.1, Kotlin1.7.20and KtLint0.47.1(see #5363 #5189 #5411 #5312 - The minimum supported Gradle version is now
v6.7.1- #4964
Migration
We deprecated a number of rules in this release.
You should update your config file as follows:
potential-bugs:
active: true
...
- DuplicateCaseInWhenExpression:
- active: true
...
- MissingWhenCase:
- active: true
- allowElseExpression: true
...
- RedundantElseInWhen:
- active: true
style:
active: true
...
- ForbiddenPublicDataClass:
- active: true
- excludes: ['**']
- ignorePackages:
- - '*.internal'
- - '*.internal.*'
...
- LibraryCodeMustSpecifyReturnType:
- active: true
- excludes: ['**']
...
- LibraryEntitiesShouldNotBePublic:
- active: true
- excludes: ['**']If you wish to use the libraries ruleset we introduced you should add the following to your config file:
+ libraries:
+ active: true
+ ForbiddenPublicDataClass:
+ active: false
+ LibraryEntitiesShouldNotBePublic:
+ active: false
+ LibraryCodeMustSpecifyReturnType:
+ active: trueand add the following to you build.gradle file:
detektPlugins("io.gitlab.arturbosch.detekt:detekt-rules-authors:$version")If you're using our KtLint wrapper (i.e. detekt-formatting) you should also update your config file as follows:
formatting:
active: true
...
- TrailingComma:
- active: false
- autoCorrect: true
- allowTrailingComma: false
- allowTrailingCommaOnCallSite: false
...
+ TrailingCommaOnCallSite:
+ active: false
+ autoCorrect: true
+ useTrailingCommaOnCallSite: false
+ TrailingCommaOnDeclarationSite:
+ active: false
+ autoCorrect: true
+ useTrailingCommaOnDeclarationSite: falseChangelog
- Remove unused constant - #5421
- Report if/else as issue location instead of block - #5407
- Remove some unnecessary suppressions - #5400
- Check FormattingRule is auto-correctable by information provided by ktlint - #5398
- Fix false negative MultilineLambdaItParameter on complex multiline single statement - #5397
- ObjectPropertyNaming: fix false positive with top level properties - #5390
- Remove usage of MPP targets function for JVM-only projects - #5383
- UnnecessaryNotNullCheck: fix false negative with smart casted arguments - #5380
- Add missing overlapping info & fix rules URLs - #5378
- AlsoCouldBeApply: fix false positive when all statements are not
it-started expressions - #5376 - UnusedPrivateMember: fix false negative with named arguments - #5374
- Change requires type resolution rule warning to debug level to not spam the user console - #5353
- Report UseDataClass findings on class name - #5352
- Report LabeledExpression as the label instead of the whole expression - #5351
- Report CastToNullableType at the cast operator instead of the whole expression - #5350
- Convert previously known string property to list based on default value - #5347
- CastToNullableType: highlights too much - #5346
- UseDataClass flags the whole class body, not just the name - #5338
- CanBeNonNullable: explain why the rule does what it does. - #5332
- Differentiate between correctable and non-correctable KtLint rules - #5324
- ReturnCount 1.22.0 crashes on valid 1.21.0 config property excludedFunctions when using --all-rules cli flag - #5323
- LabeledExpression to highlight only label - #5316
- Use the correct source directory set on JVM - #5163
- Get Android variant compile classpath from compileConfigu...
v1.22.0-RC1
1.22.0-RC1 - 2022-09-19
Notable Changes
- Our website is now versioned. You can find the changes for each version using the dropdown menu on the top bar. Documentation for the upcoming version (next) can be found here.
- We added 10 new Rules to Detekt
MultilineRawStringIndentation- #5058TrimMultilineRawString- #5051UnnecessaryPartOfBinaryExpression- #5203FunctionReturnTypeSpacingfrom KtLint - #5256FunctionSignaturefrom KtLint - #5256FunctionStartOfBodySpacingfrom KtLint - #5256NullableTypeSpacingfrom KtLint - #5256ParameterListSpacingfrom KtLint - #5256SpacingBetweenFunctionNameAndOpeningParenthesisfrom KtLint - #5256TypeParameterListSpacingfrom KtLint - #5256
- We added a new ruleset called
detekt-rules-ruleauthorscontaining rules for Rule Authors to enforce best practices on Detetk rules - #5129 - We added support for JVM toolchain. This means that Detekt will now respect the JDK toolchain you specify on your Gradle configuration. You will also be able to specify a custom JDK home with the
--jdk-homeCLI parameter - #5269 - Improvement for Type Resolution
- Improvement for Config Management
- Deprecations & Removals
- Notable changes to existing rules
- This version of Detekt is built with Gradle
v7.5.1, AGP7.3.0and Kotlin1.7.10(see #4821 #5189 #5306) - The minimum supported Gradle version is now
v6.7.1- #4964
Changelog
- Use list config for
FunctionOnlyReturningConstant>excludedFunctions- #5120 - MaxLineLength: raw typo and test cleanup - #5315
- EndOfSentenceFormat: fix HTML tag heuristic - #5313
- Fix EndOfSentenceFormat highlight - #5311
- Introduce configFile property on DetektGenerateTask - #5308
- Improve debug suggestion message - #5300
- Fat-Jar version of detekt-generator module - #5297
- Toolchains docs - #5293
- Adopt new AGP dsl - #5288
- NonBooleanPropertyPrefixedWithIs: Allow boolean functions - #5285
- Provide the current classpath inside
KotlinEnvironmentResolver- #5275 - Fix false-positive on
NestedScopeFunctions- #5274 - Use convention method to set task property defaults - #5272
- Update docusaurus monorepo to v2.1.0 - #5270
- detektVersionReplace.js plugin is not replacing all [detekt_version] tags on website - #5266
- Update ktlint rule doc links - #5258
- Remove redundant rule config for rules enabled by default - #5257
- UnusedPrivateMember: fix false positive with backtick parameters - #5252
- Improve MultilineRawStringIndentation - #5245
- UnnecessaryLet: fix false positive with with invoke operator calls - #5240
- Introduce baseline tooling api - #5239
- Allow secondary constructors to reference CoroutineDispatchers - #5227
- Update
UnnecessaryAbstractClassissue description to be less verbose - #5224 - Update plugin com.gradle.common-custom-user-data-gradle-plugin to v1.8.0 - #5223
- Pin dependencies - #5222
- Remove rule from NamingRules multi rule - #5212
- Run all rules from EmptyBlocks multi rule individually - #5208
- Run all rules from KDocStyle multi rule individually - #5207
- Docs: GitHub - Add link to configure Sarif severity alert level - #5206
- Fix errors with
detektGenerateConfig- #5199 - Forbid constructors with
ForbiddenMethodCall- #5195 - Update github/codeql-action digest to 2ca79b6 - #5177
- Allow to ignore overloaded methods for the complex interface rule (#5165) - #5173
- Add excludesRawStrings in MaxLineLength - #5171
- Enable Predictive Test Selection for local builds - #5170
- Update dependency org.kohsuke:github-api to v1.307 - #5168
- Update dependency com.github.ajalt:clikt to v2.8.0 - #5167
- Update docusaurus monorepo to v2.0.1 - #5166
- Run build-logic Kotlin compilation out of process on CI - #5162
- Add information about exhaustiveness check to documentation - #5160
- Use getter when determining whether custom config path is set in DetektGenerateConfigTask - #5157
- Limit Kotlin version warning suppression scope in build - #5156
- Re-enable warnings as errors for detekt-gradle-plugin - #5155
- Bundle slf4j-nop in detekt-formatting JAR - #5153
- Fix false negative for UseRequire when thrown in conditional block - #5147
- Allow parentheses for unclear precedence with range operator - #5143
- Mark apiDump task as incompatible with configuration cache - #5134
- Improve binding context management - #5130
RedundantExplicitTypeadd annotation@RequiresTypeResolution- #5128- Disable
ExitOutsideMainifcontextBindingis empty - #5127 - Use list config for
DataClassContainsFunctions>conversionFunctionPrefix- #5119 - Support proper globbing in
ReturnCount- #5118 - Improve finding message of ExplicitItLambdaParameter - #5117
- Update JamesIves/github-pages-deploy-action digest to 13046b6 - #5110
- UnusedUnaryOperator: fix false positive with var assignment and if expression - #5106
- Tag publishPlugins task as incompatible with configuration cache - #5101
- Make verifyGeneratorOutput task configuration cache compatible - #5100
- Remove obsolete FeatureInAlphaState opt in - #5099
- Remove explicit RequiresOptIn compiler flag - [#5098](https://github.com/detekt/detekt/...
v1.21.0
We're delighted to announce the next upcoming stable release of Detekt: 1.21.0 🎉
This release is coming with 6 new rules, new API and functionalities and several stability improvements.
We want to thank you very much our Sponsors for the support in those last months. The work behind Detekt is all happening on a voluntary basis, and we're more than grateful for all the support we get from the Open Source Ecosystem.
We're also excited to announce that we're now having an Open Source Gradle Enterprise instance. When building the Detekt projects, you'll benefit from the Gradle Remote Cache that this instance is providing!
Finally, we want to take the opportunity to thank our contributors for testing, bug reporting and helping
us release this new version of Detekt. You're more than welcome to join our community on the #detekt channel on KotlinLang's Slack (you can get an invite here).
Notable Changes
- We enabled ~30 new rules by default which we believe are now stable enough. - #4875
- We added 7 new Rules to Detekt
- We added support for Markdown reports - #4858
- We now allow users and rule authors to specify a reason for every value in the config file - #4611 - Please note that this feature requires a rule to be extended to support it. If you're a rule author you can start using it right away in your rule. We're looking into using this feature in some first party rule starting from Detekt
1.22.0. - We now report as warnings the Strings in the config file that can be converted to be an array - #4793
- We added a dependency on ConTester to help us verify concurrency scenarios for Detekt - #4672
- For contributors: we restructured our build setup to be use Gradle composite build - #4751
Migration
We fixed a bug related to function with KDocs and how their location in the source code was calculated (see #4961 and #4887).
Because of this, some users might have to recreate their baseline as the location of such functions are not matched anymore against the baseline. You can do so by deleting your old baseline and invoking the detektBaseline task (or the corresponding task, based on your configuration).
Changelog
- ReturnCount: Make configuration parameter more explicit - #5062
- Remove redundant null check - #5061
- Drop redundant Gradle workaround - #5057
- Update ktlint links from website to readme - #5056
- Improve extensions.doc format with admonitions - #5055
- Update docusaurus monorepo to v2.0.0-beta.22 - #5050
- Enable strict Kotlin DSL precompiled script plugins accessors generation - #5048
- MaxChainedCallsOnSameLine: don't count package references as chained calls - #5036
- Xml Report Merger now merges duplicate smells across input report files - #5033
- Add ending line and column to Location.kt - #5032
- Fix type resolution link in Contributing.md - #5027
- #5014 Fix MaxChainedCallsOnSameLine false positives - #5020
- Add endColumn/endLine to SARIF region - #5011
- Removed UnnecessaryAbstractClass if it inherits from a abstract class - #5009
- Only recommend using index accessors for Java classes that are known collections - #4994
- UnusedImports: fix false positive for unresolved imports - #4882
- Fix Signatures.kt:buildFunctionSignature - #4961
- Loading a specific resource from a module must use class from module - #5008
- Update github/codeql-action digest to 3f62b75 - #5007
- Show finding at declaration name instead of the whole declaration - #5003
- NamedArguments: don't count trailing lambda argument - #5002
- Address TextLocation for Wrapping - #4998
- Support markdown report in Gradle plugin - #4995
- Fix false-negative for CanBeNonNullable - #4993
- Give a better error message for --jvm-target - #4978
- Fix rule code samples to be valid Kotlin code - #4969
- Use plain ASCII output in standard reports - #4968
- UnnecessaryApply: fix false negative for assignment - #4948
- Support disabling config validation via tooling spec - #4937
- UnusedPrivateMember: highlight declaration name - #4928
- Provide a priority field for DetektProvider - #4923
- CastToNullableType: allow casting null keyword - #4907
- Update plugin com.gradle.common-custom-user-data-gradle-plugin to v1.7.2 - #4897
- Set strict dependency on tested Kotlin compiler version - #4822
- Simplify regular expressions - #4893
- Remove redundant character escape in RegExp - #4892
- Reformat Markdown files to comply with the spec - #4891
- UnnecessaryInnerClass: fix false negative with
thisreferences - #4884 - UselessCallOnNotNull: fix false positive for unresolved types - #4880
- Update MagicNumber rule to exclude .kts files - #4877
- CanBeNonNullable: fix false positives for parameterized types - #4870
- UnnecessaryInnerClass: fix false positives labeled expression to outer class - #4865
- UnnecessaryInnerClass: add test for safe qualified expressions - #4864
- Fix a confusing Regex in the Compose webpage - #4852
- Fix edit URLs for the website - #4850
- detektGenerateConfig adds the configuration of plugins - #4844
- Update dependency prism-react-renderer to v1.3.3 - #4833
- Search in all versions.properties, not just the first one #4830 - #4831
- Improve exception message - #4823
- Fix ValShouldBeVar false positive inside unknown type - #4820
- Add a recent conference talk link - #4819
- False positive for unused imports #4815 - #4818
- Revert "Display dynamic --jvm-target values when using --help flag (#4694)" - #4816
- UnnecessaryAbstractClass: report only the class name - #4808
- Fix wrong replacement suggestion for UnnecessaryFilter - #4807
- UseOrEmpty: fix false positive for indexing operator calls with type parameters - #4804
- ExplicitCollectionElementAccessMethod: fix false positive for get operators with type parameters - #4803
- Add tests for #4786 - #4801
- Add documentation link for rules in html report - #4799
- Improve rule documentaion and smell message of NamedArguments - #4796
- Improve issue description and smell message of DestructuringDeclarationWithTooManyEntries - [#4795](http...
v1.21.0-RC2
1.21.0-RC2 - 2022-06-29
Notable Changes
- We enabled ~30 new rules by default which we believe are now stable enough. - #4875
- We added 6 new Rules to Detekt
- We added support for Markdown reports - #4858
- We now allow users and rule authors to specify a reason for every value in the config file - #4611
- We now report as warnings the in the config file that can be converted to be an array - #4793
- We added a dependency on ConTester to help us verify concurrency scenarios for Detekt - #4672
- For contributors: we restructured our build setup to be use Gradle composite build - #4751
Changelog
- Fix Signatures.kt:buildFunctionSignature - #4961
- Loading a specific resource from a module must use class from module - #5008
- Update github/codeql-action digest to 3f62b75 - #5007
- Show finding at declaration name instead of the whole declaration - #5003
- NamedArguments: don't count trailing lambda argument - #5002
- Address TextLocation for Wrapping - #4998
- Support markdown report in Gradle plugin - #4995
- Fix false-negative for CanBeNonNullable - #4993
- Give a better error message for --jvm-target - #4978
- Fix rule code samples to be valid Kotlin code - #4969
- Use plain ASCII output in standard reports - #4968
- UnnecessaryApply: fix false negative for assignment - #4948
- Support disabling config validation via tooling spec - #4937
- UnusedPrivateMember: highlight declaration name - #4928
- Provide a priority field for DetektProvider - #4923
- CastToNullableType: allow casting null keyword - #4907
- Update plugin com.gradle.common-custom-user-data-gradle-plugin to v1.7.2 - #4897
- Set strict dependency on tested Kotlin compiler version - #4822
- Simplify regular expressions - #4893
- Remove redundant character escape in RegExp - #4892
- Reformat Markdown files to comply with the spec - #4891
- UnnecessaryInnerClass: fix false negative with
thisreferences - #4884 - UselessCallOnNotNull: fix false positive for unresolved types - #4880
- Update MagicNumber rule to exclude .kts files - #4877
- CanBeNonNullable: fix false positives for parameterized types - #4870
- UnnecessaryInnerClass: fix false positives labeled expression to outer class - #4865
- UnnecessaryInnerClass: add test for safe qualified expressions - #4864
- Fix a confusing Regex in the Compose webpage - #4852
- Fix edit URLs for the website - #4850
- detektGenerateConfig adds the configuration of plugins - #4844
- Update dependency prism-react-renderer to v1.3.3 - #4833
- Search in all versions.properties, not just the first one #4830 - #4831
- Improve exception message - #4823
- Fix ValShouldBeVar false positive inside unknown type - #4820
- Add a recent conference talk link - #4819
- False positive for unused imports #4815 - #4818
- Revert "Display dynamic --jvm-target values when using --help flag (#4694)" - #4816
- UnnecessaryAbstractClass: report only the class name - #4808
- Fix wrong replacement suggestion for UnnecessaryFilter - #4807
- UseOrEmpty: fix false positive for indexing operator calls with type parameters - #4804
- ExplicitCollectionElementAccessMethod: fix false positive for get operators with type parameters - #4803
- Add tests for #4786 - #4801
- Add documentation link for rules in html report - #4799
- Improve rule documentaion and smell message of NamedArguments - #4796
- Improve issue description and smell message of DestructuringDeclarationWithTooManyEntries - #4795
- NestedScopeFunctions - Add rule for nested scope functions - #4788
- Partially drop redundant usage of "dry run" in Gradle plugin tests - #4776
- Allow additionalJavaSourceRootPaths to be defined on @KotlinCoreEnvironmentTest - #4771
- Report KDoc comments that refer to non-public properties of a class - #4768
- Self-inspect the detekt-gradle-plugin - #4765
- Pass args to DetektInvoker as List<String> - #4762
- Cleanup Gradle Plugin Publications - #4752
- Break a dependency between
detekt-gradle-pluginanddetekt-utils- #4748 - Remove suspend lambda rule with CoroutineScope receiver due to not de… - #4747
VarCouldBeVal: Add configuration flagignoreLateinitVar- #4745- UnnecessaryInnerClass: fix false positive with references to function type variables - #4738
- Fix false positive on VarCouldBeVal in generic classes - #4733
- OutdatedDocumentation: fix false positive with no primary constructor - #4728
- Android Gradle: add javac intermediates to classpath - #4723
- OptionalWhenBraces: fix false negative when the single statement has comments inside - #4722
- Document pre-commit hook for staged files - #4711
- Enable rules by default for
1.21- #4643
Dependency Updates
- Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.6.3 - #4976
- Update dependency org.jetbrains.dokka to v1.7.0 - #4974
- Update plugin binaryCompatibilityValidator to v0.10.1 - #4954
- Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.6.2 - #4868
- Update dependency com.android.tools.build:gradle to v7.2.1 - #4861
- Update plugin binaryCompatibilityValidator to v0.10.0 - #4837
- Update dependency io.mockk:mockk to v1.12.4 - #4829
- Update dependency com.android.tools.build:gradle to v7.2.0 - #4824
- Add dependency-analysis plugin and implement some recommendations - #4798
- Add dependency on slf4j-nop to silence warning - #4775
- Update plugin dokka to v1.6.21 - #4770
- Update org.jetbrains.kotlin to v1.6.21 - #4737
- Update dependency com.github.breadmoirai:github-release to v2.3.7 - #4734
- Update plugin binaryCompatibilityValidator to v0.9.0 - #4729
Housekeeping & Refactorings
- Measure flakyness on...