Это плагин для Detekt, статического анализатора кода для Kotlin, который позволяет проверять, реализованы ли бетонные классы в соответствии с указаниями в соответствии с аннотациями, применяемыми к типам базовых .
Следующие правила детекта включены:
DataClass : Требуется расширение классов для классов данных или объявлений объектов. Это гарантирует предсказуемую реализацию по умолчанию для реализаций equals и hashcode , то есть, стоимость равенства вместо референциального равенства.Immutable : требует, чтобы классы или расширение классов были неизменными; Они не могут содержать изменяемые свойства (var) или свойства изменяемых типов (типы с свойствами VAR).Благодаря природе этого плагина используется особый вкус семантического управления версиями, который имеет больше смысла для Линтеров. Любое незначительное обновление может сообщать больше об ошибках, чем предыдущий релиз.
Загрузите плагин через блок конфигурации Detekt Gradle:
Groovy DSL
detekt {
dependencies {
detektPlugins " dk.cachet.detekt.extensions:detekt-verify-implementation:1.2.5 "
}
} Поскольку этот плагин использует разрешение типа, правила не будут работать при использовании основной задачи detekt . Используйте detektMain или пользовательскую задачу Detekt, согласно документации Detekt.
По умолчанию правила не активируются в файле конфигурации Detekt. Чтобы включить правило, установите его на active и укажите полностью квалифицированное имя annotationClass , которое определяет, какие конкретные классы для проверки. Например:
verify-implementation :
DataClass :
active : true
annotationClass : " dk.cachet.carp.common.ImplementAsDataClass "
Immutable :
active : true
annotationClass : " dk.cachet.carp.common.Immutable " В случае, если класс аннотаций не может быть найден, а правило активно, будет брошено IllegalStateException .
Используя assumeNoAnnotations , вы можете указать список полностью квалифицированных имен типов, для которых предполагается, что у них нет аннотации, применяемой к ним. Это может быть полезно, когда плагин не анализирует классы, которые, как известно, не должны нести аннотацию.
verify-implementation :
Immutable :
active : true
annotationClass : " dk.cachet.carp.common.Immutable "
assumeNoAnnotations : ['kotlin.Any']Дополнительные параметры конфигурации, специфичные для правил, описаны дальше.
assumeImmutable может перечислить полностью квалифицированные имена классов, которые не будут проверены и предполагаются неизменными. Это может быть полезно, когда плагин не анализирует классы, которые, как вы знаете, неизменными. Пример конфигурации: verify-implementation :
Immutable :
active : true
annotationClass : " dk.cachet.carp.common.Immutable "
includes : ['**/domain/**']
assumeImmutable : [
' dk.cachet.carp.common.DateTime ' ,
' kotlinx.serialization.json.Json '
]