Как исключить классы из правила 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>

Ссылка https://github.com/pmd/pmd/issues/1142.

Боюсь, что нет. В настоящее время вы можете полностью игнорировать файлы из анализа с <exclude-pattern>, но не для конкретного правила.

Это объясняется тем, что при применении набора правил в вашей кодовой базе вы должны стараться быть максимально последовательными. При этом рассматриваются несколько исключений:

  • с отдельными наборами правил для теста / основного кода
  • позволяет исключать отдельные случаи, когда правило может не применяться по очень конкретным, но действительным причинам

Ваш пример, кажется, указывает в направлении первого сценария. Если вам нужен более упрощенный набор правил для тестовых классов, вы должны создать отдельную конфигурацию и запустить PMD два отдельных анализа.

Это, однако, выходит за рамки самой PMD, но от того, как вы ее запускаете. На Gradle / Ant / CLI это очень просто достичь. На Maven, к сожалению, в настоящее время он не поддерживается (запрос о функции можно найти и проголосовать здесь)

Если вы считаете, что у вас есть другой сценарий, не охваченный предыдущими двумя, который следует принять во внимание, отправьте запрос функции на https://github.com/pmd/pmd/issues

Другие вопросы по тегам