mmoreram / php-formatter
PHP 自定义格式化工具
Requires
- php: >=7.0
- symfony/console: ^3.2||^4.0
- symfony/event-dispatcher: ^3.2||^4.0
- symfony/filesystem: ^3.2||^4.0
- symfony/finder: ^3.2||^4.0
- symfony/process: ^3.2||^4.0
- symfony/property-access: ^3.2||^4.0
- symfony/yaml: ^3.2||^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.8.3
- phpunit/phpunit: ^5.6.4
README
此PHP格式化工具旨在为您PHP项目提供一些批量操作,以确保其一致性。它们都不修复PSR规则。如果您想修复PSR规则,请检查friendsofphp/php-cs-fixer。
安装
以这种方式安装PHP格式化工具
$ composer global require mmoreram/php-formatter=dev-master
如果您是第一次全局安装依赖项,请确保将 ~/.composer/vendor/bin
添加到 $PATH,如下所示这里。
始终保持PHP格式化工具安装的最新状态
$ composer global update mmoreram/php-formatter
.phar文件
您还可以使用最新构建的.phar
。
$ git clone [email protected]:mmoreram/php-formatter.git $ cd php-formatter $ php build/php-formatter.phar
您可以将.phar
文件作为全局脚本复制
$ cp build/php-formatter.phar /usr/local/bin/php-formatter
编译
最后,您也可以编译自己的包版本。(您需要在php.ini中设置phar.readonly = Off
)。为此包的编译,您需要box-project/box2库。
$ git clone [email protected]:mmoreram/php-formatter.git $ cd php-formatter $ composer update --no-dev $ box build -v $ build/php-formatter.phar
您可以将.phar
文件作为全局脚本复制
$ cp build/php-formatter.phar /usr/local/bin/php-formatter
配置
您可以在项目的根目录放置一个名为.formatter.yml
的文件。在每次命令执行中,这将定义优先级。
如果命令中设置了选项,则使用该选项。如果没有设置,如果在一个找到的配置文件中定义了,则使用该选项。否则,将使用默认值。
这是配置参考
use-sort: group: - _main - Mmoreram group-type: each sort-type: alph sort-direction: asc strict: ~ header: | /* * This file is part of the php-formatter package * * Copyright (c) 2014 Marc Morera * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * * Feel free to edit as you please, and have fun. * * @author Marc Morera <[email protected]> */
您还可以使用--config|-c
选项定义搜索.formatter.yml
文件的位置
$ php-formatter formatter:use:sort src/ --config="src/"
命令
PHP格式化工具是一套针对您的PHP项目有用的命令。它们不考虑任何类型的通用编码标准,如PSR-0或PSR-1,更像是开发人员和审查员的一种实用工作方式。
Console Tool Usage: [options] command [arguments] Options: --help -h Display this help message. --quiet -q Do not output any message. --verbose -v|vv|vvv Increase the verbosity of messages --version -V Display this application version. --ansi Force ANSI output. --no-ansi Disable ANSI output. --no-interaction -n Do not ask any interactive question. Available commands: help Displays help for a command list Lists commands formatter formatter:header:fix Ensures that all PHP files has header defined in config file formatter:strict:fix Ensures that all PHP files have strict mode defined in config file. Only valid for >=PHP7.0 formatter:use:sort Sort Use statements
排序所有Use语句
您可以根据不同的方式排序您的Use语句。对于此命令,您必须提供要处理的PHP文件所在的路径作为参数。
- 命令:
php-formatter formatter:use:sort
- 参数:路径
- 选项:--exclude [多次]
- 选项:--group [多次]
- 选项:--group-type=一个|每个
- 选项:--sort-type=alpha|length
- 选项:--sort-direction=asc|desc
- 选项:--dry-run [无值]
分组
您可以使用任意数量的组来对Use语句进行排序(--group)。这意味着您可以将具有相同根(Symfony\)的行按特定顺序分组。
常见的组名为_main
,如果没有指定,则放置在开头。您可以使用--group
选项定义放置此组的位置
$ php-formatter formatter:use:sort src/ --group="Mmoreram" --group="_main" --group="Symfony"
此命令将按如下方式排序代码
use Mmoreram\MyClass; use Mmoreram\MySecondClass; use OneBundle\OneClass; use AnotherBundle\AnotherClass; use Symfony\OneClass; use Symfony\AnotherClass;
如您所见,组之间有一个空行。如果定义了任何组,则将创建一个包含所有命名空间的组。
当使用.formatter.yml
时,您还可以通过输入数组来指定子组
use-sort: group: - [Symfony\Component\HttpKernel, Symfony] - _main
这将创建一个Symfony组,将所有Symfony\Component\HttpKernel
类放置在顶部。
最后,--group-type
定义了您是否希望每个命名空间行都有一个use
文本
$ php-formatter formatter:use:sort src/ --group="Mmoreram" --group-type="each"
此命令将按如下方式排序代码
use AnotherBundle\AnotherClass; use OneBundle\OneClass; use Symfony\AnotherClass; use Symfony\OneClass; use Mmoreram\MyClass; use Mmoreram\MySecondClass;
或者是否只希望为所有组使用一个use。
$ php-formatter formatter:use:sort src/ --group="Mmoreram" --group-type="one"
此命令将按如下方式排序代码
use AnotherBundle\AnotherClass, OneBundle\OneClass, Symfony\AnotherClass, Symfony\OneClass; use Mmoreram\MyClass, Mmoreram\MySecondClass;
排序
有两种排序选项。您可以将命名空间按字母顺序排序(默认值)
$ php-formatter formatter:use:sort src/ --sort-type="alph"
此命令将按如下方式排序代码
use AnotherBundle\AnotherClass; use Mmoreram\MyClass; use Mmoreram\MySecondClass; use OneBundle\OneClass; use Symfony\AnotherClass; use Symfony\OneClass;
或按长度排序(长度相同的两个命名空间将按字母顺序排序)
$ php-formatter formatter:use:sort src/ --sort-type="length"
此命令将按如下方式排序代码
use AnotherBundle\AnotherClass; use Mmoreram\MySecondClass; use Symfony\AnotherClass; use OneBundle\OneClass; use Mmoreram\MyClass; use Symfony\OneClass;
您还可以定义排序的方向。这可以是升序(默认值)
$ php-formatter formatter:use:sort src/ --sort-direction="asc"
此命令将按如下方式排序代码
use AnotherBundle\AnotherClass; use Mmoreram\MyClass; use Mmoreram\MySecondClass; use OneBundle\OneClass; use Symfony\AnotherClass; use Symfony\OneClass;
或降序
$ php-formatter formatter:use:sort src/ --sort-direction="desc"
此命令将按如下方式排序代码
use Symfony\OneClass; use Symfony\AnotherClass; use OneBundle\OneClass; use Mmoreram\MySecondClass; use Mmoreram\MyClass; use AnotherBundle\AnotherClass;
修复所有PHP头文件
您可以在您的.formatter.yml
文件中定义您的PHP头文件,并且此命令将检查并修复所有PHP文件是否正确地具有它。
- 命令:
php-formatter formatter:header:fix
- 参数:路径
- 选项:--exclude [多次]
- 选项:--dry-run [无值]
修复所有严格声明
在您的>=7.0 PHP应用程序中,您可以在方法中使用简单类型声明。您可以通过在文件中声明strict_mode
变量来将您的应用程序定义得尽可能宽松。每个PHP文件都必须自行配置,因此为了确保所有文件在存在头部定义后,在命名空间声明之前有定义,您可以使用此命令。
- 命令:
php-formatter formatter:strict:fix
- 参数:路径
- 选项:--exclude [多次]
- 选项:--dry-run [无值]
这里可以有三种值。如果您定义了一个布尔值,那么每个找到的文件都将有给定的布尔值声明。
strict: true
否则,如果定义了一个'~'值,则您的声明行将被删除。
strict: '~'
排除文件夹/文件
您可以使用多选--exclude
根据需要多次排除文件夹和文件。此选项与Symfony组件Finder的工作方式相同,因此为了确保您正确理解此选项的工作方式,请查阅文档。
$ php-formatter formatter:header:fix src/ --exclude="vendor"
在这种情况下,可能最常用的方式是排除所有供应商从您的过程中。
试运行
您可以使用此工具仅用于测试将要修改的文件,使用选项--dry-run
$ php-formatter formatter:use:sort src/ --dry-run
只要您定义了此选项,此库中的任何命令都不会对您的代码有任何影响。