esprima
esprima copied to clipboard
Release 5.0
(Only placeholder for now. More TBD)
What goes into this release? New ES2018 syntax support:
- [ ] #1587 Revised template literal
- [x] #1588 Object rest/spread properties
- [x] #1728 Dynamic import
Release workflow:
- [ ] Bump version number
- [ ] Update ChangeLog
- [ ] Update devDependencies
- [ ] Activate the version at esprima.readthedocs.io
- [ ] Check for performance regression
- [ ] Tag the repository
- [ ] Publish to npm
- [ ] Announce in the mailing-list
- [ ] Update the web site
Are ES Modules going to be a part of this release?
@ariya Any progress on this? Seems to be soon 2 years behind schedule. In the docs it is stated that Esprima should be updated every year.
@ariya Hi, anything I can do to help 5.0 get to the finish line? I'm knee deep in a project depending rather heavily on it, with zero desire to switch, so I'm rather motivated...
OK, this is awkward, but it turns out that moving to acorn was straightforward. Obviously I have just started using acorn, but so far it seems to cover my use case equally well, with the addition of support for newer syntax. Still interested in understanding this ecosystem and learning which use cases might still be stronger in esprima.
Acorn is written in Javascript though, whereas Esprima seems to have upgraded to Typescript since V4, so I'd really like to use Esprima if possible.
Esprima seems to have upgraded to Typescript since V4
Actually I was wrong on two counts:
-
V4 already uses Typescript but unfortunately they don't generate and ship type definitions (
.d.tsfiles), even though it's really easy - just add--declarationto thetsccommand and then move all the.d.tsfiles intodist(and I guess add them topackage.json:files. -
Although it technically is written in Typescript, they unfortunately haven't enabled the
noImplicitAnyoption so loads of the code is like this:
const program = isModule ? parser.parseModule() : parser.parseScript();
const ast = program as any;
if (collectComment && commentHandler) {
ast.comments = commentHandler.comments;
}
And the main generated types are kind of useless:
export declare function parse(code: string, options: any, delegate: any): any;
export declare function parseModule(code: string, options: any, delegate: any): any;
export declare function parseScript(code: string, options: any, delegate: any): any;
export declare function tokenize(code: string, options: any, delegate: any): any;
I made a task to fix that: #2066