Skip to content

Commit 35b0ca0

Browse files
authoredNov 19, 2024··
fix(es): Source map super(...args) calls in injected constructors (#9745)
**Related issue:** - Closes #9742
1 parent c55e524 commit 35b0ca0

File tree

15 files changed

+107
-31
lines changed

15 files changed

+107
-31
lines changed
 

‎.changeset/smart-horses-repeat.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
swc_ecma_compat_es2015: patch
3+
swc_ecma_compat_es2022: patch
4+
swc_ecma_transforms_compat: patch
5+
swc_ecma_transforms_proposal: patch
6+
swc_ecma_utils: patch
7+
---
8+
9+
fix(es/transforms): Source map `super(...args)` calls in injected constructors

‎crates/swc/tests/fixture/issues-5xxx/5272/1/output/a.map

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"mappings": ";;;+BACaA;;;eAAAA;;;;;;;oBADQ;AACd,IAAA,AAAMA,oBAAN;;gBAAMA;aAAAA;kCAAAA;mCAAAA;;oBAAAA;;YACTC,KAAAA;mBAAAA,SAAAA;gBACI,OAAO,IAAI,IAAI,CAACC,GAAG;YACvB;;;WAHSF;EAAYG,UAAI",
2+
"mappings": ";;;+BACaA;;;eAAAA;;;;;;;oBADQ;AACd,IAAA,AAAMA,oBAAN;;gBAAMA;aAAAA;kCAAAA;eAAN,oBAAMA;;oBAAAA;;YACTC,KAAAA;mBAAAA,SAAAA;gBACI,OAAO,IAAI,IAAI,CAACC,GAAG;YACvB;;;WAHSF;EAAYG,UAAI",
33
"names": [
44
"Foo",
55
"bar",

‎crates/swc/tests/fixture/sourcemap/issue-3854/1-true/output/index.map

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"mappings": "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",
2+
"mappings": ";;;;;;;;;;;IA6BaA,MAAM;eAANA;;IAMAC,MAAM;eAANA;;IARDC,IAAI;;;IAKHC,MAAM;eAANA;;IAaAC,GAAG;eAAHA;;IARAC,MAAM;eAANA;;IAKAC,OAAO;eAAPA;;IATAC,KAAK;eAALA;;IAHAC,QAAQ;eAARA;;;;;;;;kCA9BuC;8BACJ;gCAC1B;2FAwBR;AAGP,MAAMR,SAAqC,IAAM,IAAIS;AACrD,MAAMD,WAA2C,IACpD,IAAIE;AACD,MAAMP,SAAuC,IAAM,IAAIQ;AACvD,MAAMJ,QAAyC,IAClD,IAAIK;AACD,MAAMX,SAA2C,IACpD,IAAIY;AACD,MAAMR,SAGT,CAACS,QAAkC,EAAE,GACrC,IAAIC,wBAAwBD;AACzB,MAAMR,UAAgD,IACzD,IAAIU;AAED,MAAMZ,MAAM;IACfG,OAAQ,IACJ,IAAIU;IACRZ,QAAS,IACL,IAAIa;AACZ;IAGI,uCACA,yCACA,2CACA;AAJJ,MAAMT,oBAAoBU,iCAAe;IAMrCC,OAAO,GAAGA,MAA4B,EAAQ;yCACrC,SAAUA,OAAOC,GAAG,CAACC,yBAAW;QACrC,OAAO,IAAI;IACf;IAEAd,SAASA,QAA6B,EAAQ;yCACrC,WAAYc,IAAAA,yBAAW,EAACd;QAC7B,OAAO,IAAI;IACf;IAEAe,WAAWA,UAAqC,EAAQ;yCAC/C,aAAcA,YAAYF,IAAIC,yBAAW;QAC9C,OAAO,IAAI;IACf;IAEAE,eAAeA,cAAyC,EAAQ;yCACvD,iBAAkBF,IAAAA,yBAAW,EAACE;QACnC,OAAO,IAAI;IACf;IAEAC,QAAc;QACV,OAAO;YACHL,MAAM,6BAAE,IAAI,EAAC;YACbZ,QAAQ,6BAAE,IAAI,EAAC;YACfe,UAAU,6BAAE,IAAI,EAAC;YACjBC,cAAc,6BAAE,IAAI,EAAC;QACzB;IACJ;;QAjCJ,gBACI,kCAAA;;mBAAuB,EAAE;YACzB,kCAAA;;mBAAuBE;YACvB,kCAAA;;mBAAgCA;YAChC,kCAAA;;mBAAmCA;;;AA8BvC;IAGI,sCACA;AAFJ,MAAMhB,wBAAwBS,iCAAe;IAIzCL,MAAMA,KAA+B,EAAQ;yCACpC,QAASA,MAAMO,GAAG,CAACC,yBAAW;QACnC,OAAO,IAAI;IACf;IAEAK,OAAOA,MAAgC,EAAQ;yCACtC,SAAUA,OAAON,GAAG,CAACC,yBAAW;QACrC,OAAO,IAAI;IACf;IAEAG,QAAkB;QACd,OAAO;YACHX,KAAK,6BAAE,IAAI,EAAC;YACZa,MAAM,6BAAE,IAAI,EAAC;QACjB;IACJ;;QAnBJ,gBACI,kCAAA;;mBAA0B,EAAE;YAC5B,kCAAA;;mBAA2B,EAAE;;;AAkBjC;IAGI;AADJ,MAAMhB,sBAAsBQ,iCAAe;IAGvCS,QAAQA,OAAoC,EAAQ;yCAC3C,UAAWN,IAAAA,yBAAW,EAACM;QAC5B,OAAO,IAAI;IACf;IAEAH,QAAgB;QACZ,OAAO;YACHG,OAAO,6BAAE,IAAI,EAAC;QAClB;IACJ;;QAZJ,gBACI,kCAAA;;mBAA8BC,IAAAA,qBAAK,IAAGJ,KAAK;;;AAY/C;IAGI,uCACA,uCACA,2CACA;AAJJ,MAAMR,4BAA4Ba,oCAAkB;IAMhDhB,MAAMA,KAA2C,EAAQ;yCAChD,SAASA,MAAMO,GAAG,CAACU,0BAAY;QACpC,OAAO,IAAI;IACf;IAEA9B,OAAOA,MAAyC,EAAQ;yCAC/C,SAAU8B,IAAAA,0BAAY,EAAC9B,UAAU,EAAE;QACxC,OAAO,IAAI;IACf;IAEA+B,WAAWA,UAAsD,EAAQ;yCAChE,aAAcA,WAAWX,GAAG,CAACU,0BAAY;QAC9C,OAAO,IAAI;IACf;IAEAE,sBACIA,qBAA2D,EACvD;yCACC,wBAAyBA,sBAAsBZ,GAAG,CAACU,0BAAY;QACpE,OAAO,IAAI;IACf;IAEAG,cAAcC,cAAuC,EAAa;QAC9D,OAAO;YACHC,IAAIC,IAAAA,kBAAI,EACJ,wCACA,IAAI,EAAC,qCACL,IAAI,EAAC,yCACL,IAAI,EAAC,oDACL,IAAI,EAAC;YAETvB,OAAOqB,eAAeG,KAAK,4BAAC,IAAI,EAAC;YACjCrC,QAAQkC,eAAeI,KAAK,4BAAC,IAAI,EAAC;YAClCP,YAAYG,eAAeG,KAAK,4BAAC,IAAI,EAAC;YACtCL,uBAAuBE,eAAeG,KAAK,4BACvC,IAAI,EAAC;QAEb;IACJ;;QA5CJ,gBACI,kCAAA;;mBAAsC,EAAE;YACxC,kCAAA;;mBAAmCZ;YACnC,kCAAA;;mBAAiD,EAAE;YACnD,kCAAA;;mBAAsD,EAAE;;;AAyC5D;IAGI;AADJ,MAAMd,yBAAyBO,iCAAe;IAG1CL,MAAMA,KAA+B,EAAQ;QACzC,2BAAA,IAAI,EAAC,aAAYA,KAAK,CAAC;YAACA;SAAM;QAC9B,OAAO,IAAI;IACf;IAEAb,OAAOA,MAA6B,EAAQ;QACxC,IAAIA,QAAQ;YACR,2BAAA,IAAI,EAAC,aAAYA,MAAM,CAAC;gBAACA;aAAO;QACpC;QACA,OAAO,IAAI;IACf;IAEA+B,WAAWA,UAA0C,EAAQ;QACzD,2BAAA,IAAI,EAAC,aAAYA,UAAU,CAAC;YAACA;SAAW;QACxC,OAAO,IAAI;IACf;IAEAC,sBACIA,qBAA+C,EAC3C;QACJ,2BAAA,IAAI,EAAC,aAAYA,qBAAqB,CAAC;YAACA;SAAsB;QAC9D,OAAO,IAAI;IACf;IAEAR,QAAmB;QACf,OAAO,2BAAA,IAAI,EAAC,aAAYA,KAAK;IACjC;;QA7BJ,gBACI,kCAAA;;mBAAmC,IAAIR;;;AA6B3C;IAGI,wCACA;AAFJ,MAAMJ,0BAA0BM,iCAAe;IAI3CqB,QAAQA,OAA8B,EAAQ;yCACrC,UAAWA;QAChB,OAAO,IAAI;IACf;IAEArC,OAAOA,MAAwB,EAAQ;yCAC9B,SAAUmB,IAAAA,yBAAW,EAACnB;QAC3B,OAAO,IAAI;IACf;IAEAsB,QAAoB;QAChB,OAAO;YACHe,OAAO,6BAAE,IAAI,EAAC;YACdrC,MAAM,6BAAE,IAAI,EAAC;QACjB;IACJ;;QAnBJ,gBACI,kCAAA;;mBAAkC;YAClC,kCAAA;;mBAAmBuB;;;AAkBvB;IAGI;AADJ,MAAMR,gCAAgCY,oCAAkB;IAGpDhB,MAAMA,KAA2C,EAAQ;yCAChD,SAASA,MAAMO,GAAG,CAACU,0BAAY;QACpC,OAAO,IAAI;IACf;IAEAG,cAAcC,cAAuC,EAAiB;QAClE,MAAMC,KAAKC,IAAAA,kBAAI,EAAC,6CAAkB,IAAI,EAAC;QACvC,OAAO;YACHD;YACAtB,OAAOqB,eAAeG,KAAK,4BAAC,IAAI,EAAC;QACrC;IACJ;;QAdJ,gBACI,kCAAA;;mBAAsC,EAAE;;;AAc5C;IAGI;AADJ,MAAMvB,6BAA6BI,iCAAe;IAQ9CL,MAAM,GAAGA,KAA+B,EAAQ;QAC5C,2BAAA,IAAI,EAAC,cAAYA,KAAK,CAAC;YAACA;SAAM;QAC9B,OAAO,IAAI;IACf;IAEAW,QAAuB;QACnB,OAAO,2BAAA,IAAI,EAAC,cAAYA,KAAK;IACjC;IAZAgB,YAAY,GAAG3B,KAA+B,CAAE;QAC5C,KAAK,IAHT,kCAAA;;mBAAuC,IAAII;;QAIvC,IAAI,CAACJ,KAAK,IAAIA;IAClB;AAUJ;IAGI,uCACA;AAFJ,MAAME,8BAA8BG,iCAAe;IAI/CL,MAAM,GAAGA,KAA+B,EAAQ;yCACvC,SAASA,MAAMO,GAAG,CAACC,yBAAW;QACnC,OAAO,IAAI;IACf;IAEAK,OAAO,GAAGA,MAAgC,EAAQ;yCACzC,UAAUA,OAAON,GAAG,CAACC,yBAAW;QACrC,OAAO,IAAI;IACf;IAEAG,QAAwB;QACpB,OAAO;YACHX,KAAK,6BAAE,IAAI,EAAC;YACZa,MAAM,6BAAE,IAAI,EAAC;QACjB;IACJ;;QAnBJ,gBACI,kCAAA;;mBAA0B,EAAE;YAC5B,kCAAA;;mBAA2B,EAAE;;;AAkBjC",
33
"names": [
44
"create",
55
"header",

‎crates/swc/tests/fixture/sourcemap/issue-3854/2-inline/output/index.ts

+1-1
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"jsc": {
3+
"parser": {
4+
"syntax": "ecmascript",
5+
"jsx": false
6+
},
7+
"loose": true,
8+
"minify": {
9+
"compress": false,
10+
"mangle": false
11+
}
12+
},
13+
"module": {
14+
"type": "es6"
15+
},
16+
"minify": false,
17+
"isModule": true,
18+
"env": {
19+
"targets": "node >= 8"
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Parent {
2+
constructor() {
3+
throw new Error('foo')
4+
}
5+
}
6+
7+
class Child extends Parent {
8+
handleScroll = () => { }
9+
}
10+
11+
new Child()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
$DIR/tests/stacktrace/issue-9742/input/index.js:3
2+
throw new Error('foo')
3+
^
4+
5+
6+
Error: foo
7+
at constructor ($DIR/tests/stacktrace/issue-9742/input/index.js:3:15)
8+
at Parent ($DIR/tests/stacktrace/issue-9742/input/index.js:7:1)
Has a conversation. Original line has a conversation.
9+
at Object.<anonymous> ($DIR/tests/stacktrace/issue-9742/input/index.js:11:1)

‎crates/swc_ecma_compat_es2015/src/classes/constructor.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
use std::mem;
22

3-
use swc_common::{util::take::Take, Spanned, SyntaxContext, DUMMY_SP};
3+
use swc_common::{util::take::Take, Span, Spanned, SyntaxContext, DUMMY_SP};
44
use swc_ecma_ast::*;
55
use swc_ecma_transforms_base::{helper, helper_expr};
66
use swc_ecma_transforms_classes::super_field::SuperFieldAccessFolder;
7-
use swc_ecma_utils::{default_constructor, private_ident, quote_ident, ExprFactory};
7+
use swc_ecma_utils::{default_constructor_with_span, private_ident, quote_ident, ExprFactory};
88
use swc_ecma_visit::{noop_visit_mut_type, VisitMut, VisitMutWith};
99
use swc_trace_macro::swc_trace;
1010
use tracing::debug;
1111

1212
use super::Config;
1313

1414
pub(super) fn fold_constructor(
15+
class_span: Span,
1516
constructor: Option<Constructor>,
1617
class_name: &Ident,
1718
class_super_name: &Option<Ident>,
1819
config: Config,
1920
) -> FnDecl {
2021
let is_derived = class_super_name.is_some();
21-
let mut constructor = constructor.unwrap_or_else(|| default_constructor(is_derived));
22+
let mut constructor =
23+
constructor.unwrap_or_else(|| default_constructor_with_span(is_derived, class_span));
2224

2325
// Black magic to detect injected constructor.
2426
let is_constructor_default = constructor.span.is_dummy();

‎crates/swc_ecma_compat_es2015/src/classes/mod.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,14 @@ impl Classes {
548548

549549
// constructor
550550
stmts.push(
551-
fold_constructor(constructor, &class_name, &super_class_ident, self.config).into(),
551+
fold_constructor(
552+
class.span,
553+
constructor,
554+
&class_name,
555+
&super_class_ident,
556+
self.config,
557+
)
558+
.into(),
552559
);
553560

554561
// convert class methods

‎crates/swc_ecma_compat_es2022/src/class_properties/mod.rs

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
use swc_common::{
2-
collections::AHashMap, errors::HANDLER, source_map::PURE_SP, util::take::Take, Mark, Spanned,
3-
SyntaxContext, DUMMY_SP,
2+
collections::AHashMap, errors::HANDLER, source_map::PURE_SP, util::take::Take, Mark, Span,
3+
Spanned, SyntaxContext, DUMMY_SP,
44
};
55
use swc_ecma_ast::*;
66
use swc_ecma_transforms_base::{helper, perf::Check};
77
use swc_ecma_transforms_classes::super_field::SuperFieldAccessFolder;
88
use swc_ecma_transforms_macros::fast_path;
99
use swc_ecma_utils::{
10-
alias_ident_for, alias_if_required, constructor::inject_after_super, default_constructor,
11-
is_literal, prepend_stmt, private_ident, quote_ident, replace_ident, ExprFactory,
12-
ModuleItemLike, StmtLike,
10+
alias_ident_for, alias_if_required, constructor::inject_after_super,
11+
default_constructor_with_span, is_literal, prepend_stmt, private_ident, quote_ident,
12+
replace_ident, ExprFactory, ModuleItemLike, StmtLike,
1313
};
1414
use swc_ecma_visit::{
1515
noop_visit_mut_type, noop_visit_type, visit_mut_pass, Visit, VisitMut, VisitMutWith, VisitWith,
@@ -938,7 +938,8 @@ impl ClassProperties {
938938
}
939939
}
940940

941-
let constructor = self.process_constructor(constructor, has_super, constructor_inits);
941+
let constructor =
942+
self.process_constructor(class.span, constructor, has_super, constructor_inits);
942943
if let Some(c) = constructor {
943944
members.push(ClassMember::Constructor(c));
944945
}
@@ -1015,6 +1016,7 @@ impl ClassProperties {
10151016
#[allow(clippy::vec_box)]
10161017
fn process_constructor(
10171018
&mut self,
1019+
class_span: Span,
10181020
constructor: Option<Constructor>,
10191021
has_super: bool,
10201022
constructor_exprs: MemberInitRecord,
@@ -1023,7 +1025,7 @@ impl ClassProperties {
10231025
if constructor_exprs.record.is_empty() {
10241026
None
10251027
} else {
1026-
Some(default_constructor(has_super))
1028+
Some(default_constructor_with_span(has_super, class_span))
10271029
}
10281030
});
10291031

‎crates/swc_ecma_compat_es2022/src/private_in_object.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ use swc_common::{
99
DUMMY_SP,
1010
};
1111
use swc_ecma_ast::*;
12-
use swc_ecma_utils::{default_constructor, prepend_stmt, private_ident, quote_ident, ExprFactory};
12+
use swc_ecma_utils::{
13+
default_constructor_with_span, prepend_stmt, private_ident, quote_ident, ExprFactory,
14+
};
1315
use swc_ecma_visit::{
1416
noop_visit_mut_type, noop_visit_type, visit_mut_pass, Visit, VisitMut, VisitMutWith, VisitWith,
1517
};
@@ -174,7 +176,9 @@ impl VisitMut for PrivateInObject {
174176
if !has_constructor {
175177
let has_super = n.super_class.is_some();
176178
n.body
177-
.push(ClassMember::Constructor(default_constructor(has_super)));
179+
.push(ClassMember::Constructor(default_constructor_with_span(
180+
has_super, n.span,
181+
)));
178182
}
179183

180184
for m in &mut n.body {

‎crates/swc_ecma_transforms_compat/src/class_fields_use_set.rs

+11-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
use std::mem;
22

3-
use swc_common::{util::take::Take, DUMMY_SP};
3+
use swc_common::{util::take::Take, Span, Spanned, DUMMY_SP};
44
use swc_ecma_ast::*;
55
use swc_ecma_utils::{
6-
constructor::inject_after_super, default_constructor, is_literal, is_simple_pure_expr,
7-
private_ident, prop_name_to_member_prop, ExprFactory, ModuleItemLike, StmtLike,
6+
constructor::inject_after_super, default_constructor_with_span, is_literal,
7+
is_simple_pure_expr, private_ident, prop_name_to_member_prop, ExprFactory, ModuleItemLike,
8+
StmtLike,
89
};
910
use swc_ecma_visit::{noop_visit_mut_type, visit_mut_pass, VisitMut, VisitMutWith};
1011

@@ -107,8 +108,8 @@ impl VisitMut for ClassFieldsUseSet {
107108
// visit inner classes first
108109
n.visit_mut_children_with(self);
109110

110-
let mut fields_handler = FieldsHandler {
111-
has_super: n.super_class.is_some(),
111+
let mut fields_handler: FieldsHandler = FieldsHandler {
112+
super_call_span: n.super_class.as_ref().map(|_| n.span),
112113
};
113114

114115
n.body.visit_mut_with(&mut fields_handler);
@@ -160,7 +161,7 @@ impl ClassFieldsUseSet {
160161

161162
#[derive(Debug)]
162163
struct FieldsHandler {
163-
has_super: bool,
164+
super_call_span: Option<Span>,
164165
}
165166

166167
impl VisitMut for FieldsHandler {
@@ -253,7 +254,10 @@ impl VisitMut for FieldsHandler {
253254
if let Some(c) = n.iter_mut().find_map(|m| m.as_mut_constructor()) {
254255
inject_after_super(c, constructor_inits.take());
255256
} else {
256-
let mut c = default_constructor(self.has_super);
257+
let mut c = default_constructor_with_span(
258+
self.super_call_span.is_some(),
259+
self.super_call_span.span(),
260+
);
257261
inject_after_super(&mut c, constructor_inits.take());
258262
n.push(c.into());
259263
}

‎crates/swc_ecma_transforms_proposal/src/decorator_impl.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use swc_common::{util::take::Take, Mark, Spanned, SyntaxContext, DUMMY_SP};
66
use swc_ecma_ast::*;
77
use swc_ecma_transforms_base::{helper, helper_expr};
88
use swc_ecma_utils::{
9-
alias_ident_for, constructor::inject_after_super, default_constructor,
9+
alias_ident_for, constructor::inject_after_super, default_constructor_with_span,
1010
is_maybe_branch_directive, private_ident, prop_name_to_expr_value, quote_ident, replace_ident,
1111
stack_size::maybe_grow_default, ExprFactory, IdentRenamer,
1212
};
@@ -330,7 +330,7 @@ impl DecoratorPass {
330330

331331
c.body.insert(
332332
insert_index,
333-
default_constructor(c.super_class.is_some()).into(),
333+
default_constructor_with_span(c.super_class.is_some(), c.span).into(),
334334
);
335335

336336
if let Some(ClassMember::Constructor(c)) = c.body.get_mut(insert_index) {

‎crates/swc_ecma_transforms_proposal/src/decorators/mod.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use swc_ecma_ast::{Pass, *};
77
use swc_ecma_transforms_base::helper;
88
use swc_ecma_transforms_classes::super_field::SuperFieldAccessFolder;
99
use swc_ecma_utils::{
10-
alias_ident_for, constructor::inject_after_super, default_constructor, prepend_stmt,
10+
alias_ident_for, constructor::inject_after_super, default_constructor_with_span, prepend_stmt,
1111
private_ident, prop_name_to_expr, prop_name_to_expr_value, quote_ident, quote_str, ExprFactory,
1212
};
1313
use swc_ecma_visit::{
@@ -316,7 +316,8 @@ impl Decorators {
316316
ClassMember::Constructor(c)
317317
}
318318
None => {
319-
let mut c = default_constructor(super_class_ident.is_some());
319+
let mut c =
320+
default_constructor_with_span(super_class_ident.is_some(), class.span);
320321

321322
c.body
322323
.as_mut()

‎crates/swc_ecma_utils/src/lib.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -2226,18 +2226,24 @@ pub fn prop_name_to_member_prop(prop_name: PropName) -> MemberProp {
22262226
}
22272227
}
22282228

2229+
#[deprecated(note = "Use default_constructor_with_span instead")]
22292230
pub fn default_constructor(has_super: bool) -> Constructor {
2230-
trace!(has_super = has_super, "Creating a default constructor");
2231+
default_constructor_with_span(has_super, DUMMY_SP)
2232+
}
22312233

2232-
let span = DUMMY_SP;
2234+
/// `super_call_span` should be the span of the class definition
2235+
/// Use value of [`Class::span`].
2236+
pub fn default_constructor_with_span(has_super: bool, super_call_span: Span) -> Constructor {
2237+
trace!(has_super = has_super, "Creating a default constructor");
2238+
let super_call_span = super_call_span.with_hi(super_call_span.lo);
22332239

22342240
Constructor {
22352241
span: DUMMY_SP,
22362242
key: PropName::Ident("constructor".into()),
22372243
is_optional: false,
22382244
params: if has_super {
22392245
vec![ParamOrTsParamProp::Param(Param {
2240-
span,
2246+
span: DUMMY_SP,
22412247
decorators: Vec::new(),
22422248
pat: Pat::Rest(RestPat {
22432249
span: DUMMY_SP,
@@ -2252,7 +2258,7 @@ pub fn default_constructor(has_super: bool) -> Constructor {
22522258
body: Some(BlockStmt {
22532259
stmts: if has_super {
22542260
vec![CallExpr {
2255-
span: DUMMY_SP,
2261+
span: super_call_span,
22562262
callee: Callee::Super(Super { span: DUMMY_SP }),
22572263
args: vec![ExprOrSpread {
22582264
spread: Some(DUMMY_SP),

0 commit comments

Comments
 (0)
Please sign in to comment.