jquery / esprima

ECMAScript parsing infrastructure for multipurpose analysis
http://esprima.org
BSD 2-Clause "Simplified" License
7.05k stars 787 forks source link

Release 5.0 #1743

Open ariya opened 7 years ago

ariya commented 7 years ago

(Only placeholder for now. More TBD)

What goes into this release? New ES2018 syntax support:

Release workflow:

lastmjs commented 6 years ago

Are ES Modules going to be a part of this release?

donnagf commented 4 years ago

@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.

boutell commented 4 years ago

@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...

boutell commented 4 years ago

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.

Timmmm commented 3 years ago

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.

Timmmm commented 3 years ago

Esprima seems to have upgraded to Typescript since V4

Actually I was wrong on two counts:

  1. V4 already uses Typescript but unfortunately they don't generate and ship type definitions (.d.ts files), even though it's really easy - just add --declaration to the tsc command and then move all the .d.ts files into dist (and I guess add them to package.json:files.

  2. Although it technically is written in Typescript, they unfortunately haven't enabled the noImplicitAny option 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