friendsofphp php cs fixer

README

The PHP Coding Standards Fixer (PHP CS Fixer) tool fixes your code to follow standards; whether you want to follow PHP coding standards as defined in the PSR-1, PSR-2, etc., or other community driven ones like the Symfony one. You can also define your (team’s) style through configuration.

It can modernize your code (like converting the pow function to the ** operator on PHP 5.6) and (micro) optimize it.

If you are already using a linter to identify coding standards problems in your code, you know that fixing them by hand is tedious, especially on large projects. This tool does not only detect them, but also fixes them for you.

Documentation

Installation

The recommended way to install PHP CS Fixer is to use Composer in a dedicated composer.json file in your project, for example in the tools/php-cs-fixer directory:

For more details and other installation methods, see installation instructions.

Usage

Assuming you installed PHP CS Fixer as instructed above, you can run the following command to fix the files PHP files in the src directory:

See usage, list of built-in rules, list of rule sets and configuration file documentation for more details.

If you need to apply code styles that are not supported by the tool, you can create custom rules.

Editor Integration

Dedicated plugins exist for:

Community

The PHP CS Fixer is maintained on GitHub at https://github.com/FriendsOfPHP/PHP-CS-Fixer. Bug reports and ideas about new features are welcome there.

You can reach us at https://gitter.im/PHP-CS-Fixer/Lobby about the project, configuration, possible improvements, ideas and questions, please visit us!

Contribute

The tool comes with quite a few built-in fixers, but everyone is more than welcome to contribute more of them.

Источник

php-cs-fixer: Пишем свой фиксер

Фиксер?

Вообще, что такое фиксер? Фиксер, это небольшой класс, который фиксит ваш код, приводит его к какому-то виду. Я не стал выдумывать глупые или сложные кейсы для нового фиксера, и решил взять какой-нибудь вполне реальный. Например, приведение всех ключевых слов в коде к нижнему регистру. За это отвечает фиксер LowercaseKeywordsFixer. Давайте на его примере научимся создавать собственные фиксеры.

Фиксим

Итак, вы уже выполнили

Наш подопытный фиксер состоит из двух частей:
Сам фиксер:
src/Fixer/Casing/LowercaseKeywordsFixer.php
И тест:
tests/Fixer/Casing/LowercaseKeywordsFixerTest.php
LowercaseKeywordsFixer.php — это файл, который содержит класс фиксера. Каждый фиксер должен наследоваться от абстрактного класса PhpCsFixer\AbstractFixer, а значит содержать методы:

К этим методам мы еще вернемся. Давайте теперь рассмотрим очень важное для нас понятие: Token.

Token в PHP

Если вы хорошо знакомы с PHP, то понятие токенов для вас не ново. На русском их еще иногда называют “метками”. Токены — это языковые лексемы PHP. Например, если взять такой простенький код:

и разбить его на токены, то получим массив из 54 элементов. Вторым элементом будет:

Где 334 — это идентификатор токена. То есть не этого конкретного токена, а этого типа токенов. Другими словами, все токены, представляющие конструкцию foreach — будут иметь идентификатор 382. Этому идентификатору соответствует константа T_FOREACH. Список всех констант можно посмотреть в документации.

Очень важный момент. Идентификаторы меняются от версии к версии PHP интерпретатора, ваш код никогда не должен зависеть от конкретных цифр, только константы!

Подробнее про токены можно почитать в документации.

Token в php-cs-fixer

В php-cs-fixer есть два класса для работы с токенами:
PhpCsFixer\Tokenizer\Tokens для работы с массивом токенов, и
PhpCsFixer\Tokenizer\Token для работы с одним токеном.
Рассмотрим некоторые полезные методы.

Проверяет, что переданный первым параметром токен эквивалентен текущему. Это самый правильный способ проверить, что токены равны.

Проверяет, что один из переданных в первом параметре токенов равен текущему.

Получить содержимое токена.

Задать содержимое токена.

Был ли токен уже модифицирован.

Названия говорят сами за себя.
Подробнее

Сгенерировать PHP код из набора токенов.

Найти следующий токен определенного типа

Найти следующий/предыдущий токен, содержащий что-то, кроме пробелов и комментариев.

Пишем фиксер

Теперь к самому фиксеру.
Напомню, что мы пишем фиксер, который приводит все ключевые слова PHP к нижнему регистру. Класс фиксера будет находиться в файле
src/Fixer/Casing/LowercaseKeywordsFixer.php
Для начала нам нужно определить, попадает ли код под наш кейс. В нашем случае нам надо обработать любой код, который содержит ключевые слова php. Определим метод isCandidate.

Теперь нам нужно описать наш фиксер. Для этого определим метод:

Этот метод возвращает объект FixerDefinition, конструктор которого принимает два параметра: короткое описание фиксера (оно будет в документации в файле README.rst) и небольшой пример кода для исправления (он нигде отображаться не будет, но участвует в тестах).

