Comments (9)
you can also use ast-types to build up your return statement.
j.returnStatement();
See https://github.com/benjamn/ast-types/blob/master/def/core.js#L106
from jscodeshift.
FWIW
expression`return;`
would never work anyway, since a return
statement is not an expression. but
statement`return;`
has the same problem.
from jscodeshift.
But yeah, in same cases it might just be easier to mix and match. E.g. instead of
statement`return foo(${someNode});`
you could write
j.returnStatement(expression`foo(${someNode})`)
from jscodeshift.
Sorry yes, statement not expression.
Yeah i have been mixing and matching but this:
statements`
var aasd = () => 'some complex stuff';
${j.returnStatement(expression`aasd(${someNode})`)}
`;
Is considerably less readable than this:
statements`
var aasd = () => 'some complex stuff';
return aasd(${someNode});
`;
I understand this is a hard problem to solve but i do think having a solution in the future will be helpful since it reduces the complexity of the code which is valuable as the transforms get more complex.
from jscodeshift.
I think we could potentially do this: try to parse it in the global scope. If that throws, try to parse it wrapped in a function and pull it out.
It seems a lot like
var div = document.createElement('div');
div.innerHTML = text;
var myElement = div.childNodes[0];
:D
from jscodeshift.
Yeah that seems like it might work, i was wondering if there was a away to inform template what context it should run in by passing it a path
or something.
from jscodeshift.
yeah, the above solution would't work for things like break
.
from jscodeshift.
Maybe we can have a type passed as context. E.g.
statement.in(j.IfStatement)`break;`
it's a bit magical because the implication would be that the code is evaluated in the body of an if
statement and it wouldn't work for all types, but it may be the most concise way.
Potentially supported types:
- Function
- IfStatement
- ForStatement, ForInStatement, WhileStatement, DoWhileStatement, ForOfStatement
- SwitchStatement
- SwitchCase
Of course we could also just provide these as convenient functions so that becomes a bit less magical (from the API side):
statement.inFunction
statement.inIf
statement.inLoop
(all the loops are essentially the same)statement.inSwitch
statement.inSwitchCase
(it only really supportsbreak
, but is very different from other contexts)
from jscodeshift.
I was just writing out the same suggestion! :P I think it will work, like you said we will need to manually code the cases but it shouldn't be to much overhead.
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.