fix(semantic): make ExportDeclaration span accurate (#928)

This commit is contained in:
Wenzhe Wang 2023-09-17 22:11:25 +08:00 committed by GitHub
parent eec9fd433a
commit 0f02d3783c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 2 deletions

View file

@ -286,6 +286,7 @@ impl ModuleRecordBuilder {
.map_or(ExportLocalName::Default(exported_name.span()), |ident| { .map_or(ExportLocalName::Default(exported_name.span()), |ident| {
ExportLocalName::Name(NameSpan::new(ident.name.clone(), ident.span)) ExportLocalName::Name(NameSpan::new(ident.name.clone(), ident.span))
}), }),
span: decl.declaration.span(),
..ExportEntry::default() ..ExportEntry::default()
}; };
self.add_export_entry(export_entry); self.add_export_entry(export_entry);
@ -314,7 +315,7 @@ impl ModuleRecordBuilder {
let local_name = let local_name =
ExportLocalName::Name(NameSpan::new(ident.name.clone(), ident.span)); ExportLocalName::Name(NameSpan::new(ident.name.clone(), ident.span));
let export_entry = ExportEntry { let export_entry = ExportEntry {
span: Span::default(), span: decl.span(),
module_request: module_request.clone(), module_request: module_request.clone(),
import_name: ExportImportName::Null, import_name: ExportImportName::Null,
export_name, export_name,
@ -347,7 +348,7 @@ impl ModuleRecordBuilder {
)) ))
}; };
let export_entry = ExportEntry { let export_entry = ExportEntry {
span: Span::default(), span: specifier.span,
module_request: module_request.clone(), module_request: module_request.clone(),
import_name, import_name,
export_name, export_name,

View file

@ -122,6 +122,7 @@ mod module_record_tests {
let export_entry = ExportEntry { let export_entry = ExportEntry {
export_name: ExportExportName::Name(NameSpan::new("x".into(), Span::new(9, 10))), export_name: ExportExportName::Name(NameSpan::new("x".into(), Span::new(9, 10))),
local_name: ExportLocalName::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() ..ExportEntry::default()
}; };
assert_eq!(module_record.local_export_entries.len(), 1); assert_eq!(module_record.local_export_entries.len(), 1);
@ -136,6 +137,7 @@ mod module_record_tests {
let export_entry = ExportEntry { let export_entry = ExportEntry {
export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(14, 15))), export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(14, 15))),
local_name: ExportLocalName::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, 15),
..ExportEntry::default() ..ExportEntry::default()
}; };
assert_eq!(module_record.local_export_entries.len(), 1); 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))), module_request: Some(NameSpan::new("mod".into(), Span::new(18, 23))),
export_name: ExportExportName::Name(NameSpan::new("x".into(), Span::new(9, 10))), export_name: ExportExportName::Name(NameSpan::new("x".into(), Span::new(9, 10))),
import_name: ExportImportName::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() ..ExportEntry::default()
}; };
assert_eq!(module_record.indirect_export_entries.len(), 1); 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))), module_request: Some(NameSpan::new("mod".into(), Span::new(23, 28))),
export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(14, 15))), export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(14, 15))),
import_name: ExportImportName::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, 15),
..ExportEntry::default() ..ExportEntry::default()
}; };
assert_eq!(module_record.indirect_export_entries.len(), 1); assert_eq!(module_record.indirect_export_entries.len(), 1);
@ -179,6 +183,7 @@ mod module_record_tests {
let export_entry = ExportEntry { let export_entry = ExportEntry {
export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(11, 12))), export_name: ExportExportName::Name(NameSpan::new("v".into(), Span::new(11, 12))),
local_name: ExportLocalName::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() ..ExportEntry::default()
}; };
assert_eq!(module_record.local_export_entries.len(), 1); assert_eq!(module_record.local_export_entries.len(), 1);
@ -192,6 +197,7 @@ mod module_record_tests {
let export_entry = ExportEntry { let export_entry = ExportEntry {
export_name: ExportExportName::Default(Span::new(7, 14)), export_name: ExportExportName::Default(Span::new(7, 14)),
local_name: ExportLocalName::Name(NameSpan::new("f".into(), Span::new(24, 25))), local_name: ExportLocalName::Name(NameSpan::new("f".into(), Span::new(24, 25))),
span: Span::new(15, 30),
..ExportEntry::default() ..ExportEntry::default()
}; };
assert_eq!(module_record.local_export_entries.len(), 1); assert_eq!(module_record.local_export_entries.len(), 1);
@ -205,6 +211,7 @@ mod module_record_tests {
let export_entry = ExportEntry { let export_entry = ExportEntry {
export_name: ExportExportName::Default(Span::new(7, 14)), export_name: ExportExportName::Default(Span::new(7, 14)),
local_name: ExportLocalName::Default(Span::new(7, 14)), local_name: ExportLocalName::Default(Span::new(7, 14)),
span: Span::new(15, 28),
..ExportEntry::default() ..ExportEntry::default()
}; };
assert_eq!(module_record.local_export_entries.len(), 1); assert_eq!(module_record.local_export_entries.len(), 1);
@ -218,6 +225,7 @@ mod module_record_tests {
let export_entry = ExportEntry { let export_entry = ExportEntry {
export_name: ExportExportName::Default(Span::new(7, 14)), export_name: ExportExportName::Default(Span::new(7, 14)),
local_name: ExportLocalName::Default(Span::new(7, 14)), local_name: ExportLocalName::Default(Span::new(7, 14)),
span: Span::new(15, 17),
..ExportEntry::default() ..ExportEntry::default()
}; };
assert_eq!(module_record.local_export_entries.len(), 1); assert_eq!(module_record.local_export_entries.len(), 1);
@ -230,6 +238,7 @@ mod module_record_tests {
let export_entry = ExportEntry { let export_entry = ExportEntry {
export_name: ExportExportName::Name(NameSpan::new("default".into(), Span::new(9, 16))), export_name: ExportExportName::Name(NameSpan::new("default".into(), Span::new(9, 16))),
local_name: ExportLocalName::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() ..ExportEntry::default()
}; };
assert_eq!(module_record.local_export_entries.len(), 1); assert_eq!(module_record.local_export_entries.len(), 1);