@@ -33,13 +33,14 @@ module ts {
33
33
export module OutliningElementsCollector {
34
34
export function collectElements ( sourceFile : SourceFile ) : OutliningSpan [ ] {
35
35
var elements : OutliningSpan [ ] = [ ] ;
36
+ var collapseText = "..." ;
36
37
37
38
function addOutliningSpan ( hintSpanNode : Node , startElement : Node , endElement : Node , autoCollapse : boolean ) {
38
39
if ( hintSpanNode && startElement && endElement ) {
39
40
var span : OutliningSpan = {
40
41
textSpan : TypeScript . TextSpan . fromBounds ( startElement . pos , endElement . end ) ,
41
42
hintSpan : TypeScript . TextSpan . fromBounds ( hintSpanNode . getStart ( ) , hintSpanNode . end ) ,
42
- bannerText : "..." ,
43
+ bannerText : collapseText ,
43
44
autoCollapse : autoCollapse
44
45
} ;
45
46
elements . push ( span ) ;
@@ -66,10 +67,39 @@ module ts {
66
67
}
67
68
switch ( n . kind ) {
68
69
case SyntaxKind . Block :
70
+ var parent = n . parent ;
71
+ var openBrace = findChildOfKind ( n , SyntaxKind . OpenBraceToken , sourceFile ) ;
72
+ var closeBrace = findChildOfKind ( n , SyntaxKind . CloseBraceToken , sourceFile ) ;
73
+
74
+ // Check if the block is standalone, or 'attached' to some parent statement.
75
+ // If the latter, we want to collaps the block, but consider its hint span
76
+ // to be the entire span of the parent.
77
+ if ( parent . kind === SyntaxKind . DoStatement ||
78
+ parent . kind === SyntaxKind . ForInStatement ||
79
+ parent . kind === SyntaxKind . ForStatement ||
80
+ parent . kind === SyntaxKind . IfStatement ||
81
+ parent . kind === SyntaxKind . WhileStatement ||
82
+ parent . kind === SyntaxKind . WithStatement ) {
83
+
84
+ addOutliningSpan ( parent , openBrace , closeBrace , autoCollapse ( n ) ) ;
85
+ }
86
+ else {
87
+ // Block was a standalone block. In this case we want to only collapse
88
+ // the span of the block, independent of any parent span.
89
+ var span = TypeScript . TextSpan . fromBounds ( n . getStart ( ) , n . end ) ;
90
+ elements . push ( {
91
+ textSpan : span ,
92
+ hintSpan : span ,
93
+ bannerText : collapseText ,
94
+ autoCollapse : autoCollapse ( n )
95
+ } ) ;
96
+ }
97
+ break ;
98
+
99
+
69
100
case SyntaxKind . FunctionBlock :
70
101
case SyntaxKind . ModuleBlock :
71
102
case SyntaxKind . TryBlock :
72
- case SyntaxKind . TryBlock :
73
103
case SyntaxKind . CatchBlock :
74
104
case SyntaxKind . FinallyBlock :
75
105
var openBrace = findChildOfKind ( n , SyntaxKind . OpenBraceToken , sourceFile ) ;
0 commit comments