vinelab / php-cs-fixer
自动修复 Symfony 编码标准的脚本
Requires
- php: >=5.3.6
- sebastian/diff: 1.1.*
- symfony/console: ~2.1
- symfony/filesystem: ~2.1
- symfony/finder: ~2.1
README
PHP编码标准修复工具可以在您想遵循PSR-1和PSR-2文档中定义的PHP编码标准时,修复代码中的大多数问题。
如果您已经使用PHP_CodeSniffer
来识别代码中的编码标准问题,您知道手动修复它们是非常繁琐的,尤其是在大型项目中。这个工具会为您完成这项工作。
要求
PHP需要至少是PHP 5.3.6版本
安装
本地安装
下载php-cs-fixer.phar文件,并将其存储在您的计算机上某个位置。
全局安装(手动)
您可以使用以下命令轻松从系统中的任何位置访问php-cs-fixer
$ sudo wget http://get.sensiolabs.org/php-cs-fixer.phar -O /usr/local/bin/php-cs-fixer
或使用curl
$ sudo curl http://get.sensiolabs.org/php-cs-fixer.phar -o /usr/local/bin/php-cs-fixer
然后
$ sudo chmod a+x /usr/local/bin/php-cs-fixer
然后,只需运行php-cs-fixer
。
全局安装(Composer)
要安装PHP-CS-Fixer,请安装Composer并执行以下命令
$ ./composer.phar global require FriendsOfPhp/php-cs-fixer @stable
然后,确保您有~/.composer/vendor/bin
在您的PATH
中,然后您就可以开始使用了
export PATH="$PATH:$HOME/.composer/vendor/bin"
全局安装(homebrew)
PHP-CS-Fixer是homebrew-php项目的一部分。如果您还没有,请遵循https://github.com/homebrew/homebrew-php中的安装说明。
$ brew install homebrew/php/php-cs-fixer
更新
本地更新
self-update
命令尝试更新php-cs-fixer
本身
$ php php-cs-fixer.phar self-update
全局安装(手动)
您可以通过此命令更新php-cs-fixer
$ sudo php-cs-fixer self-update
全局安装(homebrew)
您可以通过此命令更新php-cs-fixer
$ brew upgrade php-cs-fixer
用法
fix
命令尝试在一个给定的文件或目录上尽可能修复编码标准问题
php php-cs-fixer.phar fix /path/to/dir php php-cs-fixer.phar fix /path/to/file
--level
选项限制应用于项目的修复器
php php-cs-fixer.phar fix /path/to/project --level=psr0 php php-cs-fixer.phar fix /path/to/project --level=psr1 php php-cs-fixer.phar fix /path/to/project --level=psr2 php php-cs-fixer.phar fix /path/to/project --level=symfony
默认情况下,所有PSR-2修复器和一些额外的修复器都会运行。您不能通过此选项启用“contrib level”修复器;相反,您应该通过--fixers
选项手动设置它们。
--fixers
选项允许您选择要应用的精确修复器(修复器名称必须用逗号分隔)
php php-cs-fixer.phar fix /path/to/dir --fixers=linefeed,short_tag,indentation
如果您更方便,还可以使用-name
排除您不想要的修复器
php php-cs-fixer.phar fix /path/to/dir --fixers=-short_tag,-indentation
当与精确和排除修复器结合使用时,将应用精确修复器以及上述排除的结果
php php-cs-fixer.phar fix /path/to/dir --fixers=linefeed,-short_tag
--dry-run
和--diff
的组合将显示建议的修复总结,但不会更改您的文件。
该命令还可以从标准输入读取,在这种情况下,它不会自动修复任何内容
cat foo.php | php php-cs-fixer.phar fix --diff -
从可用的修复器列表中选择
- psr0 [PSR-0] 类必须在与它们的命名空间匹配的路径中
至少有一个命名空间深度,类名应与文件名匹配。
- encoding [PSR-1] PHP代码必须仅使用UTF-8
无BOM(移除BOM)。
- short_tag [PSR-1] PHP代码必须使用长
<?php ?> 标签或短echo <?= ?> 标签;它不得使用其他标签变体。
- braces [PSR-2] 每个结构的主体必须
应被大括号括起来。大括号应放置得当。大括号的内容应正确缩进。
- elseif [PSR-2] 关键字 elseif 应
使用,而不是 else if,以便所有控制关键字看起来像单个单词。
- eof_ending [PSR-2] 一个文件必须始终以一个
空行结束。
- function_call_space [PSR-2] 当调用一个方法或
函数时,方法或函数名与开括号之间不得有空格。
- function_declaration [PSR-2] 函数声明中的空格应
放置得当。
- indentation [PSR-2] 代码必须使用 4
个空格的缩进,且不得使用制表符进行缩进。
- line_after_namespace [PSR-2] 命名空间声明之后
必须有一个空白行。
- linefeed [PSR-2] 所有 PHP 文件必须使用 Unix
LF(换行)行结束。
- lowercase_constants [PSR-2] PHP 常量 true、false、
和 null 必须是小写。
- lowercase_keywords [PSR-2] PHP 关键字必须是小写。
。
- method_argument_space [PSR-2] 在方法参数和方法
调用中,每个逗号之前不得有空格,每个逗号之后必须有一个空格。
- multiple_use [PSR-2] 每个声明中必须有一个 use
关键字。
- parenthesis [PSR-2] 开括号之后不得有空格。
。闭括号之前不得有空格。
- php_closing_tag [PSR-2] 仅包含 PHP 的文件中
必须省略关闭的 ?> 标签。
- trailing_spaces [PSR-2] 从非空白行的末尾
移除尾随空格。
- visibility [PSR-2] 必须在所有属性和方法上
声明可见性;抽象和最终必须在可见性之前声明;静态必须在可见性之后声明。
- concat_without_spaces [symfony] 连接应不使用空格。
。
duplicate_semicolon [symfony] 删除重复的分号。
extra_empty_lines [symfony] 移除额外的空白行。
- include [symfony] 包含和文件路径应
使用单个空格分隔。文件路径不应置于方括号中。
- multiline_array_trailing_comma [symfony] PHP 多行数组应
有尾随逗号。
- namespace_no_leading_whitespace [symfony] 命名空间声明
行不应包含前导空格。
- new_with_braces [symfony] 使用 new 关键字创建的所有
实例都必须跟有括号。
- object_operator [symfony] 在对象运算符
T_OBJECT_OPERATOR 前后不应有空格。
- operators_spaces [symfony] 运算符应至少有一个空格
包围。
- phpdoc_params [symfony] @param 标签的所有项必须
垂直对齐。
- remove_lines_between_uses [symfony] 移除 use 语句之间的换行符。
。
- return [symfony] return 语句之前应有一个空行。
。
- single_array_no_trailing_comma [symfony] PHP 单行数组不应有
尾随逗号。
- spaces_before_semicolon [symfony] 在结尾分号之前不允许
存在单行空白。
- spaces_cast [symfony] 在类型转换和变量之间应有一个
空格。
standardize_not_equal [symfony] 将所有 <> 替换为 !=。
- ternary_spaces [symfony] 标准化三元运算符周围的空格。
。
- unused_use [symfony] 必须删除未使用的 use 语句。
。
- whitespacy_lines [symfony] 从空白行的末尾
移除尾随空格。
- align_double_arrow [contrib] 在连续行中对齐双箭头符号。
。
- align_equals [contrib] 在
。
- concat_with_spaces [contrib] 连接应至少有一个空格
包围。
- multiline_spaces_before_semicolon [contrib] 在多行之前不允许存在空白。
存在单行空白。
有序使用 [贡献] 排序使用语句。
- 短数组语法 [贡献] PHP 数组应该使用
PHP 5.4 短语法。
- 严格 [贡献] 比较应该是严格的。
警告!这可能会改变代码的行为。
- 严格参数 [贡献] 函数应该使用
$strict 参数。警告!这可能会改变代码的行为。
--config
选项根据一些已知的目录结构自定义要分析的文件
# For the Symfony 2.3+ branch php php-cs-fixer.phar fix /path/to/sf23 --config=sf23
从可用配置列表中选择
- 默认 默认配置
- magento Magento 应用的配置
- sf23 Symfony 2.3+ 分支的配置
--dry-run
选项显示需要修复的文件,但实际上不会修改它们
php php-cs-fixer.phar fix /path/to/code --dry-run
您可以通过在项目的根目录中保存 .php_cs
文件来配置修复器,而不是使用命令行选项。该文件必须返回一个实现 SymfonyCSConfigInterface
的实例,这使得您可以配置修复器、级别、需要分析的文件和目录
<?php $finder = Symfony\CS\Finder\DefaultFinder::create() ->exclude('somedir') ->in(__DIR__) ; return Symfony\CS\Config\Config::create() ->fixers(array('indentation', 'elseif')) ->finder($finder) ;
您还可以使用黑名单而不是上述显示的白名单方法来使用修复器。以下示例显示了如何使用所有 symfony
修复器,但排除 psr0 修复器。注意修复器名称前额外的 -
。
<?php $finder = Symfony\CS\Finder\DefaultFinder::create() ->exclude('somedir') ->in(__DIR__) ; return Symfony\CS\Config\Config::create() ->fixers(array('-psr0')) ->finder($finder) ;
默认情况下,symfony
级别被设置,您也可以更改默认级别
<?php return Symfony\CS\Config\Config::create() ->level(Symfony\CS\FixerInterface::PSR2_LEVEL) ;
结合这些配置和命令行选项,您可以选择不同的用法。
例如,默认级别是 symfony
,但如果您也不希望使用 psr0
修复器,可以指定 --fixers="-psr0"
选项。
但如果您只使用精确的修复器与 --fixers
选项,则只有这些精确的修复器被启用,无论是否设置了级别。
使用 --config-file
选项,您可以指定 .php_cs
文件的路径。
辅助工具
为以下编辑器存在专门的插件
贡献
此工具附带了许多内置的修复器和查找器,但每个人都欢迎贡献更多。
修复器
修复器 是一个尝试修复一个 CS 问题(一个 Fixer
类必须实现 FixerInterface
)的类。
配置
配置 了解 CS 级别以及当在项目目录中运行时工具必须扫描的文件和目录。这对于遵循知名目录结构的项目很有用(例如,对于 Symfony 项目)。