neos/rector

该软件包最新版本(dev-main)没有可用的许可信息。

维护者

详细信息

github.com/neos/rector

源代码

问题

资助软件包维护!
shop.neos.io/neosfunding

dev-main 2024-08-30 07:12 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 文件,通过提供 FusionFileProcessorFusionRectorInterface,您可以实现它们以构建 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