lifespikes / scramble-match-stmt
用于PhpParser的Scramble使用的示例扩展
1.0.5
2023-11-06 20:27 UTC
Requires
- php: ^8.1.2
- dedoc/scramble: ^0.8.4
This package is auto-updated.
Last update: 2024-09-06 22:27:55 UTC
README
这个Scramble扩展是为了实验在构建扩展时PhpParser的可使用性。
本质上,它允许您通过match语句扫描具有动态返回类型的JsonResource类的toArray功能。
安装
composer require lifespikes/scramble-match-stmt
然后,在您的scramble.php配置文件中
use LifeSpikes\ScrambleMatchStmt\ResourceWithMatchExtension; ... 'extensions' => [ ResourceWithMatchExtension::class ]
分析代码
Scramble通过ReflectionClass提供正在分析的类型的全限定名(FQN),我们获取类的文件路径。
我们获取内容并使用Scramble的FileParser获取我们打算分析的文件的AST。这返回一个FileParserResult对象,它本质上是一个PhpParser实例。
一旦我们有一个文件,我们就使用getMethod方法帮助我们更容易地访问toArray方法。
然后,我们遍历节点
- 首先我们找到
return语句 - 然后是
match - 然后我们获取第一个
MatchArm_
最后,我们获取MatchArm_的主体并验证它是否为数组。
转换为Scramble类型
我们必须深入挖掘并使用来自MethodAnalyzer和ArrayItemHandler类的代码。
然后我们模仿了它们的一些行为,并重新使用了其他内部类,如Scope和TypeHelper,将我们的PhpParser节点转换为Scramble类型。
最后,我们使用TypeTransformer将一切转换为可用的OpenAPI Schema。
更多信息?
阅读代码,并我围绕更多细节散布的一些注释。