From 69f7d39d4373afdb17d7d7f637f069ab70433286 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 18 Nov 2014 13:40:42 -0800 Subject: [PATCH] Fixed template head offsetting. --- src/services/signatureHelp.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 223b523c42f..10c036dc38d 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -164,13 +164,17 @@ module ts.SignatureHelp { //} var emptyArray: any[] = []; - export const enum ArgumentListKind { + const enum Constants { + HeadSpanIndex = -1 + } + + const enum ArgumentListKind { TypeArguments, CallArguments, TaggedTemplateArguments } - export interface ArgumentListInfo { + interface ArgumentListInfo { kind: ArgumentListKind; invocation: CallLikeExpression; argumentsSpan: TextSpan; @@ -285,7 +289,7 @@ module ts.SignatureHelp { else if (node.kind === SyntaxKind.TemplateHead && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; - var argumentIndex = getArgumentIndexForTemplatePiece(/*spanIndex*/ 0, node, position); + var argumentIndex = getArgumentIndexForTemplatePiece(Constants.HeadSpanIndex, node, position); return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } @@ -322,7 +326,7 @@ module ts.SignatureHelp { : 1 + countWhere(argumentsList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); } - // spanIndex is either the index for a given template span, or 0 for a template head. + // spanIndex is either the index for a given template span, or Constants.HeadSpanIndex for a template head. // This does not give appropriate results for a NoSubstitutionTemplateLiteral function getArgumentIndexForTemplatePiece(spanIndex: number, node: Node, position: number): number { // TemplateSpans are expression-template pairs, and ordered as such. @@ -336,7 +340,7 @@ module ts.SignatureHelp { // // Example: f `# abcd $#{# 1 + 1# }# efghi ${ #"#hello"# } # ` // ^ ^ ^ ^ ^ ^ ^ ^ ^ - // Cases: 1 1 3 2 1 3 2 2 1 + // Case: 1 1 3 2 1 3 2 2 1 Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node."); if (isTemplateLiteralKind(node.kind)) { if (isInsideTemplateLiteral(node, position)) {