dreikern/phpstan-oxid

PHPStan extension for OXID eShop

Installs: 514

Dependents: 0

Suggesters: 0

Security: 0

Stars: 3

Watchers: 4

Forks: 0

Open Issues: 0

Type:phpstan-extension

0.1.6 2023-10-23 11:11 UTC

This package is auto-updated.

Last update: 2024-04-23 12:45:10 UTC


README

Build Latest Stable Version License

This extension provides following features:

  • OXID eShop uses class chaining in order to inject modules into their system. This class chain is built at runtime so PHPStan, as a static code analyzer, isn't able to detect that. This extension reads your shop configuration (e.g. var/configuration/shops/1.yaml) and builds this class chain when PHPStan is analyzing your code. Only activated modules are considered. This allows PHPStan to do its magic.
  • When using oxNew() or Registry::get() this extension dynamically changes the return type when PHPStan is analyzing your code, so it is aware of any changes your code adds to OXID eShop classes.
  • Stubs some OXID eShops classes to fix incorrect phpdoc comments in OXID eShop. Feel free to contribute more stubs when you encounter such mistakes. PHPStan Documentation
  • Provide rules to detect usage of legacy class names (e.g. oxdiscount instead of \OxidEsales\Eshop\Application\Model\Discount) or classes without unified namespace (e.g. \OxidEsales\EshopCommunity\Application\Model\Voucher instead of \OxidEsales\Eshop\Application\Model\Voucher).

Installation

To use this extension, require it in Composer:

composer require --dev dreikern/phpstan-oxid

If you also install phpstan/extension-installer then you're all set!

Manual installation

If you don't want to use phpstan/extension-installer, include extension.neon in your project's PHPStan config:

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

Configuration

If the path to your shops module configuration differs from var/configuration/shops/1.yaml , you can override the path in your phpstan.neon:

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

If you need to analyze different subshops without changing your phpstan.neon you are able to set the path via environment variable:

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

Rules

OxNewCalledWithEditionNamespaceRule

oxNew() call with edition namespace for class %s. Use %s instead.

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


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

OxNewCalledWithLegacyClassNameRule

oxNew() call with legacy className %s. Use %s instead.

oxNew('oxdiscount');


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

RegistryGetCalledWithEditionNamespaceRule

Registry::get() call with edition namespace for class %s. Use %s instead.

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


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

RegistryGetCalledWithLegacyClassNameRule

Registry::get() call with legacy className %s. Use %s instead.

Registry::get('oxdiscount');


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

Credits

This PHPStan extensions is heavily inspired by phpstan-doctrine