Skip to content

Commit fe838ba

Browse files
author
Yui T
committed
Parse ts-style property tag
1 parent 9c10246 commit fe838ba

File tree

2 files changed

+11
-24
lines changed

2 files changed

+11
-24
lines changed

src/compiler/parser.ts

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6508,7 +6508,7 @@ namespace ts {
65086508
case "arg":
65096509
case "argument":
65106510
case "param":
6511-
tag = parseParamTag(atToken, tagName);
6511+
tag = parseParameterOrPropertyTag(atToken, tagName, /*shouldParseParamTag*/ true);
65126512
break;
65136513
case "return":
65146514
case "returns":
@@ -6653,11 +6653,12 @@ namespace ts {
66536653
return { name, isBracketed };
66546654
}
66556655

6656-
function parseParamTag(atToken: AtToken, tagName: Identifier) {
6656+
function parseParameterOrPropertyTag(atToken: AtToken, tagName: Identifier, shouldParseParamTag: boolean): JSDocPropertyTag | JSDocParameterTag {
66576657
let typeExpression = tryParseTypeExpression();
66586658
skipWhitespace();
66596659

66606660
const { name, isBracketed } = parseBracketNameInPropertyAndParamTag();
6661+
skipWhitespace();
66616662

66626663
if (!name) {
66636664
parseErrorAtPosition(scanner.getStartPos(), 0, Diagnostics.Identifier_expected);
@@ -6676,7 +6677,9 @@ namespace ts {
66766677
typeExpression = tryParseTypeExpression();
66776678
}
66786679

6679-
const result = <JSDocParameterTag>createNode(SyntaxKind.JSDocParameterTag, atToken.pos);
6680+
const result = shouldParseParamTag ?
6681+
<JSDocParameterTag>createNode(SyntaxKind.JSDocParameterTag, atToken.pos) :
6682+
<JSDocPropertyTag>createNode(SyntaxKind.JSDocPropertyTag, atToken.pos);
66806683
result.atToken = atToken;
66816684
result.tagName = tagName;
66826685
result.preParameterName = preName;
@@ -6711,26 +6714,6 @@ namespace ts {
67116714
return finishNode(result);
67126715
}
67136716

6714-
function parsePropertyTag(atToken: AtToken, tagName: Identifier): JSDocPropertyTag {
6715-
const typeExpression = tryParseTypeExpression();
6716-
skipWhitespace();
6717-
const { name, isBracketed } = parseBracketNameInPropertyAndParamTag();
6718-
skipWhitespace();
6719-
6720-
if (!name) {
6721-
parseErrorAtPosition(scanner.getStartPos(), /*length*/ 0, Diagnostics.Identifier_expected);
6722-
return undefined;
6723-
}
6724-
6725-
const result = <JSDocPropertyTag>createNode(SyntaxKind.JSDocPropertyTag, atToken.pos);
6726-
result.atToken = atToken;
6727-
result.tagName = tagName;
6728-
result.name = name;
6729-
result.typeExpression = typeExpression;
6730-
result.isBracketed = isBracketed;
6731-
return finishNode(result);
6732-
}
6733-
67346717
function parseAugmentsTag(atToken: AtToken, tagName: Identifier): JSDocAugmentsTag {
67356718
const typeExpression = tryParseTypeExpression();
67366719

@@ -6867,7 +6850,7 @@ namespace ts {
68676850
return true;
68686851
case "prop":
68696852
case "property":
6870-
const propertyTag = parsePropertyTag(atToken, tagName);
6853+
const propertyTag = parseParameterOrPropertyTag(atToken, tagName, /*shouldParseParamTag*/ false) as JSDocPropertyTag;
68716854
if (propertyTag) {
68726855
if (!parentTag.jsDocPropertyTags) {
68736856
parentTag.jsDocPropertyTags = <NodeArray<JSDocPropertyTag>>[];

src/compiler/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2145,6 +2145,10 @@ namespace ts {
21452145
parent: JSDoc;
21462146
kind: SyntaxKind.JSDocPropertyTag;
21472147
name: Identifier;
2148+
/** the parameter name, if provided *before* the type (TypeScript-style) */
2149+
preParameterName?: Identifier;
2150+
/** the parameter name, if provided *after* the type (JSDoc-standard) */
2151+
postParameterName?: Identifier;
21482152
typeExpression: JSDocTypeExpression;
21492153
isBracketed: boolean;
21502154
}

0 commit comments

Comments
 (0)