@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 81 lines 2.3 kB view raw
1<?php 2 3/** 4 * @phutil-external-symbol class PhpParser\Error 5 */ 6final class PhorgePHPASTViewRunController 7 extends PhabricatorXHPASTViewController { 8 9 public function handleRequest(AphrontRequest $request) { 10 $viewer = $this->getViewer(); 11 12 if ($request->isFormPost()) { 13 $source = $request->getStr('source'); 14 15 $storage_tree = id(new PhorgePHPASTParseTree()) 16 ->setInput($source) 17 ->setAuthorPHID($viewer->getPHID()); 18 19 $parser = PhutilPHPParserLibrary::getParser(); 20 $exposes_token_stream = version_compare( 21 PhutilPHPParserLibrary::getVersion(), 22 PhutilPHPParserLibrary::EXPECTED_VERSION, 23 '>='); 24 25 try { 26 $storage_tree->setTree($parser->parse($source)); 27 if ($exposes_token_stream) { 28 $storage_tree->setTokenStream($parser->getTokens()); 29 } 30 } catch (PhpParser\Error $ex) { 31 $storage_tree->setError($ex->getMessageWithColumnInfo($source)); 32 } 33 34 $storage_tree->save(); 35 36 return id(new AphrontRedirectResponse()) 37 ->setURI('/phpast/view/'.$storage_tree->getID().'/'); 38 } 39 40 $form = id(new AphrontFormView()) 41 ->setViewer($viewer) 42 ->appendChild( 43 id(new AphrontFormTextAreaControl()) 44 ->setLabel(pht('Source')) 45 ->setName('source') 46 ->setValue("<?php\n\n") 47 ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)) 48 ->appendChild( 49 id(new AphrontFormSubmitControl()) 50 ->setValue(pht('Parse'))); 51 52 $form_box = id(new PHUIObjectBoxView()) 53 ->setHeaderText(pht('Generate PHP AST')) 54 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 55 ->setForm($form); 56 57 $title = pht('PHPAST View'); 58 $header = id(new PHUIHeaderView()) 59 ->setHeader($title) 60 ->setHeaderIcon('fa-ambulance'); 61 62 $view = id(new PHUITwoColumnView()) 63 ->setHeader($header) 64 ->setFooter(array( 65 $form_box, 66 )); 67 68 return $this->newPage() 69 ->setTitle($title) 70 ->setCrumbs( 71 id(new PHUICrumbsView()) 72 ->addAction( 73 id(new PHUIListItemView()) 74 ->setName(pht('Use XHPAST')) 75 ->setHref('/xhpast/') 76 ->setIcon('fa-random'))) 77 ->appendChild($view); 78 79 } 80 81}