Также мы можем реализовать метод

Который возвращает приоритет фиксера, если нам понадобится запускать свой фиксер до или после других фиксеров. В нашем случае, наш фиксер никак не зависит от остальных, так что можно не реализовывать метод, оставив значение 0 из родительского класса.

Все приготовления закончены, давайте реализуем метод, который будет фиксить код.
Нам нужно, пробежать по всему коду, если токен — ключевое слово, то привести его к нижнему регистру:

В итоге должен получиться примерно такой файл.

Что дальше

У нас есть работающий фиксер. Это здорово. Осталось совсем чуть-чуть. Давайте напишем для него тест. Наш тест будет находиться в файле
tests/Fixer/Casing/LowercaseKeywordsFixerTest.php
Это обычный PHPUnit тест, разве что у него есть свой метод

который первым параметром принимает ожидаемый результат, а вторым — первоначальный код. Тестовый метод:

Напишем провайдер данных:

В итоге получаем такой код.

Тест работает, и если запустить только его, то все пройдет успешно. А вот общий тест сфейлится, т.к. данных о нашем фиксере нет в документации. Документация в php-cs-fixer авто-генерируемая, значит, достаточно запустить:

И информация о нашем фиксере добавится в документацию.
Теперь нужно проверить оба наших файла на предмет соответствия код стайлу:

Ну и в конце концов запустить общий тест:

Если все прошло успешно, то ваш собственный фиксер готов. Далее можно сделать пулл реквест и через какое-то время ваше творение появится в php-cs-fixer.

Источник

Friendsofphp php cs fixer

friendsofphp php cs fixer. Смотреть фото friendsofphp php cs fixer. Смотреть картинку friendsofphp php cs fixer. Картинка про friendsofphp php cs fixer. Фото friendsofphp php cs fixer friendsofphp php cs fixer. Смотреть фото friendsofphp php cs fixer. Смотреть картинку friendsofphp php cs fixer. Картинка про friendsofphp php cs fixer. Фото friendsofphp php cs fixer friendsofphp php cs fixer. Смотреть фото friendsofphp php cs fixer. Смотреть картинку friendsofphp php cs fixer. Картинка про friendsofphp php cs fixer. Фото friendsofphp php cs fixer friendsofphp php cs fixer. Смотреть фото friendsofphp php cs fixer. Смотреть картинку friendsofphp php cs fixer. Картинка про friendsofphp php cs fixer. Фото friendsofphp php cs fixer

friendsofphp php cs fixer. Смотреть фото friendsofphp php cs fixer. Смотреть картинку friendsofphp php cs fixer. Картинка про friendsofphp php cs fixer. Фото friendsofphp php cs fixer friendsofphp php cs fixer. Смотреть фото friendsofphp php cs fixer. Смотреть картинку friendsofphp php cs fixer. Картинка про friendsofphp php cs fixer. Фото friendsofphp php cs fixer

Pick one of the rule sets:

Configuration with header

💡 Optionally specify a header:

Configuration with override rules

💡 Optionally override rules from a rule set by passing in an array of rules to be merged in:

If you like Makefile s, create a Makefile with a coding-standards target:

to automatically fix coding standard violations.

If you like composer scripts, add a coding-standards script to composer.json :

to automatically fix coding standard violations.

If you like GitHub Actions, add a coding-standards job to your workflow:

This package is licensed using the MIT License.

Curious what I am building?

📬 Subscribe to my list, and I will occasionally send you an email to let you know what I am working on.

About

📓 Provides a configuration factory and multiple rule sets for friendsofphp/php-cs-fixer.

Источник

Friendsofphp php cs fixer

friendsofphp php cs fixer. Смотреть фото friendsofphp php cs fixer. Смотреть картинку friendsofphp php cs fixer. Картинка про friendsofphp php cs fixer. Фото friendsofphp php cs fixer

Автоформатирование кода: PHP CodeSniffer и PHP CS Fixer

На laracasts есть замечательное видео по этой теме в контексте PhpStorm, здесь же пойдёт речь о том, чего не рассказывал в том видео Джефри (ну а если хотите настроить фиксер под Sublime, смотрите эту статью).

PHP CodeSniffer

Давайте начнём с PHP CodeSniffer. Этот инструмент поможет выявить нарушения форматирования, при надлежащей настройке PhpStorm будет вас об этом информировать путём выделения проблемных частей кода. Кроме всего прочего мы можем воспользоваться консолью для вывода информации об ошибках.

Установка
Используемый стандарт

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

Можно каждый раз в консоли руками пописывать какие-то дополнительные правила или условия, указывать стандарт и т.д. Но, мы же понимаем, что это не оптимальный вариант. Поэтому, в корне проекта создадим файл phpcs.xml и добавим туда следующее (в качестве примера использую код из текущего проекта):

