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)

если размер проекта меньше 100 тысяч строк кода, рекомендуется использовать другие статические анализаторы

это почему? если меньше 100 000 строк то не работает? или по сравнению с другими работает крайне некачественно и его надо применять только в горах говнокода и для другого не годится?

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

Смысла нет. Цель его создания — обеспечить быструю проверку большого количества кода. Такие статические анализаторы как псалм или пхпстан поддерживают намного больше всего, но они медленные, если сравнивать с новерифай.

fernandos ★★★
() автор топика

Сейчас узловые электронщики на жабаскрипте объяснят про ненужность php.

anonymous
()
Ответ на: комментарий от fernandos

да, помню, котятки, все дела

просто несколько удивляет, что за 8 лет по факту топчутся на месте

а как сам kphp, активно развивается? получает последние фичи оригинала?

Dragonic
()
Ответ на: комментарий от anonymous

Сейчас узловые электронщики на жабаскрипте объяснят про ненужность php.

А вот не надо тут. Ненужность PHP не отменяет ненужности Электрона.

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

У php, при всех его проблемах, была ниша эффективного применения. Ну, то есть, она и сейчас есть, но нужный для неё функционал - это php4 - php5. А именно - «накодить что-то побыстрому, чтоб хоть как-то работало, а потом уже, если надо, разберёмся и исправим плохой код (или не исправим, если потребители и так жрут)».

«Последние фичи» для этой ниши не нужны, выглядят они больше как каргокульт по джаве. Но если вам нужны фичи джавы, лучше писать на джаве, это хоть и медленнее (но уже не медленнее чем «современная пхп-разработка», по уже описанным причинам), но хоть не будет пхп-проблем.

firkax ★★★★★
()

если размер проекта меньше 100 тысяч строк кода, рекомендуется использовать другие статические анализаторы

Интересно, и почему же? Уж не потому ли что он ради скорости пропускает кучу проблем?

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

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

Уж не потому ли что он ради скорости пропускает кучу проблем?

Он не имеет всех фич солидных статических анализаторов из-за скорости.

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

Напомню, что подлог приведённый вами - не довод. По моему мнению ВК свои задачи выполняет и теряет свои позиции только когда большие деньги помогают всплыть очередному кастрированному конкуренту, за счёт дичайшей рекламы, а также желанием инфантильных гикохайпожоров чувствовать себя не такими как все. В целом считаю, что если нет цели потешить своё чсв, то ВК для СНГ хватит за глаза. Касательно второго делать оценки не буду - специалисты и так знают достоинства и недостатки рнр, а нытики с внутренними комплексами и чувством неполноценности и в кувшин с живой водой помочаться лишь бы все знали о их особенностях разития.

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

ВК свои задачи выполняет

Какие задачи? Сливать всю инфу ментам по первому же запросу? да, такую задачу выполняет отлично. других задач у него нет

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

Сливают все. В целом, если вы живёте в манямирке, в котором информация утратила свою ценность и перестала быть инструментом манипуляции общественным мнением и отдельными людьми, то предлагаю вам открыть глаза и вылезти из чулана - везде так и ВК ничем в этом плане не отличается от ТГ и прочих

AKonia ★★
()
Последнее исправление: AKonia (всего исправлений: 1)
Все как обычно ...   

Foxpro 2.6 /даже не упоминаю VFP/ был на порядок более функциональней чем 1С.
И 1С а-ля 7.7 было не сложно на нем реализовать.
Ни кто, ни чего не сделал …
Сумели загадить Foxpro до такой степени, что он стал нарицательным.

Что касаемо PHP

Та же песня, те же слова и те же исполнители ...
anonymous
()
Ответ на: комментарий от eternal_sorrow

Зачем её использовать? Смысл в том, что соцсеть, написана на диалекте РНР, который справляется со своими обязанностями.

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

Вы правы, неправильно интерпретировал одно сообщение.

fernandos ★★★
() автор топика

NoVerify способен обрабатывать примерно 200 тысяч строк кода в секунду на современном компьютере

Помечает все 200 тысяч как «Unmaintainable legacy code, needs complete rewrite using programming language instead of PHP»?

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

Я из тех кто полагает, что «потенциальная_программная_дыра_1» от «потенциальная_программная_дыра_2» также известные как соцсети отличаются только циферкой и возможно авторами, но не сутью и потенциалом. Не буду гадать источника вашей предвзятости, отмечу только, что она есть и вполне явная, если не готовы мыслить критически, то зачем вы выдумываете ?

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

Я согласен с этим утверждением. Есть только одно «но». ВК работает в российской юрисдикции и вынужден подчиняться идиотским российским законам.

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

