From 90957d9b23bb7878c9ed4961169778cd48e5711f Mon Sep 17 00:00:00 2001 From: shulaoda Date: Thu, 12 Sep 2024 10:39:00 +0800 Subject: [PATCH] save --- .../src/dependency/dependency_location.rs | 24 ++++++++++++ .../src/dependency/esm/provide_dependency.rs | 19 +++++----- .../src/parser_plugin/provide_plugin.rs | 38 ++++++------------- 3 files changed, 45 insertions(+), 36 deletions(-) diff --git a/crates/rspack_core/src/dependency/dependency_location.rs b/crates/rspack_core/src/dependency/dependency_location.rs index c2e6efaad2a..0946ebdb14a 100644 --- a/crates/rspack_core/src/dependency/dependency_location.rs +++ b/crates/rspack_core/src/dependency/dependency_location.rs @@ -2,6 +2,30 @@ use std::{fmt, sync::Arc}; use derivative::Derivative; +#[derive(Debug, Clone)] +pub struct DependencyRange { + pub start: u32, + pub end: u32, +} + +impl From<(u32, u32)> for DependencyRange { + fn from(range: (u32, u32)) -> Self { + Self { + start: range.0, + end: range.1, + } + } +} + +impl From for DependencyRange { + fn from(span: swc_core::common::Span) -> Self { + Self { + start: span.lo.0.saturating_sub(1), + end: span.hi.0.saturating_sub(1), + } + } +} + #[derive(Derivative)] #[derivative(Debug, Clone, Hash)] pub struct RealDependencyLocation { diff --git a/crates/rspack_plugin_javascript/src/dependency/esm/provide_dependency.rs b/crates/rspack_plugin_javascript/src/dependency/esm/provide_dependency.rs index cd225f8dd2b..829a8e180a2 100644 --- a/crates/rspack_plugin_javascript/src/dependency/esm/provide_dependency.rs +++ b/crates/rspack_plugin_javascript/src/dependency/esm/provide_dependency.rs @@ -1,8 +1,7 @@ use itertools::Itertools; -use rspack_core::DependencyType; use rspack_core::{ - create_exports_object_referenced, module_raw, Compilation, ExtendedReferencedExport, ModuleGraph, - NormalInitFragment, RuntimeSpec, UsedName, + create_exports_object_referenced, module_raw, Compilation, DependencyRange, DependencyType, + ExtendedReferencedExport, ModuleGraph, NormalInitFragment, RuntimeSpec, UsedName, }; use rspack_core::{AsContextDependency, Dependency, InitFragmentKey, InitFragmentStage}; use rspack_core::{DependencyCategory, DependencyId, DependencyTemplate}; @@ -12,19 +11,17 @@ use swc_core::atoms::Atom; #[derive(Debug, Clone)] pub struct ProvideDependency { - start: u32, - end: u32, id: DependencyId, request: Atom, identifier: String, ids: Vec, + range: DependencyRange, } impl ProvideDependency { - pub fn new(start: u32, end: u32, request: Atom, identifier: String, ids: Vec) -> Self { + pub fn new(range: DependencyRange, request: Atom, identifier: String, ids: Vec) -> Self { Self { - start, - end, + range, request, identifier, ids, @@ -38,6 +35,10 @@ impl Dependency for ProvideDependency { &self.id } + fn loc(&self) -> Option { + Some(self.request.to_string()) + } + fn category(&self) -> &DependencyCategory { &DependencyCategory::Esm } @@ -116,7 +117,7 @@ impl DependencyTemplate for ProvideDependency { InitFragmentKey::ModuleExternal(format!("provided {}", self.identifier)), None, ))); - source.replace(self.start, self.end, &self.identifier, None); + source.replace(self.range.start, self.range.end, &self.identifier, None); } fn dependency_id(&self) -> Option { diff --git a/crates/rspack_plugin_javascript/src/parser_plugin/provide_plugin.rs b/crates/rspack_plugin_javascript/src/parser_plugin/provide_plugin.rs index e5ec3d76613..d90d0a279c0 100644 --- a/crates/rspack_plugin_javascript/src/parser_plugin/provide_plugin.rs +++ b/crates/rspack_plugin_javascript/src/parser_plugin/provide_plugin.rs @@ -1,8 +1,8 @@ use itertools::Itertools; use once_cell::sync::OnceCell; use rspack_core::{ - ApplyContext, CompilerOptions, ModuleType, NormalModuleFactoryParser, ParserAndGenerator, - ParserOptions, Plugin, PluginContext, SpanExt, + ApplyContext, CompilerOptions, DependencyRange, ModuleType, NormalModuleFactoryParser, + ParserAndGenerator, ParserOptions, Plugin, PluginContext, }; use rspack_error::Result; use rspack_hook::{plugin, plugin_hook}; @@ -13,11 +13,14 @@ use crate::{ dependency::ProvideDependency, parser_and_generator::JavaScriptParserAndGenerator, visitors::JavascriptParser, BoxJavascriptParserPlugin, }; - const SOURCE_DOT: &str = r#"."#; const MODULE_DOT: &str = r#"_dot_"#; -fn dep(value: &ProvideValue, name: &str, start: u32, end: u32) -> Option { +fn create_provide_dep( + name: &str, + value: &ProvideValue, + range: DependencyRange, +) -> Option { if let Some(requests) = value.get(name) { let name_identifier = if name.contains(SOURCE_DOT) { format!("__webpack_provide_{}", name.replace(SOURCE_DOT, MODULE_DOT)) @@ -25,8 +28,7 @@ fn dep(value: &ProvideValue, name: &str, start: u32, end: u32) -> Option Option { - dep( - &self.provide, - for_name, - expr.callee.span().real_lo(), - expr.callee.span().real_hi(), - ) - .map(|dep| { + create_provide_dep(for_name, &self.provide, expr.callee.span().into()).map(|dep| { parser.dependencies.push(Box::new(dep)); // FIXME: webpack use `walk_expression` here parser.walk_expr_or_spread(&expr.args); @@ -104,13 +100,7 @@ impl JavascriptParserPlugin for ProvidePlugin { expr: &swc_core::ecma::ast::MemberExpr, for_name: &str, ) -> Option { - dep( - &self.provide, - for_name, - expr.span().real_lo(), - expr.span().real_hi(), - ) - .map(|dep| { + create_provide_dep(for_name, &self.provide, expr.span().into()).map(|dep| { parser.dependencies.push(Box::new(dep)); true }) @@ -122,13 +112,7 @@ impl JavascriptParserPlugin for ProvidePlugin { ident: &swc_core::ecma::ast::Ident, for_name: &str, ) -> Option { - dep( - &self.provide, - for_name, - ident.span.real_lo(), - ident.span.real_hi(), - ) - .map(|dep| { + create_provide_dep(for_name, &self.provide, ident.span.into()).map(|dep| { parser.dependencies.push(Box::new(dep)); true })