From 5f1a7d8ad8c70905ba22b0351a73d1432e1dfce3 Mon Sep 17 00:00:00 2001 From: Gerrit Birkeland Date: Sat, 30 Jul 2022 07:04:23 -0600 Subject: [PATCH] Fix JSDoc property comments Resolves #2020 --- CHANGELOG.md | 5 +++++ src/lib/converter/comments/index.ts | 22 +++++++++++++++++++++- src/test/converter/js/specs.json | 24 ++++++++++++++++++++++++ src/test/converter2/issues/gh2020.js | 7 +++++++ src/test/issueTests.ts | 17 +++++++++++++++++ 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/test/converter2/issues/gh2020.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 5365bd3cd..a8a6149eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Unreleased +### Bug Fixes + +- Fixed schema URL for TSDoc preventing the use of `typedoc/tsdoc.json` in TSDoc extends, #2016. +- Fixed missing JSDoc style `@typedef` comments for properties, #2020. + ## v0.23.9 (2022-07-24) ### Bug Fixes diff --git a/src/lib/converter/comments/index.ts b/src/lib/converter/comments/index.ts index 20b6dd64c..af54e4431 100644 --- a/src/lib/converter/comments/index.ts +++ b/src/lib/converter/comments/index.ts @@ -13,6 +13,14 @@ export interface CommentParserConfig { modifierTags: Set; } +const jsDocCommentKinds = [ + ts.SyntaxKind.JSDocPropertyTag, + ts.SyntaxKind.JSDocCallbackTag, + ts.SyntaxKind.JSDocTypedefTag, + ts.SyntaxKind.JSDocTemplateTag, + ts.SyntaxKind.JSDocEnumTag, +]; + const commentCache = new WeakMap>(); function getCommentWithCache( @@ -95,6 +103,18 @@ export function getComment( logger: Logger, commentStyle: CommentStyle ): Comment | undefined { + if ( + symbol + .getDeclarations() + ?.every((d) => jsDocCommentKinds.includes(d.kind)) + ) { + return getJsDocComment( + symbol.declarations![0] as ts.JSDocPropertyLikeTag, + config, + logger + ); + } + return getCommentImpl( discoverComment(symbol, kind, logger, commentStyle), config, @@ -191,6 +211,6 @@ export function getJsDocComment( declaration ); } else { - return new Comment(tag.content.slice()); + return new Comment(Comment.cloneDisplayParts(tag.content)); } } diff --git a/src/test/converter/js/specs.json b/src/test/converter/js/specs.json index 3f1e08a45..0de1c09a2 100644 --- a/src/test/converter/js/specs.json +++ b/src/test/converter/js/specs.json @@ -201,6 +201,14 @@ "kind": 1024, "kindString": "Property", "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "can also use prop tag" + } + ] + }, "sources": [ { "fileName": "index.js", @@ -220,6 +228,14 @@ "kind": 1024, "kindString": "Property", "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "docs for property" + } + ] + }, "sources": [ { "fileName": "index.js", @@ -265,6 +281,14 @@ "kind": 1024, "kindString": "Property", "flags": {}, + "comment": { + "summary": [ + { + "kind": "text", + "text": "docs for property\nmore docs for property" + } + ] + }, "sources": [ { "fileName": "index.js", diff --git a/src/test/converter2/issues/gh2020.js b/src/test/converter2/issues/gh2020.js new file mode 100644 index 000000000..10e862b83 --- /dev/null +++ b/src/test/converter2/issues/gh2020.js @@ -0,0 +1,7 @@ +// @ts-check + +/** + * @typedef {Object} Options Desc + * @property {string} url - Desc2 + * @property {string} [apiKey] - Desc3 + */ diff --git a/src/test/issueTests.ts b/src/test/issueTests.ts index 3198ab47b..0e893f02c 100644 --- a/src/test/issueTests.ts +++ b/src/test/issueTests.ts @@ -678,4 +678,21 @@ export const issueTests: { equal(model.getAlias(), "model"); equal(Model.getAlias(), "Model-1"); }, + + gh2020(project) { + const opt = query(project, "Options"); + equal(Comment.combineDisplayParts(opt.comment?.summary), "Desc"); + equal( + Comment.combineDisplayParts( + opt.getChildByName("url")?.comment?.summary + ), + "Desc2" + ); + equal( + Comment.combineDisplayParts( + opt.getChildByName("apiKey")?.comment?.summary + ), + "Desc3" + ); + }, };