diff --git a/build-logic/src/main/kotlin/releasing.gradle.kts b/build-logic/src/main/kotlin/releasing.gradle.kts index 46a92d5b390..31884360c0a 100644 --- a/build-logic/src/main/kotlin/releasing.gradle.kts +++ b/build-logic/src/main/kotlin/releasing.gradle.kts @@ -40,6 +40,8 @@ project.afterEvaluate { cliBuildDir.resolve("distributions/detekt-cli-${project.version}.zip"), project(":detekt-formatting").buildDir.resolve("libs/detekt-formatting-${project.version}.jar"), project(":detekt-generator").buildDir.resolve("libs/detekt-generator-${project.version}-all.jar"), + project(":detekt-rules-libraries").buildDir + .resolve("libs/detekt-rules-libraries-${project.version}.jar"), project(":detekt-rules-ruleauthors").buildDir .resolve("libs/detekt-rules-ruleauthors-${project.version}.jar") ) diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index 5237f6c5f66..d8971e230ef 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -190,10 +190,6 @@ style: - 'org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile' ForbiddenVoid: active: true - LibraryCodeMustSpecifyReturnType: - active: true - excludes: ['**/*.kt'] - includes: ['**/detekt-api/src/main/**/api/*.kt'] MagicNumber: excludes: ['**/test/**', '**/*Test.kt', '**/*Spec.kt'] ignorePropertyDeclaration: true diff --git a/detekt-core/src/main/resources/default-detekt-config.yml b/detekt-core/src/main/resources/default-detekt-config.yml index 764ba811aa5..a4397721937 100644 --- a/detekt-core/src/main/resources/default-detekt-config.yml +++ b/detekt-core/src/main/resources/default-detekt-config.yml @@ -547,12 +547,6 @@ style: value: 'kotlin.io.print' - reason: 'println does not allow you to configure the output stream. Use a logger instead.' value: 'kotlin.io.println' - ForbiddenPublicDataClass: - active: true - excludes: ['**'] - ignorePackages: - - '*.internal' - - '*.internal.*' ForbiddenSuppress: active: false rules: [] @@ -565,12 +559,6 @@ style: ignoreOverridableFunction: true ignoreActualFunction: true excludedFunctions: [] - LibraryCodeMustSpecifyReturnType: - active: true - excludes: ['**'] - LibraryEntitiesShouldNotBePublic: - active: true - excludes: ['**'] LoopWithTooManyJumpStatements: active: true maxJumpCount: 1 diff --git a/detekt-generator/build.gradle.kts b/detekt-generator/build.gradle.kts index 747a38e48a5..45d1671ae70 100644 --- a/detekt-generator/build.gradle.kts +++ b/detekt-generator/build.gradle.kts @@ -26,6 +26,7 @@ val cliOptionsFile = "${rootProject.rootDir}/website/docs/gettingstarted/_cli-op val defaultConfigFile = "$configDir/default-detekt-config.yml" val deprecationFile = "$configDir/deprecation.properties" val formattingConfigFile = "${rootProject.rootDir}/detekt-formatting/src/main/resources/config/config.yml" +val librariesConfigFile = "${rootProject.rootDir}/detekt-rules-libraries/src/main/resources/config/config.yml" val ruleauthorsConfigFile = "${rootProject.rootDir}/detekt-rules-ruleauthors/src/main/resources/config/config.yml" val ruleModules = rootProject.subprojects @@ -41,6 +42,7 @@ val generateDocumentation by tasks.registering(JavaExec::class) { inputs.files( ruleModules.map { fileTree(it) }, + fileTree("${rootProject.rootDir}/detekt-rules-libraries/src/main/kotlin"), fileTree("${rootProject.rootDir}/detekt-rules-ruleauthors/src/main/kotlin"), fileTree("${rootProject.rootDir}/detekt-formatting/src/main/kotlin"), file("${rootProject.rootDir}/detekt-generator/build/libs/detekt-generator-${Versions.DETEKT}-all.jar"), @@ -50,6 +52,7 @@ val generateDocumentation by tasks.registering(JavaExec::class) { fileTree(documentationDir), file(defaultConfigFile), file(formattingConfigFile), + file(librariesConfigFile), file(ruleauthorsConfigFile), file(deprecationFile), file(cliOptionsFile), @@ -64,6 +67,7 @@ val generateDocumentation by tasks.registering(JavaExec::class) { args = listOf( "--input", ruleModules + .plus("${rootProject.rootDir}/detekt-rules-libraries/src/main/kotlin") .plus("${rootProject.rootDir}/detekt-rules-ruleauthors/src/main/kotlin") .plus("${rootProject.rootDir}/detekt-formatting/src/main/kotlin") .joinToString(","), diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt index 7fd4075a4af..64a6df03f12 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/DetektPrinter.kt @@ -24,7 +24,9 @@ class DetektPrinter(private val arguments: GeneratorArgs) { } } yamlWriter.write(arguments.configPath, "default-detekt-config") { - ConfigPrinter.print(pages.filterNot { it.ruleSet.name == "formatting" || it.ruleSet.name == "ruleauthors" }) + ConfigPrinter.print( + pages.filterNot { it.ruleSet.name in listOf("formatting", "libraries", "ruleauthors") } + ) } propertiesWriter.write(arguments.configPath, "deprecation") { // We intentionally not filter for "formatting" as we want to be able to deprecate @@ -36,6 +38,11 @@ class DetektPrinter(private val arguments: GeneratorArgs) { printRuleSetPage(pages.first { it.ruleSet.name == "formatting" }) } } + yamlWriter.write(Paths.get("../detekt-rules-libraries/src/main/resources/config"), "config") { + yaml { + printRuleSetPage(pages.first { it.ruleSet.name == "libraries" }) + } + } yamlWriter.write(Paths.get("../detekt-rules-ruleauthors/src/main/resources/config"), "config") { yaml { printRuleSetPage(pages.first { it.ruleSet.name == "ruleauthors" }) diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/Exclusion.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/Exclusion.kt index b2c6f392714..91a4a5df19e 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/Exclusion.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/printer/defaultconfig/Exclusion.kt @@ -5,7 +5,7 @@ import io.gitlab.arturbosch.detekt.generator.collection.Rule /** * Holds a list of extra exclusions for rules and rule sets. */ -val exclusions = arrayOf(TestExclusions, KotlinScriptExclusions, KotlinScriptAndTestExclusions, LibraryExclusions) +val exclusions = arrayOf(TestExclusions, KotlinScriptExclusions, KotlinScriptAndTestExclusions) /** * Tracks rules and rule sets which needs an extra `excludes: $pattern` property @@ -56,13 +56,3 @@ private object KotlinScriptAndTestExclusions : Exclusions() { "'**/*.kts']" override val rules = setOf("MagicNumber") } - -private object LibraryExclusions : Exclusions() { - - override val pattern = "['**']" - override val rules = setOf( - "ForbiddenPublicDataClass", - "LibraryCodeMustSpecifyReturnType", - "LibraryEntitiesShouldNotBePublic", - ) -} diff --git a/detekt-rules-libraries/build.gradle.kts b/detekt-rules-libraries/build.gradle.kts new file mode 100644 index 00000000000..e0469ce857e --- /dev/null +++ b/detekt-rules-libraries/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("module") +} + +dependencies { + compileOnly(projects.detektApi) + testImplementation(projects.detektTest) + testImplementation(libs.assertj) +} diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenPublicDataClass.kt b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/ForbiddenPublicDataClass.kt similarity index 98% rename from detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenPublicDataClass.kt rename to detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/ForbiddenPublicDataClass.kt index 53c0a73067a..925cf5886bf 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenPublicDataClass.kt +++ b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/ForbiddenPublicDataClass.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.rules.style +package io.gitlab.arturbosch.detekt.libraries import io.gitlab.arturbosch.detekt.api.CodeSmell import io.gitlab.arturbosch.detekt.api.Config diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnType.kt b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryCodeMustSpecifyReturnType.kt similarity index 98% rename from detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnType.kt rename to detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryCodeMustSpecifyReturnType.kt index 711bb43bbcd..42479869f3c 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnType.kt +++ b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryCodeMustSpecifyReturnType.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.rules.style +package io.gitlab.arturbosch.detekt.libraries import io.gitlab.arturbosch.detekt.api.CodeSmell import io.gitlab.arturbosch.detekt.api.Config diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryEntitiesShouldNotBePublic.kt b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryEntitiesShouldNotBePublic.kt similarity index 97% rename from detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryEntitiesShouldNotBePublic.kt rename to detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryEntitiesShouldNotBePublic.kt index c821ccc8ff7..5da067fe9c3 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryEntitiesShouldNotBePublic.kt +++ b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryEntitiesShouldNotBePublic.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.rules.style +package io.gitlab.arturbosch.detekt.libraries import io.gitlab.arturbosch.detekt.api.CodeSmell import io.gitlab.arturbosch.detekt.api.Config diff --git a/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/RuleLibrariesProvider.kt b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/RuleLibrariesProvider.kt new file mode 100644 index 00000000000..bcd8657cb66 --- /dev/null +++ b/detekt-rules-libraries/src/main/kotlin/io/gitlab/arturbosch/detekt/libraries/RuleLibrariesProvider.kt @@ -0,0 +1,24 @@ +package io.gitlab.arturbosch.detekt.libraries + +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.RuleSet +import io.gitlab.arturbosch.detekt.api.RuleSetProvider +import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault + +/** + * Rules in this rule set report issues related to libraries API exposure. + */ +@ActiveByDefault("1.16.0") +class RuleLibrariesProvider : RuleSetProvider { + + override val ruleSetId: String = "libraries" + + override fun instance(config: Config) = RuleSet( + ruleSetId, + listOf( + ForbiddenPublicDataClass(config), + LibraryEntitiesShouldNotBePublic(config), + LibraryCodeMustSpecifyReturnType(config), + ) + ) +} diff --git a/detekt-rules-libraries/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider b/detekt-rules-libraries/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider new file mode 100644 index 00000000000..f51700f443f --- /dev/null +++ b/detekt-rules-libraries/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider @@ -0,0 +1 @@ +io.gitlab.arturbosch.detekt.libraries.RuleLibrariesProvider diff --git a/detekt-rules-libraries/src/main/resources/config/config.yml b/detekt-rules-libraries/src/main/resources/config/config.yml new file mode 100644 index 00000000000..3d06584277c --- /dev/null +++ b/detekt-rules-libraries/src/main/resources/config/config.yml @@ -0,0 +1,11 @@ +libraries: + active: true + ForbiddenPublicDataClass: + active: true + ignorePackages: + - '*.internal' + - '*.internal.*' + LibraryCodeMustSpecifyReturnType: + active: true + LibraryEntitiesShouldNotBePublic: + active: true diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenPublicDataClassSpec.kt b/detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/ForbiddenPublicDataClassSpec.kt similarity index 98% rename from detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenPublicDataClassSpec.kt rename to detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/ForbiddenPublicDataClassSpec.kt index 8900bd700bc..1a93cef521a 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenPublicDataClassSpec.kt +++ b/detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/ForbiddenPublicDataClassSpec.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.rules.style +package io.gitlab.arturbosch.detekt.libraries import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.test.TestConfig diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnTypeSpec.kt b/detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryCodeMustSpecifyReturnTypeSpec.kt similarity index 99% rename from detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnTypeSpec.kt rename to detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryCodeMustSpecifyReturnTypeSpec.kt index fd580d16d27..b03c6c6a306 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnTypeSpec.kt +++ b/detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryCodeMustSpecifyReturnTypeSpec.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.rules.style +package io.gitlab.arturbosch.detekt.libraries import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryEntitiesShouldNotBePublicSpec.kt b/detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryEntitiesShouldNotBePublicSpec.kt similarity index 98% rename from detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryEntitiesShouldNotBePublicSpec.kt rename to detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryEntitiesShouldNotBePublicSpec.kt index 7cd20e4a41e..279d36b9260 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryEntitiesShouldNotBePublicSpec.kt +++ b/detekt-rules-libraries/src/test/kotlin/io/gitlab/arturbosch/detekt/libraries/LibraryEntitiesShouldNotBePublicSpec.kt @@ -1,4 +1,4 @@ -package io.gitlab.arturbosch.detekt.rules.style +package io.gitlab.arturbosch.detekt.libraries import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.test.TestConfig diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt index f505fac8a03..f18b8ff5cc7 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/StyleGuideProvider.kt @@ -41,7 +41,6 @@ class StyleGuideProvider : DefaultRuleSetProvider { ForbiddenComment(config), ForbiddenImport(config), ForbiddenMethodCall(config), - ForbiddenPublicDataClass(config), ForbiddenSuppress(config), FunctionOnlyReturningConstant(config), SpacingBetweenPackageAndImports(config), @@ -89,8 +88,6 @@ class StyleGuideProvider : DefaultRuleSetProvider { UseCheckOrError(config), UseIfInsteadOfWhen(config), RedundantExplicitType(config), - LibraryEntitiesShouldNotBePublic(config), - LibraryCodeMustSpecifyReturnType(config), UseArrayLiteralsInAnnotations(config), UseEmptyCounterpart(config), UseCheckNotNull(config), diff --git a/settings.gradle.kts b/settings.gradle.kts index e34b56f29b4..b2bf7ee4b27 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,6 +28,7 @@ include("detekt-rules-documentation") include("detekt-rules-empty") include("detekt-rules-errorprone") include("detekt-rules-exceptions") +include("detekt-rules-libraries") include("detekt-rules-naming") include("detekt-rules-performance") include("detekt-rules-ruleauthors")