neos / rector
Requires
- neos/utility-arrays: *
- phpstan/phpstan: 1.10.13
- rector/rector: 0.15.24
- symfony/yaml: *
- webmozart/assert: ^1.11
Requires (Dev)
- phpunit/phpunit: ^9.5
- symplify/rule-doc-generator: ^11.1
This package is auto-updated.
Last update: 2024-08-30 07:13:06 UTC
README
此软件包包含一个 Rector 规则集,用于将 Neos 8.x 迁移到 9.0(以及可能更高级的版本)。
它最终将取代 Core/Code Migrations(./flow flow:core:migrate),但现在它仍在开发中。
目前,我们特别关注将旧内容存储库 API(< Neos 9.0)迁移到基于事件的存储库(>= 9.0)的规则。
安装
由于 Rector 有严格的依赖性要求,可能与您的项目不匹配,我们强烈建议在专用目录中安装 neos/rector,而不是将其添加到您的项目中。
# inside your Distribution folder
composer create-project neos/rector:dev-main --stability=dev rector
cp rector/rector.template.php rector.php
配置
现在,打开上面复制的 rector.php
文件,并调整 Rector 路径(这些是需要迁移的路径)。默认情况下,所有 ./DistributionPackages
都将迁移。
目前,我们提供以下 Rector 规则集
\Neos\Rector\NeosRectorSets::CONTENTREPOSITORY_9_0
:迁移到事件源内容存储库所需的全部规则(目前仍在进行中)
运行
在您的发行版的根目录下运行以下命令(即 rector.php
所在的位置)。
# for trying out what would be done ./rector/vendor/bin/rector --dry-run # for running the migrations ./rector/vendor/bin/rector
为 Neos 开发 Rector 规则
(本节对用户不相关,但对 Neos Rector 软件包的开发者 相关)
调整规则后运行 Rector
在开发规则时,请确保使用 --clear-cache
标志运行 Rector,当您在完整代码库上运行它们时。
否则...
运行测试
我们完全基于测试驱动来开发所有 Rector 规则。
测试设置完全本地化;不需要任何 任何 发行版设置。
# if inside a Neos Distribution, change to the Package's folder cd rector # install PHPunit composer install # run PHPUnit composer test
Fusion Rector
我们专门扩展了 Rector 以迁移 Fusion 文件,通过提供 FusionFileProcessor
和 FusionRectorInterface
,您可以实现它们以构建 Fusion 转换。
Fusion Rectors 通常使用以下工具类之一
EelExpressionTransformer
:用于在 Fusion 和 AFX 中找到所有 Eel 表达式,并以某种方式转换它们。- (随着需要将添加更多工具类)
Fusion 和 AFX 解析功能基于官方的 Fusion 和 AFX 解析器。然而,由于以下原因,这些类是通过 ./embed-fusion-and-afx-parsers.sh
脚本由包所有者/复制到该包中的
- Rector 需要 Flow 无法编译类时也能运行;因此我们无法依赖于 Flow 软件包。
- 我们稍微修补了 AFX 解析器,因为我们需要 Eel 表达式的位置信息。
Fusion 解析器由 Neos\Rector\Core\FusionProcessing\CustomObjectTreeParser
子类化,以保留 AFX 和 Eel 表达式的位置信息。
更新 Fusion 和 AFX 解析器
要更新 vendored 的 Fusion 和 AFX 解析器,请运行 ./embed-fusion-and-afx-parsers.sh
脚本。
更新 AFX 解析器修补程序
AFX 解析器需要一个自定义修补程序(请参阅 ./scripts/afx-eel-positions.patch
)以保留位置信息。
要创建/更新此修补程序,请执行以下操作
cd Packages/Neos # apply the current patch patch -p1 < ../../rector/scripts/afx-eel-positions.patch # Now, do your modifications as needed. # when you are finished, create the new patch git diff -- Neos.Fusion.Afx/ > ../../rector/scripts/afx-eel-positions.patch # ... and reset the code changes inside Neos.Fusion.Afx. git restore -- Neos.Fusion.Afx/
生成文档
composer run generate-docs