badoo/phpcf

此包已被废弃,不再维护。未建议替代包。

格式化器是为了基本仅修改空白字符而创建的,例如换行符、制表符、空格等。

维护者

详细信息

github.com/badoo/phpcf

源代码

问题

安装2,539

依赖者: 1

建议者: 0

安全: 0

星标: 186

关注者: 33

分支: 30

开放问题: 0

v1.1.0 2021-08-31 13:30 UTC

This package is not auto-updated.

Last update: 2021-12-30 21:01:56 UTC


README

⚠️ 项目已被废弃。我们决定切换到 PHP_CodeSniffer,而不是为 PHP8+ 添加支持。⚠️

格式化器是为了基本仅修改空白字符而创建的,例如换行符、制表符、空格等。这意味着 phpcf 不会替代类似 PHP Code Sniffer (phpcs) 或 PHP Coding Standards Fixer (http://cs.sensiolabs.org) 的工具,后者由 Fabien Potencier 开发。该工具补充了其他工具,并执行所有与空白字符相关的“脏活”。值得注意的是,我们的工具尊重初始文件格式,并且仅更改不遵循所选规则集的空白字符(某些工具首先删除所有空白字符,并从头开始重建文件,这并不一定是人们想要的)。

我们的工具是可扩展的,支持任意样式集。您可以很容易地定义自己的格式化样式,以替换与 PSR 略有不同的大众化 Badoo 格式化标准。

下面是一个简单的使用示例。

  • "phpcf apply " 格式化指定文件
  • "phpcf check " 检查格式是否正确,如果文件格式不正确则返回非零退出码
$ cat minifier.php
<?php
$tokens=token_get_all(file_get_contents($argv[1]));$contents='';foreach($tokens as $tok){if($tok[0]===T_WHITESPACE||$tok[0]===T_COMMENT)continue;if($tok[0]===T_AS||$tok[0]===T_ELSE)$contents.=' '.$tok[1].' '; else $contents.=is_array($tok)?$tok[1]:$tok;}echo$contents."\n";

$ phpcf apply minifier.php
minifier.php formatted successfully

$ cat minifier.php
<?php
$tokens = token_get_all(file_get_contents($argv[1]));
$contents = '';
foreach ($tokens as $tok) {
    if ($tok[0] === T_WHITESPACE || $tok[0] === T_COMMENT) continue;
    if ($tok[0] === T_AS || $tok[0] === T_ELSE) $contents .= ' ' . $tok[1] . ' ';
    else $contents .= is_array($tok) ? $tok[1] : $tok;
}
echo $contents . "\n";

$ phpcf check minifier.php; echo $?
minifier.php does not need formatting
0

我们的工具也能够格式化文件的一部分。要做到这一点,您需要在冒号后指定行号范围

$ cat zebra.php 
<?php
echo "White "."strip".PHP_EOL;
echo "Black "."strip".PHP_EOL; // not formatted
echo "Arse".PHP_EOL;

$ phpcf apply zebra.php:1-2,4
zebra.php formatted successfully

$ cat zebra.php 
<?php
echo "White " . "strip" . PHP_EOL;
echo "Black "."strip".PHP_EOL; // not formatted
echo "Arse" . PHP_EOL;

$ phpcf check zebra.php
zebra.php issues:
        Expected one space before binary operators (= < > * . etc)   on line 3 column 14
        Expected one space after binary operators (= < > * . etc)   on line 3 column 15
        ...

$ echo $?
1

再次值得注意的是,phpcf 是设计来仅更改空白字符,并执行诸如

  • 将 "<?" 替换为 "<?php"
  • 删除文件末尾的额外关闭标签
  • 将函数名中的西里尔字母更改为英文
  • 使用空格手动对齐的表达式不受影响

格式化器作为一个有限状态机工作,其规则由用户设置,而不是使用硬编码的替换。我们提供遵循 Badoo 格式规则的默认配置。因此,如果您想自动将 "var" 替换为 "public" 或类似操作,我们建议查看 PHP-CS-Fixer。后者不会真正修改空白字符,但它可以进行比我们的工具更复杂的替换。