Skip to content

Commit d29316a

Browse files
committed
fix(isolated-declarations): transform incorrectly when there are multiple functions with the same name (#3753)
1 parent e95d8e3 commit d29316a

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

crates/oxc_isolated_declarations/src/lib.rs

+11-10
Original file line numberDiff line numberDiff line change
@@ -313,14 +313,15 @@ impl<'a> IsolatedDeclarations<'a> {
313313
)
314314
})
315315
.name;
316-
if last_function_name.as_ref().is_some_and(|last_name| last_name == name)
317-
&& func.body.is_some()
318-
{
319-
None
316+
317+
if func.body.is_some() {
318+
if last_function_name.as_ref().is_some_and(|last_name| last_name == name) {
319+
return None;
320+
}
320321
} else {
321322
last_function_name = Some(name.clone());
322-
Some(stmt)
323323
}
324+
Some(stmt)
324325
}
325326
Statement::ExportNamedDeclaration(ref decl) => {
326327
if let Some(Declaration::FunctionDeclaration(ref func)) = decl.declaration {
@@ -333,14 +334,14 @@ impl<'a> IsolatedDeclarations<'a> {
333334
)
334335
})
335336
.name;
336-
if last_function_name.as_ref().is_some_and(|last_name| last_name == name)
337-
&& func.body.is_some()
338-
{
339-
None
337+
if func.body.is_some() {
338+
if last_function_name.as_ref().is_some_and(|last_name| last_name == name) {
339+
return None;
340+
}
340341
} else {
341342
last_function_name = Some(name.clone());
342-
Some(stmt)
343343
}
344+
Some(stmt)
344345
} else {
345346
Some(stmt)
346347
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
function a(a: number): number;
2+
function a(a: string): string;
3+
function a(a: any): any {}
4+
5+
6+
function b(a: number): number {};
7+
function b(a: string): string {};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
source: crates/oxc_isolated_declarations/tests/mod.rs
3+
input_file: crates/oxc_isolated_declarations/tests/fixtures/function-overloads.ts
4+
---
5+
==================== .D.TS ====================
6+
7+
declare function a(a: number): number;
8+
declare function a(a: string): string;
9+
declare function b(a: number): number;
10+
declare function b(a: string): string;

0 commit comments

Comments
 (0)