Правило не прошло проверку при попытке обновить pmd с 6.17.0 до 6.18.0 - PullRequest
0 голосов
/ 11 апреля 2020

правило:

"// Ссылка [соответствует (@literal, \" ^ \ $ [^!] + \ ") И ./preceding-sibling::Text and ./following-sibling :: Text] "

для вашего удобства я предоставлю проект, а вы можете mvn-протестировать его.

Весь проект на https://github.com/XenoAmess/p3c/tree/1605f4d1b9c6a505074be5328953af26f578e190/p3c-pmd

класс правил - com.alibaba.p3 c .pmd.lang.vm.rule.other.UseQuietReferenceNotationRule

Я попытался просмотреть журнал обновлений и не нашел ничего связанного.

Спасибо за помощь.

1 Ответ

0 голосов
/ 16 апреля 2020

Это побочный эффект от фиксации https://github.com/pmd/pmd/issues/1923. Это было исправлено путем использования реального / полного имени в контексте правила (см. https://github.com/pmd/pmd/pull/1982). В модульных тестах используется имя файла «n / a», которое теперь интерпретируется как файл «a» в каталоге «n». RuleContext::getSourceCodeFilename возвращает только имя файла, а не полный путь. Для получения полного пути можно использовать RuleContext::getSourceCodeFile.

Ваше правило UseQuietReferenceNotationRule проверяет имя файла ( UseQuietReferenceNotationRule. java: 65 ), которое больше не является "n / a" в модульные тесты но "а". Вы можете «исправить» модульный тест, просто изменив UT_FILE_NAME на «a» (см. UseQuietReferenceNotationRule. java: 45 ).

В качестве альтернативы вы можете изменить правило для использования ctx.getSourceCodeFile().toString() чтобы восстановить полный путь в UseQuietReferenceNotationRule. java: 62 . Хотя файл не существует, он все равно указывает на «n / a».

Альтернативой для проверки имен путей в самом правиле может быть Шаблоны исключения / включения файла .

Кроме того, приветствуются материалы по https://github.com/pmd/pmd, если вы считаете, что правила имеют смысл для более широкой аудитории.

...