sing_parameter_to_0, name], addMissingParamFixId, Diagnostics.Add_all_missing_parameters ) ); } if (length(newOptionalParameters)) { append( actions2, createCodeFixAction( addOptionalParamFixId, ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange19(t, context.program, context.preferences, context.host, declarations, newOptionalParameters)), [length(newOptionalParameters) > 1 ? Diagnostics.Add_optional_parameters_to_0 : Diagnostics.Add_optional_parameter_to_0, name], addOptionalParamFixId, Diagnostics.Add_all_optional_parameters ) ); } return actions2; }, getAllCodeActions: (context) => codeFixAll(context, errorCodes29, (changes, diag2) => { const info = getInfo11(context.sourceFile, context.program, diag2.start); if (info) { const { declarations, newParameters, newOptionalParameters } = info; if (context.fixId === addMissingParamFixId) { doChange19(changes, context.program, context.preferences, context.host, declarations, newParameters); } if (context.fixId === addOptionalParamFixId) { doChange19(changes, context.program, context.preferences, context.host, declarations, newOptionalParameters); } } }) }); function getInfo11(sourceFile, program, pos) { const token = getTokenAtPosition(sourceFile, pos); const callExpression = findAncestor(token, isCallExpression); if (callExpression === void 0 || length(callExpression.arguments) === 0) { return void 0; } const checker = program.getTypeChecker(); const type = checker.getTypeAtLocation(callExpression.expression); const convertibleSignatureDeclarations = filter(type.symbol.declarations, isConvertibleSignatureDeclaration); if (convertibleSignatureDeclarations === void 0) { return void 0; } const nonOverloadDeclaration = lastOrUndefined(convertibleSignatureDeclarations); if (nonOverloadDeclaration === void 0 || nonOverloadDeclaration.body === void 0 || isSourceFileFromLibrary(program, nonOverloadDeclaration.getSourceFile())) { return void 0; } const name = tryGetName2(nonOverloadDeclaration); if (name === void 0) { return void 0; } const newParameters = []; const newOptionalParameters = []; const parametersLength = length(nonOverloadDeclaration.parameters); const argumentsLength = length(callExpression.arguments); if (parametersLength > argumentsLength) { return void 0; } const declarations = [nonOverloadDeclaration, ...getOverloads(nonOverloadDeclaration, convertibleSignatureDeclarations)]; for (let i = 0, pos2 = 0, paramIndex = 0; i < argumentsLength; i++) { const arg = callExpression.arguments[i]; const expr = isAccessExpression(arg) ? getNameOfAccessExpression(arg) : arg; const type2 = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(arg))); const parameter = pos2 < parametersLength ? nonOverloadDeclaration.parameters[pos2] : void 0; if (parameter && checker.isTypeAssignableTo(type2, checker.getTypeAtLocation(parameter))) { pos2++; continue; } const name2 = expr && isIdentifier(expr) ? expr.text : `p${paramIndex++}`; const typeNode = typeToTypeNode(checker, type2, nonOverloadDeclaration); append(newParameters, { pos: i, declaration: createParameter( name2, typeNode, /*questionToken*/ void 0 ) }); if (isOptionalPos(declarations, pos2)) { continue; } append(newOptionalParameters, { pos: i, declaration: createParameter(name2, typeNode, factory.createToken(58 /* QuestionToken */)) }); } return { newParameters, newOptionalParameters, name: declarationNameToString(name), declarations }; } function tryGetName2(node) { const name = getNameOfDeclaration(node); if (name) { return name; } if (isVariableDeclaration(node.parent) && isIdentifier(node.parent.name) || isPropertyDeclaration(node.parent) || isParameter(node.parent)) { return node.parent.name; } } function typeToTypeNode(checker, type, enclosingDeclaration) { return checker.typeToTypeNode(checker.getWidenedType(type), enclosingDeclaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */) ?? factory.createKeywordTypeNode(159 /* UnknownKeyword */); } function doChange19(changes, program, preferences, host, declarations, newParameters) { const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); forEach(declarations, (declaration) => { const sourceFile = getSourceFileOfNode(declaration); const importAdder = createImportAdder(sourceFile, program, preferences, host); if (length(declaration.parameters)) { changes.replaceNodeRangeWithNodes( sourceFile, first(declaration.parameters), last(declaration.parameters), updateParameters(importAdder, scriptTarget, declaration, newParameters), { joiner: ", ", indentation: 0, leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.IncludeAll, trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Include } ); } else { forEach(updateParameters(importAdder, scriptTarget, declaration, newParameters), (parameter, index) => { if (length(declaration.parameters) === 0 && index === 0) { changes.insertNodeAt(sourceFile, declaration.parameters.end, parameter); } else { changes.insertNodeAtEndOfList(sourceFile, declaration.parameters, parameter); } }); } importAdder.writeFixes(changes); }); } function isConvertibleSignatureDeclaration(node) { switch (node.kind) { case 262 /* FunctionDeclaration */: case 218 /* FunctionExpression */: case 174 /* MethodDeclaration */: case 219 /* ArrowFunction */: return true; default: return false; } } function updateParameters(importAdder, scriptTarget, node, newParameters) { const parameters = map(node.parameters, (p) => factory.createParameterDeclaration( p.modifiers, p.dotDotDotToken, p.name, p.questionToken, p.type, p.initializer )); for (const { pos, declaration } of newParameters) { const prev = pos > 0 ? parameters[pos - 1] : void 0; parameters.splice( pos, 0, factory.updateParameterDeclaration( declaration, declaration.modifiers, declaration.dotDotDotToken, declaration.name, prev && prev.questionToken ? factory.createToken(58 /* QuestionToken */) : declaration.questionToken, getParameterType(importAdder, declaration.type, scriptTarget), declaration.initializer ) ); } return parameters; } function getOverloads(implementation, declarations) { const overloads = []; for (const declaration of declarations) { if (isOverload(declaration)) { if (length(declaration.parameters) === length(implementation.parameters)) { overloads.push(declaration); continue; } if (length(declaration.parameters) > length(implementation.parameters)) { return []; } } } return overloads; } function isOverload(declaration) { return isConvertibleSignatureDeclaration(declaration) && declaration.body === void 0; } function createParameter(name, type, questionToken) { return factory.createParameterDeclaration( /*modifiers*/ void 0, /*dotDotDotToken*/ void 0, name, questionToken, type, /*initializer*/ void 0 ); } function isOptionalPos(declarations, pos) { return length(declarations) && some(declarations, (d) => pos < length(d.parameters) && !!d.parameters[pos] && d.parameters[pos].questionToken === void 0); } function getParameterType(importAdder, typeNode, scriptTarget) { const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); if (importableReference) { importSymbols(importAdder, importableReference.symbols); return importableReference.typeNode; } return typeNode; } // src/services/codefixes/fixCannotFindModule.ts var fixName2 = "fixCannotFindModule"; var fixIdInstallTypesPackage = "installTypesPackage"; var errorCodeCannotFindModule = Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations.code; var errorCodes30 = [ errorCodeCannotFindModule, Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type.code ]; registerCodeFix({ errorCodes: errorCodes30, getCodeActions: function getCodeActionsToFixNotFoundModule(context) { const { host, sourceFile, span: { start } } = context; const packageName = tryGetImportedPackageName(sourceFile, start); if (packageName === void 0) return void 0; const typesPackageName = getTypesPackageNameToInstall(packageName, host, context.errorCode); return typesPackageName === void 0 ? [] : [createCodeFixAction( fixName2, /*changes*/ [], [Diagnostics.Install_0, typesPackageName], fixIdInstallTypesPackage, Diagnostics.Install_all_missing_types_packages, getInstallCommand(sourceFile.fileName, typesPackageName) )]; }, fixIds: [fixIdInstallTypesPackage], getAllCodeActions: (context) => { return codeFixAll(context, errorCodes30, (_changes, diag2, commands) => { const packageName = tryGetImportedPackageName(diag2.file, diag2.start); if (packageName === void 0) return void 0; switch (context.fixId) { case fixIdInstallTypesPackage: { const pkg = getTypesPackageNameToInstall(packageName, context.host, diag2.code); if (pkg) { commands.push(getInstallCommand(diag2.file.fileName, pkg)); } break; } default: Debug.fail(`Bad fixId: ${context.fixId}`); } }); } }); function getInstallCommand(fileName, packageName) { return { type: "install package", file: fileName, packageName }; } function tryGetImportedPackageName(sourceFile, pos) { const moduleSpecifierText = tryCast(getTokenAtPosition(sourceFile, pos), isStringLiteral); if (!moduleSpecifierText) return void 0; const moduleName = moduleSpecifierText.text; const { packageName } = parsePackageName(moduleName); return isExternalModuleNameRelative(packageName) ? void 0 : packageName; } function getTypesPackageNameToInstall(packageName, host, diagCode) { var _a; return diagCode === errorCodeCannotFindModule ? ts_JsTyping_exports.nodeCoreModules.has(packageName) ? "@types/node" : void 0 : ((_a = host.isKnownTypesPackageName) == null ? void 0 : _a.call(host, packageName)) ? getTypesPackageName(packageName) : void 0; } // src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts var errorCodes31 = [ Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2.code, Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2.code, Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more.code, Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1.code, Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1.code, Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and_2_more.code ]; var fixId25 = "fixClassDoesntImplementInheritedAbstractMember"; registerCodeFix({ errorCodes: errorCodes31, getCodeActions: function getCodeActionsToFixClassNotImplementingInheritedMembers(context) { const { sourceFile, span } = context; const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addMissingMembers(getClass2(sourceFile, span.start), sourceFile, context, t, context.preferences)); return changes.length === 0 ? void 0 : [createCodeFixAction(fixId25, changes, Diagnostics.Implement_inherited_abstract_class, fixId25, Diagnostics.Implement_all_inherited_abstract_classes)]; }, fixIds: [fixId25], getAllCodeActions: function getAllCodeActionsToFixClassDoesntImplementInheritedAbstractMember(context) { const seenClassDeclarations = /* @__PURE__ */ new Map(); return codeFixAll(context, errorCodes31, (changes, diag2) => { const classDeclaration = getClass2(diag2.file, diag2.start); if (addToSeen(seenClassDeclarations, getNodeId(classDeclaration))) { addMissingMembers(classDeclaration, context.sourceFile, context, changes, context.preferences); } }); } }); function getClass2(sourceFile, pos) { const token = getTokenAtPosition(sourceFile, pos); return cast(token.parent, isClassLike); } function addMissingMembers(classDeclaration, sourceFile, context, changeTracker, preferences) { const extendsNode = getEffectiveBaseTypeNode(classDeclaration); const checker = context.program.getTypeChecker(); const instantiatedExtendsType = checker.getTypeAtLocation(extendsNode); const abstractAndNonPrivateExtendsSymbols = checker.getPropertiesOfType(instantiatedExtendsType).filter(symbolPointsToNonPrivateAndAbstractMember); const importAdder = createImportAdder(sourceFile, context.program, preferences, context.host); createMissingMemberNodes(classDeclaration, abstractAndNonPrivateExtendsSymbols, sourceFile, context, preferences, importAdder, (member) => changeTracker.insertMemberAtStart(sourceFile, classDeclaration, member)); importAdder.writeFixes(changeTracker); } function symbolPointsToNonPrivateAndAbstractMember(symbol) { const flags = getSyntacticModifierFlags(first(symbol.getDeclarations())); return !(flags & 2 /* Private */) && !!(flags & 64 /* Abstract */); } // src/services/codefixes/fixClassSuperMustPrecedeThisAccess.ts var fixId26 = "classSuperMustPrecedeThisAccess"; var errorCodes32 = [Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class.code]; registerCodeFix({ errorCodes: errorCodes32, getCodeActions(context) { const { sourceFile, span } = context; const nodes = getNodes(sourceFile, span.start); if (!nodes) return void 0; const { constructor, superCall } = nodes; const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange20(t, sourceFile, constructor, superCall)); return [createCodeFixAction(fixId26, changes, Diagnostics.Make_super_call_the_first_statement_in_the_constructor, fixId26, Diagnostics.Make_all_super_calls_the_first_statement_in_their_constructor)]; }, fixIds: [fixId26], getAllCodeActions(context) { const { sourceFile } = context; const seenClasses = /* @__PURE__ */ new Map(); return codeFixAll(context, errorCodes32, (changes, diag2) => { const nodes = getNodes(diag2.file, diag2.start); if (!nodes) return; const { constructor, superCall } = nodes; if (addToSeen(seenClasses, getNodeId(constructor.parent))) { doChange20(changes, sourceFile, constructor, superCall); } }); } }); function doChange20(changes, sourceFile, constructor, superCall) { changes.insertNodeAtConstructorStart(sourceFile, constructor, superCall); changes.delete(sourceFile, superCall); } function getNodes(sourceFile, pos) { const token = getTokenAtPosition(sourceFile, pos); if (token.kind !== 110 /* ThisKeyword */) return void 0; const constructor = getContainingFunction(token); const superCall = findSuperCall(constructor.body); return superCall && !superCall.expression.arguments.some((arg) => isPropertyAccessExpression(arg) && arg.expression === token) ? { constructor, superCall } : void 0; } function findSuperCall(n) { return isExpressionStatement(n) && isSuperCall(n.expression) ? n : isFunctionLike(n) ? void 0 : forEachChild(n, findSuperCall); } // src/services/codefixes/fixConstructorForDerivedNeedSuperCall.ts var fixId27 = "constructorForDerivedNeedSuperCall"; var errorCodes33 = [Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call.code]; registerCodeFix({ errorCodes: errorCodes33, getCodeActions(context) { const { sourceFile, span } = context; const ctr = getNode(sourceFile, span.start); const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doCha