[Open source, PHP, JavaScript] readable — еще один линтер для PHP
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Хочу представить линтер для PHP readable. Сейчас в нем 16 правил, которые должны улучшить читабельность кода. К основным преимуществам можно отнести:
- скорость — меньше секунды на 1000 файлов
- настройка baseline — можно не исправлять все ошибки в проекте сразу, а создать конфигурацию с текущими ошибками. И игнорировать их, но реагировать на новые.
- правила писать проще чем в аналогах (субъективно)
Важные два дисклаймера:
- Я основной контрибьютор, поэтому могу быть субъективным. Изначально, readable написан для бельгийской компании officient. Они уже некоторое время его используют у себя внутри, и решили сделать readable открытым проектом.
- Он написан на JS.
Установка и запуск
readable устанавливаеться через npm:
$ npm install @officient/readable --save-dev
После установки, надо создать конфигурационный файл:
$ npx readable --init
И можно запускать:
$ npx readable
Правила
Сейчас в readable 16 правил:
- namespace-max-files — максимальное количество файлов в неймспейсе
- argument-override — запрет изменения значения аргументов функции
- file-max-size — максимальное количество строк в файле
- empty-catch — запрет на пустой catch блок
- class-comment — перед объявлением класса должен быть какой-нибудь комментарий, что этот класс делает
- forbidden-functions — список запрещенных функция (eval, print_r ...)
- missing-braces — обязательные скобки в блоке после if, for ...
- variable-length — минимальная длина имени переменной (можно добавлять исключения $id, $i)
- function-max-size — максимальная длина функции
- loop-max-size — максимальная длина цикла
- forbidden-function-prefix — запрет на определенные слова в начале имени функции. Например, checkSomething — возвращает булево значение, или бросает исключение?
- if-assigment — присваивание внутри условия if
- complex-if — смешивание && и || внутри условия if
- ternary-max-length — максимальная длина строки с тернарным оператором
- loop-max-nest — максимальная вложенность циклов
- max-nest — максимальная вложенность блоков
Создание правил и внутренняя особенность
readable при проверки файла не строит синтаксическое дерево, а просто разбивает входной файл на массив токенов. Это — существенное отличие от аналогов. Возможно, это где-то ограничивает возможности, но с другой стороны:
- 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). У него есть возможность занять нишу именно вспомогательного линтера.
===========
Источник:
habr.com
===========
Похожие новости:
- [Open source, Системы обмена сообщениями, Управление проектами, Учебный процесс в IT] 5 опенсорсных альтернатив Slack для группового чата (перевод)
- [IT-инфраструктура, Open source, Виртуализация, Серверное администрирование, Сетевые технологии] Автоматизация сетевых сервисов или как собрать виртуальную лабораторию при помощи OpenDaylight, Postman и Vrnetlab
- [DevOps, Open source, Управление разработкой, Учебный процесс в IT] Руководство для начинающих: создаем DevOps-пайплайн (перевод)
- [JavaScript, Разработка веб-сайтов] Интеграция ЭЦП НУЦ РК в информационные системы на базе веб технологий
- [Разработка веб-сайтов, JavaScript, Node.JS] Управление зависимостями JavaScript
- [Firefox, JavaScript, Python, Реверс-инжиниринг, Системы обмена сообщениями] Магия WebPush в Mozilla Firefox. Взгляд изнутри
- [JavaScript, Программирование, Учебный процесс в IT] Двоичное кодирование вместо JSON (перевод)
- [PHP, Symfony, API] REST API в Symfony (без FosRestBundle) с использованием JWT аутентификации. Часть 1 (перевод)
- [Open source, Учебный процесс в IT, Карьера в IT-индустрии, DevOps] Гайд по DevOps для начинающих (перевод)
- [Canvas, JavaScript, WebGL, Математика, Работа с 3D-графикой] Canvas и геометрия. Это почти просто
Теги для поиска: #_open_source, #_php, #_javascript, #_php, #_javascript, #_standarty_kodirovanija (стандарты кодирования), #_open_source, #_php, #_javascript
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:06
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Хочу представить линтер для PHP readable. Сейчас в нем 16 правил, которые должны улучшить читабельность кода. К основным преимуществам можно отнести:
Важные два дисклаймера:
Установка и запуск readable устанавливаеться через npm: $ npm install @officient/readable --save-dev
После установки, надо создать конфигурационный файл: $ npx readable --init
И можно запускать: $ npx readable
Правила Сейчас в readable 16 правил:
Создание правил и внутренняя особенность 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()); } }); }, }; В правиле указано:
Вместо заключения Я использую readable в своих проектах как дополнительный линтер для кода. Мне все нравится, особенно baseline (справедливости ради, такое есть и в Psalm). У него есть возможность занять нишу именно вспомогательного линтера. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:06
Часовой пояс: UTC + 5