diff --git a/build-logic/src/main/kotlin/releasing.gradle.kts b/build-logic/src/main/kotlin/releasing.gradle.kts index c44b5c97a0a7..6f0e3c51d47c 100644 --- a/build-logic/src/main/kotlin/releasing.gradle.kts +++ b/build-logic/src/main/kotlin/releasing.gradle.kts @@ -38,7 +38,9 @@ project.afterEvaluate { files( cliBuildDir.resolve("libs/detekt-cli-${project.version}-all.jar"), cliBuildDir.resolve("distributions/detekt-cli-${project.version}.zip"), - project(":detekt-formatting").buildDir.resolve("libs/detekt-formatting-${project.version}.jar") + project(":detekt-formatting").buildDir.resolve("libs/detekt-formatting-${project.version}.jar"), + project(":detekt-rules-ruleauthors").buildDir + .resolve("libs/detekt-rules-ruleauthors-${project.version}.jar") ) ) } diff --git a/build.gradle.kts b/build.gradle.kts index 15a04143a7f8..a0f6e04549f1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -27,6 +27,7 @@ allprojects { dependencies { detekt(project(":detekt-cli")) detektPlugins(project(":detekt-formatting")) + detektPlugins(project(":detekt-rules-ruleauthors")) } tasks.withType().configureEach { diff --git a/detekt-generator/build.gradle.kts b/detekt-generator/build.gradle.kts index 8add8a7aa232..bdc69b687fda 100644 --- a/detekt-generator/build.gradle.kts +++ b/detekt-generator/build.gradle.kts @@ -22,6 +22,8 @@ val configDir = "${rootProject.rootDir}/detekt-core/src/main/resources" val cliOptionsFile = "${rootProject.rootDir}/website/docs/gettingstarted/_cli-options.md" 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 ruleauthorsConfigFile = "${rootProject.rootDir}/detekt-rules-ruleauthors/src/main/resources/config/config.yml" val ruleModules = rootProject.subprojects .filter { "rules" in it.name } @@ -36,6 +38,7 @@ val generateDocumentation by tasks.registering(JavaExec::class) { inputs.files( ruleModules.map { fileTree(it) }, + 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"), ) @@ -43,6 +46,8 @@ val generateDocumentation by tasks.registering(JavaExec::class) { outputs.files( fileTree(documentationDir), file(defaultConfigFile), + file(formattingConfigFile), + file(ruleauthorsConfigFile), file(deprecationFile), file(cliOptionsFile), ) @@ -55,7 +60,10 @@ val generateDocumentation by tasks.registering(JavaExec::class) { mainClass.set("io.gitlab.arturbosch.detekt.generator.Main") args = listOf( "--input", - ruleModules.plus("${rootProject.rootDir}/detekt-formatting/src/main/kotlin").joinToString(","), + ruleModules + .plus("${rootProject.rootDir}/detekt-rules-ruleauthors/src/main/kotlin") + .plus("${rootProject.rootDir}/detekt-formatting/src/main/kotlin") + .joinToString(","), "--documentation", documentationDir, "--config", 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 a9dbb1e11f89..f338a30730d7 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,7 @@ class DetektPrinter(private val arguments: GeneratorArgs) { } } yamlWriter.write(arguments.configPath, "default-detekt-config") { - ConfigPrinter.print(pages.filterNot { it.ruleSet.name == "formatting" }) + ConfigPrinter.print(pages.filterNot { it.ruleSet.name == "formatting" || it.ruleSet.name == "detekt" }) } propertiesWriter.write(arguments.configPath, "deprecation") { // We intentionally not filter for "formatting" as we want to be able to deprecate @@ -36,6 +36,11 @@ class DetektPrinter(private val arguments: GeneratorArgs) { printRuleSetPage(pages.first { it.ruleSet.name == "formatting" }) } } + yamlWriter.write(Paths.get("../detekt-rules-ruleauthors/src/main/resources/config"), "config") { + yaml { + printRuleSetPage(pages.first { it.ruleSet.name == "detekt" }) + } + } } private fun markdownHeader(ruleSet: String): String { diff --git a/detekt-rules-ruleauthors/build.gradle.kts b/detekt-rules-ruleauthors/build.gradle.kts new file mode 100644 index 000000000000..e0469ce857e4 --- /dev/null +++ b/detekt-rules-ruleauthors/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-ruleauthors/src/main/kotlin/io/gitlab/arturbosch/detekt/authors/RuleAuthorsProvider.kt b/detekt-rules-ruleauthors/src/main/kotlin/io/gitlab/arturbosch/detekt/authors/RuleAuthorsProvider.kt new file mode 100644 index 000000000000..b0ae711cfc58 --- /dev/null +++ b/detekt-rules-ruleauthors/src/main/kotlin/io/gitlab/arturbosch/detekt/authors/RuleAuthorsProvider.kt @@ -0,0 +1,18 @@ +package io.gitlab.arturbosch.detekt.authors + +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 + +/** + * The rule authors ruleset provides rules that ensures good practices when writing detekt rules + */ +@ActiveByDefault("1.22.0") +class RuleAuthorsProvider : RuleSetProvider { + + override val ruleSetId: String = "detekt" + + @Suppress("UseEmptyCounterpart") + override fun instance(config: Config) = RuleSet(ruleSetId, listOf()) +} diff --git a/detekt-rules-ruleauthors/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider b/detekt-rules-ruleauthors/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider new file mode 100644 index 000000000000..6b5d036356fb --- /dev/null +++ b/detekt-rules-ruleauthors/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider @@ -0,0 +1 @@ +io.gitlab.arturbosch.detekt.authors.RuleAuthorsProvider diff --git a/detekt-rules-ruleauthors/src/main/resources/config/config.yml b/detekt-rules-ruleauthors/src/main/resources/config/config.yml new file mode 100644 index 000000000000..87a20dcc624e --- /dev/null +++ b/detekt-rules-ruleauthors/src/main/resources/config/config.yml @@ -0,0 +1,2 @@ +detekt: + active: true diff --git a/settings.gradle.kts b/settings.gradle.kts index 6bd4a0a283a2..bd3f2fa45655 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -30,6 +30,7 @@ include("detekt-rules-errorprone") include("detekt-rules-exceptions") include("detekt-rules-naming") include("detekt-rules-performance") +include("detekt-rules-ruleauthors") include("detekt-rules-style") include("detekt-sample-extensions") include("detekt-test")