2014-09-07 4 views
0

Я хочу определить правило сонара, которое избегает имени метода, указанного в интерфейсе, с длиной более 25 и в то же время, если метод определен в интерфейсе, который он должен запустить со словом «run». Я пытался выяснить, как это сделать, но я точно не знаю, как это сделать. Я думаю, что это должно быть правило проверки, но я точно не знаю, как его определить.Правила сонара - имя метода слишком длинное

Может ли кто-нибудь помочь мне определить его?

спасибо, что заранее.

ответ

0

Это сложнее, чем кажется на первый взгляд. Конечно, проверка MethodName - это проверка, но проблема заключается в том, чтобы ограничить проверку на методы, определенные в интерфейсах.

Проверка MethodName должен быть настроен следующим образом:

<module name="MethodName"> 
    <property name="id" value="methodNameInInterface"/> 
    <property name="format" value="^run(?=.{0,22}$)[A-Z][a-zA-Z0-9]*$"/> 
</module> 

Обратите внимание на id свойство, которое используется для идентификации данного правила в подавлении фильтра конфигурации, как вы будете иметь другие MethodName проверки. Это легкая часть.

Для подавления генерируемого предупреждения для всех методов, но определенных в интерфейсах, вы можете использовать suppression filter. Но это будет работать, только если у вас есть соглашение об именах для интерфейсов (например, общий постфикс IF). Если у вас нет такой именовании, то вам придется либо:

  • реализовать custom filter, который может фильтровать сообщения, основанные на типе файла, или
  • реализовать custom check, возможно, в качестве подкласса от Имя метода, в котором добавлена ​​опция ограничения предупреждений для определенных типов файлов.

Если у вас есть соглашение об именовании интерфейсов, вы можете настроить фильтр подавления так:

<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" 
    "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> 
<suppressions> 
    <suppress id="methodNameInInterface" files="(?!IF)..\.java$"/> 
</suppressions> 
+0

Большое спасибо за ваш ответ Томас. У меня есть какое-то соглашение об именах, потому что имя интерфейса будет иметь четыре буквы, за которыми следует «U» и заканчивается 3 символами/цифрами. С другой стороны, реализация будет иметь одинаковую структуру, но с импломентом в конце. Поэтому я думаю, что этого может быть достаточно с фильтром следующим образом: files = "\ D {4} U \ w {3} .java $" Я прав? Кроме того, необходимо указать имя пакета? Еще раз спасибо за помощь – user3149877

+0

Да, это должно быть хорошо. Обратите внимание, что '\ w' содержит символы подчеркивания. Имя пакета * может * использоваться, но оно не требуется. –

+0

Я только что заметил ошибку в регулярном выражении подавления. Исправлено выше. В вашем случае вам понадобится '(?! \ D {4} U \ w {3}). {8} .java $'. Извините за путаницу. –

Смежные вопросы