Skip to content

Commit f72a069

Browse files
authored
perf: avoid unnecessary source map creation (#11773)
1 parent 274a1bd commit f72a069

File tree

3 files changed

+41
-84
lines changed
  • crates

3 files changed

+41
-84
lines changed

crates/rspack_javascript_compiler/src/compiler/stringify.rs

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ use rspack_error::Result;
44
use rspack_sources::{Mapping, OriginalLocation, encode_mappings};
55
use rustc_hash::FxHashMap;
66
use swc_core::{
7-
base::{config::JsMinifyFormatOptions, sourcemap},
7+
base::sourcemap,
88
common::{
9-
BytePos, FileName, SourceMap as SwcSourceMap, Spanned, comments::Comments,
9+
BytePos, FileName, SourceMap as SwcSourceMap, comments::Comments,
1010
source_map::SourceMapGenConfig,
1111
},
1212
ecma::{
@@ -21,19 +21,6 @@ use swc_core::{
2121
};
2222

2323
use super::{JavaScriptCompiler, TransformOutput};
24-
use crate::ast::Ast;
25-
26-
#[derive(Default, Clone, Debug)]
27-
pub struct CodegenOptions<'a> {
28-
pub target: Option<EsVersion>,
29-
pub source_map_config: SourceMapConfig,
30-
pub input_source_map: Option<&'a sourcemap::SourceMap>,
31-
pub keep_comments: Option<bool>,
32-
pub minify: Option<bool>,
33-
pub ascii_only: Option<bool>,
34-
pub inline_script: Option<bool>,
35-
pub emit_assert_for_import_attributes: Option<bool>,
36-
}
3724

3825
#[derive(Default, Clone, Debug)]
3926
pub struct SourceMapConfig {
@@ -80,41 +67,6 @@ pub struct PrintOptions<'a> {
8067
}
8168

8269
impl JavaScriptCompiler {
83-
pub fn stringify(&self, ast: &Ast, options: CodegenOptions) -> Result<TransformOutput> {
84-
ast.visit(|program, context| {
85-
let keep_comments = options.keep_comments;
86-
let target = options.target.unwrap_or(EsVersion::latest());
87-
let source_map_config = options.source_map_config;
88-
let minify = options.minify.unwrap_or_default();
89-
let format_opt = JsMinifyFormatOptions {
90-
inline_script: options.inline_script.unwrap_or(true),
91-
ascii_only: options.ascii_only.unwrap_or_default(),
92-
emit_assert_for_import_attributes: options
93-
.emit_assert_for_import_attributes
94-
.unwrap_or_default(),
95-
..Default::default()
96-
};
97-
98-
let span = program.program.span();
99-
let print_options = PrintOptions {
100-
source_len: span.hi.0.saturating_sub(span.lo.0),
101-
source_map: context.source_map.clone(),
102-
target,
103-
source_map_config,
104-
input_source_map: options.input_source_map,
105-
minify,
106-
comments: keep_comments
107-
.unwrap_or_default()
108-
.then(|| program.comments.as_ref().map(|c| c as &dyn Comments))
109-
.flatten(),
110-
preamble: &format_opt.preamble,
111-
ascii_only: format_opt.ascii_only,
112-
inline_script: format_opt.inline_script,
113-
};
114-
self.print(program.get_inner_program(), print_options)
115-
})
116-
}
117-
11870
pub fn print(&self, node: &SwcProgram, options: PrintOptions<'_>) -> Result<TransformOutput> {
11971
let PrintOptions {
12072
source_len,

crates/rspack_loader_lightningcss/src/lib.rs

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -170,39 +170,39 @@ impl LightningCssLoader {
170170
})
171171
.to_rspack_result()?;
172172

173-
let enable_sourcemap = loader_context.context.module_source_map_kind.enabled();
174-
175-
let mut source_map = loader_context
176-
.source_map()
177-
.map(|input_source_map| -> Result<_> {
178-
let mut sm = parcel_sourcemap::SourceMap::new(
179-
input_source_map
180-
.source_root()
181-
.unwrap_or(&loader_context.context.options.context),
182-
);
183-
sm.add_source(&filename);
184-
sm.set_source_content(0, &content_str).to_rspack_result()?;
185-
Ok(sm)
186-
})
187-
.transpose()?
188-
.unwrap_or_else(|| {
189-
let mut source_map =
190-
parcel_sourcemap::SourceMap::new(&loader_context.context.options.context);
191-
let source_idx = source_map.add_source(&filename);
192-
source_map
193-
.set_source_content(source_idx as usize, &content_str)
194-
.expect("should set source content");
195-
source_map
196-
});
173+
let mut source_map = if loader_context.context.module_source_map_kind.enabled() {
174+
Some(
175+
loader_context
176+
.source_map()
177+
.map(|input_source_map| -> Result<_> {
178+
let mut sm = parcel_sourcemap::SourceMap::new(
179+
input_source_map
180+
.source_root()
181+
.unwrap_or(&loader_context.context.options.context),
182+
);
183+
sm.add_source(&filename);
184+
sm.set_source_content(0, &content_str).to_rspack_result()?;
185+
Ok(sm)
186+
})
187+
.transpose()?
188+
.unwrap_or_else(|| {
189+
let mut source_map =
190+
parcel_sourcemap::SourceMap::new(&loader_context.context.options.context);
191+
let source_idx = source_map.add_source(&filename);
192+
source_map
193+
.set_source_content(source_idx as usize, &content_str)
194+
.expect("should set source content");
195+
source_map
196+
}),
197+
)
198+
} else {
199+
None
200+
};
197201

198202
let content = stylesheet
199203
.to_css(PrinterOptions {
200204
minify: self.config.minify.unwrap_or(false),
201-
source_map: if enable_sourcemap {
202-
Some(&mut source_map)
203-
} else {
204-
None
205-
},
205+
source_map: source_map.as_mut(),
206206
project_root: None,
207207
targets,
208208
analyze_dependencies: None,
@@ -220,7 +220,7 @@ impl LightningCssLoader {
220220
})
221221
.to_rspack_result_with_message(|e| format!("failed to generate css: {e}"))?;
222222

223-
if enable_sourcemap {
223+
if let Some(source_map) = source_map {
224224
let mappings = encode_mappings(source_map.get_mappings().iter().map(|mapping| Mapping {
225225
generated_line: mapping.generated_line,
226226
generated_column: mapping.generated_column,

crates/rspack_loader_swc/src/lib.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,15 @@ impl SwcLoader {
6767
.transform
6868
.merge(MergingOption::from(Some(transform)));
6969
}
70-
if let Some(pre_source_map) = loader_context.source_map().cloned()
71-
&& let Ok(source_map) = pre_source_map.to_json()
72-
{
73-
swc_options.config.input_source_map = Some(InputSourceMap::Str(source_map))
70+
71+
if loader_context.context.module_source_map_kind.enabled() {
72+
if let Some(pre_source_map) = loader_context.source_map().cloned()
73+
&& let Ok(source_map) = pre_source_map.to_json()
74+
{
75+
swc_options.config.input_source_map = Some(InputSourceMap::Str(source_map))
76+
}
77+
} else {
78+
swc_options.config.input_source_map = Some(InputSourceMap::Bool(false));
7479
}
7580
swc_options.filename = resource_path.as_str().to_string();
7681
swc_options.source_file_name = Some(resource_path.as_str().to_string());

0 commit comments

Comments
 (0)