Базовые фишки phpStorm, которыми я пользуюсь каждый день

phpStorm

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

Редактор

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

  1. Часто в битриксе приходится видеть кашу из html/js/php (а иногда даже sql кода)? Причем активно в файле может присутствовать jquery, а php код местами написан с использованием альтернативного синтаксиса управляющих структур? Тогда вы оцените, как редактор отлично расправляется с этой кашей! Также он умеет смешивать языки, например, когда вы генерируете какой-то js или html код с помощью php, то в генерируемом фрагменте будет подсветка синтаксиса, а также помощник по составлению языковых вставок.Языковые вставки
  2. Автокомплит. Он просто работает, и все. По всевозможным (немагическим) функциям проекта. phpStorm сканирует все файлы вашего проекта, запоминает все классы и методы, функции, переменные, константы. Но с некоторыми методами может быть беда. Например — всевозможные битриксовые ::GetList(), для которых автокомплит не работает (связано с кривой реализацией в ядре). Однако это можно очень легко исправить, подключив к проекту содержимое репозитория matiaspub/bxApiDocs как отдельную библиотеку: File — Settings — Project Settings — PHP и в Include Path добавляем путь к папке modules. Библиотека содержит все ядро целиком для редакции кластера с фиксами, позволяющими использовать автокомплит нормально (тут есть один минус — если у вас в проекте индексируется ядро. а оно у меня индексируется. то при попытке перейти к просмотру кода метода возникает проблема двойной имплементации, и можно случайно перейти в код этой библиотеки вместо настоящего кода ядра)
  3. Сниппеты. Особо крутого тут ничего нет, сниппеты они итак везде есть. Но этот пункт я выделил не случайно. Для шторма и эклипса есть набор сниппетов, описывающих дефолтные компоненты битрикс. Забрать можно тут. Иногда бывает удобно.
  4. Статический анализ кода. Всегда подсвечиваются явные ошибки в коде. Ошибки видно как в коде, так и в полосе прокрутки — если там есть красные кусочки — это первое, что вам нужно посмотреть перед тем как делать коммит. Кстати, иногда раздражает, что он подсвечивает гигантские статические вызовы ::GetList, говоря о том, что метод используется в статическом контексте, тогда как не является статическим (и правильно делает, что подсвечивает), но можно гибко настроить статический анализ и какие-то отдельные инспекции отключить (но я не рекомендую этого делать).
  5. Поддержка языковых конструкций вплоть до последней версии языка, поддержка Emmet (он же бывший Zen Coding), поддержка js библиотек, css и пр.

К минусам редактора могу отнести некоторую тормознутость.
Бывают глюки, при которых невозможно по неведомой причине сменить кодировку файла (очень редко). Иногда бывает глюк, что убираешь какую-то кавычку в строке, шторм сразу же меняет подсветку дальнейшего кода, но если поставить кавычку обратно, то он может предыдущую подсветку не сменить.
Еще мне откровенно не хватало minimap файла после Sublime Text, но как оказалось — есть плагинчик, называется CodeGlance.
Еще, к сожалению пока не могу найти, как сделать автокомплит по произвольным строкам (ключи массива например) 🙁

Навигация

У вас есть почти мгновенный поиск по всему проекту. Если хотите найти абсолютно любую строку — жмете Ctrl+Shift+F — в диалоговом окне вводите нужную строку, и IDE находит вам все вхождения данный строки в проекте. Эдакий аналог grep, только интереснее — в результатах поиска IDE классифицирует найденное вхождение строки, указывает в каких файлах и в какой строке, сколько раз встречается искомая подстрока.

Окно поиска подстроки Результаты поиска

Но не всегда удобно искать именно строку. Часто мы знаем, что ищем именно класс или функцию, или какую-либо другую сущность в понятии phpStorm. Для поиска везде и вся подобных сущностей существует хоткей Shift*2 — всплывающее окно поможет быстро перейти к какой-либо сущности.

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

