lifespikes/scramble-match-stmt

用于PhpParser的Scramble使用的示例扩展

1.0.5 2023-11-06 20:27 UTC

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类型

我们必须深入挖掘并使用来自MethodAnalyzerArrayItemHandler类的代码。

然后我们模仿了它们的一些行为,并重新使用了其他内部类,如ScopeTypeHelper,将我们的PhpParser节点转换为Scramble类型。

最后,我们使用TypeTransformer将一切转换为可用的OpenAPI Schema。

更多信息?

阅读代码,并我围绕更多细节散布的一些注释。