-
-
Save Billz95/9d5fad3af728b88540fa831b73261733 to your computer and use it in GitHub Desktop.
| <?php | |
| require_once __DIR__.'/relative/path/to/PrettierPHPFixer/File'; | |
| return PhpCsFixer\Config::create() | |
| ->registerCustomFixers([ | |
| (new PrettierPHPFixer()), | |
| ]) | |
| ->setRules([ | |
| 'Prettier/php' => true, | |
| ]); |
| <?php | |
| use PhpCsFixer\Fixer\FixerInterface; | |
| use PhpCsFixer\Tokenizer\Tokens; | |
| use Symfony\Component\Filesystem\Filesystem; | |
| /** | |
| * Fixer for using prettier-php to fix. | |
| */ | |
| final class PrettierPHPFixer implements FixerInterface { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getPriority() { | |
| // should be absolute first | |
| return 999; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function isCandidate(Tokens $tokens) { | |
| return true; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function isRisky() { | |
| return false; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function fix(SplFileInfo $file, Tokens $tokens) { | |
| if ( | |
| 0 < $tokens->count() && | |
| $this->isCandidate($tokens) && | |
| $this->supports($file) | |
| ) { | |
| $this->applyFix($file, $tokens); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getName() { | |
| return 'Prettier/php'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function supports(SplFileInfo $file) { | |
| return true; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| private function applyFix(SplFileInfo $file, Tokens $tokens) { | |
| $tmpFile = $this->getTmpFile($file); | |
| exec("yarn exec -- prettier --write --brace-style=1tbs $tmpFile"); | |
| $content = file_get_contents($tmpFile); | |
| $tokens->setCode($content); | |
| (new Filesystem())->remove($tmpFile); | |
| } | |
| /** | |
| * Create a Temp file with the same content as given file. | |
| * | |
| * @param SplFileInfo $file file to be copied | |
| * | |
| * @return string tmp file name | |
| */ | |
| private function getTmpFile(SplFileInfo $file): string { | |
| $fileSys = new Filesystem(); | |
| $tmpFolderPath = __DIR__.'/tmp'; | |
| $fileSys->mkdir($tmpFolderPath); | |
| $tmpFileName = str_replace( | |
| DIRECTORY_SEPARATOR, | |
| '_', | |
| $file->getRealPath() | |
| ); | |
| $tmpFilePath = $tmpFolderPath.'/__'.$tmpFileName; | |
| $fileSys->copy($file->getRealPath(), $tmpFilePath, true); | |
| return $tmpFilePath; | |
| } | |
| } |
Prettier integration to php-cs-fixer
This recipe uses prettier/plugin-php as a Fixer for php-cs-fixer.
prettier will be executed at the very beginning before the other fixers are
applied, such that the php-cs-fixer user's configurations is respected.
Useful Configurations
Priority
If you would like prettier to execute last, which means you prefer to use
php-cs-fixer to complement the current missing features of prettier, you
can decrease the priority value of this fixer by decreasing the value returned
by getPriority function to something like -999
Prettier's native configuration
If you would like to add configuration settings for prettier to this Fixer,
you can modify the exec line in applyFix function.
For example,
- exec("yarn exec -- prettier --write --brace-style=1tbs $tmpFile");
+ exec("yarn exec -- prettier --write --brace-style=psr-2 $tmpFile");will allow you to change the braceSytle for this fixer
Possible Improvement
- the configuration can be modified from
php-cs-fixerconfiguration - autoloading
Thanks for this. I had to make few changes to make it work. For those having some problems can look at my fork - https://gist.github.com/piyush1104/5eba790d07834b2efbb5ac7e690e6555. It might work for you then.
Thank you for your interest, also if you have any improvement that will make it work better, feel free to create a pull request for prettier directly as this recipe is included in prettier repo at https://github.com/prettier/plugin-php/blob/master/docs/recipes/php-cs-fixer/, cheers.
Thank you for your interest, also if you have any improvement that will make it work better, feel free to create a pull request for
prettierdirectly as this recipe is included in prettier repo at https://github.com/prettier/plugin-php/blob/master/docs/recipes/php-cs-fixer/, cheers.
Sorry, I already saw that my comments were already incorporated in the repo you are mentioning. I deleted my comments just before you posted your reply. 😄
Hi I want to apply your gist to the prettier plugin for PHPStorm. How can i do this? I can not find the two files you mention above
Repo of
PHP-CS-Fixer:https://github.com/FriendsOfPHP/PHP-CS-Fixer
Repo of
Prettier/plugin-php:https://github.com/prettier/plugin-php