[][src]Crate swc_ecma_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() {
  |          ^^^^^

Error recovery

The parser can recover from some parsing erros. For example, parser returns Ok(Module) for the code below, while emitting error to handler.

const CONST = 9000 % 2;
const enum D {
    // Comma is requied, but parser can recover because of the newline.
    d = 10
    g = CONST
}

Example (lexer)

See lexer.rs in examples directory.

Example (parser)

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

fn main() {
    swc_common::GLOBALS.set(&swc_common::Globals::new(), || {
        let cm: Arc<SourceMap> = Default::default();
        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 lexer = Lexer::new(
            session,
            Syntax::Es(Default::default()),
             Default::default(),
            SourceFileInput::from(&*fm),
            None,
        );

        let mut parser = Parser::new_from(session, lexer);


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

Modules

input
lexer

ECMAScript lexer.

token

Ported from babel/bablyon

Structs

Capturing

Note: Lexer need access to parser's context to lex correctly.

Context

Syntactic context.

EsConfig
Parser

EcmaScript parser.

Session
SourceFileInput
TokensInput
TsConfig

Enums

JscTarget
Syntax

Traits

Input
Tokens

Type Definitions

PResult

When error occurs, error is emitted and parser returns Err(()).