Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Как добавить проверки в NoVerify, не написав ни строчки Go-кода

ВКонтактеOpen sourcePHPСовершенный кодGo

В статическом анализаторе NoVerify появилась киллер-фича: декларативный способ описания инспекций, который не требует программирования на Go и компиляции кода.


Чтобы вас заинтриговать, покажу описание простой, но полезной инспекции:


/** @warning duplicated sub-expressions inside boolean expression */
$x && $x;

Эта инспекция находит все выражения логического &&, где левый и правый операнд идентичны.


NoVerify — статический анализатор для PHP, написанный на Go. Почитать о нём можно в статье «NoVerify: линтер для PHP от Команды ВКонтакте». А в этом обзоре я расскажу о новой функциональности и том, как мы к ней пришли.


Читать дальше →
Всего голосов 33: ↑33 и ↓0 +33
Просмотры3.6K
Комментарии 7

NoVerify: PHP-линтер, который работает быстро

Конференции Олега Бунина (Онтико)Разработка веб-сайтовOpen sourcePHPПрограммирование
Для PHP есть хорошие утилиты статического анализа: PHPStan, Psalm, Phan, Exakat. Линтеры хорошо выполняют свою работу, но очень медленно, потому что почти все написаны на PHP (или Java). Для личного использования или небольшого проекта это нормально, но для сайта с миллионами пользователей — критический фактор. Медленный линтер замедляет CI pipeline и не даёт возможности использовать его в качестве решения, интегрируемого в текстовый редактор или IDE.



Сайт с миллионами пользователей — это ВКонтакте. Разработка и добавление новых функций, тестирование и починка багов, ревью — все это должно проходить быстро, в условиях жестких дедлайнов. Поэтому хороший и быстрый линтер, который сможет проверять кодовую базу на 5 млн строк за 5−10 секунд, незаменимая вещь. 

Подходящих линтеров на рынке нет, поэтому Юрий Насретдинов (youROCK) из ВКонтакте написал свой в помощь командам разработки — NoVerify. Это линтер для PHP, который написан на Go. Он работает в 10-30 раз быстрее аналогов, может находить то, о чем не предупредит PhpStorm, легко расширяется и хорошо интегрируется в проекты, в которых раньше не слышали о статическом анализе. 

Об этом линтере расскажет Искандер Шарипов. Под катом:как выбирали линтер и предпочли написать свой, почему NoVerify такой быстрый и как устроен изнутри, почему написан на Go, что может находить и как расширяется, на какие компромиссы пришлось пойти ради него и что можно построить на его базе.
Читать дальше →
Всего голосов 37: ↑35 и ↓2 +33
Просмотры8.7K
Комментарии 9

Митап: stay home and GOnline

АвитоGoКонференции

Привет! 25 апреля будет наш совместный онлайн-митап с сообществами GolangKazan и Go Yola для Go-разработчиков. В программе — два потока и восемь докладов на самые разные темы. Под катом — ссылки на видеотрансляцию, тезисы докладов и расписание мероприятия.


Читать дальше →
Всего голосов 30: ↑27 и ↓3 +24
Просмотры5.1K
Комментарии 6

Материалы митапа GOnline: дизайн библиотек, кодогенерация, машинное обучение

АвитоGoМашинное обучениеКонференции

Делимся материалами с нашего совместного митапа с сообществами GolangKazan и Go Yola для Go-разработчиков. Под катом — видеозаписи выступлений с таймкодами для удобной навигации и ссылки на презентации спикеров.


Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Просмотры4.5K
Комментарии 0

Статический анализ: baseline файлы vs diff

ПрограммированиеСовершенный кодУправление разработкойУправление продуктом

В статических анализаторах рано или поздно приходится решать задачу упрощения интеграции в существующие проекты, где поправить все предупреждения на legacy коде невозможно.


Эта статья — не помощник по внедрению. Мы будем говорить о технических деталях: как такие механизмы подавления предупреждений реализуются, какие у разных способов плюсы и минусы.


Читать дальше →
Всего голосов 22: ↑22 и ↓0 +22
Просмотры2.1K
Комментарии 3

Ускоряем кеш проекта в NoVerify (линтер для PHP) в 10 раз

PHPПрограммированиеGo

Одним вечером, обсуждая с Искандером @quasilyte сложности в разработке линтера для PHP на Go, Искандер упомянул, что тесты как-то долго идут при локальном прогоне (около минуты, и, как мне кажется, для Go это довольно долго). Стали копать, и быстро выяснилось, что в основном «тормозят» тесты, которые запускают NoVerify (название линтера) в режиме со включенным race-детектором. На каждый запуск индексируется репозиторий phpstorm-stubs, в котором содержатся все определения встроенных функций/классов/констант, которые есть в PHP, и индексация этого репозитория занимает около 4 секунд на 4-ядерной машине (замечу, что без race detector всё существенно быстрее). Поскольку таких прогонов делается несколько, по одному на каждый тестируемый open-source проект, суммарное время исполнения всех тестов может занимать минуты. NoVerify позиционирует себя как очень быстрый линтер для PHP, поэтому, конечно же, такая производительность несколько печалит и нужно было найти какое-то решение.

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Просмотры2.7K
Комментарии 1