1/* @internal */ 2namespace ts.codefix { 3 const fixId = "addNameToNamelessParameter"; 4 const errorCodes = [Diagnostics.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1.code]; 5 registerCodeFix({ 6 errorCodes, 7 getCodeActions: (context) => { 8 const changes = textChanges.ChangeTracker.with(context, t => makeChange(t, context.sourceFile, context.span.start)); 9 return [createCodeFixAction(fixId, changes, Diagnostics.Add_parameter_name, fixId, Diagnostics.Add_names_to_all_parameters_without_names)]; 10 }, 11 fixIds: [fixId], 12 getAllCodeActions: context => codeFixAll(context, errorCodes, (changes, diag) => makeChange(changes, diag.file, diag.start)), 13 }); 14 15 function makeChange(changeTracker: textChanges.ChangeTracker, sourceFile: SourceFile, pos: number) { 16 const token = getTokenAtPosition(sourceFile, pos); 17 if (!isIdentifier(token)) { 18 return Debug.fail("add-name-to-nameless-parameter operates on identifiers, but got a " + Debug.formatSyntaxKind(token.kind)); 19 } 20 const param = token.parent; 21 if (!isParameter(param)) { 22 return Debug.fail("Tried to add a parameter name to a non-parameter: " + Debug.formatSyntaxKind(token.kind)); 23 } 24 const i = param.parent.parameters.indexOf(param); 25 Debug.assert(!param.type, "Tried to add a parameter name to a parameter that already had one."); 26 Debug.assert(i > -1, "Parameter not found in parent parameter list."); 27 const replacement = factory.createParameterDeclaration( 28 /*decorators*/ undefined, 29 param.modifiers, 30 param.dotDotDotToken, 31 "arg" + i, 32 param.questionToken, 33 factory.createTypeReferenceNode(token, /*typeArguments*/ undefined), 34 param.initializer); 35 changeTracker.replaceNode(sourceFile, token, replacement); 36 } 37} 38