PhpStorm 7: Code Completion (Дополнение кода)
Настройка Code Completion для PhpStorm. Документирование магических методов и динамических свойств. Указание типов (type-hinting) для фабричных методов. Хак файлов документации.
Дополнение путей в константах
Если вы указали путь к некоему каталогу в константе и желаете дополнения от PhpStorm для include и require, тогда вам необходимо добавить путь '.'
в настройках Project » PHP. Подробнее: http://www.jetbrains.com/phpstorm/webhelp/configuring-include-paths.html
Примечание
Указатель на документацию:
/* @see http://site.com Description text */
/* @link http://site.com Description text */
PhpStorm предлагает следующие возможности по дополнению кода (code completion):
- Basic code completion, Ctrl+Space - базовое дополнение кода;
- SmartType code completion, Ctrl+Shift+Space - дополнение с учетом контекста для которого применимы предложения;
- Parameter Information, Ctrl+P - информация о параметрах метода или функции;
- Class name completion, Ctrl+Alt+Space - дополняет имена классов с поиском по всему проекту, если класс не импортирован PhpStorm сделает это за вас;
- Completing Statements, Ctrl+Shift+Enter - дополнение конструкций, как-то if, switch, for...
Примечание
Если вы предпочитаете более точные предложения при дополнении - будет удобно переопределить комбинации клавиш для Basic и SmartType дополнения. Я именно так и сделал.
Указание типа вручную
/** @var SomeClass $variable */
$variable = Some::factory('some_class');
Документирование динамических свойств и методов
Для документирования динамических/магических свойств и методов используются теги @property и @method:
/**
* @property string $title Описание свойства
* @property \SomeClass|\OtherClass $property
*
* @method \SomeClass getByIds(array $ids=[])
* @method static \OtherClass whereId(int $id)
*/
class MyClass {}
Документирование ключей массивов (хешей)
PhpDoc обеспечил синтаксис документирования ключей массива (пруф), но PhpStorm еще не поддерживает этот синтаксис:
/**
* Описание
*
* @param array $options {
* @var bool $required Описание опции
* @var string $label Описание опции
* }
*/
public function __construct(array $options = []) {}
Документирование фабрик и фабричных методов
Вы можете задокументировать типы возвращаемые фабричными методами в файле .phpstorm.meta.php в корне проекта (перезагрузите PhpStorm):
<?php
namespace PHPSTORM_META {
/** @noinspection PhpUnusedLocalVariableInspection */
/** @noinspection PhpIllegalArrayKeyTypeInspection */
$STATIC_METHOD_TYPES = [
\App::make('') => [
'someService' instanceof \Vendor\Package\SomeServiceClass,
'otherService' instanceof \Vendor\Package\OtherServiceClass
]
];
}
Ссылки на русскую документацию PHP
Документация стандартных ф-ций PHP хранится в пакете: ~/PhpStorm-7.1-133.214/plugins/php/lib/php.jar по пути /com/jetbrains/php/lang/psi/stubs/data. Чтобы заменить все ссылки на инглиш документацию с сайта php.net их русскими аналогами - извлеките эти файлы в какой-то каталог, перейдите в него и выполните следующий bash код и замените оригинальные файлы внутри php.jar:
for f in *.php; do sed -i 's@php.net/manual/en@php.net/manual/ru@g' $f; done
Внимание!
Изменения вступят в силу после рестарта IDE! Также, не оставляйте бекап исходного php.jar в том же каталоге - шторм его находит)
После замены ссылок в стандартной PHPDoc документации, при открытии сайта со справкой по Shift+F1 - вы также будете видеть русскую версию справки php.net.
JavaScript документация
Документация по JavaScript находится в пакете JavaScriptLanguage.jar: ~/PhpStorm-7.1-133.214/plugins/JavaScriptLanguage/lib/JavaScriptLanguage.jar/com/intellij/lang/javascript/index/predefined/. Но есть проблема - парсер JSDoc документации не воспринимает тэг @link, а ссылка на документацию, типа этой https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split формируется где-то внутри IDE. Исходя из этого, что бы вы не указали в блоке документации JSDoc - ссылка на внешнюю документацию ECMAScript не изменится.
Тонкая настройка дополнения кода Symfony2 проекта в IDE PHPStorm 6. Допустимые типы и форматы PHPDoc.
/**
* @param boolean [$is_cond="false"] Укажем дефолтное значение для аргумента
*
* @return SomeClass[] Возвращаем массив объектов типа SomeClass
* @return void Ничего не возвращается
* @return mixed Смешанные типы
* @return string|null Строка или null
*/
Возвращаем коллекцию PropelObjectCollection:
@return \Some\Bundle\Model\Task[]|\PropelObjectCollection
Принимаем в параметр объект User или его ID:
@param \FOS\UserBundle\Propel\User|int $user