Il s'agit d'un plugin pour Detekt, un analyseur de code statique pour Kotlin, qui permet de vérifier si des classes concrètes sont implémentées comme spécifié selon les annotations appliquées aux types de base .
Les règles Detekt suivantes sont incluses:
DataClass : nécessite l'extension des classes pour être des classes de données ou des déclarations d'objets. Cela garantit une implémentation par défaut prévisible pour les implémentations equals et hashcode , c'est-à-dire la valeur de l'égalité au lieu de l'égalité référentielle.Immutable : nécessite des classes ou de l'extension des classes pour être immuables; Ils peuvent ne pas contenir de propriétés mutables (VAR) ou des propriétés de types mutables (types avec des propriétés VAR).En raison de la nature de ce plugin, une saveur spécifique de version sémantique est utilisée, ce qui est plus logique pour les liners. Toute mise à jour mineure peut signaler plus d'erreurs que la version précédente.
Chargez le plugin via le bloc de configuration Detekt Gradle:
Dsl groovy
detekt {
dependencies {
detektPlugins " dk.cachet.detekt.extensions:detekt-verify-implementation:1.2.5 "
}
} Étant donné que ce plugin utilise la résolution de type, les règles ne s'exécuteront pas lors de l'utilisation de la tâche detekt de base. Utilisez detektMain ou une tâche Detekt personnalisée, conformément à la documentation Detekt.
Par défaut, les règles ne sont pas activées dans le fichier de configuration Detekt. Pour activer une règle, définissez-le sur active et spécifiez le nom entièrement qualifié de la annotationClass qui détermine les classes concrètes à vérifier. Par exemple:
verify-implementation :
DataClass :
active : true
annotationClass : " dk.cachet.carp.common.ImplementAsDataClass "
Immutable :
active : true
annotationClass : " dk.cachet.carp.common.Immutable " Dans le cas où la classe d'annotation ne peut pas être trouvée et que la règle est active, IllegalStateException sera lancée.
En utilisant assumeNoAnnotations , vous pouvez spécifier une liste de noms de types entièrement qualifiés pour lesquels il est supposé qu'ils n'ont pas l'annotation qui leur est appliquée. Cela peut être utile lorsque le plugin ne parvient pas à analyser les classes qui sont connues pour ne pas transporter l'annotation.
verify-implementation :
Immutable :
active : true
annotationClass : " dk.cachet.carp.common.Immutable "
assumeNoAnnotations : ['kotlin.Any']Des options de configuration supplémentaires spécifiques à la règle sont décrites ensuite.
assumeImmutable peut énumérer les noms de classe entièrement qualifiés qui ne seront pas vérifiés et sont supposés être immuables. Cela peut être utile lorsque le plugin ne parvient pas à analyser les classes que vous savez être immuables. Exemple de configuration: verify-implementation :
Immutable :
active : true
annotationClass : " dk.cachet.carp.common.Immutable "
includes : ['**/domain/**']
assumeImmutable : [
' dk.cachet.carp.common.DateTime ' ,
' kotlinx.serialization.json.Json '
]