Генерировать подсказки типа кода для устаревших классов API  ядра Joomla!

https://github.com/nikosdion/joomlatypehints

Что оно делает?

Это позволяет вашей IDE обеспечить завершение кода для старого ядра Joomla! Классы API, которые были объявлены устаревшими и заменены их аналогами в пространствах имен.

Одна картинка стоит тысячи слов. Вот Joomla! 3.8 промежуточная ветвь phpStorm.

До

Before applying any typehints. Boo!

После

Code hinting, type checks and deprecated warnings? Check!

Code completion and method hints? Check!

Применение

Установка и первое использование

Клонируйте этот репозиторий и инициализируйте в нем зависимости Composer

git clone https://github.com/nikosdion/joomlatypehints.git
cd joomlatypehints
composer install

Вы можете создавать подсказки типа для опубликованной версии Joomla! или Joomla! установки на вашем компьютере. Последнее полезно для основного развития против промежуточной ветви.

Для опубликованных версий Joomla! , например, 3.7.4

php typehints.php generate --for-version=3.7.4

Совет разработчика Ninja: аргумент -for-version также принимает любое опубликованное имя ветки GitHub для репозитория joomla / joomla-cms. Например, если вы хотите сгенерировать typehints для текущей промежуточной ветви:

php typehints.php generate --for-version=staging

Для установки Joomla! , например, в /var/www/joomla-cms

php typehints.php generate --for-site=/var/www/joomla-cms

По умолчанию классы подсказки типов генерируются в папку generated_hints. Вы можете изменить это, передав имя папки команде (папка уже должна существовать). Например:

php typehints.php generate --for-site=/var/www/joomla-cms /var/www/joomla-cms/typehints

Вызовите приложение без каких-либо параметров, чтобы получить справку. Это самодокументируемо!

Использование typehints с phpStorm

  • Перейдите в раздел «Файл», «Настройки».
  • В левом дереве выберите Язык и Фреймворк, PHP.
  • Перейдите на вкладку «Включить путь».
  • Нажмите кнопку [+] в правой части списка путей включения.
  • Выберите «Задать другое ...» и выберите созданную папку подсказок классов.

Использование typehints с NetBeans

Путь к папке с файлами классов указывается в свойствах проекта. Я использую руссифицированную версию Netbeans, поэтому пишу для нее. Во вкладке Проекты выбираете нужный проект, в нём за папкой "Исходные файлы" идёт папка "Путь к include", по неё кликаете правой клавишей мыши и выбираете "Свойства". В открывшемся окне нажимаете кнопку "Добавить папку" и указываете путь к папке с определениями классов.

Но в последнее время у NetBeans обнаружилась одна засада. В процессе сканирования проекта выскакивает сообщение об ошибке "java.lang.OutOfMemoryError: Java heap space" - оно означает, что программе не хватает размера кучи. Это связанно с настройкой Java машины. Данная проблема решается следующим образом:

Идёте в папку с установленной программой. В моём случае это. C:\Program Files\NetBeans-21\netbeans\etc, открываете там файл netbeans.conf текстовым редактором (например notepad++) от имени администратора. Ищите там переменную netbeans_default_options и исправляете один из её параметров. За размер кучи отвечает параметр -J-Xmx<размер>. В моём случае потребовалось указать -J-Xmx32768m. Перезапускаете NetBeans, и если у вас мало оперативки (меньше равно 32 гига) курите бамбук пока происходит сканирование проекта. Можете попробовать указать меньшее значение кучи, но у меня при значении в 16 гигабайт сканирование завершалось ошибкой.

Как это делается?

Он читает  файл библиотеки Joomla/classmap.php и генерирует поддельные файлы классов, чтобы устаревший класс расширялся из нового класса с именами. Вы должны включить эти файлы в путь поиска класса IDE для завершения кода для работы.

Например, JRegistry перестала существовать как самостоятельный класс в Joomla! 3.3.0. Он был заменен \Joomla\Registry\Registry. Любой код, в который был введен в JRegistry, прекратил показывать подсказки для разработчиков с 3.3.0.

Эта утилита создает файл определения фальшивого класса для этого класса в форме

/** 
* @deprecated 4.0 
*/ 
class JRegistry extends \Joomla\Registry\Registry {}

Это позволяет вашей среде IDE знать, что даже если вы использовали JRegistry в подсказках типа DocBlocks / PHP 7.x, он должен обеспечить завершение кода для нового класса \Joomla\Registry\Registry . В то же время ваша среда ID будет отмечать старый класс JRegistry как устаревший (если он поддерживает такую ​​функцию), поэтому вы можете в конечном итоге реорганизовать его на новое имя класса.