Merge pull request #808 from Microsoft/outliningCollapse

Specify which outlining spans should auto-collapse if the user choose "c...
This commit is contained in:
CyrusNajmabadi 2014-10-02 17:45:40 -07:00
commit db9ad6d1e5
2 changed files with 18 additions and 6 deletions

View File

@ -467,7 +467,7 @@ module ts {
return node === (<TypeAssertion>parent).type;
case SyntaxKind.CallExpression:
case SyntaxKind.NewExpression:
return (<CallExpression>parent).typeArguments.indexOf(node) >= 0;
return (<CallExpression>parent).typeArguments && (<CallExpression>parent).typeArguments.indexOf(node) >= 0;
}
}

View File

@ -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++;