@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
3final class PhabricatorXHPASTViewStreamController
4 extends PhabricatorXHPASTViewPanelController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $storage = $this->getStorageTree();
8 $input = $storage->getInput();
9 $err = $storage->getReturnCode();
10 $stdout = $storage->getStdout();
11 $stderr = $storage->getStderr();
12
13 try {
14 $tree = XHPASTTree::newFromDataAndResolvedExecFuture(
15 $input,
16 array($err, $stdout, $stderr));
17 } catch (XHPASTSyntaxErrorException $ex) {
18 return $this->buildXHPASTViewPanelResponse($ex->getMessage());
19 }
20
21 $tokens = array();
22 foreach ($tree->getRawTokenStream() as $id => $token) {
23 $seq = $id;
24 $name = $token->getTypeName();
25 $title = pht('Token %d: %s', $seq, $name);
26
27 $tokens[] = phutil_tag(
28 'span',
29 array(
30 'title' => $title,
31 'class' => 'token',
32 ),
33 $token->getValue());
34 }
35
36 return $this->buildXHPASTViewPanelResponse(
37 phutil_implode_html('', $tokens));
38 }
39}