• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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