From 466557cafb56b288f02f306660fb516da28ed6c5 Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 18 Jan 2018 09:45:29 -0800 Subject: [PATCH] Support parsing `@template {T}` in addition to `@template T` (#21270) --- src/compiler/parser.ts | 15 ++++++++++++--- .../reference/quickInfoJsDocTags.baseline | 6 +++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e3677014996..407da15b59c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6830,7 +6830,7 @@ namespace ts { } function parseTemplateTag(atToken: AtToken, tagName: Identifier): JSDocTemplateTag | undefined { - if (forEach(tags, t => t.kind === SyntaxKind.JSDocTemplateTag)) { + if (some(tags, isJSDocTemplateTag)) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, Diagnostics._0_tag_already_specified, tagName.escapedText); } @@ -6839,14 +6839,14 @@ namespace ts { const typeParametersPos = getNodePos(); while (true) { - const name = parseJSDocIdentifierName(); + const typeParameter = createNode(SyntaxKind.TypeParameter); + const name = parseJSDocIdentifierNameWithOptionalBraces(); skipWhitespace(); if (!name) { parseErrorAtPosition(scanner.getStartPos(), 0, Diagnostics.Identifier_expected); return undefined; } - const typeParameter = createNode(SyntaxKind.TypeParameter, name.pos); typeParameter.name = name; finishNode(typeParameter); @@ -6869,6 +6869,15 @@ namespace ts { return result; } + function parseJSDocIdentifierNameWithOptionalBraces(): Identifier | undefined { + const parsedBrace = parseOptional(SyntaxKind.OpenBraceToken); + const res = parseJSDocIdentifierName(); + if (parsedBrace) { + parseExpected(SyntaxKind.CloseBraceToken); + } + return res; + } + function nextJSDocToken(): JsDocSyntaxKind { return currentToken = scanner.scanJSDocToken(); } diff --git a/tests/baselines/reference/quickInfoJsDocTags.baseline b/tests/baselines/reference/quickInfoJsDocTags.baseline index 56f190b4446..6019419e489 100644 --- a/tests/baselines/reference/quickInfoJsDocTags.baseline +++ b/tests/baselines/reference/quickInfoJsDocTags.baseline @@ -63,7 +63,7 @@ ], "documentation": [ { - "text": "DocT} A template", + "text": "Doc", "kind": "text" } ], @@ -76,6 +76,10 @@ "name": "augments", "text": "C Augments it" }, + { + "name": "template", + "text": "{T} A template" + }, { "name": "type", "text": "{number | string} A type"