swc_ecma_parser 0.8.2

Feature-complete es2019 parser.

es2019 parser

Features

Heavily tested

Passes almost all tests from tc39/test262.

Error reporting

error: 'implements', 'interface', 'let', 'package', 'private', 'protected',  'public', 'static', or 'yield' cannot be used as an identifier in strict mode
 --> invalid.js:3:10
  |
3 | function yield() {
  |          ^^^^^

Example

#[macro_use]
extern crate swc_common;
extern crate swc_ecma_parser;
use swc_common::{
    errors::{ColorConfig, Handler},
    sync::Lrc,
    FileName, FilePathMapping, SourceMap,
};
use swc_ecma_parser::{Parser, Session, SourceFileInput, Syntax};

fn main() {
    swc_common::GLOBALS.set(&swc_common::Globals::new(), || {
        let cm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
        let handler =
            Handler::with_tty_emitter(ColorConfig::Auto, true, false, Some(cm.clone()));

        let session = Session { handler: &handler };

        // Real usage
        // let fm = cm
        //     .load_file(Path::new("test.js"))
        //     .expect("failed to load test.js");

        let fm = cm.new_source_file(
            FileName::Custom("test.js".into()),
            "function foo() {}".into(),
        );

        let mut parser = Parser::new(
            session,
            Syntax::Es(Default::default()),
            SourceFileInput::from(&*fm),
        );

        let _module = parser
            .parse_module()
            .map_err(|mut e| {
                e.emit();
                ()
            })
            .expect("failed to parser module");
    });
}