Не претендуя на библию или «настольную статью программиста» я хочу поделиться полезными находками в моей любимой IDE, не скатываясь в тупую копипасту мануалов и скучных списков хоткеев, только то, что я сам использую постоянно и над чем удивляются коллеги: «о! а так можно?»
Disclaimer
Если ни одна из фишек описанных в статье вам была не в новинку, потрудитесь добавить хотя бы одну свою, тогда мир станет лучше, деревья зеленее… ну вы поняли.
Я работаю на Mac, поэтому хот-кеи указываю в «своей» раскладке. Большинство из них будут работать простой заменой [CMD] на [CTRL] или [ALT], остальные, возможно, придется поискать на вкладке Keymap. Буду благодарен, если кто-то проверит и продублирует раскладку для WIN.
Автогенерация кода
Существует куча рутинных задач, которые иногда выполняются самим фреймворком, а иногда требуют тупой ручной работы. PHPStorm помогает упростить некоторые [CTRL]+N, например:
Создание геттеров и сеттеров (Getters & Setters)
По существующим переменным класса можно сгенерировать набор геттеров и\или сеттеров, причем в появляющемся окне можно выбрать для каких именно.
Создание PHPDoc
По сути действие аналогично тому, как если перед существующим методом начать писать /** и нажать Enter. Можно выбрать одну или несколько функций и на основании атрибутов и содержимого будет сформирован Doc Block.
Переназначение и реализация при наследовании (Override & Implementation)
При создании класса потомка или реализации абстрактных методов, чтобы не допустить ошибку, обычно приходится лезть в класс предок и запоминать или копипастить название и атрибуты метода. Или проверять для всех ли абстрактных методов есть реализация и вспоминать что же там требуется для ArrayAccess. Есть вариант получше:
[CMD] + I – Имплементация
[CMD] + O – Переназначение
После нажатия хоткея появляется окно где можно выбрать какие именно методы будем реализовывать. После выбора генерится соответствующий метод с соблюдением приватности и имена атрибутов, например так:
public function createTable($drop = false) { return parent::createTable($drop); }
Автоформатирование кода
Когда пишешь код сам, обычно форматирование получается само, но в ситуации, когда нужно поменять Code Style или пытаешься открыть чужой непривычно оформленный код, возникают проблемы. Можно смириться, а можно нажать [CMD] + [ALT] + L и IDE отформатирует код в соответствии с настройками (Preferences -> Project Settings -> Code Style -> PHP)
По-умолчанию, нажатие хоткея форматирует файл целиком. Если выбрать область, то форматируется только selection. Если выбрать в дереве папку или весь проект, можно сразу привести в порядок всё сразу.
Для каждого языка можно задать свой стиль оформления, причем для PHP также можно выбрать один из предзаданных стилей:
- PEAR
- Zend
- Symfony
- Drupal
- PSR1\PSR2
Подсказки (Code Completition)
Важной функцией IDE является способность подсказывать названия и атрибуты методов. Особенно это важно для ООП, когда цепочки по 3-4 наследующихся класса способны запутать кого угодно.
При нормальной архитектуре проекта IDE способна разобраться сама, но бывают ситуации когда она не справляется, например:
- Функция может вернуть несколько типов
- Объект является элементом массива
$var = $arr[‘object’]; - Класс ‘B’ extends ‘A’. В классе ‘A’ метод foo() возвращает $this, в классе ‘B’ реализация метода отсутствует. Вызвав из объекта ‘B’ метод foo() IDE будет думать что возвращен был объект A.
- При нативной шаблонизации средствами PHP. Где-то в дебрях системы в шаблон передается переменная $some, но внутри шаблона об этом неизвестно.
Варианты решения:
Для функций нужно писать PHPDoc с параметром @ return. Например:
/** @return SomeClass */ function a() {[…]}
Для переменных также можно указать комментарий:
/** @var $my_var SomeClass */
Тогда ниже для $my_var будет доступны подсказки
Для методов над классом можно указать PHPDoc
/** @method B foo() Описание метода */ class B extends A {[…]}
Задачи (tasks)
Использование систем контроля версий уже давно стало признаком хорошего тона. Но часто бывает проблема, когда работа ведется над несколькими задачами параллельно или прибегает кто-то и срочно просит исправить воооот этот баг прям-вот-щяс. Очень легко можно забыть закоммитить нужный файл или наоборот, в коммит попадают лишние файлы или изменения которых там быть не должно.
Избежать этого и внести порядок в работу можно с помощью Tasks. Суть в том, что у каждой задачи есть свой Change-лист, в котором указаны файлы с изменениями и переключаясь между задачами сразу видно, с какими файлами работали по этой задаче и что нужно не забыть.
Другой положительный момент, что IDE предупреждает, если вы в рамках одной задачи начинаете править файл, уже затронутый в другой.
Добавляет удобства, что при коммите в него автоматически попадают все файлы из текущего change-листа + в комментарий подставляется название задачи.
Хорошо если у вас уже есть багтрекер типа Jira или Redmine, если нет, на том же GitHub есть довольно простая система баг-трекинга, также поддерживаемая PHPStorm. Это позволяет подгрузить номер, название и описание уже существующей задачи по которой вы работаете прямо в IDE, хотя ничто не мешает не пользуясь трекером создавать произвольные change-листы.
FTP, деплой и автодеплой
Со многими проектами работа ведется по FTP или SFTP. PHPStorm имеет удобный функционал для работы с ними. Сохранив доступы к серверу и настроив mapping появляется возможность выгружать и загружать (upload & download) файлы на сервер нажатием одного хоткея. Чтобы работало — нужно не забыть тыкнуть «use this server as default»
Почему-то для Mac не заданы хоткеи по умолчанию для этих действий, но в Keymap можно их задать (спасибо Кэп). Я поставил следующие:
• Upload to Default Server: [CTRL] + U
• Download from Default Server: [CTRL] + D
(привел их для удобства поиска в Keymap + на мой взгляд легко запоминается)
Но об этом всём не стоило бы и писать, если бы не функция автодеплой. Поставив в настройках (Preferences -> Project Settings -> Deployment -> Options) пункт “Upload changed files automatically to default server” в любой режим кроме Never + галочку Upload external changes мы получаем автоматическую синхронизацию всех изменений.
Тут сказывается удобство того, что PHPStorm при нажатии [CMD] + S сохраняет сразу все файлы, т.к в результате процедура сохранения и аплоада совмещаются в одну.
Теперь можно не заботится всё ли загружено и ничего ли не забыто.
Консоль
Многие фреймворки используют консоль для быстрого выполнения частых действий. Для Symfony, Zend и других популярных фреймворков PHPStorm поддерживает подсказки и автодополнение консольных команд в Command Line Tools Console [CMD] + [SHIFT] + X
Но ничто не мешает сделать такое же и для своего проекта или частоупотребляемых команд UNIX или GIT, для этого нужно выбрать исполняемый файл и создать специальный XML файл вида:
<?xml version="1.0" encoding="UTF-8"?> <framework xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schemas/frameworkDescriptionVersion1.1.2.xsd" name="My Tools" invoke="/full/path/to/console.php" alias="c" enabled="true" version="2"> <command> <name>command-name</name> <help>Описание команды. Не забываем про обработку спецсимволов!</help> <params>class</params> </command> <command> <name>another:command</name> <help>Описание команды с необязательным параметром</help> <params>class[=null]</params> </command> </framework>
Подробное описание как это делается вот тут: devnet.jetbrains.net/docs/DOC-1230
Разновидности поиска
[CMD] + N – Find by Class Name
Поиск по имени класса. Удобно в больших проектах, когда всё зарыто вглубь директорий или просто неизвестно где находится. Убойности добавляет «умный поиск», т.к. ищется как по части названия класса, так и по первым буквам, например SomeVeryLongClass будет найден по «SVLC». Учитывает регистр букв, будьте внимательны.
[CMD] + [SHIFT] + N – Find by File Name
Поиск по имени файла. Аналогично поиску по имени класса использует «умный поиск».
[ALT] + [F7] – Find Usages
В момент когда курсор находится на имени класса или метода нажатие хоткея позволяет найти все использования в проекте или определенной части (Scope)
[CTRL] + [SHIFT] + F – Find in Path
Поиск произвольной фразы по файлам проекта. При рефакторинге обычно хорошо дополняет Find Usages.
Не стоило бы писать о “просто поиске”, если бы не возможность ограничить директорию в котором будут искаться нужные штуки, или настроить Scope. Scope позволяет гибко настроить и сохранить область поиска, для использования в дальнейшем. Можно выкинуть из поиска, например, файлы фреймворка или сторонние либы.
Убрать рамку с подписями вкладок
В нижнем левом углу есть кнопка, позволяющая убрать рамки для боковых и нижних вкладок. Сами вкладки можно открывать по сочетаниям [CMD] + 0-9, но некоторые вкладки не имеют цифры. В таком случае поможет быстрое двойное нажатие (даблклик) [CMD], которое на время удержания показывает рамку с кнопками, в которые можно тыкать мышой.
ссылка на оригинал статьи http://habrahabr.ru/post/157409/
Добавить комментарий