Releases: detekt/detekt
v1.21.0-RC1
v1.21.0-RC1 - 2022-06-02
Notable Changes
- We enabled ~30 new rules by default which we believe are now stable enough. - #4875
- We added 3 new Rules to Detekt
- 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 should 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
- 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.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
- Declare nested test classes as non-static - #4894
- Remove deprecated usages in gradle-plugin test - #4889
- Remove reference to contributor list - #4871
- Add missing image - #4834
- Upgrade to GE enterprise 3.10 - #4802
- Fix broken snapshot publishing - #4783
- Remove pending Gradle version milestones from comments - #4777
- Add more tests for Annotation Suppressor - #4774
- fix: add test case that fails if environment is not properly set up - #4769
- Disable UnusedImports for the Detekt project - #4741
- Remove Unnecesary @nested - #4740
- Update the argsfile to unblock
runWithArgsFilefailing locally - #4718
See all issues at: 1.21.0
v1.20.0
We're extremely excited to share with you all the next upcoming stable release of Detekt: 1.20.0 🎉
This release is coming with 16 new rules, new API and functionalities and several stability improvements.
First, much thanks to our sponsors ❤️ as we were able to buy a domain and move our website to https://detekt.dev/.
As for the feature shipped, we work a lot on the Reporting side: we added a new type of reporting, improved the styling of the existing one and
generally reduced the unnecessary warnings of run with type resolution.
For rules like ForbiddenMethod where you can configure a signature of a method you want to use in your rule, we added a new syntax
that allows to reference generic methods & extension functions.
We update a lot of the libraries we depend on bringing Detekt up to the ecosystem: KtLint 0.45.2, Kotlin 1.6.20 and Gradle 7.4.2 to name a few.
Finally, we also migrated all of our tests from Spek to JUnit. This was a huge effort that will hopefully make easier for contributors
to be involved with Detekt.
As always, 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
- With this Detekt versions, rule authors can define the default configuration for their custom rules. This default configuration will be merged together with the user configuration and can be overridden by the user if they wish. More on this here #4315. The
formattingruleset provided by Detekt is updated to use this new mechanism - #4352 - We've added 16 new rules:
- UnnecessaryInnerClass - #4394
- CanBeNonNullableProperty - #4379
- NullCheckOnMutableProperty - #4353
- SuspendFunWithCoroutineScopeReceiver - #4616
- ElseCaseInsteadOfExhaustiveWhen - #4632
- TrailingComma - From KtLint - #4227
- UnnecessaryParenthesesBeforeTrailingLambda - From KtLint - #4630
- BlockCommentInitialStarAlignment - From KtLint - #4645
- CommentWrapping - From KtLint - #4645
- DiscouragedCommentLocation - From KtLint - #4645
- FunKeywordSpacing - From KtLint - #4645
- FunctionTypeReferenceSpacing - From KtLint - #4645
- KdocWrapping - From KtLint - #4645
- ModifierListSpacing - From KtLint - #4645
- TypeArgumentListSpacing - From KtLint - #4645
- Wrapping - From KtLint - #4645
- We've made several improvements to the console reporting:
- The HTML report has now a better CSS styling - #4447
- The default reporting format is now
LiteFindingsReport(which is more compact reporting and similar to other tools in the ecosystem. You can see an example here) - #4449. - We've added issue details to findings on
FindingsReportandFileBasedFindingsReporter- #4464 - We suppressed several warnings reported when running with type resolution - #4423
- We fixed a regression introduced in
1.19.0for users usingignoreAnnotatedrunning without type resolution - #4570 - For rules like
ForbiddenMethodwhere you can specify a method name in the config file, now we added support for: - We've fixed a security vulnerability related to XML parsing - #4499
- We've changed the behavior of the baseline task. Now the baseline is always update, even if you fixed all the issues in your codebase - #4445
- We now enable the naming ruleset by default also on tests. Previously they were excluded - #4438
- This version of Detekt is built with Gradle
v7.4.2, AGP7.1.3and Kotlin1.6.20(see #4530 #4573 #4133 #4277 #4665) - This version of Detekt is wrapping KtLint version
0.45.2(see #4227 #4630 #4645 #4690) - For contributors: we migrated all our tests from Spek to JUnit due to better support and tooling #4670.
Changelog
- Display dynamic --jvm-target values when using --help flag - #4694
- CanBeNonNullable shouldn't consider abstract properties - #4686
- NonBooleanPropertyPrefixedWithIs: Allow boolean function reference - #4684
- [VarCouldBeVal] fix overrides false positives - #4664
- Add ignoreOverridden support for BooleanPropertyNaming rule - #4654
- Fix regression generating configuration - #4646
- Fix concurrency issue when creating PomModel (#4609) - #4631
- UnnecessaryAbstractClass: fix false positive when the abstract class has properties in the primary constructor - #4628
- Properly set toolVersion on DetektExtension - #4623
- NamedArguments: Ignore when argument values are the same as the parameter name - #4613
- Parallel invocation of AnalysisFacade fails spuriously in 1.20.0-RC1 - #4609
- NoSuchElementException after updating to 1.20.0-RC1 - #4604
- Better error classification in Gradle Enterprise. - #4586
- Fix for missing /kotlin folder when running on Android projects - #4554
- Deprecate continuationIndentSize from the Indentation rule - #4551
- Fix performance issue for regexp in Reporting.kt - #4550
- Revert "trim values when parsing the baseline (#4335)" - #4548
- Fix AutoCorrection crashing with Missing extension point - #4545
- Make DoubleMutabilityForCollection configurable and set a DoubleMutability alias - #4541
- Fix
AnnotationExcluder- #4518 - Fix false positive of UnnecessaryInnerClass - #4509
- [MaxLineLength] Fix signature in for blank characters in the Baseline - #4504
- Fix overridden function reporting for CanBeNonNullable rule - #4497
- Set the name of functions and paramenters between ` to improve the readability - #4488
- update InvalidPackageDeclaration to report if rootPackage is not present - #4484
- [VarCouldBeVal] Override vars will not be flagged if bindingContext is not set - #4477
- Document the overlapping rules from
formatting- #4473 - Match functions signatures with lambdas on it - #4458
- Add option for OutdatedDocumentation to allow param in constructor pr… - #4453
- Ignore private operators when we don't have ContextBingding in UnusedPrivateMember - #4441
- Add documentation for
Suppressors - #4440 - [FunctionNaming] Don't allow the usage of ` in function names - #4439
- Add list of functions to skip in IgnoredReturnValue rule - #4434
- Extend CanBeNonNullable rule to check function params - #4431
- Extend VarCouldBeVal to include analysis of file- and class-level properties - [#4424](https://gith...
v1.20.0-RC2
v1.20.0-RC2 - 2022-03-31
Notable Changes
- Thanks to our sponsors ❤️, we were able to buy a domain and move our website to https://detekt.dev/.
- With this Detekt versions, rule authors can define the default configuration for their custom rules. This default configuration will be merged together with the user configuration and can be overridden by the user if they wish. More on this here #4315. The
formattingruleset provided by Detekt is updated to use this new mechanism - #4352 - We've added 16 new rules:
- UnnecessaryInnerClass - #4394
- CanBeNonNullableProperty - #4379
- NullCheckOnMutableProperty - #4353
- SuspendFunWithCoroutineScopeReceiver - #4616
- ElseCaseInsteadOfExhaustiveWhen - #4632
- TrailingComma - From KtLint - #4227
- UnnecessaryParenthesesBeforeTrailingLambda - From KtLint - #4630
- BlockCommentInitialStarAlignment - From KtLint - #4645
- CommentWrapping - From KtLint - #4645
- DiscouragedCommentLocation - From KtLint - #4645
- FunKeywordSpacing - From KtLint - #4645
- FunctionTypeReferenceSpacing - From KtLint - #4645
- KdocWrapping - From KtLint - #4645
- ModifierListSpacing - From KtLint - #4645
- TypeArgumentListSpacing - From KtLint - #4645
- Wrapping - From KtLint - #4645
- We've made several improvements to the console reporting:
- The HTML report has now a better CSS styling - #4447
- The default reporting format is now
LiteFindingsReport(which is more compact reporting and similar to other tools in the ecosystem. You can see an example here) - #4449. - We've added issue details to findings on
FindingsReportandFileBasedFindingsReporter- #4464 - We suppressed several warnings reported when running with type resolution - #4423
- We fixed a regression introduced in
1.19.0for users usingignoreAnnotatedrunning without type resolution - #4570 - For rules like
ForbiddenMethodwhere you can specify a method name in the config file, now we added support for: - We've fixed a security vulnerability related to XML parsing - #4499
- We've changed the behavior of the baseline task. Now the baseline is always update, even if you fixed all the issues in your codebase - #4445
- We now enable the naming ruleset by default also on tests. Previously they were excluded - #4438
- This version of Detekt is built with Gradle
v7.4.1, AGP7.1.1and Kotlin1.6.10(see #4530 #4573 #4133 #4277) - This version of Detekt is wrapping KtLint version
0.45.1(see #4227 - #4630 - #4645) - For contributors: we migrated most of our tests from Spek to JUnit due to better support and tooling.
Changelog
- Add ignoreOverridden support for BooleanPropertyNaming rule - #4654
- Fix regression generating configuration - #4646
- Fix concurrency issue when creating PomModel (#4609) - #4631
- UnnecessaryAbstractClass: fix false positive when the abstract class has properties in the primary constructor - #4628
- Properly set toolVersion on DetektExtension - #4623
- NamedArguments: Ignore when argument values are the same as the parameter name - #4613
- Parallel invocation of AnalysisFacade fails spuriously in 1.20.0-RC1 - #4609
- NoSuchElementException after updating to 1.20.0-RC1 - #4604
- Better error classification in Gradle Enterprise. - #4586
- Fix for missing /kotlin folder when running on Android projects - #4554
- Deprecate continuationIndentSize from the Indentation rule - #4551
- Fix performance issue for regexp in Reporting.kt - #4550
- Revert "trim values when parsing the baseline (#4335)" - #4548
- Fix AutoCorrection crashing with Missing extension point - #4545
- Make DoubleMutabilityForCollection configurable and set a DoubleMutability alias - #4541
- Fix
AnnotationExcluder- #4518 - Fix false positive of UnnecessaryInnerClass - #4509
- [MaxLineLength] Fix signature in for blank characters in the Baseline - #4504
- Fix overridden function reporting for CanBeNonNullable rule - #4497
- Set the name of functions and paramenters between ` to improve the readability - #4488
- update InvalidPackageDeclaration to report if rootPackage is not present - #4484
- [VarCouldBeVal] Override vars will not be flagged if bindingContext is not set - #4477
- Document the overlapping rules from
formatting- #4473 - Match functions signatures with lambdas on it - #4458
- Add option for OutdatedDocumentation to allow param in constructor pr… - #4453
- Ignore private operators when we don't have ContextBingding in UnusedPrivateMember - #4441
- Add documentation for
Suppressors - #4440 - [FunctionNaming] Don't allow the usage of ` in function names - #4439
- Add list of functions to skip in IgnoredReturnValue rule - #4434
- Extend CanBeNonNullable rule to check function params - #4431
- Extend VarCouldBeVal to include analysis of file- and class-level properties - #4424
- Formulate rule/sample-extensions descriptions consistently - #4412
- Fix false-positive on ExplicitCollectionElementAccessMethod - #4400
- Fixes false negatives in
UnnecessaryAbstractClass- #4399 - Add first draft of a rule description style guide - #4386
- Forbid usage of java.lang.ClassLoader.getResourceAsStream - #4381
- Update Sponsor button to Detekt's one - #4378
- [OptionalUnit] Allow a function to declare a Unit return type when it uses a generic function initializer - #4371
- Completely-empty abstract classes will now be flagged by UnnecessaryAbstractClass - #4370
- Fix false positive in RethrowCaughtException for try with more than one catch (#4367) - #4369
- Testing and rule improvement for EmptyElseBlock - #4349
- UnusedPrivateMember should not report external classes/interfaces - #4347
- [UseDataClass] Do not report on
innerclasses - #4344 - Support jvmTarget 17 - #4287
- UnderscoresInNumericLiterals: Allow numbers with non standard groupings - #4280
- Introduce DefaultValue type - #3928
Dependency Updates
- Update dependency gradle to v7.4.1 - #4622
- Update dependency com.android.tools...
v1.20.0-RC1
v1.20.0-RC1 - 2022-02-26
Notable Changes
- Thanks to our sponsors ❤️, we were able to buy a domain and move our website to https://detekt.dev/.
- With this Detekt versions, rule authors can define the default configuration for their custom rules. This default configuration will be merged together with the user configuration and can be overridden by the user if they wish. More on this here #4315. The
formattingruleset provided by Detekt is updated to use this new mechanism - #4352 - We've added 4 new rules:
- We've made several improvements to the console reporting:
- The HTML report has now a better CSS styling - #4447
- The default reporting format is now
LiteFindingsReport(which is more compact reporting and similar to other tools in the ecosystem. You can see an example here) - #4449. - We've added issue details to findings on
FindingsReportandFileBasedFindingsReporter- #4464 - We suppressed several warnings reported when running with type resolution - #4423
- We fixed a regression introduced in
1.19.0for users usingignoreAnnotatedrunning without type resolution - #4570 - We've fixed a security vulnerability related to XML parsing - #4499
- We've changed the behavior of the baseline task. Now the baseline is always update, even if you fixed all the issues in your codebase - #4445
- We now enable the naming ruleset by default also on tests. Previously they were excluded - #4438
- This version of Detekt is built with Gradle
v7.4, AGP7.1.1and Kotlin1.6.10(see #4530 #4573 #4133 #4277) - This version of Detekt is wrapping KtLint version
0.43.2(see #4227) - For contributors: we migrated most of our tests from Spek to JUnit due to better support and tooling.
Changelog
- Better error classification in Gradle Enterprise. - #4586
- Fix for missing /kotlin folder when running on Android projects - #4554
- Deprecate continuationIndentSize from the Indentation rule - #4551
- Fix performance issue for regexp in Reporting.kt - #4550
- Revert "trim values when parsing the baseline (#4335)" - #4548
- Fix AutoCorrection crashing with Missing extension point - #4545
- Make DoubleMutabilityForCollection configurable and set a DoubleMutability alias - #4541
- Fix
AnnotationExcluder- #4518 - Fix false positive of UnnecessaryInnerClass - #4509
- [MaxLineLength] Fix signature in for blank characters in the Baseline - #4504
- Fix overridden function reporting for CanBeNonNullable rule - #4497
- Set the name of functions and paramenters between ` to improve the readability - #4488
- update InvalidPackageDeclaration to report if rootPackage is not present - #4484
- [VarCouldBeVal] Override vars will not be flagged if bindingContext is not set - #4477
- Document the overlapping rules from
formatting- #4473 - Match functions signatures with lambdas on it - #4458
- Add option for OutdatedDocumentation to allow param in constructor pr… - #4453
- Ignore private operators when we don't have ContextBingding in UnusedPrivateMember - #4441
- Add documentation for
Suppressors - #4440 - [FunctionNaming] Don't allow the usage of ` in function names - #4439
- Add list of functions to skip in IgnoredReturnValue rule - #4434
- Extend CanBeNonNullable rule to check function params - #4431
- Extend VarCouldBeVal to include analysis of file- and class-level properties - #4424
- Formulate rule/sample-extensions descriptions consistently - #4412
- Fix false-positive on ExplicitCollectionElementAccessMethod - #4400
- Fixes false negatives in
UnnecessaryAbstractClass- #4399 - Add first draft of a rule description style guide - #4386
- Forbid usage of java.lang.ClassLoader.getResourceAsStream - #4381
- Update Sponsor button to Detekt's one - #4378
- [OptionalUnit] Allow a function to declare a Unit return type when it uses a generic function initializer - #4371
- Completely-empty abstract classes will now be flagged by UnnecessaryAbstractClass - #4370
- Fix false positive in RethrowCaughtException for try with more than one catch (#4367) - #4369
- Testing and rule improvement for EmptyElseBlock - #4349
- UnusedPrivateMember should not report external classes/interfaces - #4347
- [UseDataClass] Do not report on
innerclasses - #4344 - Support jvmTarget 17 - #4287
- UnderscoresInNumericLiterals: Allow numbers with non standard groupings - #4280
- Introduce DefaultValue type - #3928
Dependency Updates
- Update dependency com.android.tools.build:gradle to v7.1.2 - #4594
- Update dependency com.android.tools.build:gradle to v7.1.1 - #4561
- Update plugin pluginPublishing to v0.20.0 - #4502
- Update JamesIves/github-pages-deploy-action action to v4.2.1 - #4475
- Update JamesIves/github-pages-deploy-action action to v4.1.9 - #4455
- Update plugin gradleVersions to v0.41.0 - #4454
- Revert "Update plugin pluginPublishing to v0.19.0 (#4429)" - #4452
- Update plugin pluginPublishing to v0.19.0 - #4429
- Update dependency io.mockk:mockk to v1.12.2 - #4427
- Shadow 7.1.2 - #4422
- Update plugin dokka to v1.6.10 - autoclosed - #4407
- Update dependency org.jetbrains.dokka:jekyll-plugin to v1.6.10 - #4406
- Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.6.0 - #4393
- Update dependency gradle to v7.3.3 - #4392
- Update dependency org.yaml:snakeyaml to v1.30 - #4375
- Update dependency gradle to v7.3.2 - #4374
- Update plugin shadow to v7.1.1 - #4373
- Update dependency gradle to v7.3.1 - #4350
- Update plugin dokka to v1.6.0 - #4328
Housekeeping & Refactorings
- Housekeep Gradle scripts - #4589
- Refactor config printer to improve testability - #4580
- avoid usage of java stream for parameterized tests - #4579
- split rule documentation printer to improve testability - #4578
- Make VERSION_CATALOGS stable - #4577
- Enable Gradle's configuration cache by default - #4576
- Migrate detekt-rules-performance tests to JUnit - [#4569](https://github.com/...
v1.19.0
Please welcome the next upcoming stable release of Detekt: 1.19.0 🎉
This release is coming with a lot of new features, new rules, evolution in the API and stability improvements.
Specifically, we've shipped some features that will allow you to better adapt detekt to run on codebases
that are using JetPack compose with features such as ignoreAnnotated and ignoreFunction.
As always, 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 now offer an
ignoreAnnotatedconfiguration key that you can use on all your rules to suppress findings if inside an annotated block (e.g.@Composable) - #4102 and #4241 - Similarly, we now offer also an
ignoreFunctionconfiguration key that you can use to suppress findings if inside a function with a given name - #4148 - Report configuration is changing in the Gradle plugin. The
reportsextension on thedetektextension has been
deprecated. See the Migration section below for steps to migrate to the new recommended configuration - #3687 - The
ExplicitCollectionElementAccessMethodrule is now a type-resolution only rule - #4201 - The
InvalidPackageDeclarationrule has been split to create theMissingPackageDeclarationrule - #4149 - The
ForbiddenCommentrule now offers acustomMessageconfiguration key - #4126 - We bumped ktlint and updated the default enabled rules to mirror what ktlint is doing - #4179
- Added a new
LambdaParameterNamingrule, to enforce a naming convention of parameter inside lambdas - #4147 - Added a new
InjectDispatcherrule, to check if dispatchers are injectable - #4222 - Added a new
ConsoleReportformat - #4027 - Gradle: We added the
--auto-correctcmdline option to gradle tasks - #4202 - Gradle: We removed the
afterEvaluatewrapper from the Android and KMM plugin - #4159 and #4271 - We now test against Java 17 and stopped testing against Java 16 - #4136
- Remove library specific configurations like Jetpack Compose and Dagger from the default config - #4101
- Remove detekt-bom module - #4043
- Use reference in fallback property delegate - #3982
Migration
Configuring reports in the Gradle plugin should be done at the task level instead of at the extension (or global) level.
The previous recommendation resulted in the report output for multiple tasks overwriting each other when multiple detekt
tasks were executed in the same Gradle run.
Before this release the recommended way to configure reports was using the detekt extension:
detekt {
reports {
xml {
enabled = true
destination = file("build/reports/detekt/detekt.xml")
}
}
}This meant all detekt tasks would output the report to the same destination. From this detekt release you should enable
and disable reports for all tasks using the withType Gradle method:
// Kotlin DSL
tasks.withType<Detekt>().configureEach {
reports {
xml.required.set(true)
}
}// Groovy DSL
tasks.withType(Detekt).configureEach {
reports {
xml.required.set(true)
}
}To customize the report output location configure the task individually:
tasks.detektMain {
reports {
xml {
outputLocation.set(file("build/reports/detekt/customPath.xml"))
required.set(true) // reports can also be enabled and disabled at the task level as needed
}
}
}Changelog
- trim values when parsing the baseline - #4335
- Fix #4332 by widening the scope to all JDKs - #4333
- Bugfix provided by #4225 needs wider scope - #4332
- Avoid false positives in MemberNameEqualsClassName - #4329
- Add two new config steps for Compose - #4322
- Set DetektJvm task source with SourceDirectorySet instead of file list - #4151
- Add documentation about how to configure Baseline task with type resolution - #4285
- Remove kotlin-gradle-plugin-api from runtime classpath - #4275
- Use appropriate annotations on source properties in Gradle tasks - #4264
- Replace usage of deprecated ConfigureUtil - #4263
- Fix test failure of ReportMergeSpec - #4262
- Revert "Remove afterEvaluate wrapper (#4159)" - #4259
- ExplicitCollectionElementAccessMethodSpec: does not report methods that is called on implicit receiver - #4256
- UnusedPrivateMember: fix false positive with operator
in- #4249 - Introduce UseAnyOrNoneInsteadOfFind rule - #4247
- OptionalWhenBraces: fix false negative for nested when - #4246
- Handle MultiRules in Suppressors - #4239
- Fix UselessCallOnNotNull rule - #4237
- Make detekt a bit less noisy when mixing java and kotlin files - #4231
- Workaround for JDK 8 instability when reading config - #4225
- Define FunctionSignature - #4176
- ForbiddenMethodCall: report overriding method calls - #4205
- ObjectLiteralToLambda: fix false positive when using Java interfaces with default methods - #4203
- Unit tests for TooGenericExceptionThrown - #4198
- Display correct --jvm-target values when using --help flag - #4195
- Improved
MaximumLineLengthdocumentation - #4188 - Report NewLineAtEndOfFile source location at end of file - #4187
- #4169 OutdatedDocumentation rule - #4185
- Don't report on platform types in NullableToStringCall - #4180
- Fix #4140: Allow Bazel based tests to run with string test input - #4170
- Improve ForbiddenMethodCall documentation - #4166
- Report SwallowedException on catchParameter - #4158
- Enable binary compatibility validator for detekt-test and detekt-test-api - #4157
- Fix issues with Elvis operator in UnconditionalJumpStatementInLoop - #4150
- Improve documentation for naming rules - #4146
- Disable
UnsafeCallOnNullableTypeon tests - #4123 - Remove annotations from LateinitUsage noncompliant block - #4100
- UnnecessaryAbstractClass: false positive when the abstract class has internal/protected abstract members - #4099
- Deprecate DefaultContext - #4098
- Fix confusing message when breaking the MultilineLambdaItParameter rule - #4089
- Remove deprecated KotlinExtension - #4063
- Add an alias for FunctionMinLength/FunctionMaxLength rules to be more descriptive - #4050
- fix report path, default path is reports/detekt/... - #4034
- Fix TextLocation of Indentation rule - #4030
- detekt-bom is going away after 1.18.0 - #3988
- UnderscoresInNumericLiterals acceptableDecimalLength is off by one - #3972
- Create rule set configurations in a safe way - #3964
- Remove UnnecessarySafeCall safeguard against ErrorType - #3439
Dependency Updates
- Update dependency org...
v1.19.0-RC2
v1.19.0-RC1 - 2021-11-18
Notable Changes
- We now offer an
ignoreAnnotatedconfiguration key that you can use on all your rules to suppress findings if inside an annotated block (e.g.@Composable) - #4102 and #4241 - Report configuration is changing in the Gradle plugin. The
reportsextension on thedetektextension has been
deprecated. See the Migration section below for steps to migrate to the new recommended configuration - #3687 - The
ExplicitCollectionElementAccessMethodrule is now a type-resolution only rule - #4201 - The
InvalidPackageDeclarationrule has been split to create theMissingPackageDeclarationrule - #4149 - The
ForbiddenCommentrule now offers acustomMessageconfiguration key - #4126 - We bumped ktlint and updated the default enabled rules to mirror what ktlint is doing - #4179
- Added a new LambdaParameterNaming rule, to enfornce a naming convention of paramter inside lambdas - #4147
- Added a new InjectDispatcher rule, to check if dispatchers are injectable - #4222
- Added a new ConsoleReport format - #4027
- Gradle: We added the
--auto-correctcmdline option to gradle tasks - #4202 - Gradle: We removed the
afterEvaluatewrapper from the Android and KMM plugin - #4159 and #4271 - We now test against Java 17 and stopped testing against Java 16 - #4136
- Remove library specific configurations like Jetpack Compose and Dagger from the default config - #4101
- Remove detekt-bom module - #4043
- Use reference in fallback property delegate - #3982
Migration
Configuring reports in the Gradle plugin should be done at the task level instead of at the extension (or global) level.
The previous recommendation resulted in the report output for multiple tasks overwriting each other when multiple detekt
tasks were executed in the same Gradle run.
Before this release the recommended way to configure reports was using the detekt extension:
detekt {
reports {
xml {
enabled = true
destination = file("build/reports/detekt/detekt.xml")
}
}
}This meant all detekt tasks would output the report to the same destination. From this detekt release you should enable
and disable reports for all tasks using the withType Gradle method:
// Kotlin DSL
tasks.withType<Detekt>().configureEach {
reports {
xml.required.set(true)
}
}// Groovy DSL
tasks.withType(Detekt).configureEach {
reports {
xml.required.set(true)
}
}To customize the report output location configure the task individually:
tasks.detektMain {
reports {
xml {
outputLocation.set(file("build/reports/detekt/customPath.xml"))
required.set(true) // reports can also be enabled and disabled at the task level as needed
}
}
}Changelog
- Add documentation about how to configure Baseline task with type resolution - #4285
- Remove kotlin-gradle-plugin-api from runtime classpath - #4275
- Use appropriate annotations on source properties in Gradle tasks - #4264
- Replace usage of deprecated ConfigureUtil - #4263
- Fix test failure of ReportMergeSpec - #4262
- Revert "Remove afterEvaluate wrapper (#4159)" - #4259
- ExplicitCollectionElementAccessMethodSpec: does not report methods that is called on implicit receiver - #4256
- UnusedPrivateMember: fix false positive with operator
in- #4249 - Introduce UseAnyOrNoneInsteadOfFind rule - #4247
- OptionalWhenBraces: fix false negative for nested when - #4246
- Handle MultiRules in Suppressors - #4239
- Fix UselessCallOnNotNull rule - #4237
- Make detekt a bit less noisy when mixing java and kotlin files - #4231
- Workaround for JDK 8 instability when reading config - #4225
- Define FunctionSignature - #4176
- ForbiddenMethodCall: report overriding method calls - #4205
- ObjectLiteralToLambda: fix false positive when using Java interfaces with default methods - #4203
- Unit tests for TooGenericExceptionThrown - #4198
- Display correct --jvm-target values when using --help flag - #4195
- Improved
MaximumLineLengthdocumentation - #4188 - Report NewLineAtEndOfFile source location at end of file - #4187
- #4169 OutdatedDocumentation rule - #4185
- Don't report on platform types in NullableToStringCall - #4180
- Fix #4140: Allow Bazel based tests to run with string test input - #4170
- Improve ForbiddenMethodCall documentation - #4166
- Report SwallowedException on catchParameter - #4158
- Enable binary compatibility validator for detekt-test and detekt-test-api - #4157
- Fix issues with Elvis operator in UnconditionalJumpStatementInLoop - #4150
- Improve documentation for naming rules - #4146
- Disable
UnsafeCallOnNullableTypeon tests - #4123 - Remove annotations from LateinitUsage noncompliant block - #4100
- UnnecessaryAbstractClass: false positive when the abstract class has internal/protected abstract members - #4099
- Deprecate DefaultContext - #4098
- Fix confusing message when breaking the MultilineLambdaItParameter rule - #4089
- Remove deprecated KotlinExtension - #4063
- Add an alias for FunctionMinLength/FunctionMaxLength rules to be more descriptive - #4050
- fix report path, default path is reports/detekt/... - #4034
- Fix TextLocation of Indentation rule - #4030
- detekt-bom is going away after 1.18.0 - #3988
- UnderscoresInNumericLiterals acceptableDecimalLength is off by one - #3972
- Create rule set configurations in a safe way - #3964
- Remove UnnecessarySafeCall safeguard against ErrorType - #3439
Dependency Updates
- Gradle Publishing Plugin 0.17.0 - #4270
- Shadow 7.1.0 - #4269
- Dokka 1.5.31 - #4268
- Binary Compatibility Validator 0.8.0 - #4267
- Reflections 0.10.2 - #4266
- Upgrade to Gradle 7.3 - #4254
- Dokka 1.5.30 - #4114
- Kotlin 1.5.31 - #4113
- Update dependencies - #4065
Housekeeping & Refactorings
- Minor typo fix and code refactoring - #4284
- Improve Tests of UnnecesaryLet - #4282
- Fix typo in UnnecessaryLet - #4281
- Fix typo in Gradle lib definition - #4255
- Rename DoubleMutabilityInCollectionSpec to DoubleMutabilityForCollectionSpec - #4251
- Simplify conditional checks to improve coverage - #4221
- Refactor NoTabs to remove DetektVisitor - #4220
- Fix typos and grammar in rule descriptions - #4219
- Use Kotlin's ArrayDeque implementation - [#4218](https://githu...
v1.19.0-RC1
v1.19.0-RC1 - 2021-10-31
Notable Changes
- We now offer an
ignoreAnnotatedconfiguration key that you can use on all your rules to suppress findings if inside an annotated block (e.g.@Composable) - #4102 - Report configuration is changing in the Gradle plugin. The
reportsextension on thedetektextension has been
deprecated. See the Migration section below for steps to migrate to the new recommended configuration - #3687 - The
ExplicitCollectionElementAccessMethodrule is now a type-resolution only rule - #4201 - The
InvalidPackageDeclarationrule has been split to create theMissingPackageDeclarationrule - #4149 - The
ForbiddenCommentrule now offer acustomMessageconfiguration key - #4126 - We bumped ktlint and updated the default enabled rules to mirror what ktlint is doing - #4179
- Add a new ConsoleReport format - #4027
- Gradle: We removed the
afterEvaluatewrapper from the Android and KMM plugin - #4159 - We now test against Java 17 and stopped testing against Java 16 - #4136
- Remove library specific configurations like Jetpack Compose and Dagger from the default config - #4101
- Remove detekt-bom module - #4043
- Use reference in fallback property delegate - #3982
Migration
Configuring reports in the Gradle plugin should be done at the task level instead of at the extension (or global) level.
The previous recommendation resulted in the report output for multiple tasks overwriting each other when multiple detekt
tasks were executed in the same Gradle run.
Before this release the recommended way to configure reports was using the detekt extension:
detekt {
reports {
xml {
enabled = true
destination = file("build/reports/detekt/detekt.xml")
}
}
}This meant all detekt tasks would output the report to the same destination. From this detekt release you should enable
and disable reports for all tasks using the withType Gradle method:
// Kotlin DSL
tasks.withType<Detekt>().configureEach {
reports {
xml.required.set(true)
}
}// Groovy DSL
tasks.withType(Detekt).configureEach {
reports {
xml.required.set(true)
}
}To customize the report output location configure the task individually:
tasks.detektMain {
reports {
xml {
outputLocation.set(file("build/reports/detekt/customPath.xml"))
required.set(true) // reports can also be enabled and disabled at the task level as needed
}
}
}Changelog
- ForbiddenMethodCall: report overriding method calls - #4205
- ObjectLiteralToLambda: fix false positive when using Java interfaces with default methods - #4203
- Unit tests for TooGenericExceptionThrown - #4198
- Display correct --jvm-target values when using --help flag - #4195
- Improved
MaximumLineLengthdocumentation - #4188 - Report NewLineAtEndOfFile source location at end of file - #4187
- #4169 OutdatedDocumentation rule - #4185
- Don't report on platform types in NullableToStringCall - #4180
- Fix #4140: Allow Bazel based tests to run with string test input - #4170
- Improve ForbiddenMethodCall documentation - #4166
- Report SwallowedException on catchParameter - #4158
- Enable binary compatibility validator for detekt-test and detekt-test-api - #4157
- Fix issues with Elvis operator in UnconditionalJumpStatementInLoop - #4150
- Improve documentation for naming rules - #4146
- Disable
UnsafeCallOnNullableTypeon tests - #4123 - Remove annotations from LateinitUsage noncompliant block - #4100
- UnnecessaryAbstractClass: false positive when the abstract class has internal/protected abstract members - #4099
- Deprecate DefaultContext - #4098
- Fix confusing message when breaking the MultilineLambdaItParameter rule - #4089
- Remove deprecated KotlinExtension - #4063
- Add an alias for FunctionMinLength/FunctionMaxLength rules to be more descriptive - #4050
- fix report path, default path is reports/detekt/... - #4034
- Fix TextLocation of Indentation rule - #4030
- detekt-bom is going away after 1.18.0 - #3988
- UnderscoresInNumericLiterals acceptableDecimalLength is off by one - #3972
- Create rule set configurations in a safe way - #3964
- Remove UnnecessarySafeCall safeguard against ErrorType - #3439
Dependency Updates
Housekeeping & Refactorings
- Simplify where casts used unnecessarily - #4213
- Don't specify Gradle Enterprise Gradle Plugin version - #4210
- Fix baserule import in tests - #4189
- Run CLI sanity checks with Gradle - #4186
- Use Codecov GitHub Action to upload coverage - #4184
- Enable ParameterListWrapping rule on detekt codebase - #4178
- Add test cases for MagicNumber - #4152
- Fix FunctionParameterNamingSpec - #4145
- Address feedback on #4139 - #4143
- Don't skip tests that now pass - #4142
- Fixes for Kotlin 1.6.0-M1 - #4139
- Don't unnecessarily propogate opt-in requirement - #4116
- Drop junit-platform-launcher dependency - #4115
- Ensure detekt-tooling public API is stable - #4112
- Fix globing typo - #4107
- Rename and split ValidateConfig files - #4105
- Dynamic deprecation - #4104
- Fix indent issues with continuation indent - #4103
- Refactor so detekt-gradle-plugin can be added as an included build - #4094
- Migrate buildSrc to composite build - #4090
- Fix broken
applySelfAnalysisVersiontask - #4082 - Convert DetektJvmSpec to use ProjectBuilder - #4075
- Upscale JVM settings - #4057
- Gradle 7.2 - #4056
- Verify at compile time that issue id matches rule name - #4047
See all issues at: 1.19.0
v1.18.1
- 2021-08-30
This is a point release for Detekt 1.18.0 containing bugfixes for problems that got discovered just after the release.
Notable Changes
- MultiRule should pass correctly the BindingContext - #4071
- Allow active, excludes and includes in the rule-set configuration - #4045
- Remove Error from ThrowingExceptionsWithoutMessageOrCause because is a common name - #4046
- Fix issue IDs for ReferentialEquality and DoubleMutability - #4040
See all issues at: 1.18.1
v1.18.0
1.18.0 - 2021-08-12
We're more than excited to introduce you a next stable release of Detekt: 1.18.0 🎉
This release is coming with a lot of changes, new rules, evolution in the API and stability improvements.
We want to take the opportunity to thank our contributors for testing, bug reporting and helping
us release this new version of Detekt.
Notable Changes
- We've added two new rules:
AvoidReferentialEqualityandBooleanPropertyNaming(see #3924 and #3795) - This version of Detekt ships with Kotlin
1.5.21, and we're compiling withapiVersionset to1.4- #3956 and #3852 - The minimum version of Gradle to use Detekt Gradle Plugin is now
6.1- #3830 - This version of Detekt has been tested against Java 16 - #3698
- We fixed a long-standing bug related to parallel execution (#3248) - #3799 and #3822
- We now use multi-line format for list options in the default detekt config file - #3827
- The rule
VarCouldBeValhas been updated and now works only with type resolution to provide more precise findings - #3880 - We removed all the references to
Extensions.getRootAreathat is now deprecated from our codebase. This was affecting users with sporadic crashes. - #3848 - For detekt rule authors: We created a Github Template that you can use to bootstrap your custom rule project: detekt-custom-rule-template. You can use JitPack to host it and share your rule easily with other members of the community.
- For detekt rule authors: We finished the rework to use the annotations instead of kdoc tags in rules. Specifically configurations must be configured using
@Configurationwhile auto-correction capability should be specified with the@AutoCorrectableannotation #3820.
Migration
- We renamed the
inputproperty inside thedetekt{}extension of the Gradle plugin tosource. Theinputproperty has been deprecated, and we invite you to migrate to the new property (see #3951)
// BEFORE
detekt {
input = files(...)
}
// AFTER
detekt {
source = files(...)
}
- For all rule authors: When accessing a config value within a rule, using
valueOrDefaultandvalueOrDefaultCommaSeparatedis no longer recommended. While both will remain part of the public api, they should be replaced by one of the config delegates (see #3891). The key that is used to lookup the configured value is derived from the property name.
/* simple property */
// BEFORE
val ignoreDataClasses = valueOrDefault("ignoreDataClasses", true)
// AFTER
val ignoreDataClasses: Boolean by config(true)
/* transformed simple property */
// BEFORE
val ignoredName = valueOrDefault("ignoredName", "").trim()
// AFTER
val ignoredName: String by config("", String::trim)
/* transformed list property */
// BEFORE
val ignoreAnnotated = valueOrDefaultCommaSeparated("ignoreAnnotated", listOf("Inject", "Value"))
.map(String::trim)
// AFTER
val ignoreAnnotated: List<String> by config(listOf("Inject", "Value")) { list ->
list.map(String::trim)
}- For all rule authors: The types
ThresholdRuleandLazyRegexhave been marked as deprecated and will be removed in a future release. Please migrate to config delegates.
/* ThresholdRule */
// BEFORE
class MyRule(config: Config, threshold: Int = 10) : ThresholdRule(config, threshold) {
// ...
}
// AFTER
class MyRule(config: Config) : Rule(config) {
private val threshold: Int by config(10)
// ...
}
/* LazyRegex */
// BEFORE
private val allowedPattern: Regex by LazyRegex("allowedPatterns", "")
// AFTER
private val allowedPattern: Regex by config("", String::toRegex)- For custom rule authors: This will be the last version of detekt where we publish the
detekt-bomartifact. This change should not affect anyone. If it affects you, please let us know.
Changelog
- [KMP] Fix resolution of Android test classpaths - #4026
- Sort config lists - #4014
- Multiplatform tasks should not depend on check - #4025
- mark configWithFallback as unstable - #4028
- UseDataClass: fix false positive on value classes - #4016
- ImplicitUnitReturnType: don't report when expression body is 'Unit' - #4011
- Fix false positive with UnusedPrivateMember on parameter of a protected function - #4007
- ClassNaming: Don't treat Kotlin syntax ` as part of class name - #3977
- IgnoredReturnValue: fix false negative when annotation is on the class - #3979
- NoNameShadowing: fix false positive with nested lambda has implicit parameter - #3991
- UnusedPrivateMember - added handling of overloaded array get operator - #3666
- Publish bundled/Shadow JAR artifact to Maven repos - #3986
- EmptyDefaultConstructor false positive with expect and actual classes - #3970
- FunctionNaming - Allow factory function names - fix #1639 - #3973
- EndOfSentenceFormat - Fix #3893 by only calling super.visit once - #3904
- UndocumentedPublicFunction: don't report when nested class is inside not public class #3962
- Fail with a meaningful error message for invalid boolean - #3931
- UndocumentedPublicProperty and UndocumentedPublicFunction should include objects - #3940
- Fix exclusion pattern for InvalidPackageDeclaration - #3907
- Allow else when {...} in MandatoryBracesIfStatements rule - #3905
- Remove unnecessary constant declaration - #3903
- Check bindingContext only once in MemberNameEqualsClassName - #3899
- LongMethod: add 'ignoreAnnotated' configuration option - #3892
- Fix Deprecation rule message - #3885
- Improve LongParameterList rule by supporting ignoring annotated parameters - #3879
- OptionalUnit: fix false positive when function initializer is Nothing type - #3876
- UnnecessaryParentheses: fix false positive for delegated expressions - #3858
- Fix UnnecessaryLet false positive in inner lambdas - #3841
- Fix false positive for UnusedPrivateMember - Backtick identifiers - #3828
- Properly apply test excludes for comments - #3815
- Fix generation issues around (deprecated) list properties - #3813
- Update the implementation of ClassOrdering to handle false negatives - #3810
- [comments] Do not exclude tests globally - #3801
- UnnecessaryLet: report when implicit parameter isn't used - #3794
- NoNameShadowing: don't report when implicit 'it' parameter isn't used - #3793
- Fix ModifierOrder to support value class - #3719
- Remove inline value class to stay compatible with Kotlin 1.4 API - #3871
- [FunctionNaming] Revert annotations that are ignored by default - #3948
- Android: add javac intermediates to classpath - [#3867]((#3867)
- Revert "Android: add javac intermediates to classpath (#3867)" - [#3958]((#3958)
- Use annotations to configure rules in detekt-rules-exceptions - #3798
- Use @configuration in detekt-rules-style - #3774
- Use annotations to configure rules in custom-checks - #3773
- Use @configuration for rules-errorprone - #3772
- Use annotation to configure rules in rules-empty - #3771
- Use annotation to configure rules in rules-documentation - #3770
- Use annotations to configure rules in rules-naming - [#3769](http...
v1.18.0-RC3
1.18.0-RC3 - 2021-08-05
Notable Changes
- We've added two new rules:
AvoidReferentialEqualityandBooleanPropertyNaming(see #3924 and #3795) - This version of Detekt ships with Kotlin
1.5.21, and we're compiling withapiVersionset to1.4- #3956 and #3852 - The minimum version of Gradle to use Detekt Gradle Plugin is now
6.1- #3830 - This version of Detekt has been tested against Java 16 - #3698
- We fixed a long-standing bug related to parallel execution (#3248) - #3799 and #3822
- We now use multi-line format for list options in the default detekt config file - #3827
- The rule
VarCouldBeValhas been updated and now works only with type resolution to provide more precise findings - #3880 - We removed all the references to
Extensions.getRootAreathat is now deprecated from our codebase. This was affecting users with sporadic crashes. - #3848
Migration
- We renamed the
inputproperty inside thedetekt{}extension of the Gradle plugin tosource. Theinputproperty has been deprecated, and we invite you to migrate to the new property (see #3951)
// BEFORE
detekt {
input = files(...)
}
// AFTER
detekt {
source = files(...)
}
-
For custom rule authors: we finished the rework to use the annotations in custom rules. Specifically configurations should be configured with
@Configurationand a config delegate (see #3891) while auto-correction capability should be specified with the@AutoCorrectableannotation #3820. -
For custom rule authors: This will be the last version of detekt where we publish the
detekt-bomartifact. This change should not affect anyone. If it affects you, please let us know.
Changelog
- ClassNaming: Don't treat Kotlin syntax ` as part of class name - #3977
- IgnoredReturnValue: fix false negative when annotation is on the class - #3979
- NoNameShadowing: fix false positive with nested lambda has implicit parameter - #3991
- UnusedPrivateMember - added handling of overloaded array get operator - #3666
- Publish bundled/Shadow JAR artifact to Maven repos - #3986
- EmptyDefaultConstructor false positive with expect and actual classes - #3970
- FunctionNaming - Allow factory function names - fix #1639 - #3973
- EndOfSentenceFormat - Fix #3893 by only calling super.visit once - #3904
- UndocumentedPublicFunction: don't report when nested class is inside not public class #3962
- Fail with a meaningful error message for invalid boolean - #3931
- UndocumentedPublicProperty and UndocumentedPublicFunction should include objects - #3940
- Fix exclusion pattern for InvalidPackageDeclaration - #3907
- Allow else when {...} in MandatoryBracesIfStatements rule - #3905
- Remove unnecessary constant declaration - #3903
- Check bindingContext only once in MemberNameEqualsClassName - #3899
- LongMethod: add 'ignoreAnnotated' configuration option - #3892
- Fix Deprecation rule message - #3885
- Improve LongParameterList rule by supporting ignoring annotated parameters - #3879
- OptionalUnit: fix false positive when function initializer is Nothing type - #3876
- UnnecessaryParentheses: fix false positive for delegated expressions - #3858
- Fix UnnecessaryLet false positive in inner lambdas - #3841
- Fix false positive for UnusedPrivateMember - Backtick identifiers - #3828
- Properly apply test excludes for comments - #3815
- Fix generation issues around (deprecated) list properties - #3813
- Update the implementation of ClassOrdering to handle false negatives - #3810
- [comments] Do not exclude tests globally - #3801
- UnnecessaryLet: report when implicit parameter isn't used - #3794
- NoNameShadowing: don't report when implicit 'it' parameter isn't used - #3793
- Fix ModifierOrder to support value class - #3719
- Remove inline value class to stay compatible with Kotlin 1.4 API - #3871
- [FunctionNaming] Revert annotations that are ignored by default - #3948
- Android: add javac intermediates to classpath - [#3867]((#3867)
- Revert "Android: add javac intermediates to classpath (#3867)" - [#3958]((#3958)
- Use annotations to configure rules in detekt-rules-exceptions - #3798
- Use @configuration in detekt-rules-style - #3774
- Use annotations to configure rules in custom-checks - #3773
- Use @configuration for rules-errorprone - #3772
- Use annotation to configure rules in rules-empty - #3771
- Use annotation to configure rules in rules-documentation - #3770
- Use annotations to configure rules in rules-naming - #3769
- Use annotations to configure rules in rules-complexity - #3768
- Move formatting rules to @configuration - #3847
Dependency Updates
- Bump Kotlin to 1.5.21 - #3956
- Revert "Bump Kotlin to v1.5.20" - #3941
- Bump Kotlin to v1.5.20 - #3921
- Kotlin 1.5.10 - #3826
- Update assertj to v3.20.2 - #3912
- Update snakeyaml to v1.29 - #3911
- Bump byte-buddy from 1.11.2 to 1.11.5 - #3886
- Bump byte-buddy from 1.11.1 to 1.11.2 - #3872
- Bump byte-buddy from 1.11.0 to 1.11.1 - #3861
- Update mockk to 1.12.0 - #3937
Housekeeping & Refactorings
- Enable UseEmptyCounterpart for detekt code base - #4000
- enable coroutine rules for detekt code base - #3994
- Remove "plugin" suffix from version catalog aliases - #3987
- Fix ClassCastException in test on java 11 openjdk9 - #3984
- Activate IgnoredReturnValue on detekt code base - #3974
- Add missing test in FunctionNaming - #3976
- Fix trunk compilation - #3968
- Reformat internal detekt.yml using multi line lists - #3936
- Increase memory available to gradle integration test daemon - #3938
- Avoid empty lines when running detekt with type resolution - #3909
- Fix java.lang.ClassCastException is reading default yaml config - #3920
- Refactor + rename util function inside MandatoryBracesIfStatement rule - #3908
- Rename Tests to Spec - #3906
- verify that no rule is configured with kdoc tags - #3870
- Setup FOSSA - #3836
- jvmTarget can't be null - #3818
- Add test for ruleset provider configuration - #3814
- Merge JaCoCo coverage reports the "right" way - [#3650](https://github.com/detekt/detek...