Любая соцсеть может работать только в рамках законодательства государства и это касается любой соцсети и любого государства, где есть интернет и законы его регулирующие. Вынужден повториться - вы предвзяты. Касательно ВК - полагаю у него и вариантов то не было, т.к. его сервера по сути находятся целиком в РФ и неподчинение очевидно черевато просто остановкой соцсети. Другие соцсети не лучше - да, их какое-то время конечно будет спасать децентрализованный характер, но сомневаюсь что это будет долго, та же телега в США прогнулась ? - прогнулась, внутри РФ договорилась ? - договорилась, поэтому какая разница, кто будет сливать данные, если делают это все ?

AKonia ★★
()
Последнее исправление: AKonia (всего исправлений: 4)
Ответ на: комментарий от anonymous

Что касаемо PHP

Та же песня, те же слова и те же исполнители ...

Многие языки программирования ламеры сумели забросать … /вы догадались конечно чем/.
Почему так?

Эх, лучше промолчу ...
anonymous
()
Ответ на: комментарий от AKonia

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

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

ЦМС же, там настолько высокий уровень абстракции, что голова кружится.

Я же предупреждал …

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

Если слив американскому майору возможен, то почему вы наивно полагаете, что этой возможности нет и в России, в остальном полагаю, что по вашей классификации - демократии в мире не существует и посадить за слова могут везде, где есть деньги и суд, т.е. в любой стране из 20-ки, вопрос разве что мб в огласке, вон в США так вообще за мнение отменяют нынче через день - сказал, что не угодно в рамках уничижительной обществу повестки и всё лишился работы, уважения, друзей, а если особенно повезёт, то и свободы - поэтому как и всегда всё решает вопрос размера вашего кошелька и щедрости поделиться его содержимым с хорошим адвокатом.

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

отменяют нынче через день

Тоже неприятное явление, но отношения к теме не имеет.

посадить за слова могут везде, где есть деньги и суд

как страшно жить

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

Прям эталонное ненужно - начиная с вконтактика, заканчивая php.

Очень самокритично. Продолжайте держать нас в курсе.

anonymous
()
Ответ на: комментарий от fernandos

Он не имеет всех фич солидных статических анализаторов из-за скорости.

нихрена не умеет, но делает это быстро

dummy ★★
()

скажите пожалуйста как на сраную ленту с комментиками может уйти 5 МИЛЛИОНОВ строк PHP кода?

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

Легаси. Они не так давно на ООП перебрались, не думаю, что кодовую базу кто-то чистил. Ну и там же не только лента.

Ну и четверть(если не больше) из этого — комментарии.

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

Ну и четверть(если не больше) из этого — комментарии.

Когда считают LOC, вроде как принято считать без комментариев и пустых строк.

Легаси. Они не так давно на ООП перебрались, не думаю, что кодовую базу кто-то чистил.

ОК, поставлю вопрос по-другому. Если все делать с хорошей архитектурой, рефакторинг, QA, все дела, то сколько по-идее там нужно строк кода этого PHP? А если все делать с нормальным стеком?

Ну и там же не только лента.

Лента аудио. Лента фоток. Лента сообщений. Я что-то упустил? А, ну мобильное приложение васянам из индии может заказали. И?

Я понимаю что у них там какой-то продвинутый бэкэнд должен быть, хранение данных, это вот все, но это же не на PHP.

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

Когда считают LOC, вроде как принято считать без комментариев и пустых строк.

Я не думаю, что они считали без комментариев, уж очень много.

Если все делать с хорошей архитектурой, рефакторинг, QA, все дела, то сколько по-идее там нужно строк кода этого PHP

Намного меньше. Но точный ответ дать не смогу. Может там сложнейшие алгоритмы обработки данных?

Лента аудио. Лента фоток. Лента сообщений. Я что-то упустил?

Музыку, рекомендации, алгоритмы.

Я понимаю что у них там какой-то продвинутый бэкэнд должен быть, хранение данных, это вот все, но это же не на PHP.

На РНР. У них свой диалект КРНР(он очень слабо отличается от РНР), который транслируется в с++, который потом компилируется.

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

бэкэнд

На РНР. У них свой диалект КРНР(он очень слабо отличается от РНР), который транслируется в с++, который потом компилируется.

Жесть конечно. Ладно, убедил. Говнокод на практике можно растягивать на лямы кода, поэтому я верю в версию о легаси (но учитывая бэкэнд если как ты говоришь).

anonymous
()

Вся суть языков с динамической типизацией: мы запилим языки с нестрогой динамической типизацией, чтобы потом эти самые типы валидировать 100500 инструментами для анализа кода, линтерами, тормозящими ide, аннотациями типов через комменты или через специальный синтаксис (который обычно ничего не валидирует в рантайме лол), генераторами кода, трансплайлерами, бесконечными самыми разнообразными тестами и всем прочим. Разумеется, это все должно работать медленно, ненадежно, с кучей false posivites, и через раз, и т.д. и т.п.. :)

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

вся суть байтослесаря: поливать грязью динамические языки пока конпелируется его кал

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