Visual Studio Code — Как заставить автозаполнение работать в цикле foreach php? (vscode, intellisense)

Я использую vscode и пакет расширений php (он содержит в основном используемые расширения). Я хотел бы использовать intellisense в этом цикле foreach:

foreach ($list_of_objs as $obj) {
/* @var $obj my_class_name */
// I want to go to definition of obj_method()
//  with F12 but it's not working
//  also auto-complete is not working
$obj->obj_method();
}

Пожалуйста, дайте совет, если вы можете решить эту проблему. Я нашел решение для Zend Studio, но не для vscode.

Есть ли в коде расширение для поддержки подсказок типа doc-блока? Было бы очень приятно

/** @var my_class_name */
$my_variable;

Насколько я знаю, только место для типов переменных находится в объявлении функции в php7. PHP IntelliSense также понимает

$obj = new ClassName;

(благослови их хотя бы на это …)

2

Решение

Вы пытались старый добрый Eclipse / Zend аннотации типа:

/* @var $obj my_class_name */
$obj->obj_method();

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

/** @var my_class_name $obj */
$obj->obj_method();

Я могу ошибаться, но я верю, что PHP IntelliSense в любом случае не поддерживает (пожалуйста, попробуйте и сообщите). Я могу подтвердить, что PHP Intelephense поддерживает последнее.

0

Другие решения

Поскольку после долгих поисков я не нашел простого решения для этого, я придумал это рабочее решение:

В вашем классе создайте статическую функцию

/**
* Returns the instance itself for Code completion
* @return ClassName
*/
public static function self($instance) {
return $instance;
}

С этим у вас может быть экземпляр с типом как это:

foreach ($list_of_objs as $obj) {
$obj = ClassName::self($obj);
$obj->obj_method()
}

Было бы лучше, если аннотация в foreach работал, но по крайней мере это способ использовать завершение кода вообще.

0

По вопросам рекламы [email protected]