细条纹
锋利的代码。每一行。
Wayne State应用程序栈的编码标准:为Pint, PHPStan(与Laravel的Larastan), Rector, 和ESLint与Prettier。你的应用程序指向它们,只添加自己的异常。细条纹是编码的好东西 西装就像求职面试一样:没人会注意到它,但当它不见了的时候,每个人都会注意到。
检查: composer ci (同样的命令在GitLab和GitHub上运行)。
开发在韦恩州立大学的GitLab进行;这个存储库是一个发布镜像。先在那里换土地。
首页: site/index.html这是一个静态的裁缝店,你可以在浏览器中打开或提供服务 site/.
在Citadel上,它由raw-PHP部署层提供 deploy/:前端控制器服务的SQUIRE套件 site/ 在安全帽的安全头后面。为了地方发展,继续服务 site/ 直接。
试穿一下:从 site/ 电话宽度

样板本:品牌板

在原始PHP应用中使用它
添加Pinstripe作为开发依赖项:
composer require --dev waynestate/pinstripe:^0.1
Pinstripe 0.1.0在Packagist上,而npm包, @waynestate/pinstripe,也在0.1.0。
将PHPStan指向原始配置。 phpstan.neon:
includes:
- vendor/waynestate/pinstripe/phpstan/raw.neon
parameters:
paths:
- app
添加可以在所有操作系统上运行的Composer脚本:
{
"scripts": {
"lint": "pint --test --config vendor/waynestate/pinstripe/pint/per.json",
"fix": "pint --config vendor/waynestate/pinstripe/pint/per.json",
"analyse": "phpstan analyse"
}
}
composer lint 风格失败。 composer fix 修复它。品脱的 per 预设为PER编码风格,和 tests/fixtures/per 保持一个干净和一个凌乱的证明。
composer analyse 在级别8运行PHPStan,也有弃用检查。
细条纹船只 phpstan/phpstan-deprecation-rules,自动加载
phpstan/extension-installer。调用一个 @deprecated 方法使构建失败。
裁缝在布料退役前用旗子把旧的剪裁做好。
在Laravel应用中使用它
与Laravel部分相同:
composer require --dev waynestate/pinstripe:^0.1 larastan/larastan
细条纹拉进来 phpstan/extension-installer,为你登记拉腊斯坦。当Composer询问时,允许
插件(config.allow-plugins 在你的 composer.json). 你的 phpstan.neon 包括
vendor/waynestate/pinstripe/phpstan/laravel.neon 再没有别的了:没有拉腊斯坦的台词可以补充,而且
脚本指向 vendor/waynestate/pinstripe/pint/laravel.json.
在Laravel上证明: composer ci 创建一个最小的Laravel 13应用程序(tests/fixtures/laravel-app),
pint/laravel.json 然后用 phpstan/laravel.neon 每次运行,如果应用程序停止,则失败
传递。较小的固定装置(tests/fixtures/laravel)证明了预设确实加载了Larastan:它植入了an
只有拉腊斯坦报告的雄辩的属性,它留下了一个干净的孪生兄弟。
将其用于Vue
添加Pinstripe作为开发依赖项:
npm install --save-dev @waynestate/pinstripe eslint prettier
创建 eslint.config.js 并传播预设。打字稿:
import pinstripe from '@waynestate/pinstripe/eslint/typescript'
export default [...pinstripe]
对于普通JavaScript,导入 @waynestate/pinstripe/eslint/javascript 代替。
点美化预设在 package.json:
{
"prettier": "@waynestate/pinstripe/prettier"
}
添加可以在所有操作系统上运行的脚本:
{
"scripts": {
"lint": "eslint .",
"format": "prettier --write ."
}
}
npm run lint 在风格和可访问性上失败。 npm run format 修复布局。预设是现成的
西装:它适合所有应用程序,你只需要添加自己的袖扣。
把它用在雷克特身上
Rector为您的应用程序已经支持的PHP版本更新代码。将其添加为开发依赖项:
composer require --dev rector/rector
创建 rector.php 使用Pinstripe预设,只添加你自己的路径:
<?php
$base = require __DIR__ . '/vendor/waynestate/pinstripe/rector/base.php';
return $base->withPaths([__DIR__ . '/src']);
预设从应用程序自己的层读取PHP层 composer.json,因此它不会与版本脱节
应用程序实际上是运行的。检查一下 vendor/bin/rector process --dry-run 然后应用于 vendor/bin/rector process.
经过验证的固定装置: composer ci 针对一个现代应用程序(tests/fixtures/rector-clean)和
老式的(tests/fixtures/rector-old),如果干净的那个发生了变化,或者旧的那个留下了,它就会失败
独自一人。Rector是裁缝的压力机:它在不改变剪裁的情况下将旧代码平滑到标准。
严格的切割
新的应用程序可以包括 vendor/waynestate/pinstripe/phpstan/strict.neon 而不是 raw.neon 或者 laravel.neon。它能保持底部的切割并打开 phpstan/phpstan-strict-rules,所以松散的比较喜欢 == 构建失败。现有的应用程序仍然停留在基本切割和基线上。
PHPStan从3级以上检查phpdoc方法签名 phpstan/phpstan-strict-rules 每次运行它时,强制打开它们后面的两个开关。底座切割大头针 reportMaybesInMethodSignatures 和 reportStaticMethodSignatures 关闭,这样它就和文件一样了;严格切割使它们保持打开状态,因此它还报告可能不匹配的覆盖和静态方法覆盖。
phpstan/phpstan-strict-rules 每次运行时还会强制打开8个开关。每一个都是这样决定的:低噪音和真正的虫子在每个切口都保持打开状态,嘈杂的虫子被固定在基本切口中,只在底部打开 strict.neon.
| 参数 | Raw和Laravel切割 | 严格的削减 | 为什么 |
|---|---|---|---|
checkExplicitMixedMissingReturn | 在 | 在 | 声明返回的函数 mixed 那能掉下来的最后是一个真正的bug,而且在实践中很少见。 |
checkFunctionNameCase | 在 | 在 | 大小写错误的函数名在Windows和macOS上有效,在Linux上失效。 |
checkInternalClassCaseSensitivity | 在 | 在 | PHP自己的类也有同样的问题。 |
checkStrictPrintfPlaceholderTypes | 在 | 在 | %d 输入字符串是一个真正的格式化错误,而且很少见。 |
checkDynamicProperties | 从 | 在 | 用未声明的属性填充遗留代码。 |
reportMaybesInPropertyPhpDocTypes | 从 | 在 | 报告“可能”phpdoc不匹配,遗留docblocks不断出错。 |
reportWrongPhpDocTypeInVarTag | 从 | 在 | 老 @var 标签经常松动;修复它们是清理,而不是寻找bug。 |
reportNonIntStringArrayKey | 从 | 在 | 在松散键控数组上有噪声的漏边检查。 |
严格是裁缝在第一针之前画的粉笔线。
采用现有的应用程序
生成一个基线 phpstan analyse --generate-baseline,包括在你的 phpstan.neon直到永远
缩小它。新代码没有基线。基线是裁缝的粉笔线:它标记了织物的现状,以及每一个
释放,让它进来,永远不要让它出来。
基线只会收缩
细条纹船只 pinstripe-baseline一个PHP命令可以在每个操作系统上运行,以实现这一承诺。两者都读
NEON基线和PHP格式(phpstan-baseline.php)。
vendor/bin/pinstripe-baseline count phpstan-baseline.neon
打印基线忽略的错误数:每个条目的错误数之和 count, 1当 count 不在。
vendor/bin/pinstripe-baseline check --max=42 phpstan-baseline.neon
退出1,带 baseline grew: N errors, the most allowed is M 当计数超过限制时,否则为0。来
与目标分支进行比较,而不是一个固定的数字,传递一个git ref:
vendor/bin/pinstripe-baseline check --against=origin/main phpstan-baseline.neon
在GitLab CI中,合并请求的基础SHA已经在环境中了:
vendor/bin/pinstripe-baseline check --against=$CI_MERGE_REQUEST_DIFF_BASE_SHA phpstan-baseline.neon
基线是裁缝的粉笔线,而这个命令是卷尺:它在线的瞬间失效 变长。
测试了
维护者:如何构建、测试和发布这个项目,以及它的数据来自哪里 MAINTAINING.md.
- 品脱1.32.1
- PHPStan 2.3.3
- PHPStan extension-installer 1.4.3
- PHPStan strict-rules 2.1.0
- Larastan 3.13.2
- 校长2.8.1发布
- ESLint 10.13.0
- 漂亮3.9.10
- eslint-plugin-vue 10.12.0
- eslint-plugin-vuejs-accessibility 2.6.3
- typescript-eslint 8.72.1
- Node 22.13或更新版本
接下来
飞行前的工作,并读取PHP地板从信条。
演员
scripts/readme-art; 衣服没有损坏,而且每条边都是先别好的。