From ff8facef64ffe115936cfc154b35ec08359524f8 Mon Sep 17 00:00:00 2001 From: HeYunfei Date: Wed, 11 Jan 2023 10:58:25 +0800 Subject: [PATCH] fix(es/parser): Allow parsing `import.meta` as an expression (#6783) --- crates/swc_ecma_parser/src/lib.rs | 6 +++++- .../swc_ecma_parser/src/parser/expr/tests.rs | 20 +++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/crates/swc_ecma_parser/src/lib.rs b/crates/swc_ecma_parser/src/lib.rs index b523edfabb70..3ad332067ea0 100644 --- a/crates/swc_ecma_parser/src/lib.rs +++ b/crates/swc_ecma_parser/src/lib.rs @@ -442,7 +442,11 @@ macro_rules! expose { }; } -expose!(parse_file_as_expr, Box, |p| { p.parse_expr() }); +expose!(parse_file_as_expr, Box, |p| { + // This allow to parse `import.meta` + p.input().ctx.can_be_module = true; + p.parse_expr() +}); expose!(parse_file_as_module, Module, |p| { p.parse_module() }); expose!(parse_file_as_script, Script, |p| { p.parse_script() }); expose!(parse_file_as_program, Program, |p| { p.parse_program() }); diff --git a/crates/swc_ecma_parser/src/parser/expr/tests.rs b/crates/swc_ecma_parser/src/parser/expr/tests.rs index 5e650e87fb12..f98f473ed637 100644 --- a/crates/swc_ecma_parser/src/parser/expr/tests.rs +++ b/crates/swc_ecma_parser/src/parser/expr/tests.rs @@ -2,12 +2,12 @@ extern crate test; use std::hint::black_box; -use swc_common::DUMMY_SP as span; +use swc_common::{FileName, SourceMap, DUMMY_SP as span}; use swc_ecma_visit::assert_eq_ignore_span; use test::Bencher; use super::*; -use crate::EsConfig; +use crate::{parse_file_as_expr, EsConfig}; fn syntax() -> Syntax { Syntax::Es(EsConfig { @@ -519,6 +519,22 @@ fn issue_5947() { ); } +#[test] +fn issue_6781() { + let cm = SourceMap::default(); + let fm = cm.new_source_file(FileName::Anon, "import.meta.env".to_string()); + let mut errors = vec![]; + let expr = parse_file_as_expr( + &fm, + Default::default(), + Default::default(), + None, + &mut errors, + ); + assert!(expr.is_ok()); + assert!(errors.is_empty()); +} + #[bench] fn bench_new_expr_ts(b: &mut Bencher) { bench_parser(