Handled function boundaries.

This commit is contained in:
Daniel Rosenwasser 2014-08-27 12:12:45 -07:00
parent 88f37e579c
commit 3825c9b542
2 changed files with 23 additions and 4 deletions

View file

@ -2169,7 +2169,7 @@ module ts {
var result: ReferenceEntry[];
// Each of these helper functions bails out if the node is undefined,
// which is why you'll see much of this'node.parent && node.parent.parent' pattern.
// which is why you'll see much of this 'node.parent && node.parent.parent' pattern.
switch (node.kind) {
case SyntaxKind.TryKeyword:
case SyntaxKind.CatchKeyword:
@ -2237,6 +2237,9 @@ module ts {
case SyntaxKind.DoStatement:
case SyntaxKind.WhileStatement:
case SyntaxKind.SwitchStatement:
case SyntaxKind.FunctionExpression:
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.ArrowFunction:
return;
}
@ -2256,7 +2259,7 @@ module ts {
if (breakStatement.label) {
return undefined;
}
for (var owner = node.parent; owner; owner = owner.parent) {
switch (owner.kind) {
case SyntaxKind.ForStatement:
@ -2265,10 +2268,16 @@ module ts {
case SyntaxKind.WhileStatement:
// TODO (drosen): Handle loops!
return undefined;
case SyntaxKind.FunctionExpression:
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.ArrowFunction:
return undefined;
case SyntaxKind.SwitchStatement:
return getSwitchCaseDefaultOccurrences(<SwitchStatement>owner);
}
}
return undefined;
}
function pushIfKeyword(keywordList: Node[], token: Node) {

View file

@ -10,18 +10,23 @@
//// break;
//// /*5*/cas 16:
//// c/*3*/ase 12:
//// function f() {
//// br/*11*/eak;
//// /*12*/break;
//// }
////}
////
////sw/*6*/itch (10) {
//// de/*7*/fault
//// case 1:
//// case 2
////
//// c/*8*/ose 4:
//// case 8:
//// case 0xBEEF:
//// bre/*9*/ak;
//// case 16:
//// () => bre/*10*/ak;
////}
for (var i = 1; i <= test.markers().length; i++) {
@ -43,5 +48,10 @@ for (var i = 1; i <= test.markers().length; i++) {
case 9:
verify.occurrencesAtPositionCount(8);
break;
case 10:
case 11:
case 12:
verify.occurrencesAtPositionCount(0);
break;
}
}