szepeviktor / phpstan-wordpress
PHPStan 的 WordPress 扩展
Requires
- php: ^7.2 || ^8.0
- php-stubs/wordpress-stubs: ^4.7 || ^5.0 || ^6.0
- phpstan/phpstan: ^1.10.31
- symfony/polyfill-php73: ^1.12.0
Requires (Dev)
- composer/composer: ^2.1.14
- dealerdirect/phpcodesniffer-composer-installer: ^1.0
- php-parallel-lint/php-parallel-lint: ^1.1
- phpstan/phpstan-strict-rules: ^1.2
- phpunit/phpunit: ^8.0 || ^9.0
- szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset: ^1.0
- wp-coding-standards/wpcs: 3.1.0 as 2.3.0
Suggests
- swissspidy/phpstan-no-private: Detect usage of internal core functions, classes and methods
- dev-master
- 2.x-dev
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.7.7
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.6
- v0.6.5
- v0.6.4
- v0.6.3
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.0
- v0.4.0
- v0.3.0
- 0.2.1
- 0.2.0
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
This package is auto-updated.
Last update: 2024-09-05 18:13:41 UTC
README
重要
大家好!我是Viktor,负责维护这个PHPStan扩展。我计划停止为WordPress生态系统做出贡献,因为这非常困难,没有人邀请我加入他们的团队,因为我是一个思考者,一个devops人员,一个工具制造者(而不是建造者)。
请支持我的工作,以避免放弃这个包。
谢谢!
PHPStan 的 WordPress 扩展
WordPress生态系统的静态分析。
安装
将此包添加到您的项目中。
composer require --dev szepeviktor/phpstan-wordpress
使用 phpstan/extension-installer
自动让PHPStan找到它。
composer require --dev phpstan/extension-installer
或者手动将其包含在您的 phpstan.neon
中。
includes: - vendor/szepeviktor/phpstan-wordpress/extension.neon
配置
无需额外配置。😃只需配置PHPStan - 例如 - 这样。
parameters: level: 5 paths: - plugin.php - inc/
请阅读 PHPStan 配置参考。
💡 使用Composer自动加载器或一个 自定义自动加载器!
用法
只需开始分析: vendor/bin/phpstan analyze
然后修复错误并 GOTO 10
!
您可以在 examples
目录中找到更多信息,例如 examples/phpstan.neon.dist
在 WooCommerce 网上商店中的使用
此扩展的功能
- 使您能够在WordPress插件和主题上运行PHPStan
- 加载
php-stubs/wordpress-stubs
包 - 为许多核心函数提供动态返回类型扩展
- 定义了一些核心常量
- 处理特殊函数和类,例如
is_wp_error()
- 验证在调用
apply_filters()
之前的前置可选文档块,并将其第一个@param
的类型视为确定的
apply_filters()
文档块的用法
WordPress核心 - 以及更广泛的WordPress生态系统 - 使用PHPDoc文档块以非标准方式记录传递给 apply_filters()
的参数。示例
/** * Filters the page title when creating an HTML drop-down list of pages. * * @param string $title Page title. * @param WP_Post $page Page data object. */ $title = apply_filters( 'list_pages', $title, $page );
此扩展在您的代码中存在这些文档块时理解这些文档块,并使用它们来指导PHPStan将过滤器的返回类型视为确定的,根据第一个 @param
标签。在上面的示例中,这意味着PHPStan将 $title
的类型视为 string
。
为了最大限度地利用此功能,请确保这些文档块中每个第一个 @param
标签的类型都是准确且正确的。
使您的代码可测试
- 编写干净的OOP代码:每个文件一个类,类文件中不包含
class Name { ... }
之外的任何代码 - 对代码进行结构化:统一的类名(WPCS或PSR-4),将类保存在单独的目录
inc/
中 - 为类、属性、方法、函数以及调用
apply_filters()
添加适当的PHPDoc块 - 选择您的 主插件文件部分。
- 避免使用核心常量,使用核心函数
- 避免PHP的坏部分
- 函数:
eval
、extract
、compact
、list
- 类型混淆:
$a = '15'; if ($a) ...
- 函数:
- 如果您需要健壮的代码,请尽量避免所有类型的类型变换(例如,
if
需要布尔值),请参阅变量处理函数 - 如果您不受PHP 5的限制,请考虑遵循Neutron标准
- 不要在
WP_CLI::launch
或WP_CLI::runcommand
中启用exit_error
,以保持您的代码可测试性
脏角落(常见问题解答)
WordPress使用条件函数和类定义来进行覆盖。当函数之前已经定义时,使用sed
命令来排除函数占位符。
sed -i -e 's#function is_gd_image#function __is_gd_image#' vendor/php-stubs/wordpress-stubs/wordpress-stubs.php