efureev/php-cs-fixer-1

一个用于自动修复PHP代码风格的工具

维护者

详细信息

github.com/efureev/PHP-CS-Fixer-1

来源

安装: 348

依赖者: 0

建议者: 0

安全性: 0

星星: 0

观察者: 1

Forks: 1,577

类型:应用程序

v2.13.2 2018-12-17 13:11 UTC

README

PHP编码标准修复工具(PHP CS Fixer)可以修复您的代码以符合标准;无论是想要遵循PSR-1、PSR-2等PHP编码标准,还是其他社区驱动的标准,如Symfony。您还可以通过配置定义您(团队)的风格。

它可以使您的代码现代化(如将PHP 5.6中的pow函数转换为**运算符)并(微)优化它。

如果您已经在代码中使用了代码检查器来识别编码标准问题,您知道手动修复它们是枯燥的,尤其是在大型项目中。此工具不仅会检测它们,还会为您修复它们。

PHP CS Fixer在GitHub上维护,网址为https://github.com/FriendsOfPHP/PHP-CS-Fixer。欢迎在那里提交bug报告和关于新功能的想法。

您可以在https://gitter.im/PHP-CS-Fixer/Lobby上与我们讨论项目、配置、可能的改进、想法和问题,请访问我们!

要求

PHP需要至少是PHP 5.6.0版本。

安装

本地

下载php-cs-fixer.phar文件,并将其存储在您的计算机上的某个位置。

全局(手动)

您可以使用以下命令轻松地在系统上的任何位置访问最新的php-cs-fixer

$ wget https://cs.sensiolabs.org/download/php-cs-fixer-v2.phar -O php-cs-fixer

或指定版本

$ wget https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.13.1/php-cs-fixer.phar -O php-cs-fixer

或使用curl

$ curl -L https://cs.sensiolabs.org/download/php-cs-fixer-v2.phar -o php-cs-fixer

然后

$ sudo chmod a+x php-cs-fixer
$ sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer

然后,只需运行php-cs-fixer

全局(Composer)

要安装PHP CS Fixer,请安装Composer并运行以下命令

$ composer global require friendsofphp/php-cs-fixer

然后请确保您已经在您的PATH中设置了全局Composer二进制目录。该目录是平台相关的,有关详细信息,请参阅Composer文档。例如,某些Unix系统的示例

$ export PATH="$PATH:$HOME/.composer/vendor/bin"

全局(homebrew)

$ brew install php-cs-fixer

本地(PHIVE)

安装PHIVE并运行以下命令

$ phive install php-cs-fixer # use `--global` for global install

更新

本地

self-update命令尝试更新php-cs-fixer本身

$ php php-cs-fixer.phar self-update

全局(手动)

您可以通过此命令更新php-cs-fixer

$ sudo php-cs-fixer self-update

全局(Composer)

您可以通过此命令更新php-cs-fixer

$ ./composer.phar global update friendsofphp/php-cs-fixer

全局(homebrew)

您可以通过此命令更新php-cs-fixer

$ brew upgrade php-cs-fixer

本地(PHIVE)

$ phive update php-cs-fixer

用法

fix命令试图在一个给定的文件或一个给定的目录及其子目录中尽可能多地修复编码标准问题

$ php php-cs-fixer.phar fix /path/to/dir
$ php php-cs-fixer.phar fix /path/to/file

默认情况下,--path-mode设置为override,这意味着如果您通过命令参数指定了文件或目录的路径,则配置文件中提供给Finder的路径将被忽略。您可以使用--path-mode=intersection将配置文件和参数中的路径合并

$ php php-cs-fixer.phar fix --path-mode=intersection /path/to/dir

--format选项用于输出格式。支持的格式有txt(默认格式)、jsonxmlcheckstylejunit

注意:以下格式的输出是根据XML架构生成的

--verbose 选项将显示应用的规则。当使用 txt 格式时,也会显示进度通知。

--rules 选项限制应用于项目的规则。

$ php php-cs-fixer.phar fix /path/to/project --rules=@PSR2

默认使用 PSR1 和 PSR2 规则。

--rules 选项允许您选择要应用的精确规则(规则名称必须用逗号分隔)。

$ php php-cs-fixer.phar fix /path/to/dir --rules=line_ending,full_opening_tag,indentation_type

您也可以通过在规则名称前放置破折号来黑名单您不想应用的规则,如果这样做更方便,可以使用 -name_of_fixer

$ php php-cs-fixer.phar fix /path/to/dir --rules=-full_opening_tag,-indentation_type

当使用精确和黑名单规则的组合时,将应用精确规则以及上述黑名单的结果。

$ php php-cs-fixer.phar fix /path/to/project --rules=@Symfony,-@PSR1,-blank_line_before_statement,strict_comparison

可以使用 JSON 格式的字符串提供规则的完整配置。

$ php php-cs-fixer.phar fix /path/to/project --rules='{"concat_space": {"spacing": "none"}}'

--dry-run 标志将运行修复器而不修改您的文件。

--diff 标志可以用来让修复器输出它所做的所有更改。

--diff-format 选项允许指定修复器应该以哪种格式输出所做的更改。

  • udiff:统一差异格式;
  • sbd:Sebastianbergmann/diff 格式(使用 --diff 而未指定 diff-format 时的默认格式)。

--allow-risky 选项(传递 yesno)允许您设置是否允许运行风险规则。默认值取自配置文件。风险规则是可能会改变代码行为的规则。默认情况下不运行任何风险规则。

--stop-on-violation 标志在第一个需要修复的文件上停止执行。

--show-progress 选项允许您选择渲染进程进度的方式。

  • none:禁用进度输出;
  • run-in:[已弃用] 简单的单行进度输出;
  • estimating:[已弃用] 包含文件数量和每行的百分比的多行进度输出。请注意,使用此选项时,在处理之前评估文件列表以获取文件总数,然后将其保留在内存中以避免两次使用文件迭代器。这会影响内存使用,因此不建议在非常大的项目上使用此选项;
  • estimating-max:[已弃用] 与 dots 相同;
  • dots:与 estimating 相同,但使用所有终端列而不是默认的 80 列。

如果未提供此选项,则默认为 run-in,除非使用了禁用输出的配置文件,在这种情况下,默认为 none。如果命令的详细程度小于 verbose,则此选项没有效果。

$ php php-cs-fixer.phar fix --verbose --show-progress=estimating

该命令还可以从标准输入读取,在这种情况下,它不会自动修复任何内容。

$ cat foo.php | php php-cs-fixer.phar fix --diff -

最后,如果您不需要在 CLI 级别保留 BC,则可以使用 PHP_CS_FIXER_FUTURE_MODE 来开始使用在下一个主版本中默认的选项(统一差异,估计,全宽进度指示器)。

$ PHP_CS_FIXER_FUTURE_MODE=1 php php-cs-fixer.phar fix -v --diff

