Skip to content

Commit 183bed1

Browse files
Specify which outlining spans should auto-collapse if the user choose "collapse to definitions".
1 parent ffef437 commit 183bed1

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

src/compiler/parser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ module ts {
467467
return node === (<TypeAssertion>parent).type;
468468
case SyntaxKind.CallExpression:
469469
case SyntaxKind.NewExpression:
470-
return (<CallExpression>parent).typeArguments.indexOf(node) >= 0;
470+
return (<CallExpression>parent).typeArguments && (<CallExpression>parent).typeArguments.indexOf(node) >= 0;
471471
}
472472
}
473473

src/services/outliningElementsCollector.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,30 @@ module ts {
3434
export function collectElements(sourceFile: SourceFile): OutliningSpan[] {
3535
var elements: OutliningSpan[] = [];
3636

37-
function addOutlineRange(hintSpanNode: Node, startElement: Node, endElement: Node) {
37+
function addOutliningSpan(hintSpanNode: Node, startElement: Node, endElement: Node, autoCollapse: boolean) {
3838
if (hintSpanNode && startElement && endElement) {
3939
var span: OutliningSpan = {
4040
textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end),
4141
hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end),
4242
bannerText: "...",
43-
autoCollapse: false
43+
autoCollapse: autoCollapse
4444
};
4545
elements.push(span);
4646
}
4747
}
4848

49+
function autoCollapse(node: Node) {
50+
switch (node.kind) {
51+
case SyntaxKind.ModuleBlock:
52+
case SyntaxKind.ClassDeclaration:
53+
case SyntaxKind.InterfaceDeclaration:
54+
case SyntaxKind.EnumDeclaration:
55+
return false;
56+
}
57+
58+
return true;
59+
}
60+
4961
var depth = 0;
5062
var maxDepth = 20;
5163
function walk(n: Node): void {
@@ -62,7 +74,7 @@ module ts {
6274
case SyntaxKind.FinallyBlock:
6375
var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile);
6476
var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile);
65-
addOutlineRange(n.parent, openBrace, closeBrace);
77+
addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n));
6678
break;
6779
case SyntaxKind.ClassDeclaration:
6880
case SyntaxKind.InterfaceDeclaration:
@@ -71,12 +83,12 @@ module ts {
7183
case SyntaxKind.SwitchStatement:
7284
var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile);
7385
var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile);
74-
addOutlineRange(n, openBrace, closeBrace);
86+
addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n));
7587
break;
7688
case SyntaxKind.ArrayLiteral:
7789
var openBracket = findChildOfKind(n, SyntaxKind.OpenBracketToken, sourceFile);
7890
var closeBracket = findChildOfKind(n, SyntaxKind.CloseBracketToken, sourceFile);
79-
addOutlineRange(n, openBracket, closeBracket);
91+
addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n));
8092
break;
8193
}
8294
depth++;

0 commit comments

Comments
 (0)