Comments (2)
If what you're aiming to do is just list the functions chained on the calls, you can take advantage of a couple of properties of the AST:
- The
_.chain
will always be the most deeply nestedMemberExpression
of anyCallExpression
- a
CallExpression
that doesn't have a nestedMemberExpression
as a callee cannot be a chaining of underscore methods - Finding all
CallExpression
nodes will return you everything from the first call in the AST (i.e., to.value()
) all the way down to the_.chain
call itself.
Given those things, you can list out the methods being chained by doing something like the following:
const j = jscodeshift;
let callsWithChains =
j(file.source)
.find(j.CallExpression)
.filter(p => {
let found = false;
let nestedCalls = j(p).find(j.CallExpression);
nestedCalls.forEach(nc => {
found = found || isChainCall(nc.value);
});
return found;
});
let justTheChains =
callsWithChains
.filter(p => {
let n = p.value;
return n.callee.type === 'MemberExpression';
});
let results = [];
justTheChains.forEach(p => {
let n = p.value;
let methodName = n.callee.property.name;
let src = j(n).toSource();
results.push( "['" + methodName + "'," + src +"]")
});
return results.join("\n\n");
I've put an example up on AST explorer: http://astexplorer.net/#/Jtibj3uEoH/2
Hope that helps :)
from jscodeshift.
This was the closest I could get:
var chainAsts = ast
.find(j.CallExpression, node => (
node.callee.object
&& node.callee.object.name === '_'
&& node.callee.property.name === 'chain'
))
.map(nodePath => {
var currentNodePath = nodePath.parentPath;
while (currentNodePath.parentPath.value.type !== 'VariableDeclarator'
&& currentNodePath.parentPath.value.type !== 'ExpressionStatement'
&& currentNodePath.parentPath.value.type !== 'ReturnStatement') {
currentNodePath = currentNodePath.parentPath;
}
return currentNodePath;
});
But it's extremely flaky and doesn't work in all conditions.
from jscodeshift.
Related Issues (20)
- URL transform doesn't work with TypeScript HOT 2
- Can't see file in current working directory - "Skipping path which does not exist." HOT 2
- Ignore pattern doesn't work with relative paths starting with two dots (../) HOT 1
- Automatically publish latest dev version to npm HOT 1
- 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 2
- 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
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.