Only resolve 'arguments' and function/class expression names if the meaning permits it.

This commit is contained in:
Daniel Rosenwasser 2015-05-27 15:04:34 -07:00
parent e800e29af7
commit baf46a94a6

View File

@ -423,27 +423,33 @@ module ts {
case SyntaxKind.SetAccessor:
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.ArrowFunction:
if (name === "arguments") {
result = argumentsSymbol;
break loop;
if (meaning & SymbolFlags.Value) {
if (name === "arguments") {
result = argumentsSymbol;
break loop;
}
}
break;
case SyntaxKind.FunctionExpression:
if (name === "arguments") {
result = argumentsSymbol;
break loop;
}
let functionName = (<FunctionExpression>location).name;
if (functionName && name === functionName.text) {
result = location.symbol;
break loop;
if (meaning & SymbolFlags.Value) {
if (name === "arguments") {
result = argumentsSymbol;
break loop;
}
let functionName = (<FunctionExpression>location).name;
if (functionName && name === functionName.text) {
result = location.symbol;
break loop;
}
}
break;
case SyntaxKind.ClassExpression:
let className = (<ClassExpression>location).name;
if (className && name === className.text) {
result = location.symbol;
break loop;
if (meaning & (SymbolFlags.Value | SymbolFlags.Type)) {
let className = (<ClassExpression>location).name;
if (className && name === className.text) {
result = location.symbol;
break loop;
}
}
break;
case SyntaxKind.Decorator: