55 lines
3.3 KiB
XML
55 lines
3.3 KiB
XML
<!-- =================================================================== -->
|
||
<!-- ПРАВИЛО 9: Проектирование по контракту (DbC) -->
|
||
<!-- =================================================================== -->
|
||
<Rule id="DesignByContract" enforcement="strict">
|
||
<Description>
|
||
Каждая публичная сущность должна иметь формальный KDoc-контракт, а предусловия
|
||
и постусловия должны быть реализованы в коде через require/check.
|
||
</Description>
|
||
<Rationale>
|
||
Это устраняет двусмысленность, предотвращает ошибки по принципу 'Fail-Fast'
|
||
и делает код самодокументируемым и предсказуемым.
|
||
</Rationale>
|
||
<Definition type="multi_check">
|
||
<Checks>
|
||
|
||
<!--
|
||
ПРОВЕРКА 1: Обязательные теги в KDoc для публичных функций и классов.
|
||
Это проверка полноты контракта.
|
||
-->
|
||
<Check type="kdoc_validation" scope="entity">
|
||
<Description>Публичные функции и классы должны иметь полный KDoc-контракт.</Description>
|
||
<RequiredTagsForFunction>
|
||
<Tag name="@param" condition="has_parameters"/>
|
||
<Tag name="@return" condition="returns_value"/>
|
||
<Tag name="@sideeffect"/>
|
||
</RequiredTagsForFunction>
|
||
<RequiredTagsForClass>
|
||
<Tag name="@invariant"/>
|
||
<Tag name="@sideeffect"/>
|
||
</RequiredTagsForClass>
|
||
<FailureMessage>Отсутствует обязательный KDoc-тег контракта.</FailureMessage>
|
||
</Check>
|
||
|
||
<!--
|
||
ПРОВЕРКА 2: Наличие `require()` при наличии `@param`.
|
||
Эта проверка связывает документацию с кодом.
|
||
-->
|
||
<Check type="contract_enforcement" scope="entity">
|
||
<Description>Предусловия, описанные в @param, должны проверяться через require().</Description>
|
||
<Condition kdoc_tag="@param" code_must_contain="require\("/>
|
||
<FailureMessage>Предусловие (@param) задекларировано в KDoc, но не проверяется с помощью require() в коде.</FailureMessage>
|
||
</Check>
|
||
|
||
<!--
|
||
ПРОВЕРКА 3: Наличие `check()` при наличии `@return`.
|
||
-->
|
||
<Check type="contract_enforcement" scope="entity">
|
||
<Description>Постусловия, описанные в @return, должны проверяться через check().</Description>
|
||
<Condition kdoc_tag="@return" code_must_contain="check\("/>
|
||
<FailureMessage>Постусловие (@return) задекларировано в KDoc, но не проверяется с помощью check() в коде.</FailureMessage>
|
||
</Check>
|
||
|
||
</Checks>
|
||
</Definition>
|
||
</Rule> |