Comments (2)
There isn't a canonical way to do this, and there is no simple way to determine whether the AST changed, except keeping a copy of the original tree and walk both trees.
If your code performs the mutation, the simplest solution is to have a variable to track the state and update it as necessary.
If you are using some third party function that performs the mutation, then I'm not sure what the best way would be (besides tree walking).
from jscodeshift.
A common way from the reference examples is to check the .size()
of a resulting collection that they modify. For example, when converting React classes the pattern used is:
// https://github.com/reactjs/react-codemod/blob/master/transforms/class.js#L509-L516
const didTransform = (
apply(ReactUtils.findReactCreateClass(root), 'var')
.size() +
apply(ReactUtils.findReactCreateClassModuleExports(root), 'moduleExports')
.size() +
apply(ReactUtils.findReactCreateClassExportDefault(root), 'exportDefault')
.size()
) > 0;
if (didTransform) {
return root.toSource(printOptions);
}
Where a developer will look for a type of node, and apply the transformations that are appropriate. The result is a Collection in this case, and so verifying that the size of these collections is non-zero is a good approximation for if a change occurs.
If you want more granular diff'ing, might be worthwhile to hold on to the structure that you're looking to transform before applying a transform and then comparing the two different versions of your node before returning toSource
from jscodeshift.
Related Issues (20)
- Declaration has "null" loc field when inside export HOT 1
- missing semicolon how to fix this HOT 9
- how can I add @babel/plugin-proposal-private-methods to jscodeshift ? HOT 5
- extensions cli option not respected when passing individual file paths
- cannot replace JSX nodes within render props
- Added parenthesis around await expression in if statement HOT 4
- Updating setter function's parameter cause invalid output HOT 4
- Easiest way to insert a comment at the beginning of a file? HOT 3
- Generics are being removed from JSX Elements HOT 5
- Unit Tests Broken? HOT 1
- Last npm release (0.15) is ~6 months old HOT 2
- how to remove empty line using jscodeshift? HOT 1
- WSL2 - Can't install project with jscodeshift in dependencies HOT 1
- Enable parsing of `accessor` keyword HOT 6
- testOptions aren't propagated through some of the test methods
- [Bug] [email protected] ignores the files not starting with `.js` extension by default HOT 5
- `Error: null does not match type Pattern` when scanning scope of optional catch
- Announcement: Maintenance and Future Plans HOT 12
- Npm audit throws several vulnerabilities HOT 4
- White space not being preserved when creating new jsx elements HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jscodeshift.