Skip to content

Commit e8c3ec3

Browse files
committed
Merge pull request #772 from Microsoft/outliningInArraysAndSwitchBlocks
outlining support for switch blocks\array literals
2 parents 6c58cd8 + 222e1d8 commit e8c3ec3

File tree

4 files changed

+24
-6
lines changed

4 files changed

+24
-6
lines changed

src/services/formatting/smartIndenter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ module ts.formatting {
174174

175175
function childStartsOnTheSameLineWithElseInIfStatement(parent: Node, child: Node, childStartLine: number, sourceFile: SourceFile): boolean {
176176
if (parent.kind === SyntaxKind.IfStatement && (<IfStatement>parent).elseStatement === child) {
177-
var elseKeyword = forEach(parent.getChildren(), c => c.kind === SyntaxKind.ElseKeyword && c);
177+
var elseKeyword = findChildOfKind(parent, SyntaxKind.ElseKeyword, sourceFile);
178178
Debug.assert(elseKeyword);
179179

180180
var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line;
@@ -383,7 +383,7 @@ module ts.formatting {
383383
return isCompletedNode((<WhileStatement>n).statement, sourceFile);
384384
case SyntaxKind.DoStatement:
385385
// rough approximation: if DoStatement has While keyword - then if node is completed is checking the presence of ')';
386-
var hasWhileKeyword = forEach(n.getChildren(), c => c.kind === SyntaxKind.WhileKeyword && c);
386+
var hasWhileKeyword = findChildOfKind(n, SyntaxKind.WhileKeyword, sourceFile);
387387
if(hasWhileKeyword) {
388388
return nodeEndsWith(n, SyntaxKind.CloseParenToken, sourceFile);
389389
}

src/services/outliningElementsCollector.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,24 @@ module ts {
6060
case SyntaxKind.TryBlock:
6161
case SyntaxKind.CatchBlock:
6262
case SyntaxKind.FinallyBlock:
63-
var openBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.OpenBraceToken && c);
64-
var closeBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.CloseBraceToken && c);
63+
var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile);
64+
var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile);
6565
addOutlineRange(n.parent, openBrace, closeBrace);
6666
break;
6767
case SyntaxKind.ClassDeclaration:
6868
case SyntaxKind.InterfaceDeclaration:
6969
case SyntaxKind.EnumDeclaration:
7070
case SyntaxKind.ObjectLiteral:
71-
var openBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.OpenBraceToken && c);
72-
var closeBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.CloseBraceToken && c);
71+
case SyntaxKind.SwitchStatement:
72+
var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile);
73+
var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile);
7374
addOutlineRange(n, openBrace, closeBrace);
7475
break;
76+
case SyntaxKind.ArrayLiteral:
77+
var openBracket = findChildOfKind(n, SyntaxKind.OpenBracketToken, sourceFile);
78+
var closeBracket = findChildOfKind(n, SyntaxKind.CloseBracketToken, sourceFile);
79+
addOutlineRange(n, openBracket, closeBracket);
80+
break;
7581
}
7682
depth++;
7783
forEachChild(n, walk);

src/services/utilities.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ module ts {
1616
};
1717
}
1818

19+
export function findChildOfKind(n: Node, kind: SyntaxKind, sourceFile?: SourceFile): Node {
20+
return forEach(n.getChildren(sourceFile), c => c.kind === kind && c);
21+
}
22+
1923
export function findContainingList(node: Node): Node {
2024
// The node might be a list element (nonsynthetic) or a comma (synthetic). Either way, it will
2125
// be parented by the container of the SyntaxList, not the SyntaxList itself.

tests/cases/fourslash/getOutliningSpans.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@
2525
////
2626
//// }|]
2727
////}|]
28+
////switch(1)[| {
29+
//// case 1: break;
30+
////}|]
31+
////
32+
////var array =[| [
33+
//// 1,
34+
//// 2
35+
////]|]
2836
////
2937
////// modules
3038
////module m1[| {

0 commit comments

Comments
 (0)