从可用规则列表中选择

  • align_multiline_comment

    多行 DocComments 的每一行都必须有星号 [PSR-5] 并与第一行对齐。

    配置选项

    • comment_type'all_multiline''phpdocs_like''phpdocs_only'):是否仅修复 PHPDoc 注释(phpdocs_only),任何行都以星号开始的任何多行注释(phpdocs_like)或任何多行注释(all_multiline);默认为 'phpdocs_only'
  • array_indentation

    数组中的每个元素都必须缩进一次。

  • array_syntax

    PHP 数组应使用配置的语法声明。

    配置选项

    • syntax'long''short'):是否使用 longshort 数组语法;默认为 'long'
  • backtick_to_shell_exec

    将反引号运算符转换为 shell_exec 调用。

  • binary_operator_spaces [@Symfony]

    二元运算符应按配置的方式包围空格。

    配置选项

    • align_double_arrow (false, null, true):是否应用、移除或忽略双箭头对齐;默认为 false。已弃用:请使用选项 operatorsdefault
    • align_equals (false, null, true):是否应用、移除或忽略等于号对齐;默认为 false。已弃用:请使用选项 operatorsdefault
    • default ('align', 'align_single_space', 'align_single_space_minimal', 'no_space', 'single_space', null):默认修复策略;默认为 'single_space'
    • operators (array):二元操作符 binary operatorfix strategy 值的字典,这些值与默认策略不同;默认为 []
  • blank_line_after_namespace [@PSR2, @Symfony]

    命名空间声明之后必须有一空行。

  • blank_line_after_opening_tag [@Symfony]

    确保PHP开标签同一行没有代码,并且之后跟一个空行。

  • blank_line_before_return

    返回语句之前应该有一个空行。已弃用:请使用 blank_line_before_statement

  • blank_line_before_statement [@Symfony]

    任何配置的语句之前必须有一个空行。

    配置选项

    • statements (a subset of ['break', 'case', 'continue', 'declare', 'default', 'die', 'do', 'exit', 'for', 'foreach', 'goto', 'if', 'include', 'include_once', 'require', 'require_once', 'return', 'switch', 'throw', 'try', 'while', 'yield']):必须先有一个空行的语句列表;默认为 ['break', 'continue', 'declare', 'return', 'throw', 'try']
  • braces [@PSR2, @Symfony]

    每个结构体都必须由花括号包围。花括号应该放置得当。花括号体的缩进应该正确。

    配置选项

    • allow_single_line_closure (bool):是否允许单行lambda表示法;默认为 false
    • position_after_anonymous_constructs ('next', 'same'):匿名结构(匿名类和lambda函数)之后的打开花括号应该放在“下一行”还是“同一行”;默认为 'same'
    • position_after_control_structures ('next', 'same'):控制结构之后的打开花括号应该放在“下一行”还是“同一行”;默认为 'same'
    • position_after_functions_and_oop_constructs ('next', 'same'):类构造(非匿名类、接口、特质、方法和非lambda函数)之后的打开花括号应该放在“下一行”还是“同一行”;默认为 'next'
  • cast_spaces [@Symfony]

    类型转换和变量之间应该有一个空格或没有。

    配置选项

    • space ('none', 'single'):应用在类型转换和变量之间的间距;默认为 'single'
  • class_attributes_separation [@Symfony]

    类、特性和接口元素必须用一个空行隔开。

    配置选项

    • elements (a subset of ['const', 'method', 'property']):类元素列表;'const', 'method', 'property';默认为 ['const', 'method', 'property']
  • class_definition [@PSR2, @Symfony]

    类、特性和接口定义的关键字周围应该有一个空格。

    配置选项

    • multi_line_extends_each_single_line (bool):定义应该是多行还是单行;默认为 false;已弃用别名:multiLineExtendsEachSingleLine
    • single_item_single_line (bool):定义在包含单个项目时应该是单行还是多行;默认为 false;已弃用别名:singleItemSingleLine
    • single_line (bool):定义应该是单行还是多行;默认为 false;已弃用别名:singleLine
  • class_keyword_remove

    ::class 关键字转换为FQCN字符串。

  • combine_consecutive_issets

    多次使用 isset($var) && 应该在一个调用中完成。

  • combine_consecutive_unsets

    对多个项目调用 unset 应该在一个调用中完成。

  • combine_nested_dirname [@PHP70Migration:risky, @PHP71Migration:risky]

    通过只有一个调用并使用第二个 $level 参数替换多个嵌套的 dirname 调用。需要PHP >= 7.0。

    风险规则:当覆盖函数“dirname”时存在风险。

  • 用于PHP文档注释的注释

    在结构元素上使用时,应使用注释文档。

    风险规则:新的文档块可能意味着更多,例如,Doctrine实体可能在数据库中有一个新列。

  • 紧凑的可空类型提示

    在可空类型提示中删除多余的空格。

  • concat_space [@Symfony]

    连接操作符应按照配置进行空格处理。

    配置选项

    • spacing ('none', 'one'):要应用在连接操作符周围的空格;默认为'none'
  • date_time_immutable

    应使用类DateTimeImmutable而不是DateTime

    风险规则:当代码依赖于修改“DateTime”对象或覆盖任何“date_create*”函数时存在风险。

  • declare_equal_normalize [@Symfony]

    声明语句中的等号应周围有空格或不按配置。

    配置选项

    • space ('none', 'single'):要应用于等号周围的空格;默认为'none'
  • declare_strict_types [@PHP70Migration:risky, @PHP71Migration:risky]

    在所有文件中强制执行严格类型声明。需要PHP >= 7.0。

    风险规则:强制执行严格类型将阻止非严格代码运行。

  • dir_constant [@Symfony:risky]

    dirname(__FILE__)表达式替换为等效的__DIR__常量。

    风险规则:当覆盖函数“dirname”时存在风险。

  • doctrine_annotation_array_assignment [@DoctrineAnnotation]

    Doctrine注释必须使用配置的运算符在数组中进行赋值。

    配置选项

    • ignored_tags (array):不应视为Doctrine注释的标记列表;默认为['abstract', 'access', 'code', 'deprec', 'encode', 'exception', 'final', 'ingroup', 'inheritdoc', 'inheritDoc', 'magic', 'name', 'toc', 'tutorial', 'private', 'static', 'staticvar', 'staticVar', 'throw', 'api', 'author', 'category', 'copyright', 'deprecated', 'example', 'filesource', 'global', 'ignore', 'internal', 'license', 'link', 'method', 'package', 'param', 'property', 'property-read', 'property-write', 'return', 'see', 'since', 'source', 'subpackage', 'throws', 'todo', 'TODO', 'usedBy', 'uses', 'var', 'version', 'after', 'afterClass', 'backupGlobals', 'backupStaticAttributes', 'before', 'beforeClass', 'codeCoverageIgnore', 'codeCoverageIgnoreStart', 'codeCoverageIgnoreEnd', 'covers', 'coversDefaultClass', 'coversNothing', 'dataProvider', 'depends', 'expectedException', 'expectedExceptionCode', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp', 'group', 'large', 'medium', 'preserveGlobalState', 'requires', 'runTestsInSeparateProcesses', 'runInSeparateProcess', 'small', 'test', 'testdox', 'ticket', 'uses', 'SuppressWarnings', 'noinspection', 'package_version', 'enduml', 'startuml', 'fix', 'FIXME', 'fixme', 'override']
    • operator (':', '='):要使用的运算符;默认为'='
  • doctrine_annotation_braces [@DoctrineAnnotation]

    没有参数的Doctrine注释必须使用配置的语法。

    配置选项

    • ignored_tags (array):不应视为Doctrine注释的标记列表;默认为['abstract', 'access', 'code', 'deprec', 'encode', 'exception', 'final', 'ingroup', 'inheritdoc', 'inheritDoc', 'magic', 'name', 'toc', 'tutorial', 'private', 'static', 'staticvar', 'staticVar', 'throw', 'api', 'author', 'category', 'copyright', 'deprecated', 'example', 'filesource', 'global', 'ignore', 'internal', 'license', 'link', 'method', 'package', 'param', 'property', 'property-read', 'property-write', 'return', 'see', 'since', 'source', 'subpackage', 'throws', 'todo', 'TODO', 'usedBy', 'uses', 'var', 'version', 'after', 'afterClass', 'backupGlobals', 'backupStaticAttributes', 'before', 'beforeClass', 'codeCoverageIgnore', 'codeCoverageIgnoreStart', 'codeCoverageIgnoreEnd', 'covers', 'coversDefaultClass', 'coversNothing', 'dataProvider', 'depends', 'expectedException', 'expectedExceptionCode', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp', 'group', 'large', 'medium', 'preserveGlobalState', 'requires', 'runTestsInSeparateProcesses', 'runInSeparateProcess', 'small', 'test', 'testdox', 'ticket', 'uses', 'SuppressWarnings', 'noinspection', 'package_version', 'enduml', 'startuml', 'fix', 'FIXME', 'fixme', 'override']
    • syntax ('with_braces', 'without_braces'):是否添加或删除括号;默认为'without_braces'
  • doctrine_annotation_indentation [@DoctrineAnnotation]

    Doctrine注释必须使用四个空格缩进。

    配置选项

    • ignored_tags (array):不应视为Doctrine注释的标记列表;默认为['abstract', 'access', 'code', 'deprec', 'encode', 'exception', 'final', 'ingroup', 'inheritdoc', 'inheritDoc', 'magic', 'name', 'toc', 'tutorial', 'private', 'static', 'staticvar', 'staticVar', 'throw', 'api', 'author', 'category', 'copyright', 'deprecated', 'example', 'filesource', 'global', 'ignore', 'internal', 'license', 'link', 'method', 'package', 'param', 'property', 'property-read', 'property-write', 'return', 'see', 'since', 'source', 'subpackage', 'throws', 'todo', 'TODO', 'usedBy', 'uses', 'var', 'version', 'after', 'afterClass', 'backupGlobals', 'backupStaticAttributes', 'before', 'beforeClass', 'codeCoverageIgnore', 'codeCoverageIgnoreStart', 'codeCoverageIgnoreEnd', 'covers', 'coversDefaultClass', 'coversNothing', 'dataProvider', 'depends', 'expectedException', 'expectedExceptionCode', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp', 'group', 'large', 'medium', 'preserveGlobalState', 'requires', 'runTestsInSeparateProcesses', 'runInSeparateProcess', 'small', 'test', 'testdox', 'ticket', 'uses', 'SuppressWarnings', 'noinspection', 'package_version', 'enduml', 'startuml', 'fix', 'FIXME', 'fixme', 'override']
    • indent_mixed_lines (bool):是否缩进在关闭括号之前有内容的行;默认为false
  • doctrine_annotation_spaces [@DoctrineAnnotation]

    修复Doctrine注释中的空格。

    配置选项

    • after_argument_assignments (null, bool):是否在参数赋值运算符后添加、删除或忽略空格;默认为false
    • after_array_assignments_colon (null, bool):是否在数组赋值:运算符后添加、删除或忽略空格;默认为true
    • after_array_assignments_equals (null, bool):是否在数组赋值=运算符后添加、删除或忽略空格;默认为true
    • around_argument_assignments (bool):是否修复参数赋值运算符周围的空格;默认为true。已弃用:使用选项before_argument_assignmentsafter_argument_assignments代替
    • around_array_assignments (bool): 是否修正数组赋值运算符周围的空格;默认为 true。已弃用:请使用选项 before_array_assignments_equalsafter_array_assignments_equalsbefore_array_assignments_colonafter_array_assignments_colon 代替
    • around_commas (bool): 是否修正逗号周围的空格;默认为 true
    • around_parentheses (bool): 是否修正括号周围的空格;默认为 true
    • before_argument_assignments (null, bool): 是否在参数赋值运算符之前添加、删除或忽略空格;默认为 false
    • before_array_assignments_colon (null, bool): 是否在数组冒号赋值运算符之前添加、删除或忽略空格;默认为 true
    • before_array_assignments_equals (null, bool): 是否在数组等号赋值运算符之前添加、删除或忽略空格;默认为 true
    • ignored_tags (array):不应视为Doctrine注释的标记列表;默认为['abstract', 'access', 'code', 'deprec', 'encode', 'exception', 'final', 'ingroup', 'inheritdoc', 'inheritDoc', 'magic', 'name', 'toc', 'tutorial', 'private', 'static', 'staticvar', 'staticVar', 'throw', 'api', 'author', 'category', 'copyright', 'deprecated', 'example', 'filesource', 'global', 'ignore', 'internal', 'license', 'link', 'method', 'package', 'param', 'property', 'property-read', 'property-write', 'return', 'see', 'since', 'source', 'subpackage', 'throws', 'todo', 'TODO', 'usedBy', 'uses', 'var', 'version', 'after', 'afterClass', 'backupGlobals', 'backupStaticAttributes', 'before', 'beforeClass', 'codeCoverageIgnore', 'codeCoverageIgnoreStart', 'codeCoverageIgnoreEnd', 'covers', 'coversDefaultClass', 'coversNothing', 'dataProvider', 'depends', 'expectedException', 'expectedExceptionCode', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp', 'group', 'large', 'medium', 'preserveGlobalState', 'requires', 'runTestsInSeparateProcesses', 'runInSeparateProcess', 'small', 'test', 'testdox', 'ticket', 'uses', 'SuppressWarnings', 'noinspection', 'package_version', 'enduml', 'startuml', 'fix', 'FIXME', 'fixme', 'override']
  • elseif [@PSR2, @Symfony]

    应使用关键字 elseif 代替 else if,以便所有控制关键字看起来像一个单词。

  • encoding [@PSR1, @PSR2, @Symfony]

    PHP 代码必须仅使用无 BOM 的 UTF-8(删除 BOM)。

  • ereg_to_preg [@Symfony:risky]

    preg 代替已弃用的 ereg 正则表达式函数。

    风险规则:如果覆盖了 ``ereg`` 函数,则存在风险。

  • error_suppression [@Symfony:risky]

    应在弃用通知中添加错误控制运算符,并/或从其他情况中删除。

    风险规则:添加/删除 ``@`` 可能会导致代码行为发生变化,或者如果覆盖了 ``trigger_error`` 函数。

    配置选项

    • mute_deprecation_error (bool): 是否在弃用通知中添加 @;默认为 true
    • noise_remaining_usages (bool): 是否删除剩余使用中的 @;默认为 false
    • noise_remaining_usages_exclude (array): 从删除 @ 中排除的全局函数列表;默认为 []
  • escape_implicit_backslashes

    在字符串和 here文档中转义隐式反斜杠,以方便理解哪些是 PHP 识别的特殊字符,哪些不是。

    配置选项

    • double_quoted (bool): 是否修正双引号字符串;默认为 true
    • heredoc_syntax (bool): 是否修正 here文档语法;默认为 true
    • single_quoted (bool): 是否修正单引号字符串;默认为 false
  • explicit_indirect_variable

    将花括号添加到间接变量中,以便更容易理解。需要 PHP >= 7.0。

  • explicit_string_variable

    将隐式变量转换为显式变量,在双引号字符串或 here文档语法中使用。

  • final_internal_class

    内部类应该是 final

    风险规则:将类更改为 ``final`` 可能会导致代码执行中断。

    配置选项

    • annotation-black-list (array): 必须省略以修复类的类级别注释标记,即使同时使用了所有白名单标记。 (不区分大小写);默认为 ['@final', '@Entity', '@ORM']
    • annotation-white-list (array): 必须设置以修复类的类级别注释标记。 (不区分大小写);默认为 ['@internal']
  • fopen_flag_order [@Symfony:risky]

    fopen 调用中的标志进行排序,bt 必须是最后的。

    风险规则:如果覆盖了 ``fopen`` 函数,则存在风险。

  • fopen_flags [@Symfony:risky]

    fopen 调用中的标志必须包含 b,并省略 t

    风险规则:如果覆盖了 ``fopen`` 函数,则存在风险。

  • full_opening_tag [@PSR1, @PSR2, @Symfony]

    PHP 代码必须使用长 <?php 标签或短 echo <?= 标签,而不使用其他标签变体。

  • fully_qualified_strict_types

    将函数参数中的导入 FQCN 参数和返回类型转换为简短版本。

  • function_declaration [@PSR2, @Symfony]

    在函数声明中应正确放置空格。

    配置选项

    • closure_function_spacing ('none', 'one'):闭包中开括号前的间距;默认为 'one'
  • function_to_constant [@Symfony:risky]

    将返回常量的核心函数调用替换为常量。

    风险规则:如果配置的任何要替换的函数被重写,则为风险。

    配置选项

    • functions['get_called_class', 'get_class', 'php_sapi_name', 'phpversion', 'pi'] 的子集):要修复的函数名列表;默认为 ['get_class', 'php_sapi_name', 'phpversion', 'pi']
  • function_typehint_space [@Symfony]

    在函数的参数和其类型提示之间添加缺少的空格。

  • general_phpdoc_annotation_remove

    应从 PHPDoc 中省略配置的注解。

    配置选项

    • annotationsarray):要删除的注解列表,例如 ["author"];默认为 []
  • hash_to_slash_comment

    单行注释应使用双斜杠 // 而不是井号 #。 已弃用:请改用 single_line_comment_style

  • header_comment

    添加、替换或删除头注释。

    配置选项

    • comment_type(《comment’,《PHPDoc’):注释语法类型;默认为《comment’;已弃用别名:《commentType’
    • header(《string’):适当的头内容;必需
    • location(《after_declare_strict’,《after_open’):插入头部的位置;默认为《after_declare_strict’
    • separate(《both’,《bottom’,《none’,《top’):头部是否应该与文件内容使用新行分隔;默认为《both’
  • heredoc_to_nowdoc

    尽可能将 heredoc 转换为 nowdoc

  • implode_call [@Symfony:risky]

    函数 implode 必须按照文档顺序使用 2 个参数调用。

    风险规则:如果函数 ``implode`` 被重写,则为风险。

  • include [@Symfony]

    Include/Require 和文件路径应使用单个空格分隔。文件路径不应位于括号内。

  • increment_style [@Symfony]

    如果可能,应使用预或后增量减算符。

    配置选项

    • style(《post’,《pre’):是否使用预或后增量减算符;默认为《pre’
  • indentation_type [@PSR2,@Symfony]

    代码必须使用配置的缩进类型。

  • is_null [@Symfony:risky]

    is_null($var) 表达式替换为 null === $var

    风险规则:如果函数 ``is_null`` 被重写,则为风险。

    配置选项

    • use_yoda_style(《bool’):是否应使用 Yoda 风格条件;默认为《true’。已弃用:请改用《yoda_style’ fixer
  • line_ending [@PSR2,@Symfony]

    所有 PHP 文件必须使用相同的行结束符。

  • linebreak_after_opening_tag

    确保 PHP 开放标签同一行没有代码。

  • list_syntax

    列表(array 解构)赋值应使用配置的语法声明。需要 PHP >= 7.1。

    配置选项

    • syntax(《long’,《short’):是否使用 longshort list 语法;默认为《long’
  • logical_operators

    使用 &&|| 逻辑运算符而不是 andor

    风险规则:风险,因为您必须检查是否故意使用具有较低优先级的和/或。

  • lowercase_cast [@Symfony]

    类型转换应使用小写字母。

  • lowercase_constants [@PSR2,@Symfony]

    PHP 常量 truefalsenull 必须是小写。

  • lowercase_keywords [@PSR2,@Symfony]

    PHP 关键字必须是小写。

  • lowercase_static_reference [@Symfony]

    类静态引用 selfstaticparent 必须是小写。

  • magic_constant_casing [@Symfony]

    应使用正确的首字母大小写引用魔法常量。

  • magic_method_casing [@Symfony]

    魔法方法定义和调用必须使用正确的首字母大小写。

  • mb_str_functions

    将非多字节安全的函数替换为相应的 mb 函数。

    风险规则:当任何函数被覆盖时,即为风险。

  • method_argument_space [@PSR2, @Symfony]

    在方法参数和方法调用中,每个逗号之前不得有空格,每个逗号之后必须有一个空格。参数列表可以跨多行,其中后续每行缩进一次。这样做时,列表中的第一项必须在下一行,并且每行只能有一个参数。

    配置选项

    • ensure_fully_multiline (bool):确保多行参数列表中的每个参数都独占一行;默认为 false。已弃用:使用选项 on_multiline 代替
    • keep_multiple_spaces_after_comma (bool):是否保留逗号后面的多个空格;默认为 false
    • on_multiline ('ensure_fully_multiline', 'ensure_single_line', 'ignore'):定义如何处理包含换行符的函数参数列表;默认为 'ignore'
  • method_chaining_indentation

    方法链必须正确缩进。不支持不同缩进级别的方法链。

  • method_separation

    方法之间必须用一个空白行分隔。已弃用:使用 class_attributes_separation 代替。

  • modernize_types_casting [@Symfony:risky]

    intvalfloatvaldoublevalstrvalboolval 函数调用替换为相应的类型转换运算符。

    风险规则:如果任何函数“intval”、“floatval”、“doubleval”、“strval”或“boolval”被覆盖,则为风险。

  • multiline_comment_opening_closing

    DocBlocks 必须以两个星号开始,多行注释必须以单个星号开始,在开斜杠之后。两者都必须在关斜杠之前以单个星号结束。

  • multiline_whitespace_before_semicolons

    禁止在分号之前有多行空白,或将分号移到新行进行链式调用。

    配置选项

    • strategy ('new_line_for_chained_calls', 'no_multi_line'):禁止多行空白或将分号移到新行进行链式调用;默认为 'no_multi_line'
  • native_constant_invocation [@Symfony:risky]

    在内部常量的常量调用之前添加前导 \ 以加快解析。常量名称匹配区分大小写,但 nullfalsetrue 除外。

    风险规则:如果任何常量被命名空间或覆盖,则为风险。

    配置选项

    • exclude (array):要忽略的常量列表;默认为 ['null', 'false', 'true']
    • fix_built_in (bool):是否修复 get_defined_constants 返回的常量。用户定义的常量不计入此列表,必须在包含列表中指定;默认为 true
    • include (array):要修复的附加常量列表;默认为 []
    • scope ('all', 'namespaced'):仅修复在命名空间内进行的常量调用或修复所有;默认为 'all'
  • native_function_casing [@Symfony]

    PHP 定义的函数应使用正确的 casing 调用。

  • native_function_invocation [@Symfony:risky]

    在函数调用之前添加前导 \ 以加快解析。

    风险规则:当任何函数被覆盖时,即为风险。

    配置选项

    • exclude (array):要忽略的函数列表;默认为 []
    • include (array):要修复的函数名或集合列表。定义的集合是 @internal (所有原生函数)、@all (所有全局函数) 和 @compiler_optimized (由 Zend 特别优化的函数);默认为 ['@internal']
    • scope ('all', 'namespaced'):仅修复在命名空间内进行的函数调用或修复所有;默认为 'all'
  • new_with_braces [@Symfony]

    使用 new 关键字创建的所有实例都必须跟随花括号。

  • no_alias_functions [@Symfony:risky]

    应使用主函数而非别名。

    风险规则:当任何别名函数被覆盖时,会存在风险。

    配置选项

    • sets['@internal', '@IMAP', '@mbreg', '@all']的子集):要修复的集合列表。定义的集合包括@internal(原生函数)、@IMAP(IMAP函数)、@mbreg(来自ext-mbstring)和@all(所有列出的集合);默认为['@internal', '@IMAP']
  • no_alternative_syntax

    将控制结构替代语法替换为使用大括号。

  • no_binary_string

    字符串前不应有二进制标志。

  • no_blank_lines_after_class_opening [@Symfony]

    类开括号后不应有空行。

  • no_blank_lines_after_phpdoc [@Symfony]

    文档块和被文档化元素之间不应有空行。

  • no_blank_lines_before_namespace

    命名空间声明前不应有空行。

  • no_break_comment [@PSR2, @Symfony]

    在非空情况体中故意发生跳过时,必须有注释。

    配置选项

    • comment_textstring):在添加的注释中使用的文本以及用于检测的文本;默认为'no break'
  • no_closing_tag [@PSR2, @Symfony]

    仅包含PHP的文件中必须省略关闭的?>标签。

  • no_empty_comment [@Symfony]

    不应有任何空注释。

  • no_empty_phpdoc [@Symfony]

    不应有空PHPDoc块。

  • no_empty_statement [@Symfony]

    删除无用的分号语句。

  • no_extra_blank_lines [@Symfony]

    删除多余的空行和/或配置后的空行。

    配置选项

    • tokens['break', 'case', 'continue', 'curly_brace_block', 'default', 'extra', 'parenthesis_brace_block', 'return', 'square_brace_block', 'switch', 'throw', 'use', 'useTrait', 'use_trait']的子集):要修复的标记列表;默认为['extra']
  • no_extra_consecutive_blank_lines

    删除多余的空行和/或配置后的空行。已弃用:使用no_extra_blank_lines代替。

    配置选项

    • tokens['break', 'case', 'continue', 'curly_brace_block', 'default', 'extra', 'parenthesis_brace_block', 'return', 'square_brace_block', 'switch', 'throw', 'use', 'useTrait', 'use_trait']的子集):要修复的标记列表;默认为['extra']
  • no_homoglyph_names [@Symfony:risky]

    替换名称中意外使用的同音异形字符(非ASCII字符)。

    风险规则:重命名类,不能重命名文件。您可能对重命名后的代码有字符串引用(``$$name``)。

  • no_leading_import_slash [@Symfony]

    删除use子句中的前导斜杠。

  • no_leading_namespace_whitespace [@Symfony]

    命名空间声明行不应包含前导空白。

  • no_mixed_echo_print [@Symfony]

    应使用语言构造printecho

    配置选项

    • use'echo''print'):期望的语言构造;默认为'echo'
  • no_multiline_whitespace_around_double_arrow [@Symfony]

    操作符=>不应被多行空白包围。

  • no_multiline_whitespace_before_semicolons

    关闭分号前的多行空白是禁止的。已弃用:使用multiline_whitespace_before_semicolons代替。

  • no_null_property_initialization

    属性不得显式使用null初始化。

  • no_php4_constructor

    将PHP4样式的构造函数转换为__construct

    风险规则:当修复旧样式构造函数时存在风险,如果它被覆盖或覆盖了父类。

  • no_short_bool_cast [@Symfony]

    不应使用双感叹号进行短布尔转换。

  • no_short_echo_tag

    将短echo <?=替换为长格式<?php echo语法。

  • no_singleline_whitespace_before_semicolons [@Symfony]

    关闭分号前的单行空白是禁止的。

  • no_spaces_after_function_name [@PSR2, @Symfony]

    在调用方法或函数时,方法或函数名和开括号之间不应有空格。

  • no_spaces_around_offset [@Symfony]

    偏移括号周围不应有空格。

    配置选项

    • positions['inside', 'outside']的子集):是否应在偏移括号内部和/或外部固定间距;默认为['inside', 'outside']
  • no_spaces_inside_parenthesis [@PSR2, @Symfony]

    在开括号后不得有空格。在闭括号前不得有空格。

  • no_superfluous_elseif

    将多余的elseif替换为if

  • no_superfluous_phpdoc_tags

    删除不提供任何有用信息的@param@return标签。

  • no_trailing_comma_in_list_call [@Symfony]

    删除列表函数调用中的尾随逗号。

  • no_trailing_comma_in_singleline_array [@Symfony]

    PHP单行数组不应有尾随逗号。

  • no_trailing_whitespace [@PSR2, @Symfony]

    删除非空白行末尾的尾随空格。

  • no_trailing_whitespace_in_comment [@PSR2, @Symfony]

    注释或PHPDoc中不得有尾随空格。

  • no_unneeded_control_parentheses [@Symfony]

    删除围绕控制语句的不必要括号。

    配置选项

    • statementsarray):要修复的控制语句列表;默认为['break', 'clone', 'continue', 'echo_print', 'return', 'switch_case', 'yield']
  • no_unneeded_curly_braces [@Symfony]

    删除多余的、不属于控制结构主体部分的、不必要的花括号。

  • no_unneeded_final_method [@Symfony]

    最终类不得有最终方法。

  • no_unreachable_default_argument_value

    函数参数中不得有默认值在非默认值之前。

    风险规则:修改函数签名;因此,当使用依赖于这些函数的系统(例如通过反射)时存在风险。

  • no_unset_on_property

    应将属性设置为null,而不是使用unset

    风险规则:将变量改为null而不是删除它们,意味着它们在遍历类变量时仍然会出现。

  • no_unused_imports [@Symfony]

    必须删除未使用的use语句。

  • no_useless_else

    不应有无用的else情况。

  • no_useless_return

    在函数末尾不应有空的return语句。

  • no_whitespace_before_comma_in_array [@Symfony]

    在数组声明中,不得在每项逗号前有空格。

  • no_whitespace_in_blank_line [@Symfony]

    删除空白行末尾的尾随空格。

  • non_printable_character [@Symfony:risky, @PHP70Migration:risky, @PHP71Migration:risky]

    删除零宽度空间(ZWSP)、非换行空格(NBSP)和其他不可见Unicode符号。

    风险规则:当字符串包含有意不可见的字符时存在风险。

    配置选项

    • use_escape_sequences_in_stringsbool):是否应在字符串中将字符替换为转义序列;默认为false
  • normalize_index_brace [@Symfony]

    数组索引应始终使用方括号来编写。

  • not_operator_with_space

    逻辑非运算符(!)应具有前导和尾随空白。

  • not_operator_with_successor_space

    逻辑非运算符(!)应有一个尾随空白。

  • object_operator_without_whitespace [@Symfony]

    在对象操作符T_OBJECT_OPERATOR ->之前和之后不应有空格。

  • ordered_class_elements

    对类/接口/特性的元素进行排序。

    配置选项

    • order['use_trait', 'public', 'protected', 'private', 'constant', 'constant_public', 'constant_protected', 'constant_private', 'property', 'property_static', 'property_public', 'property_protected', 'property_private', 'property_public_static', 'property_protected_static', 'property_private_static', 'method', 'method_static', 'method_public', 'method_protected', 'method_private', 'method_public_static', 'method_protected_static', 'method_private_static', 'construct', 'destruct', 'magic', 'phpunit']的子集):定义元素顺序的字符串列表;默认为['use_trait', 'constant_public', 'constant_protected', 'constant_private', 'property_public', 'property_protected', 'property_private', 'construct', 'destruct', 'magic', 'phpunit', 'method_public', 'method_protected', 'method_private']
    • sortAlgorithm ('alpha', 'none'):同一类型语句多次出现的排序方式;默认为'none'
  • 有序导入

    排序use语句。

    配置选项

    • imports_order (array, null):定义导入类型的顺序;默认为null;已弃用别名:importsOrder
    • sort_algorithm ('alpha', 'length', 'none'):语句是否应按字母顺序排序、按长度排序或不对语句进行排序;默认为'alpha';已弃用别名:sortAlgorithm
  • php_unit_construct [@Symfony:risky]

    PHPUnit断言方法调用,如->assertSame(true, $foo),应使用专用方法->assertTrue($foo)

    风险规则:如果覆盖了PHPUnit的本地方法,修复器可能存在风险。

    配置选项

    • assertions['assertSame', 'assertEquals', 'assertNotEquals', 'assertNotSame']的子集):要修复的断言方法列表;默认为['assertEquals', 'assertSame', 'assertNotEquals', 'assertNotSame']
  • php_unit_dedicate_assert [@PHPUnit30Migration:risky, @PHPUnit32Migration:risky, @PHPUnit35Migration:risky, @PHPUnit43Migration:risky, @PHPUnit48Migration:risky, @PHPUnit50Migration:risky, @PHPUnit52Migration:risky, @PHPUnit54Migration:risky, @PHPUnit55Migration:risky, @PHPUnit56Migration:risky, @PHPUnit57Migration:risky, @PHPUnit60Migration:risky]

    PHPUnit断言,如assertInternalTypeassertFileExists,应使用assertTrue

    风险规则:如果覆盖了PHPUnit的本地方法,修复器可能存在风险。

    配置选项

    • functions['array_key_exists', 'empty', 'file_exists', 'is_array', 'is_bool', 'is_callable', 'is_double', 'is_float', 'is_infinite', 'is_int', 'is_integer', 'is_long', 'is_nan', 'is_null', 'is_numeric', 'is_object', 'is_real', 'is_resource', 'is_scalar', 'is_string']的子集,null):要修复的断言列表(覆盖target);默认为null。已弃用:使用选项target代替
    • target(《3.0’》、《3.5’》、《5.0’》、《5.6’》、《newest’):PHPUnit的目标版本;默认为《5.0’》
  • php_unit_expectation [@PHPUnit52Migration:risky, @PHPUnit54Migration:risky, @PHPUnit55Migration:risky, @PHPUnit56Migration:risky, @PHPUnit57Migration:risky, @PHPUnit60Migration:risky]

    使用->setExpectedException*方法的用法必须替换为->expectException*方法。

    风险规则:当PHPUnit类被覆盖或不可访问,或者项目存在PHPUnit不兼容性时,存在风险。

    配置选项

    • target(《5.2’》、《5.6’》、《newest’):PHPUnit的目标版本;默认为《newest’》
  • php_unit_fqcn_annotation [@Symfony]

    PHPUnit注解应该是包含根命名空间的FQCN。

  • php_unit_internal_class

    所有PHPUnit测试类应标记为内部类。

    配置选项

    • types(《normal’、《final’、《abstract’):要标记为内部类的类类型;默认为《normal’、《final’》
  • php_unit_method_casing

    强制对PHPUnit测试方法使用驼峰(或蛇形)大小写,遵循配置。

    配置选项

    • case(《camel_case’、《snake_case’):将驼峰或蛇形大小写应用于测试方法;默认为《camel_case’》
  • php_unit_mock [@PHPUnit54Migration:risky, @PHPUnit55Migration:risky, @PHPUnit56Migration:risky, @PHPUnit57Migration:risky, @PHPUnit60Migration:risky]

    使用->getMock->getMockWithoutInvokingTheOriginalConstructor方法的用法必须替换为->createMock->createPartialMock方法。

    风险规则:当PHPUnit类被覆盖或不可访问,或者项目存在PHPUnit不兼容性时,存在风险。

    配置选项

    • target(《5.4’》、《5.5’》、《newest’):PHPUnit的目标版本;默认为《newest’》
  • php_unit_namespaced [@PHPUnit48Migration:risky, @PHPUnit50Migration:risky, @PHPUnit52Migration:risky, @PHPUnit54Migration:risky, @PHPUnit55Migration:risky, @PHPUnit56Migration:risky, @PHPUnit57Migration:risky, @PHPUnit60Migration:risky]

    PHPUnit类必须使用命名空间版本,例如\PHPUnit\Framework\TestCase而不是\PHPUnit_Framework_TestCase

    风险规则:当PHPUnit类被覆盖或不可访问,或者项目存在PHPUnit不兼容性时,存在风险。

    配置选项

    • target(《4.8’》、《5.7’》、《6.0’》、《newest’):PHPUnit的目标版本;默认为《newest’》
  • php_unit_no_expectation_annotation [@PHPUnit32Migration:risky, @PHPUnit35Migration:risky, @PHPUnit43Migration:risky, @PHPUnit48Migration:risky, @PHPUnit50Migration:risky, @PHPUnit52Migration:risky, @PHPUnit54Migration:risky, @PHPUnit55Migration:risky, @PHPUnit56Migration:risky, @PHPUnit57Migration:risky, @PHPUnit60Migration:risky]

    使用@expectedException*注解的用法必须替换为->setExpectedException*方法。

    风险规则:当PHPUnit类被覆盖或不可访问,或者项目存在PHPUnit不兼容性时,存在风险。

    配置选项

    • target ('3.2', '4.3', 'newest'): PHPUnit的目标版本;默认为'newest'
    • use_class_const (bool): 使用::class表示法;默认为true
  • php_unit_ordered_covers

    对PHPUnit测试的@covers注解进行排序。

  • php_unit_set_up_tear_down_visibility

    将PHPUnit的setUp()tearDown()函数的可见性更改为protected,以匹配PHPUnit TestCase。

    风险规则:当类被错误地视为PHPUnit测试时,此修复器可能会更改名称为“setUp()”或“tearDown()”的函数。

  • php_unit_strict

    应使用PHPUnit方法assertSame而不是assertEquals

    风险规则:当任何函数被覆盖或测试对象等价性时,具有风险。

    配置选项

    • assertions (一个包含['assertAttributeEquals', 'assertAttributeNotEquals', 'assertEquals', 'assertNotEquals']的子集):要修复的断言方法列表;默认为['assertAttributeEquals', 'assertAttributeNotEquals', 'assertEquals', 'assertNotEquals']
  • php_unit_test_annotation

    根据配置添加或删除测试的@test注解。

    风险规则:此修复器可能会更改测试的名称,并可能导致与抽象类或接口不兼容。

    配置选项

    • case ('camel', 'snake'):添加测试前缀时是否使用驼峰式或蛇形变量名;默认为'camel'。已弃用:使用php_unit_method_casing修复器代替
    • style ('annotation', 'prefix'):是否使用@test注解;默认为'prefix'
  • php_unit_test_case_static_method_calls

    PHPUnit\Framework\TestCase静态方法的调用必须是相同类型,要么是$this-,要么是self::static::

    风险规则:当PHPUnit方法被覆盖或不可访问,或者当项目与PHPUnit不兼容时,存在风险。

    配置选项

    • call_type ('self', 'static', 'this'):用于引用PHPUnit方法的调用类型;默认为'static'
    • methods (array):字典method => call_type值,与默认策略不同;默认为[]
  • php_unit_test_class_requires_covers

    向没有@covers*注解的PHPUnit测试类添加默认的@coversNothing注解。

  • phpdoc_add_missing_param_annotation

    PHPDoc应包含所有参数的@param

    配置选项

    • only_untyped (bool):是否仅添加未类型化参数的缺失@param注解;默认为true
  • phpdoc_align [@Symfony]

    给定phpdoc标签的所有项必须左对齐或(默认)垂直对齐。

    配置选项

    • align ('left', 'vertical'):对齐注释;默认为'vertical'
    • tags (一个包含['param', 'property', 'return', 'throws', 'type', 'var', 'method']的子集):应对齐的标签;默认为['param', 'return', 'throws', 'type', 'var']
  • phpdoc_annotation_without_dot [@Symfony]

    PHPDoc注解描述不应为句子。

  • phpdoc_indent [@Symfony]

    Docblocks的缩进应与所记录的主题相同。

  • phpdoc_inline_tag [@Symfony]

    修复PHPDoc内联标签,使@inheritdoc始终内联。

  • phpdoc_no_access [@Symfony]

    @access注解应从PHPDoc中省略。

  • phpdoc_no_alias_tag [@Symfony]

    不应使用别名PHPDoc标签。

    配置选项

    • replacements (array):替换注解与新的映射;默认为['property-read' => 'property', 'property-write' => 'property', 'type' => 'var', 'link' => 'see']
  • phpdoc_no_empty_return [@Symfony]

    @return void@return null注解应从PHPDoc中省略。

  • phpdoc_no_package [@Symfony]

    @package@subpackage注解应从PHPDoc中省略。

  • phpdoc_no_useless_inheritdoc [@Symfony]

    不继承的类不得有@inheritdoc标签。

  • phpdoc_order

    PHPDoc 中的注释应按顺序排列,先是最先的 @param 注释,然后是 @throws 注释,最后是 @return 注释。

  • phpdoc_return_self_reference [@Symfony]

    返回自身引用的方法的 @return 注释类型必须是配置的类型。

    配置选项

    • replacements (array):替换的返回类型与新类型之间的映射;默认为 ['this' => '$this', '@this' => '$this', '$self' => 'self', '@self' => 'self', '$static' => 'static', '@static' => 'static']
  • phpdoc_scalar [@Symfony]

    标量类型应始终使用相同的格式。使用 int 而不是 integer,使用 bool 而不是 boolean,使用 float 而不是 realdouble

    配置选项

    • types['boolean', 'callback', 'double', 'integer', 'real', 'str'] 的子集):要修复的类型映射;默认为 ['boolean', 'double', 'integer', 'real', 'str']
  • phpdoc_separation [@Symfony]

    PHPDoc 中的注释应分组在一起,以便相同类型的注释紧挨着排列,不同类型的注释之间用一个空白行分隔。

  • phpdoc_single_line_var_spacing [@Symfony]

    单行 @var PHPDoc 应有适当的间距。

  • phpdoc_summary [@Symfony]

    PHPDoc 摘要应以句号、感叹号或问号结束。

  • phpdoc_to_comment [@Symfony]

    仅应在结构元素上使用 Docblocks。

  • phpdoc_to_return_type

    实验性:将非混合类型的 @return 注释转换为相应的函数签名。需要 PHP >= 7.0。

    风险规则:[1] 此规则是实验性的,不保证向后兼容性。[2] ``@return`` 注释是修复器进行更改的必要条件,没有它(没有 docblock,inheritdocs)的方法签名将不会被修复。[3] 如果继承的签名未正确记录,则需要手动操作。[4] ``@inheritdocs`` 的支持正在建设中。

    配置选项

    • scalar_types (bool):修复标量类型;由于 PHP 坏的类型强制系统,可能具有意外的行为;默认为 true
  • phpdoc_trim [@Symfony]

    PHPDoc 应从内容开始和结束,不包括 docblocks 的第一行和最后一行。

  • phpdoc_trim_consecutive_blank_line_separation

    从 PHPDoc 中的摘要和描述之后删除额外的空白行。

  • phpdoc_types [@Symfony]

    PHPDoc 中应使用正确的格式化标准 PHP 类型。

    配置选项

    • groups['simple', 'alias', 'meta'] 的子集):要修复的类型组;默认为 ['simple', 'alias', 'meta']
  • phpdoc_types_order

    排序 PHPDoc 类型。

    配置选项

    • null_adjustment'always_first''always_last''none'):强制 null 的位置(覆盖 sort_algorithm);默认为 'always_first'
    • sort_algorithm'alpha''none'):要应用的排序算法;默认为 'alpha'
  • phpdoc_var_without_name [@Symfony]

    @var@type 注释不应包含变量名。

  • pow_to_exponentiation [@PHP56Migration:risky, @PHP70Migration:risky, @PHP71Migration:risky]

    pow 转换为 ** 运算符。

    风险规则:当函数 ``pow`` 被覆盖时存在风险。

  • pre_increment

    如果可能,应使用前置增量/减量。已弃用:请改用 increment_style

  • protected_to_private [@Symfony]

    尽可能将 protected 变量和方法转换为 private

  • psr0

    类必须位于与它们的命名空间匹配的路径中,至少有一个命名空间深度,类名应与文件名匹配。

    风险规则:此修复器可能会更改您的类名,这将破坏依赖于旧名称的代码。

    配置选项

    • dirstring):放置项目代码的目录;默认为 ''
  • psr4 [@Symfony:risky]

    类名应与文件名匹配。

    风险规则:此修复器可能会更改您的类名,这将破坏依赖于旧名称的代码。

  • random_api_migration [@PHP70Migration:risky, @PHP71Migration:risky]

    randsrandgetrandmax 函数调用替换为其 mt_* 类似物。

    风险规则:当配置的函数被覆盖时,有风险。

    配置选项

    • replacements (数组):被替换函数与新函数之间的映射;默认为 ['getrandmax' => 'mt_getrandmax', 'rand' => 'mt_rand', 'srand' => 'mt_srand']
  • return_assignment

    局部、动态和直接引用的变量不应通过函数或方法进行赋值和直接返回。

  • return_type_declaration [@Symfony]

    根据配置,返回类型声明前应有一个或没有空格,后应有一个空格。

    配置选项

    • space_before ('none''one'):在冒号之前应用的间距;默认为 'none'
  • self_accessor [@Symfony:risky]

    在类或接口元素内,应优先使用 self 而不是类名本身。

    风险规则:当使用动态调用如 get_called_class() 或后期静态绑定时有风险。

  • semicolon_after_instruction [@Symfony]

    指令必须以分号结尾。

  • set_type_to_cast [@Symfony:risky]

    应使用类型转换,而不是 settype

    风险规则:当 ``settype`` 函数被覆盖或作为 ``for`` 循环中的第二个或第三个表达式使用时有风险。

  • short_scalar_cast [@Symfony]

    类型转换 (boolean)(integer) 应写作 (bool)(int)(double)(real) 应写作 (float)(binary) 应写作 (string)

  • silenced_deprecation_error

    确保弃用通知被禁用。已弃用:使用 error_suppression 代替。

    风险规则:禁用弃用错误可能会引起代码行为的变化。

  • simplified_null_return

    希望返回 void 的返回语句不应返回 null

  • single_blank_line_at_eof [@PSR2, @Symfony]

    没有结束标签的 PHP 文件必须始终以一个空行结束。

  • single_blank_line_before_namespace [@Symfony]

    在命名空间声明之前应恰好有一个空行。

  • single_class_element_per_statement [@PSR2, @Symfony]

    每个语句中必须只声明一个属性或常量。

    配置选项

    • elements (一个 ['const', 'property'] 的子集):需要修改的元素字符串列表;默认为 ['const', 'property']
  • single_import_per_statement [@PSR2, @Symfony]

    每个声明必须有一个 use 关键字。

  • single_line_after_imports [@PSR2, @Symfony]

    每个命名空间使用必须独占一行,并且使用语句块之后必须有一个空行。

  • single_line_comment_style [@Symfony]

    单行注释和多行注释(只有一行实际内容)应使用 // 语法。

    配置选项

    • comment_types (一个 ['asterisk', 'hash'] 的子集):要修复的注释类型列表;默认为 ['asterisk', 'hash']
  • single_quote [@Symfony]

    对于简单字符串,将双引号转换为单引号。

    配置选项

    • strings_containing_single_quote_chars (bool):是否修复包含单引号的双引号字符串;默认为 false
  • space_after_semicolon [@Symfony]

    修复分号后的空白。

    配置选项

    • remove_in_empty_for_expressions (bool):是否应从空 for 表达式中移除空白;默认为 false
  • standardize_increment [@Symfony]

    如果可能,应使用增量或减量运算符。

  • standardize_not_equals [@Symfony]

    将所有 <> 替换为 !=

  • static_lambda

    不(间接)引用 $this 的 Lambda 必须声明为 static

    风险规则:当在未引用 ``$this`` 的 Lambda 上使用 "->bindTo" 时有风险。

  • strict_comparison

    比较应该是严格的。

    风险规则:将比较更改为严格可能会改变代码行为。

  • strict_param

    应使用将 $strict 参数设置为 true 的函数。

    风险规则:当固定函数被覆盖或代码依赖于非严格用法时存在风险。

  • string_line_ending

    所有多行字符串必须使用正确的换行符。

    风险规则:更改多行字符串的换行符可能会影响字符串比较和输出。

  • switch_case_semicolon_to_colon [@PSR2, @Symfony]

    case 后应跟冒号而不是分号。

  • switch_case_space [@PSR2, @Symfony]

    移除冒号和 case 值之间的额外空格。

  • ternary_operator_spaces [@Symfony]

    标准化三元运算符周围的空格。

  • ternary_to_null_coalescing [@PHP70Migration, @PHP71Migration]

    尽可能使用 null 合并运算符 ??。需要 PHP >= 7.0。

  • trailing_comma_in_multiline_array [@Symfony]

    PHP 多行数组应有一个尾随逗号。

  • trim_array_spaces [@Symfony]

    数组应格式化为函数/方法参数的形式,没有前导或尾随单行空格。

  • unary_operator_spaces [@Symfony]

    一元运算符应放置在其操作符旁边。

  • visibility_required [@PSR2, @Symfony, @PHP71Migration]

    所有属性和方法都必须声明可见性;abstractfinal 必须在可见性之前声明;static 必须在可见性之后声明。

    配置选项

    • elements['property', 'method', 'const'] 的子集):要修复的结构元素(对于 const 需要 PHP >= 7.1);默认为 ['property', 'method']
  • void_return [@PHP71Migration:risky]

    向缺少或空返回语句的函数添加 void 返回类型,但优先级高于 @return 注释。需要 PHP >= 7.1。

    风险规则:修改函数的签名。

  • whitespace_after_comma_in_array [@Symfony]

    在数组声明中,每个逗号之后必须有一个空格。

  • yoda_style [@Symfony]

    根据配置,以 Yoda 风格(true)、非 Yoda 风格(false)或忽略这些条件(null)编写条件。

    配置选项

    • always_move_variablebool):在应用 Yoda 风格时,变量是否始终位于不可分配的一侧;默认为 false
    • equalboolnull):等于(==!=)语句的样式;默认为 true
    • identicalboolnull):相同(===!==)语句的样式;默认为 true
    • less_and_greaterboolnull):小于和大于(<<=>>=)语句的样式;默认为 null

