Fix bug: Include comment for @param tag with nested tag (#23276)

* Fix bug: Include comment for @param tag with nested tag

* Add another comment to test
This commit is contained in:
Andy
2018-04-09 14:09:59 -07:00
committed by GitHub
parent 542184a05a
commit 71b39014eb
11 changed files with 121 additions and 19 deletions

View File

@@ -6361,8 +6361,8 @@ namespace ts {
case "arg":
case "argument":
case "param":
tag = parseParameterOrPropertyTag(atToken, tagName, PropertyLikeParse.Parameter);
break;
addTag(parseParameterOrPropertyTag(atToken, tagName, PropertyLikeParse.Parameter, indent));
return;
case "return":
case "returns":
tag = parseReturnTag(atToken, tagName);
@@ -6511,7 +6511,7 @@ namespace ts {
}
}
function parseParameterOrPropertyTag(atToken: AtToken, tagName: Identifier, target: PropertyLikeParse): JSDocParameterTag | JSDocPropertyTag {
function parseParameterOrPropertyTag(atToken: AtToken, tagName: Identifier, target: PropertyLikeParse, indent: number | undefined): JSDocParameterTag | JSDocPropertyTag {
let typeExpression = tryParseTypeExpression();
let isNameFirst = !typeExpression;
skipWhitespace();
@@ -6526,6 +6526,8 @@ namespace ts {
const result = target === PropertyLikeParse.Parameter ?
<JSDocParameterTag>createNode(SyntaxKind.JSDocParameterTag, atToken.pos) :
<JSDocPropertyTag>createNode(SyntaxKind.JSDocPropertyTag, atToken.pos);
let comment: string | undefined;
if (indent !== undefined) comment = parseTagComments(indent + scanner.getStartPos() - atToken.pos);
const nestedTypeLiteral = parseNestedTypeLiteral(typeExpression, name, target);
if (nestedTypeLiteral) {
typeExpression = nestedTypeLiteral;
@@ -6537,6 +6539,7 @@ namespace ts {
result.name = name;
result.isNameFirst = isNameFirst;
result.isBracketed = isBracketed;
result.comment = comment;
return finishNode(result);
}
@@ -6783,7 +6786,7 @@ namespace ts {
if (target !== t) {
return false;
}
const tag = parseParameterOrPropertyTag(atToken, tagName, target);
const tag = parseParameterOrPropertyTag(atToken, tagName, target, /*indent*/ undefined);
tag.comment = parseTagComments(tag.end - tag.pos);
return tag;
}

View File

@@ -305,6 +305,12 @@ namespace ts {
* @param x hi
< > still part of the previous comment
*/`);
parsesCorrectly("Nested @param tags",
`/**
* @param {object} o Doc doc
* @param {string} o.f Doc for f
*/`);
});
});
describe("getFirstToken", () => {