Got sig help working in the template head.

This commit is contained in:
Daniel Rosenwasser 2014-11-14 17:13:00 -08:00
parent 4bf023982c
commit 64960cf873

View file

@ -173,7 +173,7 @@ module ts.SignatureHelp {
export interface ArgumentListInfo { export interface ArgumentListInfo {
kind: ArgumentListKind; kind: ArgumentListKind;
invocation: CallLikeExpression; invocation: CallLikeExpression;
arguments: Node | NodeArray<TemplateSpan>; argumentRange: TextRange;
argumentIndex?: number; argumentIndex?: number;
argumentCount: number; argumentCount: number;
} }
@ -238,7 +238,7 @@ module ts.SignatureHelp {
return { return {
kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments,
invocation: callExpression, invocation: callExpression,
arguments: list, argumentRange: list,
argumentIndex: 0, argumentIndex: 0,
argumentCount: getCommaBasedArgCount(list) argumentCount: getCommaBasedArgCount(list)
}; };
@ -269,22 +269,20 @@ module ts.SignatureHelp {
return { return {
kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments, kind: isTypeArgList ? ArgumentListKind.TypeArguments : ArgumentListKind.CallArguments,
invocation: callExpression, invocation: callExpression,
arguments: list, argumentRange: list,
argumentIndex: argumentIndex, argumentIndex: argumentIndex,
argumentCount: getCommaBasedArgCount(list) argumentCount: getCommaBasedArgCount(list)
}; };
} }
} }
else if (node.parent.kind === SyntaxKind.TemplateExpression && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { else if (node.parent.kind === SyntaxKind.TemplateExpression && node.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) {
// TODO (drosen): Can't get sig help to trigger within the template head itself; only when directly to the right.
// Also, need to ensure that this works on NoSubstitutionTemplateExpressions when unterminated.
Debug.assert(node.kind === SyntaxKind.TemplateHead, "Expected 'TemplateHead' as token."); Debug.assert(node.kind === SyntaxKind.TemplateHead, "Expected 'TemplateHead' as token.");
var templateExpression = <TemplateExpression>node.parent; var templateExpression = <TemplateExpression>node.parent;
var tagExpression = <TaggedTemplateExpression>templateExpression.parent; var tagExpression = <TaggedTemplateExpression>templateExpression.parent;
// argumentIndex is 1 to adjust for the TemplateStringsArray // argumentIndex is 1 to adjust for the TemplateStringsArray
return getArgumentListInfoForTemplate(tagExpression, templateExpression.templateSpans, /*argumentIndex*/ 1); return getArgumentListInfoForTemplate(tagExpression, /*argumentIndex*/ 1);
} }
else if (node.parent.kind === SyntaxKind.TemplateSpan && node.parent.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) { else if (node.parent.kind === SyntaxKind.TemplateSpan && node.parent.parent.parent.kind === SyntaxKind.TaggedTemplateExpression) {
var templateSpan = <TemplateSpan>node.parent; var templateSpan = <TemplateSpan>node.parent;
@ -297,13 +295,13 @@ module ts.SignatureHelp {
var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); var spanIndex = templateExpression.templateSpans.indexOf(templateSpan);
var adjustedIndex = isTemplateLiteralKind(node.kind) ? spanIndex + 2 : spanIndex + 1 var adjustedIndex = isTemplateLiteralKind(node.kind) ? spanIndex + 2 : spanIndex + 1
return getArgumentListInfoForTemplate(tagExpression, templateExpression.templateSpans, adjustedIndex); return getArgumentListInfoForTemplate(tagExpression, adjustedIndex);
} }
return undefined; return undefined;
} }
function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, spans: NodeArray<TemplateSpan>, argumentIndex: number): ArgumentListInfo { function getArgumentListInfoForTemplate(tagExpression: TaggedTemplateExpression, argumentIndex: number): ArgumentListInfo {
var argumentCount = tagExpression.template.kind === SyntaxKind.NoSubstitutionTemplateLiteral var argumentCount = tagExpression.template.kind === SyntaxKind.NoSubstitutionTemplateLiteral
? 1 ? 1
: (<TemplateExpression>tagExpression.template).templateSpans.length + 1; : (<TemplateExpression>tagExpression.template).templateSpans.length + 1;
@ -311,7 +309,7 @@ module ts.SignatureHelp {
return { return {
kind: ArgumentListKind.TaggedTemplateArguments, kind: ArgumentListKind.TaggedTemplateArguments,
invocation: tagExpression, invocation: tagExpression,
arguments: spans, argumentRange: tagExpression.template,
argumentIndex: argumentIndex, argumentIndex: argumentIndex,
argumentCount: argumentCount argumentCount: argumentCount
}; };
@ -383,7 +381,7 @@ module ts.SignatureHelp {
} }
function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentListInfo: ArgumentListInfo): SignatureHelpItems { function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentListInfo: ArgumentListInfo): SignatureHelpItems {
var argumentsList = argumentListInfo.arguments; var argumentsList = argumentListInfo.argumentRange;
var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments; var isTypeParameterList = argumentListInfo.kind === ArgumentListKind.TypeArguments;
var invocation = argumentListInfo.invocation; var invocation = argumentListInfo.invocation;