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
F15479352: D14496.id35087.diff
Tue, Apr 8, 6:34 AM
F15454492: D14496.id35069.diff
Sat, Mar 29, 6:46 PM
F15450685: D14496.id.diff
Fri, Mar 28, 5:05 PM
F15449239: D14496.id35087.diff
Fri, Mar 28, 9:04 AM
F15438688: D14496.id35072.diff
Wed, Mar 26, 2:43 AM
F15436460: D14496.id.diff
Tue, Mar 25, 2:21 PM
F15430631: D14496.diff
Mon, Mar 24, 8:29 AM
F15420663: D14496.id35087.diff
Fri, Mar 21, 3:55 PM
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
Branch
master
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 8882
Build 10394: Run Core Tests
Build 10393: arc lint + arc unit

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.