Page MenuHomePhabricator

Add previous and next sibling pointers to `AASTNode`
ClosedPublic

Authored by joshuaspence on Nov 17 2015, 4:20 AM.
Tags
None
Referenced Files
F19811799: D14496.id35072.diff
Wed, Mar 4, 2:32 AM
F19810946: D14496.id35072.diff
Tue, Mar 3, 10:09 PM
F19537027: D14496.diff
Jan 21 2026, 12:11 PM
F19521685: D14496.id35069.diff
Jan 17 2026, 12:46 AM
F19518941: D14496.id35069.diff
Jan 16 2026, 12:24 AM
F19516477: D14496.id35069.diff
Jan 15 2026, 12:27 AM
F19510649: D14496.id35072.diff
Jan 11 2026, 1:06 PM
F19303621: D14496.diff
Dec 24 2025, 3:17 AM
Subscribers

Details

Summary

Adds AASTNode::$previousSibling and AASTNode::$nextSibling properties. The primary use case is for writing a custom linter rule.

Test Plan

Tested in my custom linter rule.

Diff Detail

Repository
rPHU libphutil
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

joshuaspence retitled this revision from to Add a `XHPAST::getNamespace` method.
joshuaspence updated this object.
joshuaspence edited the test plan for this revision. (Show Details)

Actually, this is still generally useful, with some minor modifications.

joshuaspence retitled this revision from Add a `XHPAST::getNamespace` method to Add previous and next sibling pointers to `AASTNode`.Nov 17 2015, 9:32 AM
joshuaspence updated this object.
joshuaspence edited edge metadata.
joshuaspence edited the test plan for this revision. (Show Details)

Does this affect the time required to construct a large tree? I recall buildTree() being expensive in the past.

Does this affect the time required to construct a large tree? I recall buildTree() being expensive in the past.

It doesn't seem like it does... Using the following script as a benchmark:

1<?php
2
3require_once __DIR__.'/scripts/__init_script__.php';
4
5$console = PhutilConsole::getConsole();
6$iterations = 10;
7$source = Filesystem::readFile(__DIR__.'/../phabricator/src/__phutil_library_map__.php');
8$start = microtime(true);
9
10for ($ii = 0; $ii < $iterations; $ii++) {
11 XHPASTTree::newFromData($source);
12}
13
14$end = microtime(true);
15$duration = $end - $start;
16
17$console->writeOut("Average: %fs\n", $duration / $iterations);
18$console->writeOut("Total: %fs\n", $duration);

(The library map from rP is the largest PHP source file that I could easily find at 656K or 8158 lines)

Before
Average: 2.281007s
Total:   22.810069s
After
Average: 2.041991s
Total:   20.419912s
This revision is now accepted and ready to land.Nov 17 2015, 8:35 PM
This revision was automatically updated to reflect the committed changes.