Александр Воробьев

Александр Воробьев
Рейтинг
69
Регистрация
03.02.2020
ArbNet #:
Давай, ради интереса, может другим пригодится.

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

Но в любом случае PHPStan поможет найти скрытые баги и сделать код надежнее, даже если структура проекта нестандартная.

Шаг 1. Необходимо установить PHPStan https://github.com/phpstan/phpstan

Тут два варианта

Вариант 1 Если очень не хочется composer:
Скачай готовый исполняемый файл phpstan.phar отсюда: https://github.com/phpstan/phpstan/releases

Вариант 2 Рекомендую этим воспользоваться.
1.1 Установить composer Инструкция тут https://getcomposer.org/download/
1.2 Ставим стан. php composer.phar require --dev phpstan/phpstan если композер поставишь в проект или если глобально composer require --dev phpstan/phpstan

Шаг 2. Создаем bootstrap.php он необходим т.к. у тебя своя автозагрузка. Просто скопируй свой run.php в нем оставь все функции, установку констант и регистрацию автозагрузчика. остальное (например установка обработчика ошибок) убирай. 
В общем убери всё, что выполняет действия прямо сейчас (кроме регистрации автозагрузчика). Иначе анализатор зависнет или упадет.

Шаг 3. Создаем конфиг в корне проекта файл phpstnan.neon

parameters:
    phpVersion: 80100
    bootstrapFiles:
        - bootstrap.php  # подключить существующий загрузчик
    level: 9  # начать с минимального уровня
    paths:
        - node/
        - skin/
        - mods/

Версию php установи какую тебе надо именно в том формате как в примере. (там 8.1)
bootstrap.php - файл который делали на втором шаге
level - от 0 до 9. По хорошему надо начинать с уровня 1 устранять все ошибки и повышать пошагово. На 9 уровне там пипец какие условия :). Возможно в твоем фреймворке 9ый не возможен.
paths - каталоги где могут быть исходники

Шаг 4 Запуск
Если выбрал первый путь php phpstan.phar analyse
Если выбрал второй путь php vendor/bin/phpstan analyse 

php phpstan.phar analyse /papth/to/file.php - так можно проверить только один файл

Конечно инструмент не скажет "вот это замени на это". Т.е. ошибку надо будет понять, проанализировать и исправить. Т.е. эта не халява отменяющая необходимость знаний. Этот инструмент только подсветит проблему.

Бдит стан за многим. Понимаю, что ты себя считаешь очень знающим, но рекомендую править. Т.к. если кто то будет пользоваться твоим фреймворком, это поможет избежать неоднозначностей. Для примера таких ситуаций:


Стан бдит за более строгой типизацией чем php. Т.е. если написать

/**
* @param list<int> Входящий параметр
* @result array<string,float> Результат
*/
function foo(array $props):array{
    ...
}

то стан будет проверять, что на вход передается НЕ ассоциативный массив содержащий только целые числа, а результат обрабатывается как ассоциативный массив где ключ - строка, а значение - флоаты. В случае массивов он, с определенного уровня, вообще будет требовать уточнения типа, т.е. без подобного phpdoc не пропустит.  ИМХО это все важно для проектов класса фреймворк (т.е. расcчитано, что будут пользоваться другие разработчики)
ArbNet #:
Доверять безопасность сторонним приложениям это как минимум глупо

Проверь у себя метод core\Valid::Value если не менял стой версии, что у меня - то там опечатка есть

      case 'LOGIC':
        if($vtp != 'bolean') {
          $val = $val == 'false' ? false : boolval($val);
        }
        break;

     if($vtp != 'boolean') {


В общем прогнал я твой проект через анализатор.  Могу тебе прислать его вывод. (ну или дам инструкцию как его запустить - там дел на минут).  Понятно, что часть ошибок не существенные или идут от твоего подхода к коду.... Но тем не менее на минимальном уровне 75 на максимальном более 1000. (там больше 1000 уже не показывает точное число просто "1000+"

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

В дополнение про версию. Т.е если бы оставил типа по умолчанию работает как было, но параметром можно было бы включить новый синтаксис. Ну и пометил как депрекейт старый. То тогда можно было бы и минорную сменить. 
Sly32 #:
Дожал таки я тебя

Ранее при принятии решения не оценивал с точки зрения визуального восприятия. А ты тут написал... :)

Sly32 #:
Вот тут я как раз не знаю что правильно методологически - это можно считать v2.0  в таком случае.

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


Я когда работал над пакетом инкремента версий на эту тему копал...

Sly32 #:
Нет ну все таки слэш глаза режет прям - непонятно что закрывает цикл.

Подумал.. подумал. и выпустил версию 2.0.0 (т.к. ломается совместимость) где "из коробки" синтаксис с префиксом end.

При этом, при желании, в три строки можно настроить "старый" синтаксис (вдруг случилось чудо и на моем фреймворке кто то портал огромный запилил 🤣 )

Sly32 #:
А сейчас в эру ИИ это и смысла особо не имеет. ИИ-шка тесты хорошо пишет
Ну вот тут я не уверен. Если тесты (по крайней мере в этом проекте) будет писать ИИ то ,возможно, меня не посетит какая то полезная мысль :)
Sly32 #:
в результате покрытие упало до 48% - это, конкчно, позор... каюсь
Полезная штука конечно. В рабочих проектах такое редко (все же тоже бюджета требует). Но местами позволяет на раннем этапе переосмыслить что то или обратить на что то дополнительное внимание. Написание доки тоже такой же эффект дает :). Но на разработку через тестирование не перешел :)
Sly32 #:
Нет ну все таки слэш глаза режет прям - непонятно что закрывает цикл.

Подумаю еще... :)

Sly32 #:
надо было уж тогда 

это уже дублирование. тут выбирать "/" или "end" но не вместе

Sly32 #:
И кстати про тесты - как с ними дела? Я вот в лерне честно говоря подзабил на них, в результате покрытие упало до 48% - это, конкчно, позор... каюсь

В этом проекте все полностью покрыто. Даже информеры есть в readme. вот например для шаблонизатора 

1 - Это сторонний сервис. Он там глубже чекает. Например плохой бал выдаст если слишком большая глубина условных.

2.- Степень покрытия тестами

3 - прогон  тестов в рзаных версиях php , для шаблонизатора это 8.5 и 8.6 (это будущий релиз) , фреймворк  еще и 8.4

Всего: 1150