1616///<reference path='references.ts' />
1717
1818module ts {
19+
20+ export interface OutliningSpan {
21+ /**
22+ * @param textSpan The span of the document to actually collapse.
23+ * @param hintSpan The span of the document to display when the user hovers over the
24+ * collapsed span.
25+ * @param bannerText The text to display in the editor for the collapsed region.
26+ * @param autoCollapse Whether or not this region should be automatically collapsed when
27+ * the 'Collapse to Definitions' command is invoked.
28+ */
29+ textSpan : TypeScript . TextSpan ;
30+ hintSpan : TypeScript . TextSpan ;
31+ bannerText : string ;
32+ autoCollapse : boolean ;
33+ }
34+
1935 export module OutliningElementsCollector {
20- export function collectElements ( sourceFile : SourceFile ) : TypeScript . TextSpan [ ] {
21- var elements : TypeScript . TextSpan [ ] = [ ] ;
36+ export function collectElements ( sourceFile : SourceFile ) : OutliningSpan [ ] {
37+ var elements : OutliningSpan [ ] = [ ] ;
2238
23- function addOutlineRange ( startElement : Node , endElement : Node ) {
24- if ( startElement && endElement ) {
25- // Push the new range
26- elements . push ( TypeScript . TextSpan . fromBounds ( startElement . pos , endElement . end ) ) ;
39+ function addOutlineRange ( node : Node , startElement : Node , endElement : Node ) {
40+ if ( node && startElement && endElement ) {
41+ var span : OutliningSpan = {
42+ textSpan : TypeScript . TextSpan . fromBounds ( startElement . pos , endElement . end ) ,
43+ hintSpan : TypeScript . TextSpan . fromBounds ( node . getFullStart ( ) , node . end ) ,
44+ bannerText : "..." ,
45+ autoCollapse : false
46+ } ;
47+ elements . push ( span ) ;
2748 }
2849 }
2950
30- function walk ( n : Node ) {
51+ var depth = 0 ;
52+ var maxDepth = 10 ;
53+ function walk ( n : Node ) : void {
54+ if ( depth >= maxDepth ) {
55+ return ;
56+ }
3157 switch ( n . kind ) {
3258 case SyntaxKind . ClassDeclaration :
3359 case SyntaxKind . InterfaceDeclaration :
@@ -36,7 +62,7 @@ module ts {
3662 case SyntaxKind . ObjectLiteral :
3763 var openBrace = forEach ( n . getChildren ( ) , c => c . kind === SyntaxKind . OpenBraceToken && c ) ;
3864 var closeBrace = forEach ( n . getChildren ( ) , c => c . kind === SyntaxKind . CloseBraceToken && c ) ;
39- addOutlineRange ( openBrace , closeBrace ) ;
65+ addOutlineRange ( n , openBrace , closeBrace ) ;
4066 break ;
4167 case SyntaxKind . Constructor :
4268 case SyntaxKind . FunctionDeclaration :
@@ -47,11 +73,13 @@ module ts {
4773 if ( body ) {
4874 var openBrace = forEach ( body . getChildren ( ) , c => c . kind === SyntaxKind . OpenBraceToken && c ) ;
4975 var closeBrace = forEach ( body . getChildren ( ) , c => c . kind === SyntaxKind . CloseBraceToken && c ) ;
50- addOutlineRange ( openBrace , closeBrace ) ;
76+ addOutlineRange ( n , openBrace , closeBrace ) ;
5177 }
5278 break ;
5379 }
80+ depth ++ ;
5481 forEachChild ( n , walk ) ;
82+ depth -- ;
5583 }
5684
5785 walk ( sourceFile ) ;
0 commit comments