Synthetic signature uses existing parameter names

This commit is contained in:
Arthur Ozga 2016-12-11 21:50:46 -08:00
parent d724517110
commit 469745b181
7 changed files with 10 additions and 7 deletions

View File

@ -20,7 +20,7 @@ namespace ts.codefix {
const insertion = getMissingMembersInsertion(classDecl, abstractAndNonPrivateExtendsSymbols, checker, context.newLineCharacter);
if (insertion) {
if (insertion.length) {
return [{
description: getLocaleSpecificMessage(Diagnostics.Implement_inherited_abstract_class),
changes: [{

View File

@ -93,6 +93,7 @@ namespace ts.codefix {
newSignatureDeclaration.name = signatures[0].getDeclaration().name;
let maxNonRestArgs = -1;
let maxArgsIndex = 0;
let minArgumentCount = signatures[0].minArgumentCount;
let hasRestParameter = false;
for (let i = 0; i < signatures.length; i++) {
@ -102,8 +103,10 @@ namespace ts.codefix {
const nonRestLength = sig.parameters.length - (sig.hasRestParameter ? 1 : 0);
if (nonRestLength > maxNonRestArgs) {
maxNonRestArgs = nonRestLength;
maxArgsIndex = i;
}
}
const maxArgsParameterSymbolNames = signatures[maxArgsIndex].getParameters().map(symbol => symbol.getName());
const anyTypeNode: TypeNode = createNode(SyntaxKind.AnyKeyword) as TypeNode;
const optionalToken = createToken(SyntaxKind.QuestionToken);
@ -130,7 +133,7 @@ namespace ts.codefix {
function createParameterDeclaration(index: number, minArgCount: number, typeNode: TypeNode, enclosingSignatureDeclaration: SignatureDeclaration): ParameterDeclaration {
const newParameter = createNode(SyntaxKind.Parameter) as ParameterDeclaration;
newParameter.symbol = checker.createSymbol(SymbolFlags.FunctionScopedVariable, "arg" + index);
newParameter.symbol = checker.createSymbol(SymbolFlags.FunctionScopedVariable, maxArgsParameterSymbolNames[index] || "rest");
newParameter.symbol.valueDeclaration = newParameter;
newParameter.symbol.declarations = [newParameter];
newParameter.type = typeNode;

View File

@ -12,7 +12,7 @@ verify.rangeAfterCodeFix(`
f(a: number, b: string): boolean;
f(a: string, b: number): Function;
f(a: string): Function;
f(arg0: any, arg1?: any) {
f(a: any, b?: any) {
throw new Error('Method not implemented.');
}
`);

View File

@ -44,7 +44,7 @@ verify.rangeAfterCodeFix(`
[Symbol.toPrimitive](hint: "number"): number;
[Symbol.toPrimitive](hint: "default"): number;
[Symbol.toPrimitive](hint: "string"): string;
[Symbol.toPrimitive](arg0: any) {
[Symbol.toPrimitive](hint: any) {
throw new Error('Method not implemented.');
}
[Symbol.toStringTag]: string;

View File

@ -12,7 +12,7 @@ verify.rangeAfterCodeFix(`
method(a: number, b: string): boolean;
method(a: string, b: number): Function;
method(a: string): Function;
method(arg0: any, arg1?: any) {
method(a: any, b?: any) {
throw new Error('Method not implemented.');
}
`);

View File

@ -12,7 +12,7 @@ verify.rangeAfterCodeFix(`
method(a: number, ...b: string[]): boolean;
method(a: string, ...b: number[]): Function;
method(a: string): Function;
method(arg0: any, ...arg1?: any[]) {
method(a: any, ...b?: any[]) {
throw new Error('Method not implemented.');
}
`);

View File

@ -12,7 +12,7 @@ verify.rangeAfterCodeFix(`
method(a: number, ...b: string[]): boolean;
method(a: string, b: number): Function;
method(a: string): Function;
method(arg0: any, arg1?: any, ...arg2?: any[]) {
method(a: any, b?: any, ...rest?: any[]) {
throw new Error('Method not implemented.');
}
`);