micaherne/phpstan-moodle

用于在 Moodle 代码上使用 PHPStan 的规则和工具。

安装: 36

依赖: 1

建议: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:phpstan-extension

dev-main 2024-07-07 22:37 UTC

This package is auto-updated.

Last update: 2024-09-07 23:00:58 UTC


README

这是一个 PHPStan 插件,它能够分析 Moodle 代码。

目前它仅支持启动类加载器 - 尚未设置任何规则。

请注意,这将执行您的 Moodle 代码库中的代码。

安装

要使用此插件,请使用 phpstan 扩展安装程序进行安装

否则,请在 Composer 中要求它

composer require --dev micaherne/phpstan-moodle

然后在项目根目录中创建一个包含以下内容的 phpstan.neon 文件

includes:
    - vendor/micaherne/phpstan-moodle/extension.neon

用法

将以下内容添加到您的 phpstan.neon 文件中

parameters:
    moodle:
        rootDirectory: /path/to/moodle

必须 将 rootDirectory 参数指定为绝对路径。

技术细节

此插件为何存在

PHPStan 在扫描代码中的类和其他符号方面具有出色的功能,但对于与 Moodle 一起使用来说这还不够。这是由于 PHPStan 对类别名的处理,Moodle 中广泛使用类别名。为了让 PHPStan 了解类别名,这些别名必须在运行时实际存在,这意味着别名类也必须是可加载的。此插件启动 Moodle 类加载器并在代码库中设置(大部分)别名,以便 PHPStan 能够理解它们。

插件存在的另一个原因是启用使用 Rector 的重构,Rector 将其符号发现委托给 PHPStan。Rector 假设所有类都可以正确发现(在某些情况下,如果它不了解基类,则可能会错误地重构),因此这是必要的。

工作原理

在您的 PHPStan 配置中设置 moodle.rootDirectory 参数会设置对整个 Moodle 代码库的目录扫描。它还会调用一个启动脚本,该脚本加载 Moodle 类加载器并包含代码库中包含显式类别名调用的大多数文件。在 db/renamedclasses.php 文件中重命名类的别名由类加载器本身处理。

它还

  • 将 moodle_exception 设置为未检查
  • 为标准全局变量可能未定义添加一些忽略项(因为我们知道它们是已定义的)
  • 为像 enrol_get_plugin() 和 get_auth_plugin() 这样的函数加载一些类型指定扩展,其中返回类型基于调用中的参数动态确定