Skip to content

Commit b6b51a4

Browse files
author
Andy
authored
convertFunctionToEs6Class: Combine deletes and deletedNodes (microsoft#22742)
1 parent f2f2393 commit b6b51a4

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

src/services/codefixes/convertFunctionToEs6Class.ts

+11-14
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ namespace ts.codefix {
1313
});
1414

1515
function doChange(changes: textChanges.ChangeTracker, sourceFile: SourceFile, position: number, checker: TypeChecker): void {
16-
const deletedNodes: Node[] = [];
17-
const deletes: (() => void)[] = [];
16+
const deletedNodes: { node: Node, inList: boolean }[] = [];
1817
const ctorSymbol = checker.getSymbolAtLocation(getTokenAtPosition(sourceFile, position, /*includeJsDocComment*/ false));
1918

2019
if (!ctorSymbol || !(ctorSymbol.flags & (SymbolFlags.Function | SymbolFlags.Variable))) {
@@ -53,21 +52,19 @@ namespace ts.codefix {
5352

5453
// Because the preceding node could be touched, we need to insert nodes before delete nodes.
5554
changes.insertNodeAfter(sourceFile, precedingNode, newClassDeclaration);
56-
for (const deleteCallback of deletes) {
57-
deleteCallback();
58-
}
59-
60-
function deleteNode(node: Node, inList = false) {
61-
if (deletedNodes.some(n => isNodeDescendantOf(node, n))) {
62-
// Parent node has already been deleted; do nothing
63-
return;
64-
}
65-
deletedNodes.push(node);
55+
for (const { node, inList } of deletedNodes) {
6656
if (inList) {
67-
deletes.push(() => changes.deleteNodeInList(sourceFile, node));
57+
changes.deleteNodeInList(sourceFile, node);
6858
}
6959
else {
70-
deletes.push(() => changes.deleteNode(sourceFile, node));
60+
changes.deleteNode(sourceFile, node);
61+
}
62+
}
63+
64+
function deleteNode(node: Node, inList = false) {
65+
// If parent node has already been deleted, do nothing
66+
if (!deletedNodes.some(n => isNodeDescendantOf(node, n.node))) {
67+
deletedNodes.push({ node, inList });
7168
}
7269
}
7370

0 commit comments

Comments
 (0)