Skip to content

v1.21.0

Compare
Choose a tag to compare
@cortinico cortinico released this 17 Jul 13:05
32f6e22

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
    • NullableBooleanCheck - #4872
    • CouldBeSequence - #4855
    • UnnecessaryBackticks - #4764
    • ForbiddenSuppress - #4899
    • MaxChainedCallsOnSameLine - #4985
    • CascadingCallWrapping - #4979
    • NestedScopeFunctions - #4788
  • 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 this references - #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-plugin and detekt-utils - #4748
  • Remove suspend lambda rule with CoroutineScope receiver due to not de… - #4747
  • VarCouldBeVal: Add configuration flag ignoreLateinitVar - #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 gradle to v7.5 - #5074
  • Update plugin binaryCompatibilityValidator to v0.11.0 - #5069
  • 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

  • Fix ComplexMethod debt and refactor code - #5029
  • Fix ReturnCount debt and refactor code - #5026
  • Add test for ForbiddenMethodCall with getters - #5018
  • Measure flakyness on Windows CI - #4742
  • 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 runWithArgsFile failing locally - #4718

See all issues at: 1.21.0