--dry-run 选项显示需要修复的文件,但不会实际修改它们

$ php php-cs-fixer.phar fix /path/to/code --dry-run

配置文件

您可以使用项目根目录中的 .php_cs.dist 文件保存项目配置,而不是使用命令行选项来自定义规则。该文件必须返回一个 PhpCsFixer\ConfigInterface 实例,该实例允许您配置规则、需要分析文件和目录。您还可以创建 .php_cs 文件,该文件是本地配置,将用于替代项目配置。将此文件添加到 .gitignore 文件是一个好习惯。使用 --config 选项可以指定 .php_cs 文件的路径。

以下示例将两个规则添加到默认的 PSR2 规则列表中

<?php

$finder = PhpCsFixer\Finder::create()
    ->exclude('somedir')
    ->notPath('src/Symfony/Component/Translation/Tests/fixtures/resources.php')
    ->in(__DIR__)
;

return PhpCsFixer\Config::create()
    ->setRules([
        '@PSR2' => true,
        'strict_param' => true,
        'array_syntax' => ['syntax' => 'short'],
    ])
    ->setFinder($finder)
;

注意exclude 仅适用于目录,因此如果需要排除文件,请尝试使用 notPath

有关其他 Finder 方法的更多信息,请参阅 Symfony\Finder 在线文档。

