pint和php-cs-fixer是扩展包常用格式化工具,但需按扩展包结构定制配置:用require-dev本地安装、显式指定src/tests目录扫描、避免全局安装与自动修复提交,并确保autoload-dev映射正确。

php-cs-fixer 和 pint 是开发 Composer 扩展包时最常用的代码格式化工具,但直接套用 Laravel 项目配置会出问题——扩展包没有框架层封装,autoload-dev、命名空间路径、测试目录结构都更轻量,容易配错规则或漏掉关键文件。
composer.json 里必须用 require-dev 装 php-cs-fixer
不要运行 composer global require friendsofphp/php-cs-fixer。全局安装会让所有包共享一个版本,而你的扩展包可能要兼容 PHP 7.4–8.3,不同 PHP 版本下 php-cs-fixer 的某些规则(比如 declare_strict_types)行为不一致,CI 构建会失败。
在扩展包根目录执行:
composer require --dev friendsofphp/php-cs-fixer
这会把二进制命令落到 vendor/bin/php-cs-fixer,路径明确、版本锁定、CI 可复现。CI 脚本里直接写 ./vendor/bin/php-cs-fixer fix --dry-run 就行,不用额外 setup。
- 别碰
require字段——格式化工具不是运行时依赖 - 如果扩展包本身要支持 PHP 7.4,就锁死
"friendsofphp/php-cs-fixer": "^3.52",v3.58+ 已弃用部分旧规则 -
vendor/bin/php-cs-fixer在 Windows 上是vendorinphp-cs-fixer.bat,脚本里注意路径分隔符
.php-cs-fixer.php 配置必须覆盖 src/ 和 tests/ 目录
扩展包通常只有 src/ 和 tests/ 两个核心目录,php-cs-fixer 默认不递归扫描子目录,不显式指定就会漏掉测试文件里的风格问题。
在项目根目录新建 .php-cs-fixer.php(注意名字不能是 .php_cs 或 php-cs-fixer.php),内容类似:
<?php $finder = PhpCsFixerFinder::create()
->in(__DIR__ . '/src')
->in(__DIR__ . '/tests')
->name('*.php')
->notName('*.blade.php');
return (new PhpCsFixerConfig())
->setRules([
'@PSR12' => true,
'declare_strict_types' => true,
'array_syntax' => ['syntax' => 'short'],
'ordered_imports' => true,
'no_unused_imports' => true,
])
->setFinder($finder);
-
->name('*.php')是必须的,否则Finder可能跳过某些文件 - 如果你的扩展包含
examples/或stubs/目录,也得加到->in()里,否则不检查 - 避免用
'@Symfony'这类太重的 preset,它会强制要求类型注解,而扩展包面向低版本 PHP 时往往不适用
scripts 里加 format 和 check-style,但别自动 fix 提交
在 composer.json 的 scripts 段加上:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"scripts": {
"format": "php-cs-fixer fix",
"check-style": "php-cs-fixer fix --dry-run --diff"
}
这样本地可跑 composer format 修复,CI 用 composer check-style 做门禁。但千万别在 pre-commit 钩子里自动 fix ——扩展包常被其他项目 require,提交里混入大量格式化改动,会污染 git blame,也让 PR review 失焦。
- 想自动化?用
pre-commit钩子只跑check-style,失败就阻断提交,不修不走 - 如果要用 Pint(Laravel 官方推荐),得确认扩展包最低支持 PHP 8.0+,Pint v2 不支持 PHP 7.x
-
check-style命令里一定要带--diff,否则 CI 日志里看不到哪行不合规,排查成本翻倍
VSCode / PHPStorm 里别依赖全局 php-cs-fixer
IDE 配置里填的路径必须指向 vendor/bin/php-cs-fixer,而不是全局 PATH 里的命令。否则你在 A 包里改了规则,在 B 包里保存文件,结果 B 包被 A 包的配置格式化了。
PHPStorm 示例配置(External Tools):
-
Program:
$ProjectFileDir$/vendor/bin/php-cs-fixer(macOS/Linux)或$ProjectFileDir$/vendor/bin/php-cs-fixer.bat(Windows) -
Arguments:
fix "$FileDir$/$FileName$" --config=$ProjectFileDir$/.php-cs-fixer.php -
Working directory:
$ProjectFileDir$
VSCode 用户要在 .vscode/settings.json 里显式指定:
"php.suggest.basic": false,
"editor.formatOnSave": true,
"[php]": {
"editor.defaultFormatter": "junstyle.php-cs-fixer"
},
"php-cs-fixer.executablePath": "./vendor/bin/php-cs-fixer",
"php-cs-fixer.onsave": true,
关键点是 "php-cs-fixer.executablePath" 必须用相对路径,且和当前工作区对齐——扩展包经常多开,每个都要独立生效。
最易忽略的是:扩展包的 autoload-dev 里没声明 tests/ 的 PSR-4 映射,会导致 php-cs-fixer 加载规则时找不到测试类的命名空间,报 Class not found 错误。记得在 composer.json 里补上:
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
}










