@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3/**
4 * @phutil-external-symbol class PhpParser\Node
5 */
6final class PhorgePHPASTViewTreeController
7 extends PhorgePHPASTViewPanelController {
8
9 public function handleRequest(AphrontRequest $request) {
10 $storage = $this->getStorageTree();
11 $err = $storage->getError();
12 $ast = $storage->getTree();
13
14 if ($err) {
15 return $this->buildPHPASTViewPanelResponse($err);
16 }
17
18 return $this->buildPHPASTViewPanelResponse($this->buildTree($ast));
19 }
20
21 protected function buildTree(array $nodes) {
22 $tree = array();
23
24 foreach ($nodes as $node) {
25 $tree[] = phutil_tag(
26 'li',
27 array(),
28 phutil_tag(
29 'span',
30 array(
31 'title' => $node->getType(),
32 ),
33 $node->getType()));
34
35 foreach ($node->getSubNodeNames() as $sub_node_name) {
36 $sub_node = $node->{$sub_node_name};
37
38 if (is_array($sub_node) && $sub_node) {
39 $tree[] = $this->buildTree($sub_node);
40 } else if ($sub_node instanceof PhpParser\Node) {
41 $tree[] = $this->buildTree(array($sub_node));
42 }
43 }
44 }
45
46 return phutil_tag(
47 'ul',
48 array(),
49 phutil_implode_html("\n", $tree));
50 }
51
52}