您也可以使用黑名单规则而不是上面显示的白名单方法。以下示例显示了如何使用所有 Symfony 规则,但不包括 full_opening_tag 规则。

<?php

$finder = PhpCsFixer\Finder::create()
    ->exclude('somedir')
    ->in(__DIR__)
;

return PhpCsFixer\Config::create()
    ->setRules([
        '@Symfony' => true,
        'full_opening_tag' => false,
    ])
    ->setFinder($finder)
;

您可能想在项目中使用非Linux空白字符。然后您需要将它们配置在您的配置文件中。

<?php

return PhpCsFixer\Config::create()
    ->setIndent("\t")
    ->setLineEnding("\r\n")
;

使用 --using-cache 选项并输入 yesno 可以设置是否应使用缓存机制。

缓存

默认情况下,缓存机制是启用的。这将通过仅修复自上次运行以来已更改的文件来加快后续运行的效率。如果工具版本已更改或规则列表已更改,则工具将修复所有文件。缓存仅支持作为phar文件下载的工具或通过composer安装的工具。

可以通过 --using-cache 选项或配置文件禁用缓存。

<?php

return PhpCsFixer\Config::create()
    ->setUsingCache(false)
;

可以通过 --cache-file 选项或配置文件指定缓存文件。

<?php

return PhpCsFixer\Config::create()
    ->setCacheFile(__DIR__.'/.php_cs.cache')
