readable — еще один линтер для PHP
- пятница, 10 июля 2020 г. в 00:27:46
Хочу представить линтер для PHP readable. Сейчас в нем 16 правил, которые должны улучшить читабельность кода. К основным преимуществам можно отнести:
Важные два дисклаймера:
readable устанавливаеться через npm:
$ npm install @officient/readable --save-dev
После установки, надо создать конфигурационный файл:
$ npx readable --init
И можно запускать:
$ npx readable
Сейчас в readable 16 правил:
catch
блокeval
, print_r
...)if
, for
...$id
, $i
)checkSomething
— возвращает булево значение, или бросает исключение?if
&&
и ||
внутри условия if
readable при проверки файла не строит синтаксическое дерево, а просто разбивает входной файл на массив токенов. Это — существенное отличие от аналогов. Возможно, это где-то ограничивает возможности, но с другой стороны:
Давайте для примера возьмем правило loop-max-size. Весь его код:
const loops = ['for', 'foreach'];
module.exports = {
check(maxLines, tokens, report) {
tokens.matchAll(loops, (token) => {
const end = token.copy().step().stepToClosing(); // skip ()
end.step().stepToClosing();
const lines = (end.current().line - token.current().line);
if (lines > maxLines) {
report(`Loop is longer than ${maxLines} lines [${lines}].`, token.current());
}
});
},
};
В правиле указано:
for
и foreach
..step()
, это будет открывающая скобка (
. Дойти до закрывающей скобки .stepToClosing()
.{
и }
).Я использую readable в своих проектах как дополнительный линтер для кода. Мне все нравится, особенно baseline (справедливости ради, такое есть и в Psalm). У него есть возможность занять нишу именно вспомогательного линтера.