From 0f02d3783c76d222b18a32cdd29d2d0eb7377779 Mon Sep 17 00:00:00 2001 From: Wenzhe Wang Date: Sun, 17 Sep 2023 22:11:25 +0800 Subject: [PATCH] fix(semantic): make ExportDeclaration span accurate (#928) --- crates/oxc_semantic/src/module_record/builder.rs | 5 +++-- crates/oxc_semantic/src/module_record/mod.rs | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/crates/oxc_semantic/src/module_record/builder.rs b/crates/oxc_semantic/src/module_record/builder.rs index 9a92ed3e5..a4c31b749 100644 --- a/crates/oxc_semantic/src/module_record/builder.rs +++ b/crates/oxc_semantic/src/module_record/builder.rs @@ -286,6 +286,7 @@ impl ModuleRecordBuilder { .map_or(ExportLocalName::Default(exported_name.span()), |ident| { ExportLocalName::Name(NameSpan::new(ident.name.clone(), ident.span)) }), + span: decl.declaration.span(), ..ExportEntry::default() }; self.add_export_entry(export_entry); @@ -314,7 +315,7 @@ impl ModuleRecordBuilder { let local_name = ExportLocalName::Name(NameSpan::new(ident.name.clone(), ident.span)); let export_entry = ExportEntry { - span: Span::default(), + span: decl.span(), module_request: module_request.clone(), import_name: ExportImportName::Null, export_name, @@ -347,7 +348,7 @@ impl ModuleRecordBuilder { )) }; let export_entry = ExportEntry { - span: Span::default(), + span: specifier.span, module_request: module_request.clone(), import_name, export_name, diff --git a/crates/oxc_semantic/src/module_record/mod.rs b/crates/oxc_semantic/src/module_record/mod.rs index 72067d9b3..006233272 100644 --- a/crates/oxc_semantic/src/module_record/mod.rs +++ b/crates/oxc_semantic/src/module_record/mod.rs @@ -122,6 +122,7 @@ mod module_record_tests { let export_entry = ExportEntry { export_name: ExportExportName::Name(NameSpan::new("x".into(), Span::new(9, 10))), local_name: ExportLocalName::Name(NameSpan::new("x".into(), Span::new(9, 10))), + span: Span::new(9, 10), ..ExportEntry::default() }; assert_eq!(module_record.local_export_entries.len(), 1); @@ -136,6 +137,7 @@ mod module_record_tests { let export_entry = ExportEntry { export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(14, 15))), local_name: ExportLocalName::Name(NameSpan::new("x".into(), Span::new(9, 10))), + span: Span::new(9, 15), ..ExportEntry::default() }; assert_eq!(module_record.local_export_entries.len(), 1); @@ -151,6 +153,7 @@ mod module_record_tests { module_request: Some(NameSpan::new("mod".into(), Span::new(18, 23))), export_name: ExportExportName::Name(NameSpan::new("x".into(), Span::new(9, 10))), import_name: ExportImportName::Name(NameSpan::new("x".into(), Span::new(9, 10))), + span: Span::new(9, 10), ..ExportEntry::default() }; assert_eq!(module_record.indirect_export_entries.len(), 1); @@ -166,6 +169,7 @@ mod module_record_tests { module_request: Some(NameSpan::new("mod".into(), Span::new(23, 28))), export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(14, 15))), import_name: ExportImportName::Name(NameSpan::new("x".into(), Span::new(9, 10))), + span: Span::new(9, 15), ..ExportEntry::default() }; assert_eq!(module_record.indirect_export_entries.len(), 1); @@ -179,6 +183,7 @@ mod module_record_tests { let export_entry = ExportEntry { export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(11, 12))), local_name: ExportLocalName::Name(NameSpan::new("v".into(), Span::new(11, 12))), + span: Span::new(7, 12), ..ExportEntry::default() }; assert_eq!(module_record.local_export_entries.len(), 1); @@ -192,6 +197,7 @@ mod module_record_tests { let export_entry = ExportEntry { export_name: ExportExportName::Default(Span::new(7, 14)), local_name: ExportLocalName::Name(NameSpan::new("f".into(), Span::new(24, 25))), + span: Span::new(15, 30), ..ExportEntry::default() }; assert_eq!(module_record.local_export_entries.len(), 1); @@ -205,6 +211,7 @@ mod module_record_tests { let export_entry = ExportEntry { export_name: ExportExportName::Default(Span::new(7, 14)), local_name: ExportLocalName::Default(Span::new(7, 14)), + span: Span::new(15, 28), ..ExportEntry::default() }; assert_eq!(module_record.local_export_entries.len(), 1); @@ -218,6 +225,7 @@ mod module_record_tests { let export_entry = ExportEntry { export_name: ExportExportName::Default(Span::new(7, 14)), local_name: ExportLocalName::Default(Span::new(7, 14)), + span: Span::new(15, 17), ..ExportEntry::default() }; assert_eq!(module_record.local_export_entries.len(), 1); @@ -230,6 +238,7 @@ mod module_record_tests { let export_entry = ExportEntry { export_name: ExportExportName::Name(NameSpan::new("default".into(), Span::new(9, 16))), local_name: ExportLocalName::Name(NameSpan::new("default".into(), Span::new(9, 16))), + span: Span::new(9, 16), ..ExportEntry::default() }; assert_eq!(module_record.local_export_entries.len(), 1);