Skip to content

Commit eda2e45

Browse files
authoredJun 14, 2024··
feat(common): Use SourceMap::adjust_mappings (#9052)
1 parent 8b66428 commit eda2e45

File tree

6 files changed

+28
-55
lines changed

6 files changed

+28
-55
lines changed
 

‎crates/swc/src/lib.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ impl Compiler {
731731
None
732732
};
733733

734-
self.apply_transforms(handler, orig.as_ref(), config)
734+
self.apply_transforms(handler, orig, config)
735735
})
736736
}
737737

@@ -904,7 +904,7 @@ impl Compiler {
904904
inline_sources_content: opts.inline_sources_content,
905905
source_map,
906906
source_map_names: &source_map_names,
907-
orig: orig.as_ref(),
907+
orig,
908908
comments: Some(&comments),
909909
emit_source_map_columns: opts.emit_source_map_columns,
910910
preamble: &opts.format.preamble,
@@ -949,7 +949,7 @@ impl Compiler {
949949
fn apply_transforms(
950950
&self,
951951
handler: &Handler,
952-
orig: Option<&sourcemap::SourceMap>,
952+
orig: Option<sourcemap::SourceMap>,
953953
config: BuiltInput<impl swc_ecma_visit::Fold>,
954954
) -> Result<TransformOutput, Error> {
955955
self.run(|| {

‎crates/swc/tests/fixture/sourcemap/004/output/index.map

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
{
2-
"mappings": "AAACA,CAAAA,KAAKC,gBAAmB,GAAGD,KAAKC,gBAAmB,IAAI,EAAE,AAAF,EAAIC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB;YACzF;YACA,IAAIC,IAAa,SAAoBC,CAAI;gBACrC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAqB,AAAC,CAAA,GAAGC,EAA+CC,GAAG,AAAHA,EAAK,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS;oBAC1B,OAAqBA;gBACzB;gBACqBC,SAAS;oBAC1B,OAAqBV;gBACzB;YACJ;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB;YAC7Fa,CAAAA,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,AAAF,EAAIjB,IAAI,CAAC;gBAC3C;gBACA;oBACI,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB;QAKzBA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE;YACC,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC;IAGhE;CACC",
2+
"mappings": "CAACA,KAAK,gBAAmB,GAAGA,KAAK,gBAAmB,IAAI,EAAA,AAAC,EAAGC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB,EAAE;YAC3F;YACA,IAAIC,IAAa,SAAoBC,CAAI,EAAE;gBACvC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAsB,CAAA,GAAGC,EAA+CC,GAAAA,AAAE,EAAG,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS,WAAoB;oBAC9C,OAAqBA;gBACzB;gBACqBC,SAAS,WAAoB;oBAC9C,OAAqBV;gBACzB;YACJ;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB,EAAE;aAC/Fa,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAA,AAAC,EAAGjB,IAAI,CAAC;gBAC3C;gBACA,WAAY;oBACR,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB,EAAE;QAK3BA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE,WAAY;YACX,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC;IAGhE;CACC",
33
"names": [
44
"self",
5-
"webpackChunk_N_E",
65
"push",
76
"__unused_webpack_module",
87
"__webpack_exports__",

‎crates/swc/tests/fixture/sourcemap/issue-6552/input-map/output/index.map

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"mappings": "AAAA,IAAMA,IAAM,cACZC,QAAQC,KAAR,CAAe,KAAY,OAARC,UAEnB,IAAMC,IAAM",
2+
"mappings": "AAAA,IAAMA,GAAG,CAAG,aAAZ,CACAC,OAAO,CAACC,KAAR,CAAe,YAAIC,OAAQ,dAAA,CAA3B,gBAEA,IAAMC,GAAG,CAAG,EAAZ",
33
"names": [
44
"xxx",
55
"console",

‎crates/swc/tests/minify/issue-7475/issue-8372/1/output.map

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
{
2-
"mappings": "AAEAA,IAAAA,EAAQC,CAFEC,IAAA,MAAA,EAASF,QAAAC,GAAA,CAAAE",
2+
"mappings": "AAEAA,IAAAA,EAAQC,CAAG,AAFD,IAAA,MAAA,EAAS,QAAA,GAAA,CAAA",
33
"names": [
44
"console",
55
"log",
6-
"aób",
7-
"a"
6+
"aób"
87
],
98
"rangeMappings": "",
109
"sources": [

‎crates/swc_common/src/source_map.rs

+20-45
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,7 @@ impl SourceMap {
12011201
pub fn build_source_map_from(
12021202
&self,
12031203
mappings: &[(BytePos, LineCol)],
1204-
orig: Option<&sourcemap::SourceMap>,
1204+
orig: Option<sourcemap::SourceMap>,
12051205
) -> sourcemap::SourceMap {
12061206
self.build_source_map_with_config(mappings, orig, DefaultSourceMapGenConfig)
12071207
}
@@ -1212,30 +1212,20 @@ impl SourceMap {
12121212
pub fn build_source_map_with_config(
12131213
&self,
12141214
mappings: &[(BytePos, LineCol)],
1215-
orig: Option<&sourcemap::SourceMap>,
1215+
mut orig: Option<sourcemap::SourceMap>,
12161216
config: impl SourceMapGenConfig,
12171217
) -> sourcemap::SourceMap {
12181218
let mut builder = SourceMapBuilder::new(None);
12191219

12201220
let mut src_id = 0u32;
12211221

1222-
if let Some(orig) = orig {
1223-
for src in orig.sources() {
1224-
let id = builder.add_source(src);
1225-
src_id = id;
1226-
1227-
builder.set_source_contents(id, orig.get_source_contents(id));
1228-
}
1229-
}
1230-
12311222
// // This method is optimized based on the fact that mapping is sorted.
12321223
// mappings.sort_by_key(|v| v.0);
12331224

12341225
let mut cur_file: Option<Lrc<SourceFile>> = None;
12351226

12361227
let mut prev_dst_line = u32::MAX;
12371228

1238-
let mut inline_sources_content = false;
12391229
let mut ch_state = ByteToCharPosState::default();
12401230
let mut line_state = ByteToCharPosState::default();
12411231

@@ -1267,13 +1257,11 @@ impl SourceMap {
12671257
if config.skip(&f.name) {
12681258
continue;
12691259
}
1270-
if orig.is_none() {
1271-
src_id = builder.add_source(&config.file_name_to_source(&f.name));
1260+
src_id = builder.add_source(&config.file_name_to_source(&f.name));
12721261

1273-
inline_sources_content = config.inline_sources_content(&f.name);
1274-
if inline_sources_content && orig.is_none() {
1275-
builder.set_source_contents(src_id, Some(&f.src));
1276-
}
1262+
let inline_sources_content = config.inline_sources_content(&f.name);
1263+
if inline_sources_content {
1264+
builder.set_source_contents(src_id, Some(&f.src));
12771265
}
12781266

12791267
ch_state = ByteToCharPosState::default();
@@ -1293,7 +1281,7 @@ impl SourceMap {
12931281
continue;
12941282
}
12951283

1296-
let mut line = match f.lookup_line(pos) {
1284+
let line = match f.lookup_line(pos) {
12971285
Some(line) => line as u32,
12981286
None => continue,
12991287
};
@@ -1319,31 +1307,8 @@ impl SourceMap {
13191307
linechpos,
13201308
);
13211309

1322-
let mut col = chpos - linechpos;
1323-
let mut name = None;
1324-
if let Some(orig) = &orig {
1325-
if let Some(token) = orig
1326-
.lookup_token(line, col)
1327-
.filter(|t| t.get_dst_line() == line)
1328-
{
1329-
line = token.get_src_line();
1330-
col = token.get_src_col();
1331-
if token.has_name() {
1332-
name = token.get_name();
1333-
}
1334-
if token.get_source().is_some() {
1335-
// When we have the original source map, we use the source ids from it
1336-
src_id = token.get_raw_token().src_id;
1337-
if inline_sources_content && !builder.has_source_contents(src_id) {
1338-
if let Some(contents) = token.get_source_view() {
1339-
builder.set_source_contents(src_id, Some(contents.source()));
1340-
}
1341-
}
1342-
}
1343-
} else {
1344-
continue;
1345-
}
1346-
}
1310+
let col = chpos - linechpos;
1311+
let name = None;
13471312

13481313
let name_idx = name
13491314
.or_else(|| config.name_for_bytepos(pos))
@@ -1353,7 +1318,17 @@ impl SourceMap {
13531318
prev_dst_line = lc.line;
13541319
}
13551320

1356-
builder.into_sourcemap()
1321+
let mut map = builder.into_sourcemap();
1322+
1323+
if let Some(o) = &mut orig {
1324+
o.adjust_mappings(&map);
1325+
}
1326+
1327+
if let Some(orig) = orig {
1328+
map = orig;
1329+
}
1330+
1331+
map
13571332
}
13581333
}
13591334

‎crates/swc_compiler_base/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ pub struct PrintArgs<'a> {
109109
pub inline_sources_content: bool,
110110
pub source_map: SourceMapsConfig,
111111
pub source_map_names: &'a AHashMap<BytePos, JsWord>,
112-
pub orig: Option<&'a sourcemap::SourceMap>,
112+
pub orig: Option<sourcemap::SourceMap>,
113113
pub comments: Option<&'a dyn Comments>,
114114
pub emit_source_map_columns: bool,
115115
pub preamble: &'a str,

0 commit comments

Comments
 (0)
Please sign in to comment.