Comments (10)
Would you please post your plugin code here so we can try to repro?
from codemod.
hi @mcMickJuice,
Thanks for looking into this issue and thanks for the awesome tool. I feel so much power running it over 2000 legacy js files and watching it change them, muhahaha :)
Regarding t.noop()
, here's the AST Explorer saved session that also exhibits the behaviour: https://astexplorer.net/#/gist/f414b2747916f09125b4a467e5b6ae19/latest
When I ran this type of stuff manually/locally using babel.transform()
with [email protected], I remember it working correctly.
The babel docs also document t.noop
: https://babeljs.io/docs/core-packages/babel-types/#apinoop
from codemod.
all props go to @eventualbuddha as he is the project creator and maintainer. I'm just helping out.
I can look at this sometime this week and get back to you. Hopefully its just a version issue.
from codemod.
@MagicDuck codemod now uses babel 7.x, but this problem seems to still exist. I think it's actually a recast issue as the assertion that fails is in recast. I think recast needs to be taught about Noop
nodes. @benjamn, what do you think?
Encountered an error while processing test.js:
Error: {type: Noop} does not match type string
at Type.Tp.assert (/Users/donovan/src/babel-codemod/node_modules/ast-types/lib/types.js:60:19)
at /Users/donovan/src/babel-codemod/node_modules/recast/lib/printer.js:1698:22
at FastPath.each (/Users/donovan/src/babel-codemod/node_modules/recast/lib/fast-path.js:145:7)
at printStatementSequence (/Users/donovan/src/babel-codemod/node_modules/recast/lib/printer.js:1670:10)
at /Users/donovan/src/babel-codemod/node_modules/recast/lib/printer.js:544:20
at FastPath.call (/Users/donovan/src/babel-codemod/node_modules/recast/lib/fast-path.js:119:16)
at genericPrintNoParens (/Users/donovan/src/babel-codemod/node_modules/recast/lib/printer.js:543:26)
at genericPrint (/Users/donovan/src/babel-codemod/node_modules/recast/lib/printer.js:164:9)
at printRootGenerically (/Users/donovan/src/babel-codemod/node_modules/recast/lib/printer.js:105:15)
at maybeReprint (/Users/donovan/src/babel-codemod/node_modules/recast/lib/printer.js:97:16)
1 file(s), 0 modified, 1 errors
from codemod.
Ah, looks like recast does support Noop
and has since v0.10.14 (~2.5 years). I wonder why this is happening, then…
from codemod.
Hmm, now that i look closer at it, according to the error stack, the error is thrown from ast-types, could it be that lib that does not support it? After all, that checking function looks fairly complex: https://github.com/benjamn/ast-types/blob/master/lib/types.js#L60 ...
from codemod.
Ah, it looks like ast-types
defines Noop
like so:
def("Noop")
.bases("Node")
.build();
Notably, it does not have a base of Statement
, so this part of printer.js
will not match it as a Comment
or a Statement
and will assert that it is a string where it fails:
if (namedTypes.Comment.check(stmt)) {
// The pretty printer allows a dangling Comment node to act as
// a Statement when the Comment can't be attached to any other
// non-Comment node in the tree.
sawComment = true;
} else if (namedTypes.Statement.check(stmt)) {
sawStatement = true;
} else {
// When the pretty printer encounters a string instead of an
// AST node, it just prints the string. This behavior can be
// useful for fine-grained formatting decisions like inserting
// blank lines.
isString.assert(stmt);
}
My naïve fix would be to make Noop
be the same as EmptyStatement
:
// The empty .build() here means that an EmptyStatement can be constructed
// (i.e. it's not abstract) but that it needs no arguments.
def("EmptyStatement").bases("Statement").build();
Unfortunately, the commit that adds Noop
to babel is pretty light on explanation. It seems to mostly be used as an alternative to null
for type annotations.
@MagicDuck I think you could simply use t.emptyStatement()
instead of t.noop()
and get the behavior you're looking for.
from codemod.
Ah thanks @eventualbuddha, that should be enough for my needs. Much appreciate your time ! 😁
from codemod.
from codemod.
Not really anything to do here, so closing.
from codemod.
Related Issues (20)
- All-or-nothing matches HOT 7
- `and` matches HOT 1
- Difference between codemod-js and jscodeshift HOT 1
- Error: Requires Babel "^7.0.0-beta.41", but was loaded with "7.9.0" HOT 4
- Options are not passed into the plugin HOT 6
- Is there any way to ignore certain paths? HOT 5
- Bug? (babelrc options not work) + Use case (need to pass fn to plugin options) HOT 2
- Suggestion: replace custom file path resolver with globby HOT 5
- Suggestion: use Piscina for faster codemods HOT 1
- ASTExplorer latest revision link does not work with `--remote-plugin` HOT 1
- Debug mode? HOT 1
- [Question] How to create npx compatible codemod runners
- [Question] How to list changed files? HOT 1
- 3.1.0 Breaking Changes? HOT 6
- Adding an onComplete function HOT 1
- .match issues with TypeScript and fromCapture HOT 3
- Decorators cannot be used to decorate parameters. HOT 1
- Run with a custom babel.config.js HOT 1
- combine spacers and matchers HOT 3
- function expression m.anything doesn't match null id 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 codemod.