PhpStorm 7: Code Completion (Дополнение кода)

Категория: IDE

Настройка 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


категория: IDE