diff --git a/crates/oxc_isolated_declarations/src/return_type.rs b/crates/oxc_isolated_declarations/src/return_type.rs index 9f9e4ae6ab496..c953cdc5d16e4 100644 --- a/crates/oxc_isolated_declarations/src/return_type.rs +++ b/crates/oxc_isolated_declarations/src/return_type.rs @@ -1,7 +1,7 @@ use oxc_ast::{ ast::{ - BindingIdentifier, Expression, Function, FunctionBody, ReturnStatement, TSType, - TSTypeAliasDeclaration, TSTypeName, TSTypeQueryExprName, + ArrowFunctionExpression, BindingIdentifier, Expression, Function, FunctionBody, + ReturnStatement, TSType, TSTypeAliasDeclaration, TSTypeName, TSTypeQueryExprName, }, AstBuilder, Visit, }; @@ -138,6 +138,10 @@ impl<'a> Visit<'a> for FunctionReturnType<'a> { // We don't care about nested functions } + fn visit_arrow_expression(&mut self, _expr: &ArrowFunctionExpression<'a>) { + // We don't care about nested functions + } + fn visit_return_statement(&mut self, stmt: &ReturnStatement<'a>) { self.return_statement_count += 1; if self.return_statement_count > 1 { diff --git a/crates/oxc_isolated_declarations/tests/fixtures/infer-return-type.ts b/crates/oxc_isolated_declarations/tests/fixtures/infer-return-type.ts index 40d744d2a50a3..dde9569218367 100644 --- a/crates/oxc_isolated_declarations/tests/fixtures/infer-return-type.ts +++ b/crates/oxc_isolated_declarations/tests/fixtures/infer-return-type.ts @@ -4,7 +4,7 @@ function foo() { // inferred type is number function bar() { - if (true) { + if (a) { return; } return 1; @@ -12,9 +12,16 @@ function bar() { // inferred type is number | undefined function baz() { - if (true) { + if (a) { return null; } return 1; } -// We can't infer return type if there are multiple return statements with different types \ No newline at end of file +// We can't infer return type if there are multiple return statements with different types + +function qux() { + const a = (() => { + return 1; + })(); + return `Hello, world!`; +} \ No newline at end of file diff --git a/crates/oxc_isolated_declarations/tests/snapshots/infer-return-type.snap b/crates/oxc_isolated_declarations/tests/snapshots/infer-return-type.snap index 470273d9f8559..f577f295196e8 100644 --- a/crates/oxc_isolated_declarations/tests/snapshots/infer-return-type.snap +++ b/crates/oxc_isolated_declarations/tests/snapshots/infer-return-type.snap @@ -7,6 +7,7 @@ input_file: crates/oxc_isolated_declarations/tests/fixtures/infer-return-type.ts declare function foo(): number; declare function bar(): ((number) | (undefined)); declare function baz(); +declare function qux(): string; ==================== Errors ==================== @@ -17,5 +18,5 @@ declare function baz(); 13 | 14 | function baz() { : ^^^ - 15 | if (true) { + 15 | if (a) { `----