Skip to content

Commit

Permalink
fix missing type parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
gabritto committed Oct 26, 2021
1 parent 302c0fc commit 7bdeaa8
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/services/codefixes/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand All @@ -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);
Expand All @@ -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,
Expand Down
56 changes: 56 additions & 0 deletions tests/cases/fourslash/completionsOverridingMethod7.ts
Original file line number Diff line number Diff line change
@@ -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 {
}
`,
},
],
});

0 comments on commit 7bdeaa8

Please sign in to comment.