diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts
index 6f042627c6b..13f16f3848a 100644
--- a/src/compiler/parser.ts
+++ b/src/compiler/parser.ts
@@ -440,7 +440,26 @@ namespace ts {
/* @internal */
export function parseIsolatedJSDocComment(content: string, start?: number, length?: number) {
- return Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length);
+ const result = Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length);
+ if (result.jsDocComment) {
+ // because the jsDocComment was parsed out of the source file, it might
+ // not be covered by the fixupParentReferences.
+ let parentNode: Node = result.jsDocComment;
+ forEachChild(result.jsDocComment, visitNode);
+
+ function visitNode(n: Node): void {
+ if (n.parent !== parentNode) {
+ n.parent = parentNode;
+
+ const saveParent = parentNode;
+ parentNode = n;
+ forEachChild(n, visitNode);
+ parentNode = saveParent;
+ }
+ }
+ }
+
+ return result;
}
/* @internal */
diff --git a/tests/cases/fourslash/syntacticClassificationForJSDocTemplateTag.ts b/tests/cases/fourslash/syntacticClassificationForJSDocTemplateTag.ts
new file mode 100644
index 00000000000..c3368207d2c
--- /dev/null
+++ b/tests/cases/fourslash/syntacticClassificationForJSDocTemplateTag.ts
@@ -0,0 +1,22 @@
+///
+
+/////** @template T */
+////function ident: T {
+////}
+
+var c = classification;
+verify.syntacticClassificationsAre(
+ c.comment("/** "),
+ c.punctuation("@"),
+ c.docCommentTagName("template"),
+ c.typeParameterName("T"),
+ c.comment(" */"),
+ c.keyword("function"),
+ c.identifier("ident"),
+ c.punctuation("<"),
+ c.typeParameterName("T"),
+ c.punctuation(">"),
+ c.punctuation(":"),
+ c.identifier("T"),
+ c.punctuation("{"),
+ c.punctuation("}"));