kompaneytsev / mermaid-node-dumper
关于此包的最新版本(dev-main)没有可用的许可信息。
dev-main
2023-03-20 15:37 UTC
Requires
- jbzoo/mermaid-php: ^3.0
- nikic/php-parser: ^4.15
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2024-09-20 18:59:23 UTC
README
输出由 nikic/php-parser 构建的 ast 树,并使用 mermaid 和 jbzoo/mermaid-php 表示。扩展 \Kompaneytsev\MermaidNodeDumper\StyledNode
支持mermaid样式,查看 高级示例。
简单示例
<?php require 'vendor/autoload.php'; use Kompaneytsev\MermaidNodeDumper\NodeDumper; use PhpParser\ParserFactory; $code = <<<'CODE' <?php function test($foo) { var_dump($foo); } CODE; $parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7); $ast = $parser->parse($code); $dumper = new NodeDumper; echo $dumper->dump($ast)->getLiveEditorUrl();
输出
安装
composer require --dev kompaneytsev/mermaid-node-dumper
测试
vendor/bin/phpunit
Phpstan
vendor/bin/phpstan analyse
高级使用
<?php declare(strict_types=1); require 'vendor/autoload.php'; use JBZoo\MermaidPHP\Node; use Kompaneytsev\MermaidNodeDumper\NodeDumper; use Kompaneytsev\MermaidNodeDumper\StyledNode as MermaidNode; use PhpParser\Error; use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; use PhpParser\ParserFactory; use PhpParser\PrettyPrinter\Standard; $code = <<<'CODE' <?php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; class LuckyController { public function number(): Response { $number = random_int(0, 100); return new Response( '<html><body>Lucky number: '.$number.'</body></html>' ); } } CODE; $parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7); try { $ast = $parser->parse($code); } catch (Error $error) { echo "Parse error: {$error->getMessage()}\n"; return; } $dumper = new NodeDumper([ ClassMethod::class => static function (string $id, ClassMethod $node): MermaidNode { $style = sprintf('style %s fill:#f9f,color:#000', $id); $name = sprintf('%s (%s)', $node->getType(), $node->name); return new MermaidNode($id, $name, Node::ROUND, $style); }, Return_::class => static function (string $id, Return_ $node): MermaidNode { $prettyPrinter = new Standard(); $style = sprintf('style %s fill:#ff0,color:#000', $id); $name = sprintf('%s (%s)', $node->getType(), $prettyPrinter->prettyPrint([$node])); return new MermaidNode($id, $name, Node::ROUND, $style); }, ],[ Return_::class => static function (Return_ $node): bool { return true; } ], [ Identifier::class => static function (Identifier $node): bool { return true; } ]); echo (string) $dumper->dump($ast);