@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
at upstream/main 52 lines 1.2 kB view raw
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}