LINUX.ORG.RU

Выпуск статического анализатора NoVerify 0.5.0

 


0

1

Представлен новый релиз статического анализатора для PHP NoVerify, разрабатываемого компанией «В Контакте».

Изначально NoVerify разрабатывался для анализа исходного кода социальной сети ВКонтакте, размер которого превышает 5 миллионов строк кода. Поэтому преимущества данного статического анализатора можно заметить при большой кодовой базе (если размер проекта меньше 100 тысяч строк кода, рекомендуется использовать другие статические анализаторы).

NoVerify способен обрабатывать примерно 200 тысяч строк кода в секунду на современном компьютере (Intel Core i5 + SSD).

Изменения проверок:

  • Проверка наличия блока комментариев phpdoc переименована в missingPhpdoc.
  • Чекер undefined разбит на следующие проверки:
    • maybeUndefined;
    • undefinedConstant;
    • undefinedFunction;
    • undefinedMethod;
    • undefinedProperty;
    • undefinedType;
    • undefinedVariable.
  • Проверка неочевидности порядка аргументов тернарного оператора nestedTernary включена по умолчанию.
  • Чекеры switchDefault(наличие default в конструкции switch), arrayAccess(доступ к немассивам через синтаксис массивов), complexity(сообщает об излишне сложных функциях).
  • Проверка undefinedType разбита на два чекера:
    • undefinedClass;
    • undefinedTrait.
  • Проверки undefinedVariable и maybeUndefined теперь не выводят предупреждение, если переменные являются левым операндом оператора объединения с null;
  • phpdocLint переименован в invalidDocblock.
  • phpdocType переименован в invalidDocblockType.
  • phpdocRef переименован в invalidDocblockRef.
  • Добавлена новая проверка parentNotFound, обнаруживающая несуществующий родительский класс:
    class Foo {
        public function f() {
           parent::b(); // Class Foo has no parent.
        }
    }

Исправлено:

  • Если в группе модификаторов регулярных выражений верхнего уровня присутствует неверный символ, то она не будет анализирована.
  • Вывод теперь показывает только время (без даты и миллисекунд).
  • Исправлены быстрые исправления, которые работали некорректно.
  • Если файл из директории vendor не может быть анализирован, ошибка не будет отображена.
  • В нестрогом режиме теперь не будут отображены ошибки неизвестного метода и свойства для null и stdClass.
  • Добавлен атрибут @disabled который отключает проверку для динамических правил.
  • Все варианты проверки unused теперь выбрасывают предупреждение.
  • Исправлен баг с невозможностью использовать self внутри трейта.
  • Исправлена паника при enum;

Добавлено:

  • Добавлена возможность установки через менеджер зависимостей Composer.
  • Добавлена поддержка анонимных классов.
  • Добавлена песочница, где можно попробовать использовать NoVerify без установки.
  • Улучшен вывод типов для сложных выражений с instanceof в if-else:
/**
  * @param mixed $a
  */
function f1($a) {
  if ($a instanceof Foo || $a instanceof Boo) {
     exprtype($a, "\Boo|\Foo");
  }
}

/**
  * @param Boo|Foo|Zoo $a
  */
function f1($a) {
   if ($a instanceof Foo && $a instanceof Boo) {
     exprtype($a, "\Boo|\Foo");
   } else {
     exprtype($a, "\Zoo");
   }
}
  • Добавлено сужение типа:
/**
  * @param mixed $a
  */
function f($a) {
   if (!$a instanceof Foo) {
      return;
   }

   exprtype($a, "\Foo");
}
  • Добавлена поддержка союзных типов и тайпхинтов.
  • Добавлена документация для режима diff.
  • Добавлено быстрое исправление для старого синтаксиса массивов в параметрах функции.
  • специальные скалярные типы psalm теперь обрабатываются и превращаются в ближайшие обычные типы.
  • Добавлен тип never.

KPHP:

  • Типы kmixed и future теперь нормализованы к mixed.

>>> Подробности

★★★

Проверено: Shaman007 ()
Последнее исправление: sudopacman (всего исправлений: 3)
Ответ на: комментарий от fernandos

одностраничные сайтики и типа-cms для нищебродов - хоть как-то оправданная сфера использования php. в остальных случаях это означает, что решили сэкономить, набрав я-больше-ничо-низнаю.

dummy ★★
()
Ответ на: комментарий от eternal_sorrow

В демократических странах не принято сажать людей за слова.

Такой большой, а в сказки верит.

dexpl ★★★★★
()
Ответ на: комментарий от dummy

одностраничные сайтики и типа-cms для нищебродов - хоть как-то оправданная сфера использования php.

Какую нибудь панельку с авторизацией, 2fa, отчетами, CRUD, и все возможными парсерами реестров и прочих xml, xls, csv и кастомными типами, экваринги всяких сберов и noneбанков в 100500 раз быстрее нашлепать на каком нибудь Yii или Symfony, чем ковыряться и велосипедить в ваших nodejs, java и прочих python. Тем более плюсы от иного языка будут сомнительны, ибо тот же PHP уже умеет в JIT, opcache и memchached.

Ассинхронные и тяжелые задачи легко и просто интегрируются через очереди с (по мнению многих на лоре так же не нужный) Golang микросервисом. Средние задачи можно и на каком нибудь Swoole (да, это php) запилить.

istepan
()
Последнее исправление: istepan (всего исправлений: 2)
Ответ на: комментарий от istepan

я помню, как тут кто-то на php init-скрипты лепил.

про «быстрее» - это вы просто ниче-другое-ниумею. нашлепать-то, может быть, и получится, а вот сопровождать это г… желающих найдется немного.

dummy ★★
()
Ответ на: комментарий от eternal_sorrow

Страдаете метеоризмом? Обратитесь к врачу.

dexpl ★★★★★
()
Ответ на: комментарий от dummy

а вот сопровождать это г… желающих найдется немного.

Нормально сопровождается. Тесты, SOLID и прочие MVC заходят на ура.

istepan
()
Ответ на: комментарий от eternal_sorrow

В твоём списке у США индекс 25.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.