From 6e98431cecdd5304cbd082ed577e0155634cdd24 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Tue, 26 May 2020 18:56:53 +0300 Subject: [PATCH] fix(23716): show generic type in tagged template expression --- src/services/symbolDisplay.ts | 4 +-- ...kInfoForGenericTaggedTemplateExpression.ts | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/quickInfoForGenericTaggedTemplateExpression.ts diff --git a/src/services/symbolDisplay.ts b/src/services/symbolDisplay.ts index 11f2019513..e6891bc122 100644 --- a/src/services/symbolDisplay.ts +++ b/src/services/symbolDisplay.ts @@ -159,14 +159,14 @@ namespace ts.SymbolDisplay { } // try get the call/construct signature from the type if it matches - let callExpressionLike: CallExpression | NewExpression | JsxOpeningLikeElement | undefined; + let callExpressionLike: CallExpression | NewExpression | JsxOpeningLikeElement | TaggedTemplateExpression | undefined; if (isCallOrNewExpression(location)) { callExpressionLike = location; } else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { callExpressionLike = location.parent; } - else if (location.parent && isJsxOpeningLikeElement(location.parent) && isFunctionLike(symbol.valueDeclaration)) { + else if (location.parent && (isJsxOpeningLikeElement(location.parent) || isTaggedTemplateExpression(location.parent)) && isFunctionLike(symbol.valueDeclaration)) { callExpressionLike = location.parent; } diff --git a/tests/cases/fourslash/quickInfoForGenericTaggedTemplateExpression.ts b/tests/cases/fourslash/quickInfoForGenericTaggedTemplateExpression.ts new file mode 100644 index 0000000000..922c998435 --- /dev/null +++ b/tests/cases/fourslash/quickInfoForGenericTaggedTemplateExpression.ts @@ -0,0 +1,28 @@ +/// + +////interface T1 {} +////class T2 {} +////type T3 = "a" | "b"; +//// +////declare function foo(strings: TemplateStringsArray, ...values: T[]): void; +//// +/////*1*/foo``; +/////*2*/foo``; +/////*3*/foo<{ a: number }>``; +/////*4*/foo``; +/////*5*/foo``; +/////*6*/foo``; +/////*7*/foo``; + +verify.quickInfoAt("1", "function foo(strings: TemplateStringsArray, ...values: number[]): void"); +verify.quickInfoAt("2", "function foo(strings: TemplateStringsArray, ...values: (string | number)[]): void"); +verify.quickInfoAt("3", +`function foo<{ + a: number; +}>(strings: TemplateStringsArray, ...values: { + a: number; +}[]): void`); +verify.quickInfoAt("4", "function foo(strings: TemplateStringsArray, ...values: T1[]): void"); +verify.quickInfoAt("5", "function foo(strings: TemplateStringsArray, ...values: T2[]): void"); +verify.quickInfoAt("6", "function foo(strings: TemplateStringsArray, ...values: T3[]): void"); +verify.quickInfoAt("7", "function foo(strings: TemplateStringsArray, ...values: unknown[]): void");