dreikern/phpstan-oxid

OXID eShop 的 PHPStan 扩展

安装次数: 679

依赖者: 0

建议者: 0

安全: 0

星标: 3

关注者: 4

分支: 0

开放问题: 0

类型:phpstan-extension

0.1.6 2023-10-23 11:11 UTC

This package is auto-updated.

Last update: 2024-09-23 13:44:00 UTC


README

Build Latest Stable Version License

本扩展提供以下功能

  • OXID eShop 使用类链来将模块注入其系统中。这个类链在运行时构建,因此静态代码分析器 PHPStan 无法检测到。此扩展读取您的商店配置(例如 var/configuration/shops/1.yaml)并在 PHPStan 分析您的代码时构建此类链。仅考虑启用的模块。这允许 PHPStan 展示其魔法。
  • 当使用 oxNew()Registry::get() 时,此扩展在 PHPStan 分析您的代码时动态更改返回类型,使其了解您的代码对 OXID eShop 类所做的任何更改。
  • 为修复 OXID eShop 中的不正确的 phpdoc 注释,此扩展提供了一些 OXID eShop 类的存根。当您遇到此类错误时,请随时贡献更多存根。PHPStan 文档
  • 提供规则以检测使用旧类名(例如 oxdiscount 而不是 \OxidEsales\Eshop\Application\Model\Discount)或没有统一命名空间的类(例如 \OxidEsales\EshopCommunity\Application\Model\Voucher 而不是 \OxidEsales\Eshop\Application\Model\Voucher)。

安装

要使用此扩展,请在 Composer 中要求它

composer require --dev dreikern/phpstan-oxid

如果您还安装了 phpstan/extension-installer,那么您就准备就绪了!

手动安装

如果您不想使用 phpstan/extension-installer,请将 extension.neon 包含在您的项目 PHPStan 配置中

includes:
    - vendor/dreikern/phpstan-oxid/extension.neon

配置

如果您的商店模块配置路径与 var/configuration/shops/1.yaml 不同,您可以在 phpstan.neon 中覆盖此路径

parameters:
    oxid:
        shopConfigurationPath: var/configuration/shops/1.yaml

如果您需要分析不同的子商店而无需更改 phpstan.neon,您可以通过环境变量设置路径

PHPSTAN_OXID_CONFIG_PATH=path/to/config/1.yaml ./vendor/bin/phpstan analyze path/to/oxid/module

规则

OxNewCalledWithEditionNamespaceRule

对类 %soxNew() 调用使用版本命名空间。使用 %s 代替。

oxNew(\OxidEsales\EshopCommunity\Application\Model\Voucher::class);


oxNew(\OxidEsales\Eshop\Application\Model\Voucher::class);

OxNewCalledWithLegacyClassNameRule

对旧类名 %soxNew() 调用。使用 %s 代替。

oxNew('oxdiscount');


oxNew(\OxidEsales\Eshop\Application\Model\Discount::class);

RegistryGetCalledWithEditionNamespaceRule

对类 %sRegistry::get() 调用使用版本命名空间。使用 %s 代替。

Registry::get(\OxidEsales\EshopCommunity\Application\Model\Voucher::class);


Registry::get(\OxidEsales\Eshop\Application\Model\Discount::class);

RegistryGetCalledWithLegacyClassNameRule

对旧类名 %sRegistry::get() 调用。使用 %s 代替。

Registry::get('oxdiscount');


Registry::get(\OxidEsales\Eshop\Application\Model\Voucher::class);

鸣谢

此 PHPStan 扩展深受 phpstan-doctrine 的启发