Кроме упомянутых выше возможностей поиска, можно удобно ориентироваться внутри открытого большого файла. Иногда бывают ситуации, когда нужно отредактировать какой-то кусок кода, перейти к другому в этом же файле, пролистав глубоко вниз, а затем вернуться обратно. Крутить колесо — долго и муторно. Поэтому можно вернуться к предыдущему редактируемому куску хоткеем Ctrl+Alt+Shift+вверх или вниз. Также есть GUI стрелка, которую можно вызвать, кликнув по маркеру, который добавляется напротив отредактированной строки — появится контекстное меню встроенной системы контроля изменений phpStorm, где кликом по стрелке можно перейти к отредактированным областям
Навигация по редактируемым областямКрайне удобной для меня оказалась возможность мгновенного перехода к определению сущности, если зажав ctrl кликнуть по ней в редакторе — супер удобно! Если у сущности определен phpDoc комментарий, то можно просмотреть его через ctrl+Q, опять же когда курсор мыши над сущностью. Поэтому коллеги — обязательно комментируйте все свои наработки с помощью phpDoc — это совсем не сложно, тогда как всем остальным это может сильно упростить жизнь.

Кстати о phpDoc — есть его полная поддержка. После написания функции или метода, например, достаточно написать над функцией строку  /** и нажать tab — основной блок для phpDoc комментария будет сгенерирован. Вам нужно будет только добавить описание для вашей сущности и задать типы переменных (в случае с функциями). В случае изменения функции, ее параметров или чего либо, что могло бы повлиять на phpDoc — редактор подсветит блок комментария и предложит обновить его.

Вообще говоря — phpStorm всегда будет помогать вам, подсвечивая или подчеркивая какие-то странные на его взгляд моменты. Лучше обращать на них внимание и следовать рекомендациям.

Вернемся к навигации. Введя простой хоткей Ctrl+L можно быстро перейти к определенной строке и символу в документе. Нужно ввести номер строки и номер символа (если надо) через двоеточие.
Переход к строке

Есть еще одна крутая вещь — навигатор по структуре файла. Если файл структурирован (html/xml, css или php класс, например), то такой файл можно просмотреть в виде древовидной структуры. Это крайне полезно при разработке классов, т.к. клик по названию метода в этом дереве производит быстрой переход к методу, да и наглядно видно. какие методы с какими данными и в каком контексте работают.

Структура файла

Аналогичное дерево можно вызвать во всплывающем окне над редактором с помощью ctrl+f12, а чтобы добавить его в левую панель, нужно зайти в меню View -> Tool Windows -> Structure

Интеграция с инструментами разработки

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

git

Куда ж без него. До моего знакомства с phpStorm я активно использовал продукт Atlassian SourceTree, который по мнению множества разработчиков считается одним из лучших OpenSource продуктов в данном сегменте. Не могу ничего сказать плохого в адрес этого инструмента, он до сих пор служит мне верой и правдой, с удовольствием использую его каждый день. Но и в phpStorm есть возможность работать с репозиторием, и некоторые аспекты сделаны удобнее, чем в SourceTree. При включении интеграции с git в phpStorm появляется чейнджер веток (правый нижний угол), в тулбаре changes (ctrl+9) можно отслеживать изменения файлов, просмотреть diff для файла, оттуда же сделать коммит и push. На вкладке log этого тулбара можно просмотреть дерево коммитовДерево коммитов

SSH консоль

Раньше пользовался Putty, теперь пользуюсь встроенной консолью в phpStorm. Для подключения к серверу нужно пройти в меню Tools -> Start SSH Session …. Появится всплывающее окно, предлагающее подключиться к одному из существующих серверов, забитых в настройках, либо сделать одноразовое подключение (к сожалению. не сохраняется, или я просто пока не знаю как его сохранить 🙁 ). Удобно, не выходя из IDE, можно работать с консолью на сервере.

Отладка

Одна из самых крутых возможностей современных php IDE — возможность отладки. Про это я тоже напишу отдельный пост. Это крайне удобная вещь — кто кодил на компиллируемых языках в IDE (например в Visual Studio, или какой-нибудь Delphi) — тот меня поймет. Можно пошагово прогнать свое приложение, выяснить как ведет себя приложение на том или ином этапе работы, поддерживаются брейкпоинты, можно просмотреть стек вызовов для каждого момента времени, просмотреть и даже подменить значение переменных! Все это очень круто и сильно ускоряет процесс отладки. Даешь бой print_r’ам и var_dump’ам! (шутка, конечно и о них забывать не стоит). Must have для php разработчика.
Отладка с помощью xDebug

Также, если вы пользуетесь профилированием от xdebug, то в phpStorm встроен анализатор логов профайлера. Можно загрузить файлик в IDE, просмотреть там лог вызовов, и тут же перейти к нужным функциям, отрефакторить их и т.д. Круто!

xDebug Профайл

Restful Tester

Перед началом работы с каким-то внешним API хочется попробовать предоставляемые методы вживую. Да и при отладке необходимость быстренько составить запрос с авторизацией возникает. Однако не имеет смысла писать какой-то код — можно воспользоваться соответствующими инструментами. Ранее я пользовался для этого плагином для Chrome — Postman, однако теперь нужды в нем нет, я могу сделать запрос прямо из IDE.

File watchers

Всем известно, что для клиентской оптимизации надо сжимать js и css файлы. Однако, когда процесс выкладки на продакшен сервер не налажен, приходится делать оптимизацию скриптов и стилей вручную, например, с помощью google closure compiller в онлайне или локально. Данный инструмент позволяет автоматизировать подобные процессы. Если говорить грубо — инструмент следит за определенными файлами, и как только поступают какие-то изменения в файл, он сразу же извлекает команду, которая делает какое-то действие. Например для сжатия js файлов можно настроить File  Watcher’а так, чтобы при каждом изменении файла он создавал его копию с суффиксом {имя файла}.min.js, в котором будет содержаться сжатая копия файла.

На самом деле инструментов гораздо больше, чем я тут описываю. Тут тебе и vagrant для разворачивания виртуалок, и composer для добавления в проект библиотек из этого замечательного менеджера пакетов, и интеграция с PHPUnit, Behat, для организации TDD и BDD, и возможности рефакторинга, и еще многое многое другое, всего в рамках одного поста не описать. Но буду касаться иногда разных классных инструментов в последующих своих постах, т.к. есть еще много всего, о чем хотелось бы написать.

Ну и плагины

Для того, чтобы найти нужный плагин, необходимо зайти в File — Settings — IDE Settings — Plugins. На этой странице показан перечень установленных плагинов. Кнопка Browse Repositories … отправит вас в список всех возможных плагинов.

phpStorm идет уже с набором предустановленных плагинов, но я напишу, что стороннего устанавливал я.

  1. BitrixStorm. Плагин — недоделка (к сожалению), который упрощает навигацию по проекту. После установки нужно указать директорию основного шаблона сайта проекта, и вам станут доступны быстрые переходы к компонентам и шаблонам проекта (ctrl+ЛКМ по имени компонента или шаблона). Частенько валится … (
  2. CodeGlance — добавляет minimap для файла — писал об этом выше.
  3. RegexpTester — можно не выходя из IDE проверить работу регулярки
  4. PHP Advanced AutoComplete — добавляет автокомплит для ряда функций

 

Спасибо за внимание!

  • Андрей Пухкало

    Спасибо, про ssh оч полезно

  • Zemledelec — profi@

    большое спасибо!

  • Tvolod

    Спасибо за статью! Очень помогла.

    Поправьте только, поиск не Ctrl+Shift+N, а Ctrl+Shift+F.

  • Alex

    Автор, прокоментируй пожалуйста вопрос на тостере https://toster.ru/q/197651 Спасибо.