From 9b1f4cd361cb5d5c897a1b13ec6d25296c10910e Mon Sep 17 00:00:00 2001 From: pshu Date: Wed, 28 Aug 2024 11:04:50 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E2=9C=A8=20strip=20span=20when=20p?= =?UTF-8?q?asre=20define's=20expression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/mako/src/visitors/env_replacer.rs | 25 +++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/crates/mako/src/visitors/env_replacer.rs b/crates/mako/src/visitors/env_replacer.rs index 0679a858a..fad74e149 100644 --- a/crates/mako/src/visitors/env_replacer.rs +++ b/crates/mako/src/visitors/env_replacer.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use anyhow::{anyhow, Result}; use serde_json::Value; -use swc_core::common::{Mark, DUMMY_SP}; +use swc_core::common::{Mark, Span, DUMMY_SP}; use swc_core::ecma::ast::{ ArrayLit, Bool, ComputedPropName, Expr, ExprOrSpread, Ident, KeyValueProp, Lit, MemberExpr, MemberProp, ModuleItem, Null, Number, ObjectLit, Prop, PropOrSpread, Stmt, Str, @@ -135,10 +135,14 @@ fn get_env_expr(v: Value, context: &Arc) -> Result { v.clone() }; - // the string content is treat as expression, so it has to be parsed - let ast = - JsAst::build("_mako_internal/_define_.js", &safe_value, context.clone()).unwrap(); - let module = ast.ast.body.first().unwrap(); + let module = { + // the string content is treat as expression, so it has to be parsed + let mut ast = JsAst::build("_mako_internal/_define_.js", &safe_value, context + .clone()) + .unwrap(); + ast.ast.visit_mut_with(&mut strip_span()); + ast.ast.body.pop().unwrap() + }; match module { ModuleItem::Stmt(Stmt::Expr(stmt_expr)) => { @@ -195,6 +199,17 @@ fn get_env_expr(v: Value, context: &Arc) -> Result { } } +struct SpanStrip {} +impl VisitMut for SpanStrip { + fn visit_mut_span(&mut self, span: &mut Span) { + *span = DUMMY_SP; + } +} + +fn strip_span() -> impl VisitMut { + SpanStrip {} +} + #[cfg(test)] mod tests { use std::collections::HashMap; From 90538bb3d4b77ed9feefad114f3e335fb7514a90 Mon Sep 17 00:00:00 2001 From: pshu Date: Wed, 28 Aug 2024 13:43:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=F0=9F=9A=A8=20lint=20happy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/mako/src/visitors/env_replacer.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/mako/src/visitors/env_replacer.rs b/crates/mako/src/visitors/env_replacer.rs index fad74e149..7e7991970 100644 --- a/crates/mako/src/visitors/env_replacer.rs +++ b/crates/mako/src/visitors/env_replacer.rs @@ -137,9 +137,9 @@ fn get_env_expr(v: Value, context: &Arc) -> Result { let module = { // the string content is treat as expression, so it has to be parsed - let mut ast = JsAst::build("_mako_internal/_define_.js", &safe_value, context - .clone()) - .unwrap(); + let mut ast = + JsAst::build("_mako_internal/_define_.js", &safe_value, context.clone()) + .unwrap(); ast.ast.visit_mut_with(&mut strip_span()); ast.ast.body.pop().unwrap() };