micaherne/rector-moodle

Rector 的配置,用于升级 Moodle 插件

安装: 7

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 1

开放性问题: 2

类型:rector-extension

dev-main 2024-04-30 21:55 UTC

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 文件中的指南的方法。