Как исключить классы из правила pmd с помощью регулярных выражений
Есть ли способ исключить классы из правила PMD по шаблону имени класса?
Я ищу что-то вроде:
<rule ref="rulesets/java/coupling.xml/ExcessiveImports">
<exclude-pattern>.*Test\.class</exclude-pattern>
</rule>
Я знаю о подходе нарушения SuppressXPath, но считаю его слишком уродливым / сложным.
Спасибо!
2 ответа
Вот правило, которое игнорирует определенное правило, если имя класса заканчивается на DTO
:
<rule ref="category/java/bestpractices.xml/UnusedPrivateField">
<properties>
<!--Ignore UnusedPrivateField on classes where the class name ends with DTO-->
<property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['.*DTO']"/>
</properties>
</rule>
Боюсь, что нет. В настоящее время вы можете полностью игнорировать файлы из анализа с <exclude-pattern>
, но не для конкретного правила.
Это объясняется тем, что при применении набора правил в вашей кодовой базе вы должны стараться быть максимально последовательными. При этом рассматриваются несколько исключений:
- с отдельными наборами правил для теста / основного кода
- позволяет исключать отдельные случаи, когда правило может не применяться по очень конкретным, но действительным причинам
Ваш пример, кажется, указывает в направлении первого сценария. Если вам нужен более упрощенный набор правил для тестовых классов, вы должны создать отдельную конфигурацию и запустить PMD два отдельных анализа.
Это, однако, выходит за рамки самой PMD, но от того, как вы ее запускаете. На Gradle / Ant / CLI это очень просто достичь. На Maven, к сожалению, в настоящее время он не поддерживается (запрос о функции можно найти и проголосовать здесь)
Если вы считаете, что у вас есть другой сценарий, не охваченный предыдущими двумя, который следует принять во внимание, отправьте запрос функции на https://github.com/pmd/pmd/issues