GithubHelp home page GithubHelp logo

Comments (9)

cpojer avatar cpojer commented on April 24, 2024

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.

fkling avatar fkling commented on April 24, 2024

FWIW

expression`return;`

would never work anyway, since a return statement is not an expression. but

statement`return;`

has the same problem.

from jscodeshift.

fkling avatar fkling commented on April 24, 2024

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.

pieterv avatar pieterv commented on April 24, 2024

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.

cpojer avatar cpojer commented on April 24, 2024

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.

pieterv avatar pieterv commented on April 24, 2024

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.

fkling avatar fkling commented on April 24, 2024

yeah, the above solution would't work for things like break.

from jscodeshift.

fkling avatar fkling commented on April 24, 2024

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 supports break, but is very different from other contexts)

from jscodeshift.

pieterv avatar pieterv commented on April 24, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.