Adding support for @implements. (#36292)

* Adding support for @implements.

* Fixed code review issues for @implements, added some more tests.

* Fixed declaration emit for @interface

* Improved getImplementsTypes to not cache the results since it is only used once.

* Removed unnecessary checks from getImplementsTypes
This commit is contained in:
Titian Cernicova-Dragomir
2020-02-27 19:27:37 +02:00
committed by GitHub
parent e3ec3d1942
commit f883bf3acb
40 changed files with 981 additions and 66 deletions

View File

@@ -479,6 +479,9 @@ namespace ts {
visitNode(cbNode, (<JSDocPropertyLikeTag>node).name));
case SyntaxKind.JSDocAuthorTag:
return visitNode(cbNode, (node as JSDocTag).tagName);
case SyntaxKind.JSDocImplementsTag:
return visitNode(cbNode, (node as JSDocTag).tagName) ||
visitNode(cbNode, (<JSDocImplementsTag>node).class);
case SyntaxKind.JSDocAugmentsTag:
return visitNode(cbNode, (node as JSDocTag).tagName) ||
visitNode(cbNode, (<JSDocAugmentsTag>node).class);
@@ -6999,6 +7002,9 @@ namespace ts {
case "author":
tag = parseAuthorTag(start, tagName, margin);
break;
case "implements":
tag = parseImplementsTag(start, tagName);
break;
case "augments":
case "extends":
tag = parseAugmentsTag(start, tagName);
@@ -7355,6 +7361,13 @@ namespace ts {
}
}
function parseImplementsTag(start: number, tagName: Identifier): JSDocImplementsTag {
const result = <JSDocImplementsTag>createNode(SyntaxKind.JSDocImplementsTag, start);
result.tagName = tagName;
result.class = parseExpressionWithTypeArgumentsForAugments();
return finishNode(result);
}
function parseAugmentsTag(start: number, tagName: Identifier): JSDocAugmentsTag {
const result = <JSDocAugmentsTag>createNode(SyntaxKind.JSDocAugmentsTag, start);
result.tagName = tagName;