From 183bed1bb8b19ff1138ec1f2780ef7c7f5a0a62d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 2 Oct 2014 17:35:48 -0700 Subject: [PATCH] Specify which outlining spans should auto-collapse if the user choose "collapse to definitions". --- src/compiler/parser.ts | 2 +- src/services/outliningElementsCollector.ts | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b9865772c06..5318e679c4e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -467,7 +467,7 @@ module ts { return node === (parent).type; case SyntaxKind.CallExpression: case SyntaxKind.NewExpression: - return (parent).typeArguments.indexOf(node) >= 0; + return (parent).typeArguments && (parent).typeArguments.indexOf(node) >= 0; } } diff --git a/src/services/outliningElementsCollector.ts b/src/services/outliningElementsCollector.ts index 134508bc067..c9a513ee2aa 100644 --- a/src/services/outliningElementsCollector.ts +++ b/src/services/outliningElementsCollector.ts @@ -34,18 +34,30 @@ module ts { export function collectElements(sourceFile: SourceFile): OutliningSpan[] { var elements: OutliningSpan[] = []; - function addOutlineRange(hintSpanNode: Node, startElement: Node, endElement: Node) { + function addOutliningSpan(hintSpanNode: Node, startElement: Node, endElement: Node, autoCollapse: boolean) { if (hintSpanNode && startElement && endElement) { var span: OutliningSpan = { textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end), hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end), bannerText: "...", - autoCollapse: false + autoCollapse: autoCollapse }; elements.push(span); } } + function autoCollapse(node: Node) { + switch (node.kind) { + case SyntaxKind.ModuleBlock: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.EnumDeclaration: + return false; + } + + return true; + } + var depth = 0; var maxDepth = 20; function walk(n: Node): void { @@ -62,7 +74,7 @@ module ts { case SyntaxKind.FinallyBlock: var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile); var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile); - addOutlineRange(n.parent, openBrace, closeBrace); + addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); break; case SyntaxKind.ClassDeclaration: case SyntaxKind.InterfaceDeclaration: @@ -71,12 +83,12 @@ module ts { case SyntaxKind.SwitchStatement: var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile); var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile); - addOutlineRange(n, openBrace, closeBrace); + addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); break; case SyntaxKind.ArrayLiteral: var openBracket = findChildOfKind(n, SyntaxKind.OpenBracketToken, sourceFile); var closeBracket = findChildOfKind(n, SyntaxKind.CloseBracketToken, sourceFile); - addOutlineRange(n, openBracket, closeBracket); + addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); break; } depth++;