From 7ff4238f93d760a953b525c1a6ee1daca21475a8 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 24 Nov 2015 17:44:10 -0800 Subject: [PATCH] Fix crushing of getting signatureDeclaration when we are not in function declaration --- src/services/services.ts | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 8d66b5c7b8a..54c76a063b2 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -4247,24 +4247,22 @@ namespace ts { } else { // Method/function type parameter - let container = getContainingFunction(location); - if (container) { - let signatureDeclaration = getDeclarationOfKind(symbol, SyntaxKind.TypeParameter).parent; - let signature = typeChecker.getSignatureFromDeclaration(signatureDeclaration); - if (signatureDeclaration.kind === SyntaxKind.ConstructSignature) { + let declaration = getDeclarationOfKind(symbol, SyntaxKind.TypeParameter).parent; + if (declaration && isFunctionLikeKind(declaration.kind)) { + let signature = typeChecker.getSignatureFromDeclaration(declaration); + if (declaration.kind === SyntaxKind.ConstructSignature) { displayParts.push(keywordPart(SyntaxKind.NewKeyword)); displayParts.push(spacePart()); } - else if (signatureDeclaration.kind !== SyntaxKind.CallSignature && signatureDeclaration.name) { - addFullSymbolName(signatureDeclaration.symbol); + else if (declaration.kind !== SyntaxKind.CallSignature && (declaration).name) { + addFullSymbolName(declaration.symbol); } addRange(displayParts, signatureToDisplayParts(typeChecker, signature, sourceFile, TypeFormatFlags.WriteTypeArgumentsOfSignature)); } else { - // Type aliash type parameter + // Type alias type parameter // For example // type list = T[]; // Both T will go through same code path - let declaration = getDeclarationOfKind(symbol, SyntaxKind.TypeParameter).parent; displayParts.push(keywordPart(SyntaxKind.TypeKeyword)); displayParts.push(spacePart()); addFullSymbolName(declaration.symbol);