@@ -36200,6 +36200,12 @@ namespace ts {
3620036200 checkSourceElement(node.typeExpression);
3620136201 }
3620236202
36203+ function checkJSDocLinkLikeTag(node: JSDocLink | JSDocLinkCode | JSDocLinkPlain) {
36204+ if (node.name) {
36205+ resolveJSDocMemberName(node.name, /*ignoreErrors*/ true);
36206+ }
36207+ }
36208+
3620336209 function checkJSDocParameterTag(node: JSDocParameterTag) {
3620436210 checkSourceElement(node.typeExpression);
3620536211 if (!getParameterSymbolFromJSDoc(node)) {
@@ -40347,9 +40353,15 @@ namespace ts {
4034740353 }
4034840354
4034940355 function checkSourceElementWorker(node: Node): void {
40350- if (isInJSFile(node)) {
40351- forEach((node as JSDocContainer).jsDoc, ({ tags }) => forEach(tags, checkSourceElement));
40352- }
40356+ forEach((node as JSDocContainer).jsDoc, ({ comment, tags }) => {
40357+ checkJSDocCommentWorker(comment);
40358+ forEach(tags, tag => {
40359+ checkJSDocCommentWorker(tag.comment);
40360+ if (isInJSFile(node)) {
40361+ checkSourceElement(tag);
40362+ }
40363+ });
40364+ });
4035340365
4035440366 const kind = node.kind;
4035540367 if (cancellationToken) {
@@ -40437,6 +40449,10 @@ namespace ts {
4043740449 return checkJSDocTemplateTag(node as JSDocTemplateTag);
4043840450 case SyntaxKind.JSDocTypeTag:
4043940451 return checkJSDocTypeTag(node as JSDocTypeTag);
40452+ case SyntaxKind.JSDocLink:
40453+ case SyntaxKind.JSDocLinkCode:
40454+ case SyntaxKind.JSDocLinkPlain:
40455+ return checkJSDocLinkLikeTag(node as JSDocLink | JSDocLinkCode | JSDocLinkPlain);
4044040456 case SyntaxKind.JSDocParameterTag:
4044140457 return checkJSDocParameterTag(node as JSDocParameterTag);
4044240458 case SyntaxKind.JSDocPropertyTag:
@@ -40532,6 +40548,16 @@ namespace ts {
4053240548 }
4053340549 }
4053440550
40551+ function checkJSDocCommentWorker(node: string | readonly JSDocComment[] | undefined) {
40552+ if (isArray(node)) {
40553+ forEach(node, tag => {
40554+ if (isJSDocLinkLike(tag)) {
40555+ checkSourceElement(tag);
40556+ }
40557+ });
40558+ }
40559+ }
40560+
4053540561 function checkJSDocTypeIsInJsFile(node: Node): void {
4053640562 if (!isInJSFile(node)) {
4053740563 grammarErrorOnNode(node, Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
@@ -41144,7 +41170,7 @@ namespace ts {
4114441170 if (!result && isJSDoc) {
4114541171 const container = findAncestor(name, or(isClassLike, isInterfaceDeclaration));
4114641172 if (container) {
41147- return resolveJSDocMemberName(name, getSymbolOfNode(container));
41173+ return resolveJSDocMemberName(name, /*ignoreErrors*/ false, getSymbolOfNode(container));
4114841174 }
4114941175 }
4115041176 return result;
@@ -41193,19 +41219,19 @@ namespace ts {
4119341219 *
4119441220 * For unqualified names, a container K may be provided as a second argument.
4119541221 */
41196- function resolveJSDocMemberName(name: EntityName | JSDocMemberName, container?: Symbol): Symbol | undefined {
41222+ function resolveJSDocMemberName(name: EntityName | JSDocMemberName, ignoreErrors?: boolean, container?: Symbol): Symbol | undefined {
4119741223 if (isEntityName(name)) {
4119841224 // resolve static values first
4119941225 const meaning = SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Value;
41200- let symbol = resolveEntityName(name, meaning, /* ignoreErrors*/ false , /*dontResolveAlias*/ true, getHostSignatureFromJSDoc(name));
41226+ let symbol = resolveEntityName(name, meaning, ignoreErrors, /*dontResolveAlias*/ true, getHostSignatureFromJSDoc(name));
4120141227 if (!symbol && isIdentifier(name) && container) {
4120241228 symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
4120341229 }
4120441230 if (symbol) {
4120541231 return symbol;
4120641232 }
4120741233 }
41208- const left = isIdentifier(name) ? container : resolveJSDocMemberName(name.left);
41234+ const left = isIdentifier(name) ? container : resolveJSDocMemberName(name.left, ignoreErrors, container );
4120941235 const right = isIdentifier(name) ? name.escapedText : name.right.escapedText;
4121041236 if (left) {
4121141237 const proto = left.flags & SymbolFlags.Value && getPropertyOfType(getTypeOfSymbol(left), "prototype" as __String);
0 commit comments