SuperAPI AI 工具集

wp-phpstan

编程与开发

查看项目

更新于 10-15 18:31

技能介绍

WP PHPStan 是一个面向 WordPress 代码库的 PHPStan 静态分析技能,帮助开发者在插件、主题或站点项目中完成 PHPStan 的配置、运行与报错修复。

适用场景

该技能适用于在 WordPress 代码库中处理 PHPStan 相关工作时使用,例如:设置或更新 phpstan.neon / phpstan.neon.dist;生成或更新 phpstan-baseline.neon;通过符合 WordPress 习惯的 PHPDoc(针对 REST 请求、钩子、查询结果)修复 PHPStan 报错;安全地处理第三方插件/主题的类(stubs、autoload、定向忽略)。

所需输入

  • wp-project-triage 的输出(如果尚未运行,需先运行)。
  • 是否允许新增或更新 Composer 开发依赖(stubs)。
  • 当前任务是否允许修改基线。

操作流程

0)发现 PHPStan 入口(确定性步骤) 检查 PHPStan 的配置、基线与脚本:运行 node skills/wp-phpstan/scripts/phpstan_inspect.mjs。如果仓库中已存在 composer 脚本(例如 composer run phpstan),优先使用它。

1)确保 WordPress 核心 stubs 已加载 对于大多数 WordPress 插件/主题仓库,szepeviktor/phpstan-wordpress 或 php-stubs/wordpress-stubs 实际上是必需的。缺少它们时,会预期出现大量关于未知 WordPress 核心函数的报错。确认该包已安装(见检查报告中的 composer.dependencies),并确保 PHPStan 配置引用了这些 stubs(见 references/third-party-classes.md)。

2)确保 phpstan.neon 适用于 WordPress 项目 让 paths 聚焦于第一方代码(插件/主题目录);排除生成代码与第三方代码(vendor/、node_modules/、构建产物、测试,除非明确需要分析);保持 ignoreErrors 条目范围狭窄且有文档说明。详见 references/configuration.md。

3)优先用 WordPress 专用类型标注修复报错 优先修正类型而非忽略报错。常见的需要额外标注的 WP 模式包括:REST 端点使用 WP_REST_Request<...> 标注请求参数;钩子回调为回调参数添加准确的 @param 类型;数据库结果与可迭代对象使用 array shapes 或 object shapes;Action Scheduler 为任务回调的 $args 添加数组形状类型。详见 references/wordpress-annotations.md。

4)处理第三方插件/主题的类(仅在需要时) 当与分析环境中不存在的插件/主题集成时:先确认真实依赖(已安装/被 require);优先使用仓库中已在用的插件专用 stubs(常见示例:php-stubs/woocommerce-stubs、php-stubs/acf-pro-stubs);如果 PHPStan 仍无法解析类,则为特定 vendor 前缀添加定向的 ignoreErrors 模式。详见 references/third-party-classes.md。

5)基线管理(作为迁移工具,而非垃圾箱) 为遗留代码生成一次基线,然后逐步减少;不要将新引入的报错加入基线。详见 references/configuration.md。

验证

使用发现到的命令运行 PHPStan(composer run ... 或 vendor/bin/phpstan analyse);确认基线文件(如使用)已被包含且未意外增长;修改 ignoreErrors 后重新运行,确保模式没有掩盖无关问题。

失败模式 / 调试

  • 出现“Class not found”:确认 autoloading/stubs,或添加狭窄的忽略模式。
  • 启用 PHPStan 后报错量巨大:减少 paths、添加 excludePaths、从较低级别开始,然后逐步提高。
  • 钩子 / REST 参数类型不一致:添加显式 PHPDoc,而非运行时守卫。

升级处理

如果某个类型依赖你无法确认的第三方插件 API,在凭空编造类型之前,先询问依赖版本或源码;如果修复需要新增 Composer 依赖(stubs/扩展),需先与用户确认。

限制

资料未说明该技能支持的具体 PHPStan 版本、WordPress 版本范围、可分析的代码规模上限,也未提供性能或收费相关信息。