Я не уверен, что вы легко можете написать расширение Checkstyle, поскольку AST-код просмотра Checkstyle SDK Gui не делает различий между:
else if
и
else
if
В каждом случае else
- это LITERAL_ELSE
с if
...
Таким образом, обобщенное регулярное выражение else[ \t]*[\r\n]+[ \t]*if
действительно является быстрым способом обнаружения такого рода кода.
Исправьте регулярное выражение, чтобы включить случаи:
- нет пробела без табуляции до / после новой строки
- - это несколько новых строк.
Конечно, вы не хотите использовать выражение регулярного выражения \s
, так как оно включает в себя символы новой строки. Проще отделить пробелы от возвращаемых символов.
Примечание: в Checkstyle 5.0beta не используйте «Generic Illegal Regexp», а вместо этого модуль « Regexp» :
вы можете настроить этот модуль RegExp как «invalidPattern» (со связанной серьезностью «Warning»), и вам не нужно использовать какой-либо тип флага «multi-line»: достаточно регулярного выражения.
Regexp
Описание
Проверка, которая удостоверяется, что указанный шаблон существует, существует меньше установленного числа раз или не существует в файле.
Эта проверка объединяет все функции, предоставляемые RegexpHeader, GenericIllegalRegexp и RequiredRegexp, за исключением предоставления регулярного выражения из файла.
Отличается от них тем, что работает в многострочном режиме . Это регулярное выражение может занимать несколько строк, и оно проверяет это по всему файлу за раз. Остальные работают в однолинейном режиме. Их одно или несколько регулярных выражений могут занимать только одну строку. Они проверяют каждую из них по очереди в каждой строке файла.
Томас упоминает в комментариях :
Контрольный стиль AST содержит информацию о номере строки.
См. " Есть ли какое-либо правило Checkstyle / PMD / Findbugs, чтобы заставить" else if
"находиться в одной строке? "
(в котором нужно использовать пользовательскую проверку , а не совпадение с регулярным выражением ).