Друк
Категорія: ЧаПи по Joomla
Перегляди: 9035

Оцінка користувачів: 5 / 5

Активна зіркаАктивна зіркаАктивна зіркаАктивна зіркаАктивна зірка
 

Crazy tasty spiderНещодавно змушений був переїхати з з редактора коду geany на visual studio code  (далі VS Code). Мій geany був налаштований для перевірки форматування коду відповідно до стандартів Joomla. Я користувався phpcs, щоби отримувати звіт про проблеми. Користуватись php-cs-fixer для автоматичного виправлення помилок я не вмів. Тепер вмію.

Оскільки я пишу код не лише для Joomla, то мушу використовувати і стандарти кодування PSR2 на інших PHP-проектах.

Наприклад, у PSR2 вираз має виглядати так

if (true) {
    echo "yes';
}

У Joomla ж дужка мусить бути наступним рядком:

if (true)
{
    echo "yes';
}

Вирішення питання було досить геморойним. То ж лишаю тут цю замітку в тому числі для нагадування собі про власну тупість на майбутє. Довелося встановлювати дещо у глобальному масштабі, а дещо - лише в робочу область Joomla (папка установки Joomla, де я розробляю мої розширення). Я використовую OpenSuSE linux, проте на інших ОС все приблизно так само.

Отже, після встановлення VS Code, довелося встановити ще два плагіни (насправді я використовую більше, але лише два стосуються цієї теми).

Проте обидва плагіни до VS Code вимагають встановлення іншого ПЗ.

Перш за все повинно встановити phpcs. Документація vscode-phpcs радить встановити його через pear на всю систему. 

sudo pear install PHP_CodeSniffer

На жаль встановлення через composer global require "squizlabs/php_codesniffer=*" не працюватиме з плагіном до VS Code. Плагін не бачить виконуваний файл в іншому місці ніж /usb/bin/phpcs. Отже, встановлення через pear - обов'язкове. Втім, можна встановлювати для кожного проекту, мусить працювати. Але жаль перевитрат місця і часу.

PHP-CS-Fixer встановив закляттям composer composer global require friendsofphp/php-cs-fixer

Також додав у PATH відповідний шлях, а саме у ~/.bashrc начаклував рядочок export PATH="$PATH:~/.config/composer/vendor/bin"

Проте у VS Code узрів помилку, що він все одно не бачить виконуване філе: PHP CS Fixer: spawn php-cs-fixer ENOENT. executablePath not found.

При чому він вимагає вказати саме ПОВНИЙ шлях до філе. То ж у налаштуваннях VS code додав рядочок

"php-cs-fixer.executablePath": "/home/gruz/.config/composer/vendor/bin/php-cs-fixer",

b_300_0_16777215_00_images_x_2018_01_29_02_51_52_ht.jpeg

Після цього пошук помилок у форматуванні коду і виправлення їх запрацювало - phpcs і php-cs-fixer завелись. Проте поки що для PSR2, котрий за замовчуванням.

Далі довелось потанцювати із текою джумли.

Найперше мав існталювати Joomla coding standards. Їх стабільна гілка підтримує PHPCS 2.х, в той час актуальна гілка PHPCS - 3.x. То з використанням чорної магії (некрономікон від розробників wдещо не спрацював) та алхімії вдалось втановити відповідну версію Joomla coding standards:

Отже вписав кров'ю по людській шкірі у /home/gruz/.config/composer/composer.json два рядки:

"minimum-stability": "alpha"

та

"require-dev": {

     ...
     "joomla/coding-standards": "dev-3.x-dev",

     ...
}

Тобто, мій глобальний composer.json десь такий https://gist.github.com/gruz/9e1b95389669fdce08fb39006ccf7728#file-composer-json (а шукати його треба у ~/.config/composer/).

Звісно для джумли не треба рядок з мого файла, пов'язаний з laravel: "laravel/installer": "^1.5".

Далі викликаю духа закляттям composer global update

Тепер треба вказати phpcs де шукати Joomla Coding Standards, а саме:

sudo phpcs --config-set installed_paths ~/.config/composer/vendor/joomla/coding-standards/

Перевіримо підключені стандарти командою phpcs -i.У відповідь має бути щось на кшталт: The installed coding standards are MySource, PEAR, PSR1, PSR2, Squiz, Zend and Joomla

Далі треба вчинити дві підступні діїі у теці із джумлою (Власне активний робочий простір VS Code маю показувати на цю теку)

Отже, у робочому просторі у VS Code треба встановити стандарт phpcs для Joomla

b_300_0_16777215_00_images_x_2018_01_29_02_55_40_pv.jpeg

Далі треба розташувати правила для php-cs-fixer в корені joomla

А саме, файл на ймення .php_cs із вмістом https://gist.github.com/gruz/9e1b95389669fdce08fb39006ccf7728#file-php_cs

Звісно, файл можна перековбасити під власні потреби. Ось трактат про це: https://github.com/FriendsOfPHP/PHP-CS-Fixer

Нажаль, не все виправляється цим шляхом. Наприклад, у Joomla Coding Standards після виразу у фігурних дужках має бути порожній рядок. Php-cs-fixer вміє ставити такий порожній рядок лише перед виразом, що теж треба, проте після - доведеться додавати руками.

Проблеми

Протягом розкопок я ловив деякі помилки:

phpcs: Unable to locate phpcs. Please add phpcs to your global path or use composer depency manager to install it in your project locally.

The PHP CodeSniffer Linter server crashed 5 times in the last 3 minutes. The server will not be restarted.

Таке траплялось, коли VS Code не міг побачити phpcs, встановлений глобально через composer. А от з встановленням через pear все запрацювало.

Також була помилка щось там про поганий символ у JSON. Здється, ця халепа трапилась, коли я встановлював phpcs у теку проекта. Таке встановлення чомусь виводило результат phpcs не у JSON форматі, а у форматі таблиці. То ж плагін VS Code обламується об незнайомий потік данних. Тоді примусово вмикав виведення JSON

./vendor/bin/phpcs --config-set report_format json

Якщо ви помітили помилку, то виділіть фрагмент тексту та натисніть Ctrl+Enter
FaLang translation system by Faboba