Это все-таки произошло. JetBrains забирает мой плагин себе!
Как-то давно, лет 8 назад, я решил написать проект с нуля, без фреймворков. Надо было приспособить его для разных сред и я заюзал .env файлик и пхп-пакет для него. И был неприятно удивлен, что комплишена для ключей то нет! Быстренько наваял плагин для комплишена, назвал его .env files support и запушил его в маркетплейс. А потом сделал подсветку синтаксиса и JetBrains стал рекомендовать его ставить всем. А сейчас по общему рейтингу плагинов он вообще стоит на первом месте! Недавно JetBrains предложил включить его в поставку IDE и я согласился.
https://blog.jetbrains.com/phpstorm/2025/01/support-for-env-files/
Как-то давно, лет 8 назад, я решил написать проект с нуля, без фреймворков. Надо было приспособить его для разных сред и я заюзал .env файлик и пхп-пакет для него. И был неприятно удивлен, что комплишена для ключей то нет! Быстренько наваял плагин для комплишена, назвал его .env files support и запушил его в маркетплейс. А потом сделал подсветку синтаксиса и JetBrains стал рекомендовать его ставить всем. А сейчас по общему рейтингу плагинов он вообще стоит на первом месте! Недавно JetBrains предложил включить его в поставку IDE и я согласился.
https://blog.jetbrains.com/phpstorm/2025/01/support-for-env-files/
This media is not supported in your browser
VIEW IN TELEGRAM
Мы, проггеры, часто занимаемся автоматизацией различной. Но всегда надо думать что юзер делает до этой автоматизации, и после. Может там тоже можно чутка предугадать и предложить юзеру чуть больше.
Смотрите, как шторм умно с методами. Если есть параметры, то курсор внутри скобок, а если нет, то снаружи. Если метод void, то сразу ставит точку с запятой. Там явно подумали о том, что юзер делает сразу после комплишена и курсор в правильное место кладут.
Я тоже методы подсказываю кое-где и вот сейчас повторяю эту логику.
Смотрите, как шторм умно с методами. Если есть параметры, то курсор внутри скобок, а если нет, то снаружи. Если метод void, то сразу ставит точку с запятой. Там явно подумали о том, что юзер делает сразу после комплишена и курсор в правильное место кладут.
Я тоже методы подсказываю кое-где и вот сейчас повторяю эту логику.
IntelliJ IDE (а значит и PhpStorm) работает в многопотоковом режиме. Есть один, главный поток, который обрабатывает весь интерфейс юзера и все операции записи, и есть бэкграунд потоки, в которых предполагается делать все остальное.
С некоторых пор JetBrains активно работает над тем, чтобы в главном потоке ничего медленного не происходило. В EAP сборках даже эксепшены вылазят, если сделаешь чтото медленное в нем. Это, кстати, приносит результат. В последние годы шторм стал отзывчивее(это не субьетивщина, а достоверно вычисленный результат), но писать код иногда прям трудно. Если у тебя окно, в котором в процессе ввода надо лазить по классам и собирать инфу, то это больно.
Приходится до или во время открытия окна собирать всю нужную инфу, чтобы интерфейс был отзывчивым. Также надо учитывать момент, что шторм может захотеть начать индексацию прямо во время работы юзера с окном. В общем, лучше 10 раз сделать сложный комплишен, чем один раз какой-нибудь UI!
P.S. Просто нытья пост.
С некоторых пор JetBrains активно работает над тем, чтобы в главном потоке ничего медленного не происходило. В EAP сборках даже эксепшены вылазят, если сделаешь чтото медленное в нем. Это, кстати, приносит результат. В последние годы шторм стал отзывчивее(это не субьетивщина, а достоверно вычисленный результат), но писать код иногда прям трудно. Если у тебя окно, в котором в процессе ввода надо лазить по классам и собирать инфу, то это больно.
Приходится до или во время открытия окна собирать всю нужную инфу, чтобы интерфейс был отзывчивым. Также надо учитывать момент, что шторм может захотеть начать индексацию прямо во время работы юзера с окном. В общем, лучше 10 раз сделать сложный комплишен, чем один раз какой-нибудь UI!
P.S. Просто нытья пост.
Инкапсуляция или почему важно прятать как можно больше информации внутри обьектов
Большинство комплишенов моего плагина подсказывают параметры внутри методов.
Теперь возникла мысль, что
Сижу теперь делаю поля приватными и методы как можно более абстрактными. За 5 лет там много накопилось.
Большинство комплишенов моего плагина подсказывают параметры внутри методов.
$foo->bar('тут комплитим');
в процессе вырисовался обьект CompletionContext, в котором есть обьект Parameter, и обьект ParameterList - это уже внутренние объекты PhpStorm. И юзались они везде и часто.Теперь возникла мысль, что
$foo['тут комплитим']
и $foo('тут комплитим')
- это тоже вызовы методов! И если на них смотреть по-другому, как $foo->offsetGet('тут комплитим')
и $foo->__invoke('тут комплитим')
, то все станет сильно проще для меня. Но внутренние объекты шторма там другие, поэтому надо обьект CompletionContext абстрагировать немного. Но не получается. Он был открыт, все лезли в его внутренности и построить абстракцию, когда там не метод, а вызов массива или __invoke
, не получается.Сижу теперь делаю поля приватными и методы как можно более абстрактными. За 5 лет там много накопилось.
https://t.me/tg_5minphp/1413
Тут Петр Мязин из пятиминутки PHP удивляется, что старая монолитная IDEA оказалась более гибкой, чем модный опенсорсный VsCode. Я знаю как работает экосистема IDEA (ну плюс-минус) и видел как выглядят плагины к VsCode. Не особо удивлен. Ну может только добавить могу, что основная платформа IDEA - тоже давным давно открытая.
Почему Идея оказалась более гибкой - не знаю. Но хотел показать скриншот этот и рассказать про стабильность системы плагинов Идеи и то, как тщательно за ней стараются следить.
Плагин к Идее - это скомпиленый Java JAR-файл. Там все статично и если загружаешь его на маркетплейс там сразу идет проверка на совместимость с обьявленными версиями IDEA. Поймает любое неверное обращение к методу, классу и чему угодно. Сразу предупредает, что скоро удалят некоторые вещи. Весьма полезная вещь, да и локально можно запускать(у меня на CI крутится). Команда Идеи там довольно четко меняет интерфейсы когда надо, добавляет новые. Один раз только удивили сильно, но я тут об этом уже писал.
Если какая-то версия плагина покажет несовместимость, то ее не допустят к юзерам. Полностью от ошибок это конечно не страхует, но весьма хороший защитный барьер.
Плагин к VsCode - это нечто, написанное на тайпскрипте(а может и на яваскрипте). Нигде не нашел, где можно обьявить какие версии VsCode поддерживает плагин. Я сомневаюсь вообще что можно хоть какойто адекватный анализ провести там. Но если кто писал плагины туда - просветите плиз в комментах. Я анализировал некоторые исходные коды плагинов для вскода, и это страшно вообще.
P.S. 1655 Deprecated calls - это из-за моего старого обфускатора. Ни на что не влияет.
Тут Петр Мязин из пятиминутки PHP удивляется, что старая монолитная IDEA оказалась более гибкой, чем модный опенсорсный VsCode. Я знаю как работает экосистема IDEA (ну плюс-минус) и видел как выглядят плагины к VsCode. Не особо удивлен. Ну может только добавить могу, что основная платформа IDEA - тоже давным давно открытая.
Почему Идея оказалась более гибкой - не знаю. Но хотел показать скриншот этот и рассказать про стабильность системы плагинов Идеи и то, как тщательно за ней стараются следить.
Плагин к Идее - это скомпиленый Java JAR-файл. Там все статично и если загружаешь его на маркетплейс там сразу идет проверка на совместимость с обьявленными версиями IDEA. Поймает любое неверное обращение к методу, классу и чему угодно. Сразу предупредает, что скоро удалят некоторые вещи. Весьма полезная вещь, да и локально можно запускать(у меня на CI крутится). Команда Идеи там довольно четко меняет интерфейсы когда надо, добавляет новые. Один раз только удивили сильно, но я тут об этом уже писал.
Если какая-то версия плагина покажет несовместимость, то ее не допустят к юзерам. Полностью от ошибок это конечно не страхует, но весьма хороший защитный барьер.
Плагин к VsCode - это нечто, написанное на тайпскрипте(а может и на яваскрипте). Нигде не нашел, где можно обьявить какие версии VsCode поддерживает плагин. Я сомневаюсь вообще что можно хоть какойто адекватный анализ провести там. Но если кто писал плагины туда - просветите плиз в комментах. Я анализировал некоторые исходные коды плагинов для вскода, и это страшно вообще.
P.S. 1655 Deprecated calls - это из-за моего старого обфускатора. Ни на что не влияет.