inviqa / phpstan-magento1
PHPStan 的扩展,允许分析 Magento 1 代码。
v0.1.5
2019-04-12 10:10 UTC
Requires
- phpstan/phpstan: 0.11.*
This package is auto-updated.
Last update: 2024-09-12 23:27:57 UTC
README
PHPStan 的扩展,允许分析 Magento 1 代码。
目前它假定 Magento 安装在项目根目录的 public/ 目录下。需要在 phpstan 本身上进行进一步的工作,以允许扩展在同时与 phpstan/phpstan 和 phpstan/phpstan-shim 一起工作时进行更多定制。
默认情况下,带有此扩展的 phpstan 将仅测试 public/app/code/local。
用法
将 phpstan.neon
添加到您的 Magento 1 项目中。
确保它具有
includes: - vendor/inviqa/phpstan-magento1/extension.neon
虽然此扩展依赖于 phpstan/phpstan,但它也可以依赖于 phpstan/phpstan-shim,这将将其依赖项与其对项目的使用解耦。
耦合依赖项
composer require inviqa/phpstan-magento1 phpstan/phpstan
解耦的 phar 包
composer require inviqa/phpstan-magento1 phpstan/phpstan-shim
替代 Magento 路径
将其添加到项目的 phpstan.neon 中
parameters: paths: - %currentWorkingDirectory%/path/to/magento/app/code/local excludes_analyse: - %currentWorkingDirectory%/path/to/magento/app/code/local/*/*/data/* - %currentWorkingDirectory%/path/to/magento/app/code/local/*/*/sql/* autoload_files: - %currentWorkingDirectory%/path/to/magento/app/Mage.php
已知问题
## 数据/SQL 脚本无法测试
由于这些脚本由于是从设置类中包含而使用了一个假设的 $this 变量,需要工作来
- 找出正确的设置类
- 以某种方式让 phpstan 了解它对于文件
Magento 流畅接口类对子类来说不是流畅的
这导致后续对类对象的调用假设了定义返回类型的超类的范围。
这是由于它们的 PHPDoc 没有使用最新方式指定使用 "$this" 作为类型的子类流畅性。
解决选项
- 避免在这些类上使用流畅接口
- 修补 Magento 代码以使用 $this 作为返回类型
- 在子类中为调用方法定义 @method PHPDoc
- 将错误添加到 phpstan 配置的 parameters.ignoreErrors 中以忽略它 - 这将失去正确类型化流畅接口后续方法的 ability
Mage_Core_Model_Abstract::load $id 不是一个整数
这是由于 Mage_Core_Model_Abstract 类的 load 方法的 PHPDoc 不充分。它应该使用 "mixed" 类型以支持当第二个参数指定字段时。
PHPStan 扩展没有方法更改现有方法参数。
解决选项
- 修补 Magento 代码以使用 mixed 作为 $id 参数类型
- 如果在其超类链中可用,使用 loadBy{Field} 方法,它具有正确的参数类型
- 在您的类(扩展 Mage_Core_Model_Abstract 或它的子类)中定义 @method PHPDoc,并使用正确的参数类型
- 将错误添加到 phpstan 配置的 parameters.ignoreErrors 中以忽略它