From 41c80e8551294914681b060caded03cfe563c6b6 Mon Sep 17 00:00:00 2001 From: Jarda Snajdr Date: Thu, 25 Apr 2024 18:47:54 +0200 Subject: [PATCH] docgen: fix qualified types with type parameters (#61097) Co-authored-by: jsnajdr Co-authored-by: ellatrix Co-authored-by: Mamaduka Co-authored-by: tyxla --- docs/reference-guides/data/data-core.md | 6 +++--- packages/core-data/README.md | 6 +++--- packages/docgen/lib/get-type-annotation.js | 22 ++++++++++++--------- packages/docgen/test/get-type-annotation.js | 20 +++++++++++++++++++ 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/docs/reference-guides/data/data-core.md b/docs/reference-guides/data/data-core.md index e740998a23623..88db705f23f12 100644 --- a/docs/reference-guides/data/data-core.md +++ b/docs/reference-guides/data/data-core.md @@ -150,7 +150,7 @@ _Parameters_ _Returns_ -- `undefined< 'edit' >`: Current user object. +- `ET.User< 'edit' >`: Current user object. ### getDefaultTemplateId @@ -178,7 +178,7 @@ _Parameters_ _Returns_ -- `undefined< EntityRecord > | false`: The entity record, merged with its edits. +- `ET.Updatable< EntityRecord > | false`: The entity record, merged with its edits. ### getEmbedPreview @@ -504,7 +504,7 @@ _Parameters_ _Returns_ -- `undefined< 'edit' >[]`: Users list. +- `ET.User< 'edit' >[]`: Users list. ### hasEditsForEntityRecord diff --git a/packages/core-data/README.md b/packages/core-data/README.md index 444bce35ee521..20ed0d4c660e2 100644 --- a/packages/core-data/README.md +++ b/packages/core-data/README.md @@ -471,7 +471,7 @@ _Parameters_ _Returns_ -- `undefined< 'edit' >`: Current user object. +- `ET.User< 'edit' >`: Current user object. ### getDefaultTemplateId @@ -499,7 +499,7 @@ _Parameters_ _Returns_ -- `undefined< EntityRecord > | false`: The entity record, merged with its edits. +- `ET.Updatable< EntityRecord > | false`: The entity record, merged with its edits. ### getEmbedPreview @@ -825,7 +825,7 @@ _Parameters_ _Returns_ -- `undefined< 'edit' >[]`: Users list. +- `ET.User< 'edit' >[]`: Users list. ### hasEditsForEntityRecord diff --git a/packages/docgen/lib/get-type-annotation.js b/packages/docgen/lib/get-type-annotation.js index b0a920cefce03..ea854e13984fb 100644 --- a/packages/docgen/lib/get-type-annotation.js +++ b/packages/docgen/lib/get-type-annotation.js @@ -237,16 +237,20 @@ function getMappedTypeAnnotation( typeAnnotation ) { * @param {babelTypes.TSTypeReference} typeAnnotation */ function getTypeReferenceTypeAnnotation( typeAnnotation ) { - if ( ! typeAnnotation.typeParameters ) { - if ( babelTypes.isTSQualifiedName( typeAnnotation.typeName ) ) { - return unifyQualifiedName( typeAnnotation.typeName ); - } - return typeAnnotation.typeName.name; + let typeName; + if ( babelTypes.isTSQualifiedName( typeAnnotation.typeName ) ) { + typeName = unifyQualifiedName( typeAnnotation.typeName ); + } else { + typeName = typeAnnotation.typeName.name; } - const typeParams = typeAnnotation.typeParameters.params - .map( getTypeAnnotation ) - .join( ', ' ); - return `${ typeAnnotation.typeName.name }< ${ typeParams } >`; + + if ( typeAnnotation.typeParameters ) { + const typeParams = typeAnnotation.typeParameters.params + .map( getTypeAnnotation ) + .join( ', ' ); + typeName = `${ typeName }< ${ typeParams } >`; + } + return typeName; } /** diff --git a/packages/docgen/test/get-type-annotation.js b/packages/docgen/test/get-type-annotation.js index fdf114dfd1f67..e9fc493909ceb 100644 --- a/packages/docgen/test/get-type-annotation.js +++ b/packages/docgen/test/get-type-annotation.js @@ -100,6 +100,26 @@ describe( 'Type annotations', () => { } ); } ); + describe( 'qualified types', () => { + const node = parse( ` + function fn( foo: My.Foo< string >, bar: My.Bar ) { + return 0; + } + ` ); + + it( 'should get the qualified param type with type parameters', () => { + expect( + getTypeAnnotation( { tag: 'param', name: 'foo' }, node, 0 ) + ).toBe( 'My.Foo< string >' ); + } ); + + it( 'should get the qualified param type without type parameters', () => { + expect( + getTypeAnnotation( { tag: 'param', name: 'bar' }, node, 1 ) + ).toBe( 'My.Bar' ); + } ); + } ); + describe( 'literal values', () => { it.each( [ "'a-string-literal'", '1000n', 'true', '1000' ] )( 'should handle %s',