@@ -196,6 +196,7 @@ import {
196196    JSDocTemplateTag,
197197    JSDocText,
198198    JSDocThisTag,
199+     JSDocThrowsTag,
199200    JSDocTypedefTag,
200201    JSDocTypeExpression,
201202    JSDocTypeLiteral,
@@ -1100,10 +1101,11 @@ const forEachChildTable: ForEachChildTable = {
11001101            visitNode(cbNode, node.typeExpression) ||
11011102            (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
11021103    },
1103-     [SyntaxKind.JSDocReturnTag]: forEachChildInJSDocReturnTag,
1104-     [SyntaxKind.JSDocTypeTag]: forEachChildInJSDocReturnTag,
1105-     [SyntaxKind.JSDocThisTag]: forEachChildInJSDocReturnTag,
1106-     [SyntaxKind.JSDocEnumTag]: forEachChildInJSDocReturnTag,
1104+     [SyntaxKind.JSDocReturnTag]: forEachChildInJSDocTypeLikeTag,
1105+     [SyntaxKind.JSDocTypeTag]: forEachChildInJSDocTypeLikeTag,
1106+     [SyntaxKind.JSDocThisTag]: forEachChildInJSDocTypeLikeTag,
1107+     [SyntaxKind.JSDocEnumTag]: forEachChildInJSDocTypeLikeTag,
1108+     [SyntaxKind.JSDocThrowsTag]: forEachChildInJSDocTypeLikeTag,
11071109    [SyntaxKind.JSDocSignature]: function forEachChildInJSDocSignature<T>(node: JSDocSignature, cbNode: (node: Node) => T | undefined, _cbNodes?: (nodes: NodeArray<Node>) => T | undefined): T | undefined {
11081110        return forEach(node.typeParameters, cbNode) ||
11091111            forEach(node.parameters, cbNode) ||
@@ -1197,7 +1199,7 @@ function forEachChildInJSDocParameterOrPropertyTag<T>(node: JSDocParameterTag |
11971199        (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
11981200}
11991201
1200- function forEachChildInJSDocReturnTag <T>(node: JSDocReturnTag | JSDocTypeTag | JSDocThisTag | JSDocEnumTag, cbNode: (node: Node) => T | undefined, cbNodes?: (nodes: NodeArray<Node>) => T | undefined): T | undefined {
1202+ function forEachChildInJSDocTypeLikeTag <T>(node: JSDocReturnTag | JSDocTypeTag | JSDocThisTag | JSDocEnumTag | JSDocThrowsTag , cbNode: (node: Node) => T | undefined, cbNodes?: (nodes: NodeArray<Node>) => T | undefined): T | undefined {
12011203    return visitNode(cbNode, node.tagName) ||
12021204        visitNode(cbNode, node.typeExpression) ||
12031205        (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
@@ -8785,6 +8787,10 @@ namespace Parser {
87858787                    case "see":
87868788                        tag = parseSeeTag(start, tagName, margin, indentText);
87878789                        break;
8790+                     case "exception":
8791+                     case "throws":
8792+                         tag = parseThrowsTag(start, tagName, margin, indentText);
8793+                         break;
87888794                    default:
87898795                        tag = parseUnknownTag(start, tagName, margin, indentText);
87908796                        break;
@@ -9090,6 +9096,12 @@ namespace Parser {
90909096                return finishNode(factory.createJSDocSeeTag(tagName, nameExpression, comments), start);
90919097            }
90929098
9099+             function parseThrowsTag(start: number, tagName: Identifier, indent: number, indentText: string): JSDocThrowsTag {
9100+                 const typeExpression = tryParseTypeExpression();
9101+                 const comment = parseTrailingTagComments(start, getNodePos(), indent, indentText);
9102+                 return finishNode(factory.createJSDocThrowsTag(tagName, typeExpression, comment), start);
9103+             }
9104+ 
90939105            function parseAuthorTag(start: number, tagName: Identifier, indent: number, indentText: string): JSDocAuthorTag {
90949106                const commentStart = getNodePos();
90959107                const textOnly = parseAuthorNameAndEmail();
0 commit comments