Skip to content

Commit

Permalink
Create Rule Set For Libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
VitalyVPinchuk committed Sep 29, 2022
1 parent 9a35a3a commit b3e707c
Show file tree
Hide file tree
Showing 18 changed files with 67 additions and 37 deletions.
2 changes: 2 additions & 0 deletions build-logic/src/main/kotlin/releasing.gradle.kts
Expand Up @@ -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")
)
Expand Down
4 changes: 0 additions & 4 deletions config/detekt/detekt.yml
Expand Up @@ -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
Expand Down
12 changes: 0 additions & 12 deletions detekt-core/src/main/resources/default-detekt-config.yml
Expand Up @@ -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: []
Expand All @@ -565,12 +559,6 @@ style:
ignoreOverridableFunction: true
ignoreActualFunction: true
excludedFunctions: []
LibraryCodeMustSpecifyReturnType:
active: true
excludes: ['**']
LibraryEntitiesShouldNotBePublic:
active: true
excludes: ['**']
LoopWithTooManyJumpStatements:
active: true
maxJumpCount: 1
Expand Down
4 changes: 4 additions & 0 deletions detekt-generator/build.gradle.kts
Expand Up @@ -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
Expand All @@ -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"),
Expand All @@ -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),
Expand All @@ -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(","),
Expand Down
Expand Up @@ -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
Expand All @@ -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" })
Expand Down
Expand Up @@ -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
Expand Down Expand Up @@ -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",
)
}
9 changes: 9 additions & 0 deletions detekt-rules-libraries/build.gradle.kts
@@ -0,0 +1,9 @@
plugins {
id("module")
}

dependencies {
compileOnly(projects.detektApi)
testImplementation(projects.detektTest)
testImplementation(libs.assertj)
}
@@ -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
Expand Down
@@ -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
Expand Down
@@ -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
Expand Down
@@ -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),
)
)
}
@@ -0,0 +1 @@
io.gitlab.arturbosch.detekt.libraries.RuleLibrariesProvider
11 changes: 11 additions & 0 deletions 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
@@ -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
Expand Down
@@ -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
Expand Down
@@ -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
Expand Down
Expand Up @@ -41,7 +41,6 @@ class StyleGuideProvider : DefaultRuleSetProvider {
ForbiddenComment(config),
ForbiddenImport(config),
ForbiddenMethodCall(config),
ForbiddenPublicDataClass(config),
ForbiddenSuppress(config),
FunctionOnlyReturningConstant(config),
SpacingBetweenPackageAndImports(config),
Expand Down Expand Up @@ -89,8 +88,6 @@ class StyleGuideProvider : DefaultRuleSetProvider {
UseCheckOrError(config),
UseIfInsteadOfWhen(config),
RedundantExplicitType(config),
LibraryEntitiesShouldNotBePublic(config),
LibraryCodeMustSpecifyReturnType(config),
UseArrayLiteralsInAnnotations(config),
UseEmptyCounterpart(config),
UseCheckNotNull(config),
Expand Down
1 change: 1 addition & 0 deletions settings.gradle.kts
Expand Up @@ -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")
Expand Down

0 comments on commit b3e707c

Please sign in to comment.