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
F13992727: D14496.id.diff
Tue, Oct 22, 6:27 PM
F13978592: D14496.diff
Sat, Oct 19, 12:01 AM
F13978583: D14496.id.diff
Fri, Oct 18, 11:56 PM
F13978579: D14496.id35069.diff
Fri, Oct 18, 11:55 PM
F13978575: D14496.id35072.diff
Fri, Oct 18, 11:54 PM
F13978572: D14496.id35087.diff
Fri, Oct 18, 11:52 PM
F13970688: D14496.diff
Thu, Oct 17, 9:20 AM
F13963143: D14496.id35069.diff
Tue, Oct 15, 2:11 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.