Skip to content

Commit f0ea98f

Browse files
Improve walking speed in Fidelity.
1 parent e1dfdb4 commit f0ea98f

File tree

5 files changed

+195
-206
lines changed

5 files changed

+195
-206
lines changed

src/services/formatting/formatter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ module TypeScript.Services.Formatting {
5252
rulesProvider: RulesProvider,
5353
formattingRequestKind: FormattingRequestKind): TextEditInfo[] {
5454
var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind);
55-
visitNodeOrToken(walker, sourceUnit);
55+
walker.walk(sourceUnit);
5656
return walker.edits();
5757
}
5858

src/services/formatting/indentationTrackingWalker.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
///<reference path='formatting.ts' />
1717

1818
module TypeScript.Services.Formatting {
19-
export class IndentationTrackingWalker extends SyntaxWalker {
19+
export class IndentationTrackingWalker /*extends SyntaxWalker*/ {
2020
private _position: number = 0;
2121
private _parent: IndentationNodeContext = null;
2222
private _textSpan: TextSpan;
@@ -26,7 +26,7 @@ module TypeScript.Services.Formatting {
2626
private _text: ISimpleText;
2727

2828
constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, public options: FormattingOptions) {
29-
super();
29+
// super();
3030

3131
// Create a pool object to manage context nodes while walking the tree
3232
this._indentationNodeContextPool = new IndentationNodeContextPool();
@@ -100,7 +100,23 @@ module TypeScript.Services.Formatting {
100100
this._position += token.fullWidth();
101101
}
102102

103-
public visitNode(node: ISyntaxNode): void {
103+
public walk(element: ISyntaxElement) {
104+
if (element && !isShared(element)) {
105+
if (isToken(element)) {
106+
this.visitToken(<ISyntaxToken>element);
107+
}
108+
else if (element.kind() === SyntaxKind.List || element.kind() === SyntaxKind.SeparatedList) {
109+
for (var i = 0, n = childCount(element); i < n; i++) {
110+
this.walk(childAt(element, i));
111+
}
112+
}
113+
else {
114+
this.visitNode(<ISyntaxNode>element);
115+
}
116+
}
117+
}
118+
119+
private visitNode(node: ISyntaxNode): void {
104120
var nodeSpan = new TextSpan(this._position, fullWidth(node));
105121

106122
if (nodeSpan.intersectsWithTextSpan(this._textSpan)) {
@@ -112,7 +128,9 @@ module TypeScript.Services.Formatting {
112128
this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta);
113129

114130
// Visit node
115-
visitNodeOrToken(this, node);
131+
for (var i = 0, n = childCount(node); i < n; i++) {
132+
this.walk(childAt(node, i));
133+
}
116134

117135
// Reset state
118136
this._indentationNodeContextPool.releaseNode(this._parent);
Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
///<reference path='references.ts' />
22

33
module TypeScript {
4-
export class DepthLimitedWalker extends SyntaxWalker {
5-
private _depth: number = 0;
6-
private _maximumDepth: number = 0;
4+
//export class DepthLimitedWalker extends SyntaxWalker {
5+
// private _depth: number = 0;
6+
// private _maximumDepth: number = 0;
77

8-
constructor(maximumDepth: number) {
9-
super();
10-
this._maximumDepth = maximumDepth;
11-
}
8+
// constructor(maximumDepth: number) {
9+
// super();
10+
// this._maximumDepth = maximumDepth;
11+
// }
1212

13-
public visitNode(node: ISyntaxNode): void {
14-
if (this._depth < this._maximumDepth) {
15-
this._depth++;
16-
super.visitNode(node);
17-
this._depth--;
18-
}
19-
}
20-
}
13+
// public visitNode(node: ISyntaxNode): void {
14+
// if (this._depth < this._maximumDepth) {
15+
// this._depth++;
16+
// super.visitNode(node);
17+
// this._depth--;
18+
// }
19+
// }
20+
//}
2121
}

src/services/syntax/syntaxGenerator.ts

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2311,19 +2311,19 @@ function generateWalker(): string {
23112311
" export class SyntaxWalker implements ISyntaxVisitor {\r\n" +
23122312
" public visitToken(token: ISyntaxToken): void {\r\n" +
23132313
" }\r\n" +
2314-
"\r\n" +
2315-
" public visitNode(node: ISyntaxNode): void {\r\n" +
2316-
" visitNodeOrToken(this, node);\r\n" +
2317-
" }\r\n" +
2318-
"\r\n" +
2319-
" public visitNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
2320-
" if (isToken(nodeOrToken)) { \r\n" +
2321-
" this.visitToken(<ISyntaxToken>nodeOrToken);\r\n" +
2322-
" }\r\n" +
2323-
" else {\r\n" +
2324-
" this.visitNode(<ISyntaxNode>nodeOrToken);\r\n" +
2325-
" }\r\n" +
2326-
" }\r\n" +
2314+
//"\r\n" +
2315+
//" public visitNode(node: ISyntaxNode): void {\r\n" +
2316+
//" visitNodeOrToken(this, node);\r\n" +
2317+
//" }\r\n" +
2318+
//"\r\n" +
2319+
//" public visitNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
2320+
//" if (isToken(nodeOrToken)) { \r\n" +
2321+
//" this.visitToken(<ISyntaxToken>nodeOrToken);\r\n" +
2322+
//" }\r\n" +
2323+
//" else {\r\n" +
2324+
//" this.visitNode(<ISyntaxNode>nodeOrToken);\r\n" +
2325+
//" }\r\n" +
2326+
//" }\r\n" +
23272327
"\r\n" +
23282328
" private visitOptionalToken(token: ISyntaxToken): void {\r\n" +
23292329
" if (token === undefined) {\r\n" +
@@ -2332,33 +2332,33 @@ function generateWalker(): string {
23322332
"\r\n" +
23332333
" this.visitToken(token);\r\n" +
23342334
" }\r\n" +
2335-
"\r\n" +
2336-
" public visitOptionalNode(node: ISyntaxNode): void {\r\n" +
2337-
" if (node === undefined) {\r\n" +
2338-
" return;\r\n" +
2339-
" }\r\n" +
2340-
"\r\n" +
2341-
" this.visitNode(node);\r\n" +
2342-
" }\r\n" +
2343-
"\r\n" +
2344-
" public visitOptionalNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
2345-
" if (nodeOrToken === undefined) {\r\n" +
2346-
" return;\r\n" +
2347-
" }\r\n" +
2348-
"\r\n" +
2349-
" this.visitNodeOrToken(nodeOrToken);\r\n" +
2350-
" }\r\n" +
2335+
//"\r\n" +
2336+
//" public visitOptionalNode(node: ISyntaxNode): void {\r\n" +
2337+
//" if (node === undefined) {\r\n" +
2338+
//" return;\r\n" +
2339+
//" }\r\n" +
2340+
//"\r\n" +
2341+
//" this.visitNode(node);\r\n" +
2342+
//" }\r\n" +
2343+
//"\r\n" +
2344+
//" public visitOptionalNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
2345+
//" if (nodeOrToken === undefined) {\r\n" +
2346+
//" return;\r\n" +
2347+
//" }\r\n" +
2348+
//"\r\n" +
2349+
//" this.visitNodeOrToken(nodeOrToken);\r\n" +
2350+
//" }\r\n" +
23512351
"\r\n" +
23522352
" public visitList(list: ISyntaxNodeOrToken[]): void {\r\n" +
23532353
" for (var i = 0, n = list.length; i < n; i++) {\r\n" +
2354-
" this.visitNodeOrToken(list[i]);\r\n" +
2354+
" visitNodeOrToken(this, list[i]);\r\n" +
23552355
" }\r\n" +
23562356
" }\r\n" +
23572357
"\r\n" +
23582358
" public visitSeparatedList(list: ISyntaxNodeOrToken[]): void {\r\n" +
23592359
" for (var i = 0, n = childCount(list); i < n; i++) {\r\n" +
23602360
" var item = childAt(list, i);\r\n" +
2361-
" this.visitNodeOrToken(item);\r\n" +
2361+
" visitNodeOrToken(this, item);\r\n" +
23622362
" }\r\n" +
23632363
" }\r\n";
23642364

@@ -2386,20 +2386,20 @@ function generateWalker(): string {
23862386
result += " this.visitSeparatedList(node." + child.name + ");\r\n";
23872387
}
23882388
else if (isNodeOrToken(child)) {
2389-
if (child.isOptional) {
2390-
result += " this.visitOptionalNodeOrToken(node." + child.name + ");\r\n";
2391-
}
2392-
else {
2393-
result += " this.visitNodeOrToken(node." + child.name + ");\r\n";
2394-
}
2389+
//if (child.isOptional) {
2390+
result += " visitNodeOrToken(this, node." + child.name + ");\r\n";
2391+
//}
2392+
//else {
2393+
// result += " this.visitNodeOrToken(node." + child.name + ");\r\n";
2394+
//}
23952395
}
23962396
else if (child.type !== "SyntaxKind") {
2397-
if (child.isOptional) {
2398-
result += " this.visitOptionalNode(node." + child.name + ");\r\n";
2399-
}
2400-
else {
2401-
result += " this.visitNode(node." + child.name + ");\r\n";
2402-
}
2397+
//if (child.isOptional) {
2398+
result += " visitNodeOrToken(this, node." + child.name + ");\r\n";
2399+
//}
2400+
//else {
2401+
// result += " this.visitNode(node." + child.name + ");\r\n";
2402+
//}
24032403
}
24042404
}
24052405

0 commit comments

Comments
 (0)