diff --git a/build-logic/src/main/kotlin/releasing.gradle.kts b/build-logic/src/main/kotlin/releasing.gradle.kts index c44b5c97a0a..e77657427b5 100644 --- a/build-logic/src/main/kotlin/releasing.gradle.kts +++ b/build-logic/src/main/kotlin/releasing.gradle.kts @@ -38,7 +38,8 @@ 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-authors").buildDir.resolve("libs/detekt-authors-${project.version}.jar") ) ) } diff --git a/build.gradle.kts b/build.gradle.kts index 15a04143a7f..a2f5b74d22f 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-authors")) } tasks.withType().configureEach { diff --git a/detekt-authors/build.gradle.kts b/detekt-authors/build.gradle.kts new file mode 100644 index 00000000000..e0469ce857e --- /dev/null +++ b/detekt-authors/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("module") +} + +dependencies { + compileOnly(projects.detektApi) + testImplementation(projects.detektTest) + testImplementation(libs.assertj) +} diff --git a/detekt-authors/src/main/kotlin/io/gitlab/arturbosch/detekt/authors/AuthorsProvider.kt b/detekt-authors/src/main/kotlin/io/gitlab/arturbosch/detekt/authors/AuthorsProvider.kt new file mode 100644 index 00000000000..23f07379a83 --- /dev/null +++ b/detekt-authors/src/main/kotlin/io/gitlab/arturbosch/detekt/authors/AuthorsProvider.kt @@ -0,0 +1,17 @@ +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 authors ruleset provides rules that ensures good practices when writing detekt rules + */ +@ActiveByDefault("1.22.0") +class AuthorsProvider : RuleSetProvider { + + override val ruleSetId: String = "detekt" + + override fun instance(config: Config) = RuleSet(ruleSetId, emptyList()) +} diff --git a/detekt-authors/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider b/detekt-authors/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider new file mode 100644 index 00000000000..f1fa50444d6 --- /dev/null +++ b/detekt-authors/src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider @@ -0,0 +1 @@ +io.gitlab.arturbosch.detekt.authors.AuthorsProvider diff --git a/detekt-authors/src/main/resources/config/config.yml b/detekt-authors/src/main/resources/config/config.yml new file mode 100644 index 00000000000..87a20dcc624 --- /dev/null +++ b/detekt-authors/src/main/resources/config/config.yml @@ -0,0 +1,2 @@ +detekt: + active: true diff --git a/detekt-generator/build.gradle.kts b/detekt-generator/build.gradle.kts index 8add8a7aa23..c91bbf8d9c3 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 authorsConfigFile = "${rootProject.rootDir}/detekt-authors/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-authors/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(authorsConfigFile), 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-authors/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 a9dbb1e11f8..900f6ce2418 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-authors/src/main/resources/config"), "config") { + yaml { + printRuleSetPage(pages.first { it.ruleSet.name == "detekt" }) + } + } } private fun markdownHeader(ruleSet: String): String { diff --git a/settings.gradle.kts b/settings.gradle.kts index 6bd4a0a283a..2b1b14da995 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,6 +9,7 @@ pluginManagement { include("code-coverage-report") include("detekt-api") +include("detekt-authors") include("detekt-cli") include("detekt-core") include("detekt-formatting")