Skip to content

Commit d476660

Browse files
committed
refactor(syntax): remove ModuleRecord::exported_bindings_duplicated because it is a syntax error (#7577)
1 parent 17663f5 commit d476660

5 files changed

Lines changed: 12 additions & 43 deletions

File tree

crates/oxc_linter/src/module_record.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,6 @@ pub struct ModuleRecord {
7979
/// Local exported bindings
8080
pub exported_bindings: FxHashMap<CompactStr, Span>,
8181

82-
/// Local duplicated exported bindings, for diagnostics
83-
pub exported_bindings_duplicated: Vec<NameSpan>,
84-
8582
/// Reexported bindings from `export * from 'specifier'`
8683
/// Keyed by resolved path
8784
pub exported_bindings_from_star_export: FxDashMap<PathBuf, Vec<CompactStr>>,
@@ -111,7 +108,6 @@ impl fmt::Debug for ModuleRecord {
111108
.field("indirect_export_entries", &self.indirect_export_entries)
112109
.field("star_export_entries", &self.star_export_entries)
113110
.field("exported_bindings", &self.exported_bindings)
114-
.field("exported_bindings_duplicated", &self.exported_bindings_duplicated)
115111
.field("exported_bindings_from_star_export", &self.exported_bindings_from_star_export)
116112
.field("export_default", &self.export_default)
117113
.finish()
@@ -468,11 +464,6 @@ impl ModuleRecord {
468464
.iter()
469465
.map(|(name, span)| (CompactStr::from(name.as_str()), *span))
470466
.collect(),
471-
exported_bindings_duplicated: other
472-
.exported_bindings_duplicated
473-
.iter()
474-
.map(NameSpan::from)
475-
.collect(),
476467
export_default: other.export_default,
477468
..ModuleRecord::default()
478469
}

crates/oxc_linter/src/rules/import/export.rs

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,6 @@ impl Rule for Export {
9292
})
9393
.collect::<Vec<_>>();
9494

95-
for name_span in &module_record.exported_bindings_duplicated {
96-
if name == name_span.name() {
97-
spans.push(name_span.span());
98-
}
99-
}
100-
10195
if !spans.is_empty() {
10296
spans.push(*span);
10397
let labels = spans.into_iter().map(LabeledSpan::underline).collect::<Vec<_>>();
@@ -344,16 +338,6 @@ fn test() {
344338
// export const Foo = 'bar';
345339
// export namespace Foo { }
346340
// "),
347-
(r#"
348-
// declare module "a" {
349-
// const Foo = 1;
350-
// export {Foo as default};
351-
// }
352-
const Bar = 2;
353-
export {Bar as default};
354-
const Baz = 3;
355-
export {Baz as default};
356-
"#),
357341
];
358342

359343
Tester::new(Export::NAME, Export::CATEGORY, pass, fail)
@@ -364,7 +348,14 @@ fn test() {
364348

365349
{
366350
let pass = vec!["export * from './module'"];
367-
let fail = vec![];
351+
let fail = vec![
352+
("
353+
const Bar = 2;
354+
export {Bar as default};
355+
const Baz = 3;
356+
export {Baz as default};
357+
"),
358+
];
368359
Tester::new(Export::NAME, Export::CATEGORY, pass, fail)
369360
.with_import_plugin(true)
370361
.change_rule_path("export-star-4/index.js")

crates/oxc_linter/src/snapshots/import_export.snap

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,3 @@ snapshot_kind: text
9797
· ╰── It can not be redeclared here
9898
4export namespace Foo { }
9999
╰────
100-
101-
eslint-plugin-import(export): Multiple exports of name 'default'.
102-
╭─[index.ts:7:32]
103-
6const Bar = 2;
104-
7export {Bar as default};
105-
· ───────
106-
8const Baz = 3;
107-
9export {Baz as default};
108-
· ───────
109-
10
110-
╰────

crates/oxc_parser/src/module_record.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub struct ModuleRecordBuilder<'a> {
1212
module_record: ModuleRecord<'a>,
1313
export_entries: Vec<ExportEntry<'a>>,
1414
export_default_duplicated: Vec<Span>,
15+
exported_bindings_duplicated: Vec<NameSpan<'a>>,
1516
}
1617

1718
impl<'a> ModuleRecordBuilder<'a> {
@@ -21,6 +22,7 @@ impl<'a> ModuleRecordBuilder<'a> {
2122
module_record: ModuleRecord::new(allocator),
2223
export_entries: vec![],
2324
export_default_duplicated: vec![],
25+
exported_bindings_duplicated: vec![],
2426
}
2527
}
2628

@@ -37,7 +39,7 @@ impl<'a> ModuleRecordBuilder<'a> {
3739
let module_record = &self.module_record;
3840

3941
// It is a Syntax Error if the ExportedNames of ModuleItemList contains any duplicate entries.
40-
for name_span in &module_record.exported_bindings_duplicated {
42+
for name_span in &self.exported_bindings_duplicated {
4143
let old_span = module_record.exported_bindings[&name_span.name];
4244
errors.push(diagnostics::duplicate_export(&name_span.name, name_span.span, old_span));
4345
}
@@ -88,7 +90,7 @@ impl<'a> ModuleRecordBuilder<'a> {
8890

8991
fn add_export_binding(&mut self, name: Atom<'a>, span: Span) {
9092
if let Some(old_node) = self.module_record.exported_bindings.insert(name.clone(), span) {
91-
self.module_record.exported_bindings_duplicated.push(NameSpan::new(name, old_node));
93+
self.exported_bindings_duplicated.push(NameSpan::new(name, old_node));
9294
}
9395
}
9496

crates/oxc_syntax/src/module_record.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@ pub struct ModuleRecord<'a> {
5656
/// Local exported bindings
5757
pub exported_bindings: FxHashMap<Atom<'a>, Span>,
5858

59-
/// Local duplicated exported bindings, for diagnostics
60-
pub exported_bindings_duplicated: Vec<'a, NameSpan<'a>>,
61-
6259
/// `export default name`
6360
/// ^^^^^^^ span
6461
pub export_default: Option<Span>,
@@ -75,7 +72,6 @@ impl<'a> ModuleRecord<'a> {
7572
indirect_export_entries: Vec::new_in(allocator),
7673
star_export_entries: Vec::new_in(allocator),
7774
exported_bindings: FxHashMap::default(),
78-
exported_bindings_duplicated: Vec::new_in(allocator),
7975
export_default: None,
8076
}
8177
}

0 commit comments

Comments
 (0)