inviqa/phpstan-magento1

PHPStan 的扩展,允许分析 Magento 1 代码。

v0.1.5 2019-04-12 10:10 UTC

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 中以忽略它