KPHPStorm — FAQ

Как долго разрабатывался плагин?

Около 3-х месяцев — в основном во внерабочее время. Долго. Во-первых, это первый опыт в плагинах, и работы там действительно очень много. А во-вторых, документации по внутренностям PhpStorm крайне мало, аналогичных плагинов нет, подглядеть некуда, поэтому — эксперименты и декомпилированные исходники. И спасибо ребятам из JetBrains, отвечавшим на мои вопросы на первых порах.

Как он работает? KPHP запускается как демон или что?

Нет, все типы выводятся полностью локально, а ошибки — это опять-таки локальные инспекции на определённые паттерны кода. Никакие части KPHP внутрь не интегрированы, никуда удалённо запросы не посылаются. Это технически невозможно, да и бессмысленно. Всё происходит прям в IDE.

Какой оверхед? PhpStorm будет тормозить больше?

Вроде бы нет никакого оверхеда, т.е. скорость работы PhpStorm и потребление CPU не изменилось. С поправкой на то, что единожды проходит полная переиндексация, это заметно греет проц на больших проектах.

Плагин показывает все ошибки, которые найдёт KPHP?

Нет, конечно. KPHP честно выводит всё по всем достижимым исходникам, а плагин работает очень поверхностно. Он доверяет phpdoc’ам, анализирует только локальный scope и уж точно ничего не поймёт в нетипизированном коде. Поэтому даже если плагин считает, что всё ок, то KPHP может ругнуться. Но базовый принцип такой: чем проще код и чем он явнее типизирован, тем больше шансов локально вывести типы и подсветить ошибки при наличии.

А не проще было заюзать language server?

Нет.

Есть плагин deep-assoc-completion, оттуда что-нибудь взято?

Нет. Чтобы shape и tuple были нормальными, нужно было подхачить именно вывод типов, а не просто дать какие-то подсказки на месте курсора. Тот плагин из спец. синтаксиса в целом даже умеет после →стрелочки выводить кастомные подсказки — но которые он формирует самостоятельно, и только по горячей клавише. Поэтому там не работают ни parameter info, ни go to, а главное — find usages и рефакторинг.

Может ли в следующих релизах PhpStorm что-то сломаться?

Если не поддерживать плагин, то на следующую версию PhpStorm он просто не поставится. Поддержка будет нужна обязательно. Дело осложняется тем, что плагин использует много недокументированного API, и есть вероятность, что оно поменяется в будущем и что-то будет работать не так. Буду бдить, чтобы эффект был минимальный. В конце концов, если уж получилось всё это сделать сейчас, то вряд ли что-то изменится так уж кардинально в будущем.

Я веду в PhpStorm несколько проектов — один из них на KPHP, другие обычный PHP, как быть?

Ответ здесь: Установка и настройка.

Кратко: часть вещей действуют на все проекты сразу, а часть включается per-project.

Как я могу помочь в разработке плагина?

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