company_banner

PhpStorm 2020.3: PHP 8, атрибуты, PHPStan и Psalm, Xdebug 3, Tailwind CSS и совместная разработка



    Рады представить финальный мажорный релиз PhpStorm в этом году! Под катом подробный разбор всех изменений и новых возможностей.



    PHP 8


    PHP 8.0 выпущен. Большое спасибо всем контрибьюторам и менеджерам релиза!

    PhpStorm 2020.3 поддерживает все последние изменения языка. Давайте рассмотрим, что доступно и как это использовать в IDE.

    Версия языка в статусбаре


    Теперь в статусной строке всегда отображается текущая версия PHP проекта. Оттуда же можно переключить версию.



    Если переключатель не активен, это означает, что ограничение на версию PHP задано в composer.json.

    Именованные аргументы


    В PHP 8 аргументы функций и методов могут передаваться путем указания имени параметра. Вызовы теперь автоматически задокументированы, а необязательные параметры стали необязательными в полном смысле слова.

    С помощью квик-фикса Add name identifiers можно добавить имена к аргументам:



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



    Если передаваемое значение совпадает со значением параметра по умолчанию, то его можно смело удалить:



    Вместо массива options для передачи набора параметров можно использовать именованные аргументы, просто передавая только необходимые. Аргументы, передаваемые таким образом, в отличие от элементов массива, являются типобезопасными.



    Атрибуты


    Атрибуты — это новый, структурированный способ указания метаданных в PHP вместо комментариев PHPDoc.

    Чтобы создать атрибут, надо объявить класс и добавить маркер #[Attribute]. Здесь PhpStorm поможет с подсветкой, автодополнением кода, поиском использований, рефакторингами и прочим.



    Сам PHP проверяет валидность атрибутов только при вызове ReflectionAttribute::newInstance(). А если не обращаться к атрибутам через Reflection, то они полностью игнорируются, чтобы не загружать лишние классы и не создавать объекты.

    А вот PhpStorm провалидирует все в редакторе, не запуская Reflection API. При этом проверяются следующие правила:

    • Указанный класс действительно может быть атрибутом.


    • Данный атрибут применяется только в разрешенных местах: класс, свойство, метод, параметр, функция или константа класса.


    • Атрибут повторяется только в том случае, если он объявлен с флагом Attribute::IS_REPEATABLE.



    Вот атрибуты в действии с Symfony:





    Штормовские атрибуты PHP 8


    Несколько атрибутов доступны в PhpStorm 2020.3 «из коробки» в неймспейсе \JetBrains\PhpStorm\.

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

    А вот если вы дополнительно используете другие инструменты статического анализа и не хотите получать ошибок типа Class not found, то тогда, возможно, стоит добавить пакет атрибутов JetBrains/phpstorm-attributes как зависимость в composer.json.


    #[Deprecated]


    Используйте этот атрибут как PHPDoc-тег @deprecated, чтобы пометить методы, классы или константы классов, которые будут удалены в будущем.

    Преимущество тут в том, что можно указать замену для устаревшего кода и пользователю будет проще обновиться.

    Давайте посмотрим на реальный пример. В недавно выпущенном Symfony 5.2 метод \Symfony\Component\DependencyInjection\Alias::setPrivate() объявлен устаревшим. Если там добавить атрибут #[Deprecated], то можно упростить миграцию.

    #[Deprecated(
       reason: 'since Symfony 5.2, use setPublic() instead',
       replacement: '%class%->setPublic(!%parameter0%)'
    )]
    





    #[ArrayShape]


    Этот атрибут полезен для работы с простыми структурами данных или объектоподобными массивами, когда по какой-то причине нельзя объявить класс.

    Синтаксис вот такой:
    #[ArrayShape([
    // ‘key’ => ’type’,
       ‘key1’ => ‘int’,
       ‘key2’ => ‘string’,
       ‘key3’ => ‘Foo’,
       ‘key3’ => App\PHP 8\Foo::class,
    ])]
    function functionName(...): array
    


    Тип может быть указан как строка или как ссылка на класс в виде FQN строки или константы ::class.



    Массив, который определяет «форму», можно вынести в константу и переиспользовать:

    const  MY_ARRAY_SHAPE = [];
    #[ArrayShape(MY_ARRAY_SHAPE)]
    




    В PhpStorm мы уже проаннотировали атрибутом #[ArrayShape] некоторые стандартные функции PHP, например parse_url().

    К счастью, синтаксис однострочных атрибутов обратно совместим. То есть, если записать #[ArrayShape] в одну строку в проекте на PHP 7, то интерпретатор PHP воспримет эту строку как комментарий.

    В отличие от интерпретатора PHP, PhpStorm все равно будет анализировать атрибуты! Так что, даже если ваш проект работает на PHP 7.4 или ниже, вы все равно получите пользу от добавления #[ArrayShape].


    #[Immutable]


    Неизменяемые объекты не могут быть изменены после инициализации или создания. Их использование делает состояние программы более предсказуемым и облегчает отладку.

    Атрибутом #[Immutable] можно пометить весь класс или конкретные свойства, чтобы показать, что они не могут быть изменены.

    PhpStorm будет проверять использование таких объектов и свойств и подсвечивать попытки изменения.



    Изменение свойства по умолчанию разрешено в конструкторе, но можно также разрешить и в методах private/protected. Это делается с помощью констант CONSTRUCTOR_WRITE_SCOPE, PRIVATE_WRITE_SCOPE, PROTECTED_WRITE_SCOPE, передаваемых в конструктор #[Immutable].




    #[Pure]


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



    Если функция помечена как чистая, но в ее теле есть попытка изменить что-то за пределами из внешнего скоупа, то PhpStorm подсветит небезопасный код.



    Все стандартные чистые функции PHP уже помечены этим атрибутом в PhpStorm.


    #[ExpectedValues]


    С помощью этого атрибута можно указать, какие значения функция принимает в качестве параметров, а какие может возвращать.

    Это практически то же самое, что делает expectedArguments() в .phpstorm.meta.php. Разница лишь в том, что мета-версия, скорее, вспомогательная, а атрибут жестко указывает, что других возможных значений нет.

    Например, рассмотрим функцию count:
    count ( array|Countable $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int

    Еe второй аргумент — целое число, но на самом деле это не произвольное целое число, а одна из констант COUNT_NORMAL или COUNT_RECURSIVE.

    Вот как атрибут #[ExpectedValues] улучшит ситуацию:



    То есть появилось автодополнение, а если передано что-то другое, то подсвечивается ошибка.

    Как указать возможные значения или битовые маски
    Ожидаемые значения передаются в конструктор атрибута и могут быть одним из следующих:
    • Числа: #[ExpectedValues(values: [1,2,3])]
    • Строковые литералы: #[ExpectedValues(values: [‘red’, ‘black’, ‘green’])]
    • Константы: #[ExpectedValues(values: [COUNT_NORMAL, COUNT_RECURSIVE])]
    • Константы класса: #[ExpectedValues(values: [Code::OK, Code::ERROR])]


    И есть несколько способов указать ожидаемые аргументы:
    • #[ExpectedValues(values: [1,2,3])] означает, что ожидается только одно из значений.
    • #[ExpectedValues(flags: [1, 2, 3])] означает, что ожидается битовая маска заданных значений, например 1 | 3.
    • #[ExpectedValues(valuesFromClass: MyClass::class)] означает, что ожидается любая из констант класса `MyClass`.
    • #[ExpectedValues(flagsFromClass: ExpectedValues::class)] означает, что ожидается битовая маска констант из класса `MyClass`.



    Еще один пример #[ExpectedValues]


    Возьмем хелпер response() из Laravel. В качестве второго параметра он принимает статус код HTTP.

    Есть две проблемы
    • Нет автодополнения с возможными кодами
    • Нет проверки правильности значения в редакторе




    Давайте исправим это, добавив атрибут #[ExpectedValues(valuesFromClass: Response::class)]




    #[NoReturn]


    Некоторые функции могут приводить к остановке выполнения скрипта. Если отметить такие функции как точки выхода атрибутом #[NoReturn], то улучшится анализ потока управления.




    #[Language]


    Этот атрибут можно добавить к строковым параметрам, в которых ожидается текст на каком-либо языке, например RegExp, SQL, DQL и так далее.

    Для аргументов появится подсветка и дополнительные возможности.






    Вернемся к новым возможностям PHP 8.

    Объявление свойств в конструкторе


    Обычные свойства можно преобразовать в promoted или обратно с помощью квик-фикса Convert to promoted property.



    PhpStorm гарантирует, что свойства используются только способом, разрешенным в PHP 8:
    • Можно декларировать свойства только в конструкторе.
    • Нельзя объявлять в абстрактном конструкторе.
    • Нельзя объявлять свойство variadic таким образом.
    • Свойство не может иметь тип 'Callable'.
    • Не допускается переопределение свойства.





    Если свойство объявлено новым способом, но в теле конструктора осталась инициализация, то PhpStorm предложит ее удалить.



    Выражение match


    Новое выражение похоже на switch, но использует строгое сравнение и может быть присвоено переменной или возвращено.

    PhpStorm определяет, может ли блок switch быть переделан в match, и сделает это автоматически с помощью квик-фикса по нажатию Alt+Enter:



    Может быть трудно увидеть неправильное использование нового выражения, поэтому PhpStorm подсветит все ошибки.




    Будут обнаружены дублирующиеся значения в условиях:



    Выражение match с одной веткой и веткой по умолчанию может быть безопасно заменено на тернарное выражение.



    А если осталась только ветка по умолчанию, то соответствие match вообще не понадобится.



    Наконец, если в разных ветвях одинаковые тела, они могут быть объединены.



    Оператор nullsafe


    Вместо кучи условий с проверкой на null теперь можно использовать цепочку вызовов с новыми оператором ?->.

    PhpStorm проверит правильность использования оператора:



    Висячая запятая


    Теперь допустимо добавлять запятую после последнего аргумента при вызове функций и в списке замыканий use.



    Non-capturing catches


    В PHP 8 можно ловить исключение в catch-блоке без переменной.



    Выражение throw


    Бросать исключения теперь можно в стрелочных функциях и в коротких операторах ??, а также в тернарном ? :.



    Можно использовать сокращение thr и нажать tab — это live template.



    Константа ::class на объектах


    Раньше, чтобы получить FQN объекта, нужно было использовать функцию get_class(). В PHP 8 вызов get_class($object) можно смело заменить на $object::class.

    Собственно, по нажатию Alt+Enter такую замену и можно сделать. Неправильное использование константы ::class PhpStorm подсветит.



    Новые функции для строк: str_contains(), str_starts_with(), str_ends_with()


    How do I check if a string contains a specific word? — самый просматриваемый вопрос по PHP на Stack Overflow. В PHP 8 есть четкий ответ на этот вопрос: использовать функцию str_contains().

    PhpStorm 2020.3 находит вызовы strpos(), которые можно заменить на str_contains():



    Есть также новые str_starts_with() и str_ends_with() для определения того, начинается или заканчивается ли строка определенной подстрокой. PhpStorm подсвечивает, где вызовы substr() можно заменить новыми альтернативами:



    Reclassified engine warnings


    В PHP 8 для многих ошибок был пересмотрен тип бросаемого предупреждения. А именно, вместо Notice во многих случаях будет Exception или Type Error.

    В PhpStorm в связи с этим некоторые инспекции имеют два разных уровня severity: для PHP 8 и для более старых версий.



    Это все из наиболее заметного по PHP 8. Есть еще целая куча изменений помельче, которые будут видны при обновлении на PHP 8.


    Поддержка Psalm и PHPStan


    Оба статических анализатора можно использовать в PhpStorm 2020.3 для подсветки проблем непосредственно в редакторе.



    Если PHPStan или Psalm добавлены как зависимости в composer.json, то рядом с ними будет значок гаечного ключа, открывающий настройки инструмента.



    Оттуда можно перейти к настройкам инспекции и включить подсветку в редакторе. Это делается выбором соответствующей инспекции в списке PHP | Quality tools в Settings/Preferences | Editor | Inspections.

    ️ Лучше включить только один из инструментов, а не оба одновременно.



    Тут же можно указать путь к конфигурационному файлу и настроить аргументы командной строки.

    ️ PHPStan может работать без конфигурационного файла, а для Psalm он требуется обязательно. Если в корневом каталоге есть psalm.xml или phpstan.neon, PhpStorm подтянет их автоматически.

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



    Аннотации


    Все псалмовские аннотации @psalm-* теперь корректно подсвечиваются в редакторе. Но вообще, теперь можно смело убирать префикс @psalm- из тегов, то есть @psalm-return -> @return и @psalm-param -> @param.



    Поддержка типов


    Добавили поддержку некоторых типов Psalm и на основе информации из тегов улучшили наш вывод типов. Это сделало более точными проверки, генерацию кода и автодополнение.

    Псевдотипы
    Поддерживаются псалмовские псевдотипы, такие как scalar, numeric и т. п.



    Константы в типах
    Поддерживаются объединения констант и указание через * в тегах param и var.



    Тайпхинты для массивов
    Описания массивов array<array-key, Type> тоже поддерживаются, в том числе вложенные.



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

    Пока поддерживается только самый примитивный случай, когда функция возвращает один из своих параметров.



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

    Xdebug 3


    Обновился популярный отладчик для PHP, теперь он значительно быстрее в работе и проще в настройке. Более подробно об Xdebug 3 читайте в документе Upgrade guide.

    Чтобы сконфигурировать Xdebug 3, теперь достаточно одной опции xdebug.mode (например так XDEBUG_MODE=debug).

    Также был изменен дефолтный порт Xdebug: вместо 9000 теперь 9003. Чтобы упростить миграцию, PhpStorm по умолчанию слушает оба порта. Настройки портов и другие опции для Xdebug находятся в Preferences/Settings | Languages & Frameworks | PHP | Debug.




    Улучшения отладчика


    Возможности по отладке в PhpStorm расширились двумя новыми фишками.

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



    Inline Watches
    В предыдущих версиях можно было добавить переменную или выражение в список watch и наблюдать, как меняется значение по шагам.

    В PhpStorm 2020.3 можно добавлять вотчи непосредственно в контексте, и они будут отображаться рядом с кодом.

    Нажмите Add as Inline Watch в попапе на хинте.


    Или нажмите Add Inline Watch в контекстном меню редактора.


    Или выделите переменную и в контекстном меню выберите Add Inline Watch.


    Подсветка и переименование переменных в Twig


    Выберите переменную или поместите на нее курсор, и все ее использования в шаблоне будут подсвечены. А чтобы переименовать все вхождения, нажмите Shift + F6.




    Совместная разработка – Code With Me


    В PhpStorm 2020.3 встроен плагин Code With Me — новый инструмент JetBrains для совместной разработки и парного программирования. С помощью него можно расшарить открытый проект с другими пользователями и работать над ним вместе в режиме реального времени. Подробнее про Code With Me в этих постах.




    HTTP-клиент


    Интеграция Guzzle с HTTP-клиентом в PhpStorm


    Guzzle — один самых популярных HTTP клиентов для PHP. Представьте, что где-то в коде есть HTTP-запрос и хочется его потестировать, не запуская сам код. Раньше пришлось бы копировать все параметры вручную.

    PhpStorm 2020.3 позволяет конвертировать простые запросы Guzzle в файлы .http. Если запрос поддерживается, то рядом с ним появится иконка. Нажав на нее, вы откроете новый scratch-файл с правильным URL, параметрами запроса, методами, заголовками, телом.



    Теперь из редактора запрос можно запустить и поиграться с ним, а затем сохранить его как http-файл в проекте.

    Больше об HTTP-клиенте в видеообзоре.

    Копировать HTTP-запрос в cURL


    Чтобы экспортировать HTTP-запрос в cURL-строку, нажмите Alt+Enter на запросе в редакторе и выберите Convert to cURL and copy to clipboard. Теперь его можно вставить в терминал, документацию или любой инструмент тестирования API.




    Редактор


    Улучшения для Markdown


    Для описания диаграмм и графиков можно использовать синтаксис Mermaid.js в markdown-файлах. PhpStorm теперь умеет рендерить превью для них прямо в редакторе. Включается в Preferences/Settings | Languages & Frameworks | Markdown.



    Еще теперь можно переформатировать содержимое файлов .md в соответствии с популярными стилями. Делается нажатием ⌘⌥L / Ctrl+Alt+L.

    Настраивается в Preferences/Settings | Editor | Code Style | Markdown.



    И наконец, если нажать кнопку Auto-Scroll Preview в правом верхнем углу редактора, то прокрутка превью и текста будет синхронизирована.

    Улучшена проверка орфографии и грамматики


    Опечатки и грамматические проблемы теперь можно исправлять намного быстрее:
    • Во-первых, во всплывающем окне появится объяснение ошибки.
    • А если нажать Alt+Enter на подсвеченном тексте, то варианты замены будут предложены наверху, а не спрятаны в подпункт, как раньше.




    Сплит редактора перетаскиванием


    Чтобы открыть несколько файлов бок о бок, просто перетащите вкладку в нужный угол экрана.



    Есть еще один способ открыть файл в сплит-режиме — Shift+Enter.
    Комбинацию можно нажать на выбранном файле в Project view или в результатах поиска по файлам.



    Вкладка предпросмотра


    Если нужно быстро просмотреть файлы, то теперь не обязательно открывать каждый в отдельной вкладке. Можно использовать новую вкладку Preview tab.

    Чтобы включить ее, нажмите на шестеренку в Project view и выберите Enable Preview Tab и Open Files with Single Click.



    Еще можно просматривать файлы нажатием пробела в Project view, не открывая их.




    IDE


    Улучшения для Search Everywhere



    Результаты сгруппированы по релевантности:


    Можно делать простые математические операции и не открывать гугл калькулятор:


    Можно искать по истории Git:


    Автоматическое переключение на светлую или темную тему


    В Preferences/Settings | Appearance & Behavior | Appearance | Theme выберите Sync with OS.



    Новый набор горячих клавиш для macOS


    Альтернативная раскладка горячих клавиш для macOS минимизирует использование функциональных клавиш, чтобы не надо было растягивать руку на всю клавиатуру при совершении основных действий. Например, вместо Fn+Shift+F6 для Rename рефакторинга используется ⌥+⌘+R.



    Слова вместо иконок для горячих клавиш macOS


    Можно сделать так, чтобы вместо иконок типа ⌥ ⌘ отображались слова Alt, Cmd и т. п.

    Включается в секции Registry опцией ide.macos.disable.native.shortcut.symbols. Чтобы получить доступ к реестру, используйте Find Action Cmd+Shift+A и напишите там Registry.

    Установить PhpStorm как приложение по умолчанию для разных файлов


    В Preferences | Settings / Editor / File Types нажать Associate file types with PhpStorm…. В диалоговом окне выберите расширения для файлов, и они будут открываться в PhpStorm.

    На macOS требуется перезагрузка.



    Шаблоны могут генерировать несколько файлов


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

    В Preferences / Settings | Editor | File and Code Templates нажать на , чтобы создать новый шаблон, а затем нажать на иконку Create Child Template File .

    В поле File name можно использовать переменные типа ${NAME}.



    А вот пример того, как сгенерировать контроллер и шаблон в Symfony:




    Поддержка Git stage


    Включить можно чекбоксом Enable staging area в Preferences/Settings | Version Control | Git.

    В окне инструментов Commit (Cmd+0 / Alt+0) появятся две группы файлов: staged и unstaged.

    Чтобы добавить файл в staged, нажмите на + напротив него.



    Или можно выбрать конкретные строки и добавить их иконкой в редакторе. В этом случае можно закоммитить часть изменений из файла, а над остальными продолжить работу.




    Инструменты БД


    PhpStorm «из коробки» включает в себя возможности DataGrip, которые охвачены в обзоре релиза DataGrip 2020.3 от наших коллег.

    SQL для MongoDB


    Теперь можно использовать SQL-запросы к MongoDB. PhpStorm 2020.3 поддерживает SELECT-запросы с JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSETи всеми функциями MongoDB кроме map, reduce, filter и let. Подробнее в блог-посте.



    Веб


    Как всегда, в PhpStorm входят все обновления из WebStorm 2020.3. Наиболее примечательной является поддержка Tailwind CSS.

    Tailwind CSS


    PhpStorm дополняет классы Tailwind в HTML-файлах и после директивы @apply. А также предоставит автодополнение псевдо-классов.

    tailwind-completion-after-apply

    Если навести указатель на класс в HTML и CSS файлах, то отобразится предпросмотр полученного CSS. Предпросмотр также доступен при автодополнении кода, во всплывающем окне документации F1 / Ctrl+Q.

    tailwind-completion-for-pseudo-class-variants

    PhpStorm поддерживает настройки из tailwind.config.js. Например, если определить тему с новыми цветами, то во всплывающем окне автодополнения будут созданные классы с именем кастомного цвета.

    tailwind-customization-support




    Скачать PhpStorm 2020.3 можно на странице “What’s new”.

    А вот видеоролик (на английском) с демонстрацией главных фич релиза:


    На этом всё на этот раз. Будем рады вопросам, пожеланиям, баг-репортам и просто мыслям в комментариях.
    JetBrains
    Делаем эффективные инструменты для разработчиков

    Comments 134

      +6
      Отличный релиз, спасибо за хороший продукт!
        0
        Спасибо!

        Очень давно народ просит простенькую фичу в «External tools» — возможность отдавать не имя файла и весь файл целиком внешнему скрипту, а только выделенный текст, и его же замену тем, что вернул шелл. Очень бы хотелось, я уже года 3 как жду.
          0
          Может быть кто плагин для этих задач знает и подскажет?

          Я так и не нашел — задача простая — передать выделенный текст внешней программе, а ее stdout вернуть и заменить им выделенный текст.
            0
            Фича довольно специфическая, мне кажется, на данный момент никто в платформе на неё даже не смотрит. youtrack.jetbrains.com/issue/IDEA-76371
            Можно было бы прикрутить к Live Templates groovy-скрипт, который делал бы это, но даже Live Templates не позволяют заменять выделенный текст, увы.
            youtrack.jetbrains.com/issue/IDEABKL-6913
              +2
              Да вроде обычная фича — напрмер сделать определенный специфический рэгсп над выделением или что-то еще. Например — транслитирировать его. И на самом деле она прямо просится в external tools, где ей самое место — тем более одна галочка всего.

              Видимо, придется пилить плагин самому.
                +2

                Возможности groovy-скриптов в live template ограничены, но что-то с заменой можно делать.


                Вот пример, как я использую:


                Код live template:


                <template name="slia" value="&lt;li&gt;&lt;a href=&quot;$LINK$&quot;&gt;$TEXT$&lt;/a&gt; — $END$&lt;/li&gt;" description="" toReformat="false" toShortenFQNames="true">
                  <variable name="LINK" expression="groovyScript(&quot;return _1.split('\t')[0]&quot;, SELECTION)" defaultValue="" alwaysStopAt="false" />
                  <variable name="TEXT" expression="groovyScript(&quot;return _1.split('\t')[1]&quot;, SELECTION)" defaultValue="" alwaysStopAt="false" />
                  <context>
                    <option name="HTML" value="true" />
                  </context>
                </template>
                  +3
                  Спасибо комменту от pronskiy, я действительно ошибся со вторым тезисом — замена выделенного текста возможна.
                  Это значит, что вы можете при помощи Groovy-скрипта передавать выделенный текст чему угодно, и заменять его на вывод этого чего угодно.
                  Вот пример с PHP-скриптом: recordit.co/2GMARRlPax

                  Сам скрипт:
                  def arg = _1;def command = \"php /path/to/your/script.php $arg\"; return command.execute().text;

                  _1 это номер параметра, который вы передаёте функции groovyScript(), в данном случае это SELECTION.
              +2
              #[ExpectedValues] и #[ArrayShape] очень нужные штуки, радует что есть их поддержка в IDE и для старых версий php.

              В своё время так и не нашел аналог в phpdoc. Плохо искал или может со временем добавили? Если кто-то знает, напишите пожалуйста ответ, спасибо!
                0
                В своё время так и не нашел аналог в phpdoc. Плохо искал или может со временем добавили? Если кто-то знает, напишите пожалуйста ответ, спасибо!
                В стандартах phpdoc нет, а так — давно всё есть в psalm, и со статической проверкой корректности передаваемых аргументов.
                JB с кастомными атрибутами в этом плане немного изобрели велосипед, имхо.
                  0
                  Спасибо за наводку!
                    +1
                    Велосипед — это всё же psalm, а атрибуты — стандарт.
                      +1
                      Велосипед — это всё же psalm, а атрибуты — стандарт.
                      Во первых, аттрибуты ArrayShape, Immutable и пр.(кроме Deprecated), это никакой не стандарт, а выдумка и разработка JB.
                      Во вторых, psalm появился раньше и вовсю используется многими разработчиками.
                      В третьих, функционал psalm значительно шире чем предлагаемый упоминаемыми аттрибутами, так что называть его велосипедом тем более не корректно.
                        0
                        Стандарт — атрибуты.

                        Не вижу как широта возможностей защищает от звания велосипеда.
                          +1

                          От стандарта там только синтаксис атрибутов.

                            –1
                            В псалме и этой малости нет.
                              +3

                              А если psalm начнёт использовать атрибуты, а не phpdoc, он перестанет быть велосипедом? А так-то phpdoc тоже стандарт

                                0
                                Пожалуй я погорячился с наездом на psalm, но что JB изобрели велосипед, не согласен вообще.
                                  0

                                  Я тоже не согласен )) В PHP нет стандартного (пускай даже стандарта де-факто) способа описывать шейп массивов, а потому ни способ psalm, ни способ jetbrains велосипедами не являются. Есть плюсы и минусы у обоих, а возможно в итоге они сольются в один

                                    0

                                    Лично я надеюсь, что кто-нибудь когда-нибудь запилит аналог *.d.ts/*.h под PHP, а то нынче php код, особенно под OS выглядит как фарш из .phpstorm.meta.php + атрибутов шторма + атрибутов псалма + аннотаций псалма + аннотаций phpdoc + аннотаций phpstan.


                                    И самого кода меньше, нежели обёрток над ним для типизации, которые делают одно и тоже разными способами.

                                    +2

                                    Если кому интересно — затрагиваются также и атрибуты от JetBrains: https://psalm.dev/articles/php-8-attributes

                    0
                    Не пойму, в чем фишка «SQL for MongoDB»? Это для тех, кто не осилил Query Language в Монге?
                    В приложении такой синтаксис не засунешь либо запутаешь им остальных.
                      0

                      Для тех кому монга раз в месяц нужна

                      0

                      После обновления начал отжирать в 2 раза больше оперативы(4 об против 2гб), так же нагрузка проца выросла и Алерты от Mac OS всегда светлые, даже если тема темная

                        0

                        Можете уменьшить кол-во выделяемой памяти через Help > Edit Custom VM Options, поменяв -Xmx=текущее_значение на, например, -Xmx=1500m. А как вы измерили увеличение на нагрузку проца? Можете скинуть крин алертов?

                          0
                          imgur.com/a/58g3ctG вот скрин алерта

                          А как вы измерили увеличение на нагрузку проца?

                          Просто все лагало, а до этого не лагало, открыл монитор и там нагрузка на проц часто прыгала до максимума из-за процесса шторма
                            0

                            Спасибо за скрин! К счастью, это уже зарепорчено: https://youtrack.jetbrains.com/issue/IDEA-255620. Надеюсь починят в ближайшем будущем.
                            Насчет нагрузки на процессор: по началу можно наблюдать такое из-за индексации на проектах, впервые открытых в версии 2020.3. В дальнейшем часто такое происходить не должно. Если же будет продолжаться — проверьте какой процесс(ы) доминирует в Help > Diagnostic Tools > Activity Monitor.

                        0

                        Спасибо за релиз. Планируется ли шаблон для Laravel (при создании нового проекта)? Для Symphony уже давно есть, а для лары нет.

                          +1

                          Нашей командой в данный момент не планируется. Можете написать авторам Laravel плагинов с соответствующей просьбой: https://github.com/laravel-idea/plugin/issues & https://github.com/Haehnchen/idea-php-laravel-plugin/issues/218

                            0
                            Я планирую для plugins.jetbrains.com/plugin/13441-laravel-idea на следующий год. Есть пожелания?
                              +2

                              На самом деле, от него много не требуется. Выбор версии, поддержка Lumen. Как доп.возможности — галочки для авторизации и аутентификации, выбор Livewire/Inertia.js/Стандрат. Выбор версии php. Можно еще активацию фасадов для Lumen.


                              Я почти всегда проект создаю с помощью консоли, в шторме потом просто папку открываю, но как раз потому что нет всех популярных фреймворков/CMS что бы стартануть удобно проект.

                            +1
                            Новая версия по ощущениям стала работать шустрее.

                            Может кто-то подскажет, как сделать чтоб типы в данном случае выводились сверху?
                            image
                              0
                              что значит сверху?
                                +1
                                В данном случае я хочу ввести null, но автозаполнение предлагает варианты из библиотек (даже если полностью ввести null). Хочется чтоб типы при автодополнении всегда были сверху.
                                  0

                                  К сожалению, это нельзя настроить. Можете попробовать включить "Sort completion suggestions based on machine learning" в File | Settings | Editor | General | Code Completion — со временем должно помочь.

                                    0
                                    Благодарю!
                                    0

                                    В плагинах есть "machine learning code completion", возможно поможет

                                      0
                                      Да, спасибо! Выше уже написали.
                                0

                                Может есть какой то параметр чтобы использовать блочное выделение как в Notepad++/QtCreator — ctrl+shift +стрелочки? переключаться между режимами не удобно, а использовать его начал часто :)

                                  0

                                  Есть такое: Alt-Alt на macOS и Ctrl-Ctrl на Windows/Linux и потом стрелками вверх-вниз.

                                  +1

                                  Спасибо за релиз

                                    +1
                                    Раз уж в комментах традиционно начинается вопросник-решальник, то спрошу и я.

                                    Часто, во время отладки, открывается значительное количество вкладок файлов вне проекта — исходников фреймворка, пакетов из vendor, etc. PHPStorm подсвечивает эти вкладки:
                                    image
                                    но не даёт возможности быстро их закрыть скопом. Я не нашёл ни встроенной возможности, и плагина — а хотелось бы.

                                    Такая же хотелка есть про вкладки таблиц БД — закрывать их одним махом было бы очень удобно.
                                      +1

                                      Такой возможности действительно нет. На нашем трэкере есть ссылка на соответствующий реквест, можете проголосовать: https://youtrack.jetbrains.com/issue/IDEA-93903

                                        0

                                        Правой кнопкой мыши на вкладку "Close All Tabs"


                                        P.S> Сорри, видимо не понял вопроса

                                        0

                                        А можно вопрос про "Git stage"? Точнее, как бы сделать его таким же удобным для "частичных" коммитов, как и старый вариант. Там были галочки и всегда можно было перед коммитом еще раз пробежаться по всем файлам и уточнить, какие правки включать, а какие оставить на потом, а тут revert или stage и никаких следов. Только undo если сразу.


                                        Ну и когда включаешь сравнение unstaged то слева в заголовке будет таки "staged"???, справа "local", и если хочется какие-то правки из local частично закоммитить, то нужно их "двигать" справо налево, т.е. в обратном направлении, если сравнивать с "staged" файлами.


                                        P.S. Я на самом деле про последний PyCharm, но я думаю, это общая функциональность.

                                          0

                                          Так ведь и сейчас можно пробежаться по файлам. Если 2 раза щелкнуть по файлу из списка для коммита — откроется вкладка с diff'ом — в ней можно включить/исключить необходимые изменения файла, также через чекбоксы.

                                            0

                                            Да нет же. На ">>" нажимаешь и нет следов от изменения. Вы, кроме немодального окна для коммитов еще "enable staging area" в настройках включили?

                                              0

                                              Пообщался с VCS team: вы можете перед коммитом нажимать правой кнопкой на Unstaged -> Add interactively и там уже будет удобно выбирать ченджи.

                                                0

                                                Спасибо за совет. Попробовал, но на 100% не удовлетворился.


                                                Например, если в средней колонке кликнуть на revert, то опять с концами, обратно не вернуться, следов не остается. Более того, отменяется изменение в локальной копии. По крайней мере, непривычно.


                                                Ну и опять — это все в модальном окне, хотя кнопочки, чтобы пробежаться по списку файлов, или выбрать другой произвольный, есть. Сам вариант с тремя колонками неплох (единственно, непонятно, почему в самой левой колонке нумерация строк справа?), вот если бы такой показывался справа, вместо diff'ов? Да еще, в unified режиме по выбору пользователя, если узко.


                                                P.S. И все равно непонятно, лучше ли он старого варианта?

                                          +2

                                          Здравствуйте. И это снова я! И опять про то же самое что и в прошлый раз =(
                                          Релиз хороший, наверно лучший за этот год. Но, увы, как обычно забили на работу над ошибками.


                                          1. В Run вкладке уже минимум год не поддерживается кириллица.
                                            Вот расшифруйте мне это:


                                            > Company: #6 - Тестовая УК
                                            > Building: #56 Дом для тестирования
                                            > Building: #843 Дом для тестирования интеграции
                                            > Building: #850 Дом для тестирования интеграции (Ховард), дом 0
                                            > Building: #854 �нтеграция с Кварталом

                                            Таска — IDEA-240787 и WI-57430 (создал новую т.к. старая не совсем про кодировку и мой комментарий к ней проигнорирован)


                                          2. Все еще нет истории запусков Run anything — WI-48014. Так сложно делать вкладку на каждый запуск из окошка Run anything?


                                          3. Поддержка Blade шаблонов до сих пор отвратительна — WI-46437. С самого начала были проблемы с видимостью переменных. Прошли годы, а воз и ныне там.


                                            0

                                            Спасибо за ссылки, форвардну это соответствующим разработчикам. Неприятно, конечно, что перечисленные проблемы так и не решены, но в большинстве из них практически нет голосов/комменатриев. Это объясняет почему они не в приоритете. В WI-46437 (Blade: false positive: Unused local variable within foreach in php) надеюсь скоро появятся обновления.

                                              0

                                              По кодировке в Run anything — сколько бы там мало голосов ни было, а косяк весьма значительный. Вероятно для большинства это не критично и они не жалуются и не голосуют. Но это не повод забивать на проблему, которой небыло в удобном и отлично работающем command line, выпиленном в пользу Run anything. Я еще долго буду припоминать Вам это решение =) Как минимум пока Run anything не доведете до ума.

                                                0

                                                Я б сказал, что не некритично, а просто не встречалось большинство c кейсами когда нужна поддержка русского в запускаемых из IDE CLI-командах.

                                                  0

                                                  Либо они злобные пираты и не палятся в багтрекере =)
                                                  Я как бы тоже не использую кириллицу в консольных командах, но в БД у меня всё на русском и часто нужно знать с каким объектом идет работа (все ID не запомнишь) — пока отлаживаю приходится абракадабру видеть что никак не ускоряет процесс разработки. Порой из терминала запускаю. В общем этот run anything капитально так недоделан и, судя по всему, в JetBrains на него забили. Как в том мультике — "и так сойдет!" =(

                                                    0
                                                    Очень часто это встречается, если ты пользователь русской Windows. Просто выглядит это так, как будто неправильно что-то настроено, и в итоге не идешь в багтрекер.
                                                +2
                                                С кириллицей попробуйте следующее
                                                Help > Edit Custom VM Options…
                                                Добавьте строчку
                                                -Dfile.encoding=UTF-8
                                                Перезагрузите шторм.
                                                  +1

                                                  Спасибо за подсказку! Помогло =)
                                                  Я правильно понимаю что этой настройки нет в File->Settings… ?

                                                    0
                                                    Я правильно понимаю что этой настройки нет в File->Settings… ?

                                                    Там только Settings | Editor | File Encodings из подходящего. Но оно никак не помогает в этом вопросе. У меня и так там все в UTF-8 выставлено. Если что — Windows 10, все English UK.


                                                    Я сделал тест (простой PHP скрипт который UTF-8 и просто пишет пару слов на кириллице):


                                                    • если использовать Run/Debug Configuration то выводит как надо
                                                    • если же тоже самое но через Run Anything то показывает крякозябры
                                                    • добавил -Dfile.encoding=UTF-8 и теперь и там норм.
                                                      0

                                                      Проверил у себя — работает и без этого конфига. Если что — Ubuntu 20.04.

                                                        0

                                                        Возможно эти параметры не активны у вас: https://youtrack.jetbrains.com/issue/IDEA-240787#focus=Comments-27-4072493.0-0


                                                        Workaround
                                                        disable run.anything.use.pty and run.processes.with.pty (shift,shift -> Registry -> run.anything.use.pty and run.processes.with.pty turn off)

                                                        У меня, например, run.processes.with.pty включен (и я не помню чтобы его включал, возможно какая то опция делает… или же я, но только давно).


                                                        В любом случае: для меня это не критично ибо и так весь вывод только на английском. Кириллица была только для теста.

                                                          0
                                                          Да в ентих ваших Убунтах UTF-8 из всех щелей. =)
                                                          ИМХО проблема с кодировкой в линуксах может вынырнуть из-за кого-нибудь легаси в Windows-1251.
                                                          Под окошками UTF-8 старательно конвертируется в дефолную кодировку.
                                                          0

                                                          Понятно. Опять намудрили.
                                                          Дополню баг в трекере.

                                                          0
                                                          Знаете что… Если у вас последняя версия IDE, посмотрите кодировку в
                                                          File -> Settings -> Editor -> General -> Console
                                                          Параметр Default Encoding.
                                                          Я поставил Default Encoding UTF-8 и убрал ключ -Dfile.encoding. Заработало как надо.

                                                          Либо я не замечал этого параметра в настройках (в 2019.4 параметра Default Encoding нет), либо кодировка была другая, либо пофиксили.
                                                            0

                                                            Эту настройку я пробовал — она у меня уже давно стоит UTF-8 и после обновления не поменялась. Как было криво так и осталось, к сожалению.

                                                      0
                                                      спасибо. Отличное обновление, шрифты почему-то только слетели, но вроде все вернул как было.

                                                      никто не знает
                                                      1. как по-умолчанию свернуть svg? в настройках не нашел
                                                      2. как сделать горячие клавиши на открытие некоторых директорий? т.е. если я работаю только с контроллерами и во вьюхами, чтоб я мог быстро папки менять. На той же Ларе очень глубоко лежат эти файлы =(
                                                        Так бы сделал CMD+ALT+1 — файл роутов; CMD+ALT+2 — папка с контроллерам; CMD+ALT+3 — папка со вьюхами; CMD+ALT+4 — папка с моделями; CMD+ALT+5 — папка с миграцями; и т.д.
                                                        +2
                                                        как сделать горячие клавиши на открытие некоторых директорий?

                                                        Закладки / Bookmarks — https://www.jetbrains.com/help/phpstorm/navigating-through-the-source-code.html#use_bookmarks. Они работают на файлах/папках тоже.

                                                          0
                                                          как по-умолчанию свернуть svg?

                                                          Можете поподробнее? В окне редактора как-то неправильно отображается?


                                                          Про горячие клавиши ответили ниже — отличное альтернативное решение, как мне кажется.

                                                            +1
                                                            Можете поподробнее? В окне редактора как-то неправильно отображается?

                                                            Показывает все верно, я про «Code Folding».
                                                            В настройках (и вроде по-умолчанию) свернуты импорты, доки и т.д.
                                                            image

                                                            Через настройки по-умолчанию можно много что свернуть, а вот простые SVG в html/blade нельзя, хотя они сильно дают нагрузку на читабельность и так мало информации:
                                                            image

                                                            Ну или я мало разбираюсь в SVG и для меня там что-то полезное есть?)
                                                            Можно конечно их в отдельные файлы скидывать, но такое мало кто делает. Некоторые проекты поддерживать сложно…

                                                            Еще можно их в одну строку делать вручную, но «auto format code» (CMD + ALT + L), делает опять в несколько строк
                                                          0
                                                          Блин так хочется обновиться, но так больно после каждого обновления опять править форматирование SQL и побеждать сотни ошибок парсинга 8(
                                                            0

                                                            Обновление должно автоматически импортировать настройки стиля кода и настройки проекта. Который раз обновляюсь — все мои настройки БД и стиля мигрируют корректно.
                                                            Попробуйте! Если что-то пойдет не гладко — мы всегда будем рады помочь через Help | Contact Support.

                                                              0
                                                              Настройки то переезжают, но вот правила распознавания sql далеко не всегда.
                                                              А правила форматирования сложных sql просто по разному работают от релиза к релизу.
                                                              Рефактор при переименовании таблиц вообще стал отключать всегда после того как эта штука порезала почти все запросы под ноль.

                                                              Про сапорт помню, спасибо, к сожалению граффик сейчас не позволяет писать пачками объемные тикеты.
                                                                0

                                                                Спасибо за информацию! Как найдете время — с радостью посмотрим на проблему, в наших интересах сделать миграцию и работу с БД как можно более безболезненной.

                                                                  +1
                                                                  Спасибо за информацию

                                                                  Самые частые проблемы касаются форматирования join/on, я по моему три тикета писал по этой теме.
                                                                  А вот при рефакторе запросы очень часто возникают при наличии CTE или конкатенаций.

                                                                  Как найдете время

                                                                  Постараюсь) Вам на английском лучше или на русском? Мне в принципе все равно, но спросить всегда стеснялся)
                                                                    0

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

                                                                      +2

                                                                      Лайфхак: если с английским туговато то напишите на "обычном русском" и сделайте перевод в Google Translate. Потом в сам тикет перевод вставьте первым/перед оригиналом и разделите их. В этом случае даже если перевод будет корявый то оригинал поможет.

                                                                    0
                                                                    Видите какой животрепещущий вопрос оказался)
                                                              +2
                                                              Недавно пришла в голову мысль. Большинство пользователей вряд ли задействуют и 10% от возможностей ide. Интересно, можно ли достичь повышения скорости работы и снижения потребления ресурсов, если оставшиеся 90% как-то автоматически отключать?
                                                                +1

                                                                pronskiy А нуллабельные типы в #[ArrayShape] можно задавать?


                                                                Такое прокатит?


                                                                #[ArrayShape(['key1' => '?string', 'key2' => ['inner_key' => '?string']]

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


                                                                #[ArrayShapeAssoc(['description of key meaning' => SomeClass::class)]

                                                                PS


                                                                То есть, если записать #[ArrayShape] в одну строку в проекте на PHP 7, то интерпретатор PHP воспримет эту строку как комментарий.

                                                                А шторм подсветит как ошибку :(

                                                                  0
                                                                  Есть какой-то тикет / плагин / планы, для поддержки возвращаемых типов из корутин amphp?

                                                                  \Amp\Loop::run(function (){
                                                                      /** @psalm-return \Amp\Promise<stdClass> */
                                                                      $coroutine = function (){
                                                                          return \Amp\call(function (){
                                                                              return new stdClass();
                                                                          });
                                                                      };
                                                                      $value = yield $coroutine();
                                                                      // Хотелось бы, чтобы phpstorm понимал тип данных
                                                                      // без подсказок, т.к. он явно в psalm-return указан
                                                                      assert($value instanceof stdClass);
                                                                  });


                                                                  Понимаю что это работает через Generator::send() внутри фреймворка, но эксперименты с ним так же не позволили мне подсказать тип данных полученных yield'ом из send'а. Минимальный пример ниже — phpstorm никак не реагирует на переданный тип данных.

                                                                  function gen(){
                                                                      $value = yield new stdClass;
                                                                      // интересует не писать подсказок вот здесь
                                                                      assert($value instanceof stdClass);
                                                                  }
                                                                  $gen = gen();
                                                                  // впрочем тут без подсказки тип тоже не определён
                                                                  assert($gen->current() instanceof stdClass);
                                                                  $gen->send(new stdClass());
                                                                    0

                                                                    Это более сложный сценарий дженериков. Пока не поддерживается, поэтому будем благодарны за тикет в трекере.

                                                                      0
                                                                      Я нашёл у вас тикет про дженерики WI-47158. Он подойдёт под amphp или написать отдельный тикет?
                                                                        0

                                                                        Лучше отдельный создать.

                                                                          +1
                                                                          WI-57590 и на всякий случай WI-57595. Первый должно быть не трудно сделать, надеюсь получится в ближайшем будущем =) Без этого писать асинхронный код очень грустно.
                                                                    –7
                                                                    1. Это бесплатный редактор?
                                                                    2. Есть встроенная поддержка sftp?
                                                                    3. На чем написан? Комодо на Java дико вешает комп. И ещё какой-то тоже пробовал уже не помню, тоже на Java и тоже тормоза были. 16гб им мало.
                                                                      0
                                                                      1. Вообще, нет, но есть куча скидочных/бесплатных планов. Также можно пользоваться бесплатно во время месячного триала (который можно продлить через запрос в команду Sales), либо использовать бесплатные EAP билды.
                                                                      2. Есть
                                                                      3. Java, но мы требовательны. Например у меня сейчас открыт WP сайт и он занимает около 250 метров в памяти:
                                                                        –13
                                                                        Останусь тогда на Notepad++. Старый, но зато летает. И денег платить не надо.

                                                                          0
                                                                          Вы не зарабатываете разработкой на PHP? Вам проще экономить на списках чем делать свою работу более эффективной и экономить время? Или у вас upwork и не очень высокий выхлоп от него?
                                                                            0
                                                                            Не зарабатываю.
                                                                              0
                                                                              Попробуйте использовать бесплатные EAP-билды. Они весьма стабильны.
                                                                                0
                                                                                Попробую.
                                                                                  0
                                                                                    0

                                                                                    Релизнулась новая версия — её EAP недоступен, а нового пока нет — надо ловить анонсы о выходе EAP

                                                                                      0

                                                                                      Поставить триал на 30 дней не сложно.

                                                                                        –1
                                                                                        Я поставил, и уже есть непонятные фишки. Непонятно зачем было нужно отменять сохранение файла по Ctrl+S — это стандарт был. Alt+Shift+Q непонятно зачем вместо Crtl+S.

                                                                                        Во вкладках файлов модифицированный файл не выделен — не видно сходу, что я не сохранил. Это вообще плохо. Нужно переключиться на файл и прочитать был он модифицирован или нет.

                                                                                          +2
                                                                                          Alt+Shift+Q непонятно зачем вместо Crtl+S

                                                                                          Ctrl+S все еще сохраняет (все) файлы. Alt+Shift+Q — у меня это на Upload Current Remote File (когда открыть файл напрямую через FTP а не локальный (aka Remote Edit)). Если об этом, то да, неудобно.


                                                                                          Во вкладках файлов модифицированный файл не выделен — не видно сходу, что я не сохранил.

                                                                                          Settings/Preferences | Editor | General | Editor Tabs | Mark modified (*)

                                                                                            –1
                                                                                            Все файлы как раз не надо. Это опасно. Можно сохранить то, что случайно модифицировал. Это я перенастроил.

                                                                                            А вот настройка * не срабатывает, если отключить иконку файла. Бага.

                                                                                            Закрыл редактор. Открыл — файлы скинуты. В Recent их нет. Видно туда то, что по SFTP открывал не попадает.

                                                                                            Ещё редактор у меня подвис на некоторое время. Такое с Komodo Edit случалось. Всё же Java есть Java.
                                                                                              +3
                                                                                              Все файлы как раз не надо. Это опасно. Можно сохранить то, что случайно модифицировал. Это я перенастроил.

                                                                                              Это сила привычки… ну и workflow. PhpStorm я использую еще с нулевой версии (0.6 или чего то такое) и первых месяца 2 было непривычно. Но потом привык и без проблем — даже чище работать ибо не делаешь 100500 разных изменений во множестве фалов одновременно, а если и делаешь то сохраняешься когда закончил. Если же что пошло не так то юзаю Local History.


                                                                                              Но да, в других продуктах работаю по другому (например SSMS или Delphi например).


                                                                                              А вот настройка * не срабатывает, если отключить иконку файла. Бага.

                                                                                              https://youtrack.jetbrains.com/issue/IDEA-246166 — раньше * рисовалась по другому (не поверх иконки).


                                                                                              Закрыл редактор. Открыл — файлы скинуты. В Recent их нет. Видно туда то, что по SFTP открывал не попадает.

                                                                                              Да, ибо это полностью remote файлы.


                                                                                              Ещё редактор у меня подвис на некоторое время. Такое с Komodo Edit случалось. Всё же Java есть Java.

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


                                                                                              Ну и https://habr.com/ru/company/JetBrains/blog/531828/#comment_22403640

                                                                                            0
                                                                                            Работа в умном блокноте отличается от работы в IDE. Потребуются так же изменения в workflow, что вызывает отторжение.

                                                                                            Очень грубо можно сравнить с вождением автомобиля, когда пересаживаешься с ручной коробки на автоматическую. У меня привычка искать педаль сцепления держалась около полугода (а желание переключать передачи самому не пропадает уже пять лет, как я на автомате езжу). Так же и с использованием IDE — автоматизация больше, чем в блокноте.

                                                                                            Важно понимать, что никто ничего не навязывает. Ваше право разрабатывать так, как вам удобнее. Использовать phpstorm — сейчас это негласный стандарт в профессиональной php-разработке (относительно недавно ещё стал популярен vscode, полностью бесплатный — советую его тоже попробовать).
                                                                                              0

                                                                                              Бывает, что навязывают, может не сильно, но на 1:1 могут сказать "ты слишком много времени тратишь своего и чужого со своим vim/vscode/блокнотом — у нас корплицензия на phpstorm и готовые настройки от кодстайла до списка продакшен серверов с тоннелями к ним — пользуйся"

                                                                                                0
                                                                                                А где-нибудь можно почитать про этот workflow? Всё же с автоматом сел и едешь, а у меня проблема, что я вообще ехать не могу местами. Как раз как если бы человек привыкший к автомату сел был на механику и мотор глох постоянно.

                                                                                                Пока есть интересные моменты вроде подсказок более информативных.

                                                                                                Но и огромное неудобство и непонимание как это всё побороть.

                                                                                                Я вот тупо пустой файл не могу создать. Спрашивает имя. Ругается, что в корень писать не может. Блин, но мне просто нужен пустой файл, мне его сохранять не нужно, мне нумерацию строк посмотреть.

                                                                                                  +1

                                                                                                  Ctrl+Alt+Shift+Insert (new scratch file) — не совсем то, что вам нужно, наверное, но максимально близко к просто запущенному блокноту.

                                                                                                    0
                                                                                                    Спасибо. Вроде то, что нужно. Просто пустая вкладка.
                                                                                                      0

                                                                                                      На самом деле там файл создаётся, но не прямо в папке проекта, а где-то в служебных самого шторма. Можно увидеть их при просмотре проекта (alt+1) в "папке" Scratches and Consoles

                                                                                                    +1
                                                                                                    Я вот тупо пустой файл не могу создать. Спрашивает имя.
                                                                                                    Блин, но мне просто нужен пустой файл, мне его сохранять не нужно, мне нумерацию строк посмотреть.

                                                                                                    Да, IDE работает с файлами (каждый редактор привязан к физическому файлу а не к виртуальному). Вы не можете создать "пустой editor tab". Юзайте scratch-файлы если нужно что-то временное: https://www.jetbrains.com/help/phpstorm/scratches.html


                                                                                                    Если с английским более-менее:
                                                                                                    https://www.jetbrains.com/phpstorm/documentation/ — смотрите видео
                                                                                                    https://www.jetbrains.com/help/phpstorm/workshop-materials.html
                                                                                                    https://laracasts.com/series/how-to-be-awesome-in-phpstorm

                                                                                                      0
                                                                                                      Спасибо. Посмотрю.
                                                                                0
                                                                                офтоп. Еще бы rider починили, а то что-то последнее время он сильно болеет.
                                                                                  0
                                                                                  WSL2 проброс будете делать в своих IDE? сколько нам ещё на vscode тусить?)
                                                                                    0
                                                                                    А расскажите пожалуйста подробнее, как это выглядит? Проброс, что даёт?
                                                                                      0

                                                                                      Например, запуск php-скриптов в линуксовом окружении.

                                                                                        0
                                                                                        Сейчас мы на phpstorm кодим либо в винде, либо через костыли от Jetbrains, либо через WSL2 + xserver (вывод рабочего стола в виндоус)
                                                                                        Это всё — дикая дичь и не смотря что я обожаю продукты JB — я сижу на vscode, потому что так продуктивнее и удобнее.
                                                                                        0
                                                                                        Тоже интересует.
                                                                                          0

                                                                                          В шторме уже около года есть поддержка WSL.

                                                                                            0
                                                                                            Она через wsl->win mounts, с этим работать нереально.
                                                                                          +1
                                                                                          DataGrip будет когда-нибудь поддерживать совсем NoSQL типа Redis или Elastic?
                                                                                            0

                                                                                            Смотрите комментарии в теме DataGrip: https://habr.com/ru/company/JetBrains/blog/529634/


                                                                                            VolCh А поддержка Redis планируется из коробки?
                                                                                            moscas Периодически обсуждаем и помним, но конкретных планов пока нет.
                                                                                            t0rr Вот тикет, на который можно подписаться и следить за DataGrip+Redis: https://youtrack.jetbrains.com/issue/DBE-283 (* ему уже 6 лет, если чо)
                                                                                            0
                                                                                            Я один столкнулся с проблемой создания patch'ей?
                                                                                            Раньше функционал создания патчей использовал patch (unix) команду, а теперь формат похож на patch'и из git'a.
                                                                                            Было:
                                                                                            Index: src/app.php
                                                                                            IDEA additional info:
                                                                                            Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
                                                                                            <+>UTF-8
                                                                                            ===================================================================
                                                                                            --- src/app.php	(revision ad0de...8c1b)
                                                                                            +++ src/app.php	(date 1607368535657)
                                                                                            @@ -79,6 +79,7 @@
                                                                                            ...
                                                                                            

                                                                                            Стало:
                                                                                            Index: src/app.php
                                                                                            IDEA additional info:
                                                                                            Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
                                                                                            <+>UTF-8
                                                                                            ===================================================================
                                                                                            diff --git a/src/app.php b/src/app.php
                                                                                            --- a/src/app.php	(revision 1d4b92...bbb)
                                                                                            +++ b/src/app.php	(date 1590949271133)
                                                                                            @@ -79,6 +79,7 @@
                                                                                             ....
                                                                                            


                                                                                            Теперь системная команда patch (не git apply) не применяет патчи
                                                                                            0
                                                                                            del
                                                                                              0
                                                                                              На Убунте сильно просаживается fps интерфейса, а файлы с комментариями (типа phpdoc) прокручиваются рывками с фризами. Так уже год или больше. Не позволяет нормально работать. Железо: i7-8700. Посмотрите если что-то можно сделать.
                                                                                              На винде с wsl1 постоянно висит git log indexing, можно это как-то убрать?

                                                                                              И еще хотел бы узнать если ли настройка использования cpu при индексации. Замечаю как с каждым релизом экспериментируете: раньше процессор нагружался до 100%, потом максимум до 50-60%.
                                                                                                0
                                                                                                Очень странно.
                                                                                                На i5 650, а это всего 2c4h 10 года, оно летает, и это с кучей плагинов и на огромном проекте под 100к файлов.
                                                                                                Но когда-то тоже сталкивался с фризами, на более мощном железе. Частично из-за hdd, частично из-за медленной отрисовки графики, частично из-за глючных плагинов.
                                                                                                Одно время это достало, и разобрался с вопросом раз и навсегда.
                                                                                                Сначала разобрался с диском — переехал на ssd, и больше на hdd шторм даже не пытался запускать, потому что это гарантированные фризы. А пока жил на hdd, пользовался рамдиском для кеша индекса: пусть лучше 2 гига памяти сожрет на кеш индекса в оперативке, чем так тормозит.
                                                                                                Потом разобрался с отрисовкой — убедился, что проблема не в gpu, и добавил в vmoptions ключи:
                                                                                                -Dawt.useSystemAAFontSettings=lcd
                                                                                                -Dawt.java2d.opengl=true
                                                                                                -Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine
                                                                                                Также разрешил кушать побольше памяти: -Xmx16g
                                                                                                А потом тщательно профилировал плагины: вырубил все, включал по одному, наблюдал за реакцией.
                                                                                                На некоторых плагинах наблюдается некорректная работа со штормом, и оно просто выжирает cpu — такие плагины поотключал, благо их оказалось немного. Большая часть таких плагинов уже упоминается в багрепортах.
                                                                                                «Тяжелые» по ресурсам плагины работают, и, не смотря на старое железо, не тормозят. Тормозили именно некорректно работающие — вмешивались в процессы индексирования, поиска по индексу и анализа кода, и либо падали в циклы, либо сыпали ошибками.
                                                                                                После этого не устанавливаю больше двух незнакомых плагинов за раз, чтобы, если вдруг опять нарвусь на подобное, не проверять все плагины.

                                                                                                С тех пор, как все это проделал, шторм летает.
                                                                                                Попробуй, может и у тебя похожие проблемы.
                                                                                                  0
                                                                                                  HDD давно уже не используется, только ssd и в данном случае nvme. Но проблема не в накопителе, лагает ведь когда происходит скроллинг, а не работа с диском.
                                                                                                  Спасибо, попробую эти настройки. Память сейчас выставлена так:
                                                                                                  -Xms2048m
                                                                                                  -Xmx4096m
                                                                                                  -XX:ReservedCodeCacheSize=512m
                                                                                                  Плагины возможно и являются проблемой, но не уверен что хочу перепроверять десятки установленных плагинов. Даже если выяснится что виноват плагин для поддержки php, его все равно же не выключишь. Мне кажется здесь какая-то проблема с gpu.
                                                                                                +1
                                                                                                Подскажите, а как делать проверку Immutable / ArrayShape на CI? Можно ли использовать PHPStorm как статический анализатор на CI?
                                                                                                0
                                                                                                Релиз классный! Спасибо команде, за такой интенсивный труд. Но, к сожалению, с базой данных работать непосредственно из PS до сих пор неудобно, на мой взгляд, попробую на этой неделе записать скринкаст.
                                                                                                  +1

                                                                                                  Большое вам спасибо за https://youtrack.jetbrains.com/issue/IDEA-247286
                                                                                                  Теперь я счастлив

                                                                                                    0

                                                                                                    Не знаю с обновлением связано или нет, но заметил после него: не работает копирование в буфер иксов (ubuntu 20.04) по выделению мышкой в окне Terminal (встроенный в PhpStorm). Вставка средним кликом работает, а копированию по выбору — нет. Это бага?

                                                                                                      +2

                                                                                                      И да и нет. В 2020.3 эту опцию отключили по умолчанию. Просто включите обратно: Settings/Preferences | Tools | Terminal | Copy to clipboard on selection


                                                                                                      https://youtrack.jetbrains.com/issue/IDEA-256926

                                                                                                        0

                                                                                                        Спасибо. Но это должно было быть в самом начале этого поста :( Это же BBC

                                                                                                      +3
                                                                                                      На самом деле, чтобы бы очень хотелось, так это чтобы нормально начал работать youtrack, и правили ошибки в нём, или хотя бы закрывали тикеты.

                                                                                                      В данный момент в Phpstorm проекте почти 40 000 открытых тикетов.
                                                                                                      youtrack.jetbrains.com/issues/WI
                                                                                                      из них часть — это мусор, который стоит закрыть.

                                                                                                      Хуже всего что когда после обновления или по какой либо другой причине хочешь создать рапорт, ты не можешь найти подходящий и думаешь «я что, первый, с такой проблемой?».

                                                                                                      Ищешь по ключевым словам и тп — ничего не найти.
                                                                                                      Создаёшь тикет, смотришь все дубликаты… И только когда создашь увидешь что такие тикеты были и твой тикет закроют как дубликат.

                                                                                                      результат => нет смысл писать вообще о багах из за фрустрации что скорее всего закроют как дубликат.
                                                                                                      И при этом, баги иногда по полгода не закрывают, возможно потому что их не рапортишь, а возможно потому что они только у тебя и проявляются.

                                                                                                        +2
                                                                                                        ну и конечно, очень неприятно что баг был найден в EAP, и его решили не править.

                                                                                                        youtrack.jetbrains.com/issue/WI-56500

                                                                                                        зарелизить сломанную работу c XDebug — пусть все разработчики и обновляют всё у себя — гениально.

                                                                                                        Причём сломали с достаточно новой версии Xdebug — которой всего полгода.
                                                                                                          +3

                                                                                                          Присоединяйтесь к моему крестовому походу =) Я в этом году на каждый релиз с кучей фич выкатываю несколько багов на которые забили. И, кстати, большинству из них несколько лет и не то чтобы они прямо такие безобидные. Пишу именно на хабре т.к. тут есть хоть какая-то адекватная реакция. Меня задолбал подход JetBrains к разработке IDE в виде "пофиг на баги, даешь 100500 новых фич", которые зачастую тоже багнутые… За год ничего не поменялось к сожалению, но хотя бы часть упомянутых багов исправляют. Правда, в этот раз я словил "Won't fix" на проблеме удобства когда сообщение о проблеме не соответствует реальной проблеме (WEB-20352 'closing tags matches nothing'). И ладно бы сказали что может когда-то поправят, так нет же — написали отмазку и закрыли… Печально это всё =(

                                                                                                          0
                                                                                                          Драйвер для mysql так и не починили?

                                                                                                          image
                                                                                                            +1

                                                                                                            Вам, наверное, просто нужно скачать (заново) файлы драйвера.


                                                                                                            image

                                                                                                          Only users with full accounts can post comments. Log in, please.