TypeScript Compiler API wrapper for static analysis and programmatic code changes.
if you have a node such as: ``` <Text><Text>Foo</Text> is great</Text> ``` and you do a transform: ``` node.transform((traversal) => { if (ts.isJsxText(traversal.currentNode) && traversal.currentNode.text != 'Foo'){ return traversal.factory.createJsxText(' is NOT great', false); } else { return traversal.visitChildren(); } }); ``` the result should be: ``` <Text><Text>Foo</Text> is NOT great</Text> ``` but it is: ``` <Text><Text>Foo</Text> is NOT great</Text> ``` instead. Notice how an extra space was added. This is due to the following error in the code: ``` function handleTransformation(oldNode, newNode) { if (oldNode === newNode && newNode.emitNode == null) return; const start = oldNode.getStart(compilerSourceFile, true); //This is the error: start should be oldNode.pos which correctly accounts for whitespace const end = oldNode.end; let lastTransformation; while ((lastTransformation = transformations[transformations.length - 1]) && lastTransformation.start > start) transformations.pop(); const wrappedNode = compilerFactory.getExistingNodeFromCompilerNode(oldNode); transformations.push({ start, end, compilerNode: newNode, }); if (wrappedNode != null) { if (oldNode.kind !== newNode.kind) wrappedNode.forget(); else wrappedNode.forgetDescendants(); } } ``` As I noted in the comment, it is using an incorrect way of getting the start of the node and should be using .pos.
This issue appears to be discussing a feature request or bug report related to the repository. Based on the content, it seems to be still under discussion. The issue was opened by ofersadgat and has received 0 comments.