fix missing type parameters
This commit is contained in:
parent
302c0fc736
commit
7bdeaa86da
|
@ -376,6 +376,7 @@ namespace ts.codefix {
|
|||
let maxArgsSignature = signatures[0];
|
||||
let minArgumentCount = signatures[0].minArgumentCount;
|
||||
let someSigHasRestParameter = false;
|
||||
let maxTypeArgsSignature = signatures[0];
|
||||
for (const sig of signatures) {
|
||||
minArgumentCount = Math.min(sig.minArgumentCount, minArgumentCount);
|
||||
if (signatureHasRestParameter(sig)) {
|
||||
|
@ -384,6 +385,9 @@ namespace ts.codefix {
|
|||
if (sig.parameters.length >= maxArgsSignature.parameters.length && (!signatureHasRestParameter(sig) || signatureHasRestParameter(maxArgsSignature))) {
|
||||
maxArgsSignature = sig;
|
||||
}
|
||||
if (sig.typeParameters && (!maxTypeArgsSignature.typeParameters || sig.typeParameters.length > maxTypeArgsSignature.typeParameters.length)) {
|
||||
maxTypeArgsSignature = sig;
|
||||
}
|
||||
}
|
||||
const maxNonRestArgs = maxArgsSignature.parameters.length - (signatureHasRestParameter(maxArgsSignature) ? 1 : 0);
|
||||
const maxArgsParameterSymbolNames = maxArgsSignature.parameters.map(symbol => symbol.name);
|
||||
|
@ -402,11 +406,14 @@ namespace ts.codefix {
|
|||
parameters.push(restParameter);
|
||||
}
|
||||
|
||||
const typeParameters = maxTypeArgsSignature.typeParameters?.map(typeParam =>
|
||||
factory.createTypeParameterDeclaration(typeParam.symbol.getName()));
|
||||
|
||||
return createStubbedMethod(
|
||||
modifiers,
|
||||
name,
|
||||
optional,
|
||||
/*typeParameters*/ undefined,
|
||||
typeParameters,
|
||||
parameters,
|
||||
getReturnTypeFromSignatures(signatures, checker, context, enclosingDeclaration),
|
||||
quotePreference,
|
||||
|
|
56
tests/cases/fourslash/completionsOverridingMethod7.ts
Normal file
56
tests/cases/fourslash/completionsOverridingMethod7.ts
Normal file
|
@ -0,0 +1,56 @@
|
|||
/// <reference path="fourslash.ts" />
|
||||
|
||||
// @Filename: a.ts
|
||||
// @newline: LF
|
||||
// Case: generic methods
|
||||
////abstract class A {
|
||||
//// abstract M<T>(x: number): number;
|
||||
//// abstract M<T>(x: string): string;
|
||||
//// N<T>(x: string): void {
|
||||
//// return;
|
||||
//// }
|
||||
////}
|
||||
////
|
||||
////class B extends A {
|
||||
//// /*a*/
|
||||
////}
|
||||
|
||||
|
||||
verify.completions({
|
||||
marker: "a",
|
||||
isNewIdentifierLocation: true,
|
||||
preferences: {
|
||||
includeCompletionsWithInsertText: true,
|
||||
includeCompletionsWithSnippetText: false,
|
||||
},
|
||||
includes: [
|
||||
{
|
||||
name: "M",
|
||||
sortText: completion.SortText.LocationPriority,
|
||||
replacementSpan: {
|
||||
fileName: "",
|
||||
pos: 0,
|
||||
end: 0,
|
||||
},
|
||||
insertText:
|
||||
`M<T>(x: number): number;
|
||||
M<T>(x: string): string;
|
||||
M<T>(x: any): string | number {
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "N",
|
||||
sortText: completion.SortText.LocationPriority,
|
||||
replacementSpan: {
|
||||
fileName: "",
|
||||
pos: 0,
|
||||
end: 0,
|
||||
},
|
||||
insertText:
|
||||
`N<T>(x: string): void {
|
||||
}
|
||||
`,
|
||||
},
|
||||
],
|
||||
});
|
Loading…
Reference in a new issue