Пояснения:

Основные команды

Вывести список установленных стандартов:

Вывести список снифов, используемых в конкретном стандарте:

Проверить форматирование файла file.php :

Проверить весь проект :

Проверить весь проект с выводом информации о том, где конткретно были встречены ошибки:

Вывести код-репорт, т.е. отчёт со сниппетами кода, где были обнаружены ошибки:

Есть ещё и другие команды, но, по моему мнению, вполне хватает перечисленных. Справедливости ради стоит отметить, что PHP CoedSniffer также включает и code beautifier fixer, т.е. можно исправить ошибки (читай отформатировать) командой:

но я всё же предпочитаю php-cs-fixer

PHP CS Fixer

Установка

Опять-таки подумайте устанвливать интсрумент глобально, или для каждого проекта. Второй вариант:

Если выбираете глобальную установку, убедитесь, что в переменную PATH добавлен путь к бинарным файлам composer-a. Проверьте это командой:

Пользовательские правила
Автоформат
Основные команды

Вывести список команд:

Вывести описание правил входящих в конкретный стандарт:

И, как уже был сказано, отформатировать (для разнообразия укажем стандарт Symfony):

В случае с fixer-ом я предпочитаю использовать не консоль, а настроить PhpStorm для использования этого инструмента, добавить горячие клавиши и использовать по месту в конкретных файлах.

Git pre-commit hook

Подведём итоги. Мы используем:

Внимание: php-cs-fixer исправит только те ошибки, которые он может исправить, не более. Например, если у Вас не написан phpdoc, fixer за вас его не напишет. Помните об этом.

Источник

Comments

dominikzogg commented Oct 4, 2017 •

When reporting an issue (bug) please provide the following information:

The PHP version you are using:
PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )

PHP CS Fixer version you are using:
PHP CS Fixer 2.7.0 Sandy Pool by Fabien Potencier and Dariusz Ruminski (e4e93a1

The command you use to run the fixer (and the configuration file you are using if any).

The text was updated successfully, but these errors were encountered:

We are unable to convert the task to an issue at this time. Please try again.

The issue was successfully created but we are unable to update the comment at this time.

SpacePossum commented Oct 4, 2017

Hi and thanks for reporting.

The PHP CS Fixer is, most likely, not allowed to write a cache file which triggers this exception.
I wonder if we can improve the exception message, or is there something else you would like to see changed?

dominikzogg commented Oct 4, 2017

@SpacePossum i understand the message, but not the reason. the file get touched by the command, but not filled with data.

SpacePossum commented Oct 4, 2017

I think the fixer tries to write in the directory you listed, so it needs permissions on that.
How do the permissions on the directory look like?

dominikzogg commented Oct 4, 2017

drwxrwxr-x 7 vagrant vagrant 4096 Sep 26 14:08 chubbyphp-deserialization

SpacePossum commented Oct 4, 2017

oh just spotted something in the first overview. There is already a cache file, but is without ‘w’. If you didn’t modify the permissions of the file maybe the fixer created it without writing permissions. hmmm..

dominikzogg commented Oct 4, 2017

I didn’t modify the file my self

SpacePossum commented Oct 4, 2017

Lets see if this PR will help.
One more question, did you maybe run the fixer with different users? (like maybe used sudo one time and not the next time?)

SpacePossum commented Oct 4, 2017

I can confirm this bug.
Reproduce steps:

Sadly my PR to fix this didn’t make it because I don’t have the time to;

I salute anyone up for the task, but I’m not going to put in a whole bunch of hours to prove something trivial as the PR provides.

SpacePossum commented Nov 6, 2017

closed through #3123 I hope,
@dominikzogg let us know if this issue still pops-up when using the latest releases

dominikzogg commented Nov 7, 2017

@SpacePossum there is still an error, no idea what i made wrong (using a vagrant with Ubuntu 16.04 and NFS on a Ubuntu 16.04 host)

SpacePossum commented Nov 7, 2017

Hi and thanks for reporting back,

Sadly the bug hunt continues 😐
Did you try removing the cache file first and run than? Could you show the file permissions of the cache file after a clean start?

SpacePossum commented Nov 7, 2017

is from the configuration, it seems the finder is not setup correctly, maybe try to resolve that first.

dominikzogg commented Nov 7, 2017 •

SpacePossum commented Nov 7, 2017

dominikzogg commented Nov 7, 2017

@SpacePossum finder exception was cause missing directory to check (see command line), i use no config which means i have to define the folder on call

A1rPun commented Nov 26, 2019

I had this problem too today:

Solved it with adding the missing folder:

I hope this will help someone (possible future-me).

mihhac commented Dec 4, 2019

My problem was with using

in the file path. When I switched to absolute path it started working.

JRixGer commented Oct 9, 2020 •

In what folder is this? if you don’t mind pls include the path?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *