diff --git a/packages/react-docgen/src/utils/__tests__/findFunctionReturn-test.ts b/packages/react-docgen/src/utils/__tests__/findFunctionReturn-test.ts index 252542eb85c..36a55c1fac2 100644 --- a/packages/react-docgen/src/utils/__tests__/findFunctionReturn-test.ts +++ b/packages/react-docgen/src/utils/__tests__/findFunctionReturn-test.ts @@ -152,6 +152,27 @@ describe('findFunctionReturn', () => { expect(findFunctionReturn(def, predicate)).toBeUndefined(); }); + test('handles direct prop return', () => { + const def = parse.statement(` + function Foo ({ children }) { + return children; + } + `); + + expect(findFunctionReturn(def, predicate)).toBeDefined(); + }); + + test('handles null return', () => { + const def = parse.statement(` + function Foo (props) { + return null; + } + `); + + const received = findFunctionReturn(def, predicate); + expect(received).toBeDefined(); + }); + testReturnValues( 'does not see ifs as separate block', ` diff --git a/packages/react-docgen/src/utils/findFunctionReturn.ts b/packages/react-docgen/src/utils/findFunctionReturn.ts index 492ae08201c..ede82281876 100644 --- a/packages/react-docgen/src/utils/findFunctionReturn.ts +++ b/packages/react-docgen/src/utils/findFunctionReturn.ts @@ -19,7 +19,11 @@ const explodedVisitors = visitors.explode({ enter: function (path, state) { const argument = path.get('argument'); - if (argument.hasNode()) { + if (argument.node?.type === 'NullLiteral') { + // Handle null return value + state.resolvedReturnPath = path; + path.stop(); + } else if (argument.hasNode()) { const resolvedPath = resolvesToFinalValue( argument, state.predicate, @@ -90,6 +94,10 @@ function resolvesToFinalValue( } } + if (resolvedPath.isObjectProperty()) { + return resolvedPath as T; + } + return; }