micaherne / rector-moodle
Rector 的配置,用于升级 Moodle 插件
Requires
- php: ^8.0
- micaherne/phpstan-moodle: dev-main
- rector/rector: ^1.0 >=1.0.2
- symfony/filesystem: ^v7.0
Requires (Dev)
- phpunit/phpunit: ^11.0
- symfony/console: ^7.0
- symfony/finder: ^7.0
- symfony/process: ^7.0
This package is auto-updated.
Last update: 2024-09-30 22:54:29 UTC
README
本软件包提供了基本规则集,用于升级 Moodle 插件以与新版本兼容,使用 Rector。
注意,这是一个正在进行中的工作,并不提供全面的迁移。手动检查仍然是必要的。
安装
Rector 使用 Composer 安装,本软件包也应类似安装。添加一个开发依赖项
composer require --dev micaherne/rector-moodle
配置
可以将规则集添加到您的 rector.php 配置文件中。例如
use Rector\Config\RectorConfig;
use RectorMoodle\Set\MoodleLevelSetList;
use RectorMoodle\Set\MoodleSetList;
return RectorConfig::configure()
->withSets([
MoodleLevelSetList::UP_TO_MOODLE_43,
MoodleSetList::RENAME_CONTEXT_CLASSES
])
->withImportNames();
以下规则集可用
- MoodleSetList::MOODLE_42 - 更新 Moodle 4.2 中引入的功能
- MoodleSetList::MOODLE_43 - 更新 Moodle 4.3 中引入的功能
- MoodleSetList::RENAME_CONTEXT_CLASSES - 将上下文类重命名为 Moodle 4.2 中引入的新命名空间名称,并将像 CONTEXT_COURSE 这样的级别常量转换为相应的新的 LEVEL 类常量。这独立于 Moodle 4.2 集合,因为文档强烈暗示没有要求从旧的 \context_* 类名更新,并且向后兼容的类别名将无限期保留。
- MoodleLevelSetList::UP_TO_MOODLE_43 - 应用 Moodle 4.2 和 4.3 的更新。
符号发现
一些 Rector 规则需要了解类层次结构或其他符号(例如 CompleteDynamicPropertiesRector)。为了使这些规则正确工作,必须扫描整个 Moodle 代码库。这似乎可以通过使用 RectorConfig 对象上的 autoloadPaths() 方法实现,但这似乎不起作用。这个替代方法是使用 phpstanConfig() 方法指定一个 PHPStan 配置文件,该文件在 scanDirectories 参数中包含 Moodle 代码库。例如
return RectorConfig::configure()
->withSets([
MoodleLevelSetList::UP_TO_MOODLE_43,
])
->phpstanConfig(__DIR__ . '/phpstan.neon');
其中 phpstan.neon 文件包含如下内容
parameters:
scanDirectories:
- /path/to/moodle
有一个辅助类,可以用于为 Moodle 代码库生成 PHPStan 配置文件。
use Rector\CodeQuality\Rector\Class_\CompleteDynamicPropertiesRector;
use Rector\Config\RectorConfig;
use RectorMoodle\Config\ConfigHelper;
return function (RectorConfig $rectorConfig) {
$configHelper = new ConfigHelper();
$rectorConfig->phpstanConfig($configHelper->getPhpStanConfig(__DIR__ . '/../../moodle'));
$rectorConfig->rule(CompleteDynamicPropertiesRector::class);
};
类别名
注意,上述符号发现方法没有处理类别名。确保您的代码中没有包含任何在 Moodle 代码库中是别名的类。
特别是,您应该运行您使用的 Moodle 版本的 UP_TO_MOODLE_* 规则集,以及如果您正在处理 Moodle 4.2 或更高版本,还应运行 RENAME_CONTEXT_CLASSES 集合。
覆盖率
规则集主要集中于更新移动的类名(例如,在 renamedclasses.php 文件中定义的),或者函数被移动到类的静态方法上但保留相同签名的情况。
Moodle 版本之间有许多其他更改,但其中一些无法实现自动化重构,因此这并不是替代遵循 Moodle upgrade.txt 文件中的指南的方法。