;

在CI中使用PHP CS Fixer

friendsofphp/php-cs-fixer 作为 dev 依赖项要求。

$ ./composer.phar require --dev friendsofphp/php-cs-fixer

然后,将以下命令添加到您的CI中

$ IFS='
$ '
$ CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRTUXB "${COMMIT_RANGE}")
$ if ! echo "${CHANGED_FILES}" | grep -qE "^(\\.php_cs(\\.dist)?|composer\\.lock)$"; then EXTRA_ARGS=$(printf -- '--path-mode=intersection\n--\n%s' "${CHANGED_FILES}"); else EXTRA_ARGS=''; fi
$ vendor/bin/php-cs-fixer fix --config=.php_cs.dist -v --dry-run --stop-on-violation --using-cache=no ${EXTRA_ARGS}

其中 $COMMIT_RANGE 是您的提交范围,例如 $TRAVIS_COMMIT_RANGEHEAD~..HEAD

退出代码

退出代码是通过以下位标志构建的

  • 0 正常。
  • 1 一般错误(或未满足PHP最小要求)。
  • 4 一些文件具有无效的语法(仅在dry-run模式下)。
  • 8 一些文件需要修复(仅在dry-run模式下)。
  • 16 应用程序配置错误。
  • 32 Fixer的配置错误。
  • 64 应用程序内部抛出异常。

(仅适用于fix命令的退出代码)

助手

为以下工具存在专用插件

贡献

此工具附带了许多内置修复程序,但每个人都可以自由贡献更多。

修复程序

一个 修复程序 是一个尝试修复一个CS问题的类(必须实现 FixerInterfaceFixer 类)。

配置

一个 配置 了解CS规则以及工具在运行在项目目录中时必须扫描的文件和目录。这对于遵循已知目录结构的项目很有用(例如,对于Symfony项目)。