diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ce228f39e4b..6fe1af19db8 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1174,6 +1174,7 @@ module ts { export interface CancellationToken { isCancellationRequested(): boolean; + throwIfCancellationRequested?(): void; } export interface CompilerHost { diff --git a/src/services/services.ts b/src/services/services.ts index eb3793199e1..60c2c61309a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3487,7 +3487,7 @@ module ts { var sourceFile = getSourceFile(fileName); var node = getNodeAtPosition(sourceFile, position); - return SignatureHelp.getSignatureHelpItems(sourceFile, position, node, typeInfoResolver); + return SignatureHelp.getSignatureHelpItems(sourceFile, position, node, typeInfoResolver, cancellationToken); } function getSignatureHelpCurrentArgumentState(fileName: string, position: number, applicableSpanStart: number): SignatureHelpState { diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index a873b9fb1c9..8986664eeb0 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -333,15 +333,18 @@ module ts.SignatureHelp { //} var emptyArray: any[] = []; - export function getSignatureHelpItems(sourceFile: SourceFile, position: number, startingNode: Node, typeInfoResolver: TypeChecker): SignatureHelpItems { + export function getSignatureHelpItems(sourceFile: SourceFile, position: number, startingNode: Node, typeInfoResolver: TypeChecker, cancellationToken: CancellationToken): SignatureHelpItems { // Decide whether to show signature help var argumentList = getContainingArgumentList(startingNode); + cancellationToken.throwIfCancellationRequested(); // Semantic filtering of signature help if (argumentList) { var call = argumentList.parent; var candidates = []; var resolvedSignature = typeInfoResolver.getResolvedSignature(call, candidates); + cancellationToken.throwIfCancellationRequested(); + return candidates.length ? createSignatureHelpItems(candidates, resolvedSignature, argumentList) : undefined;