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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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", () => {

View File

@ -0,0 +1,93 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 66,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 6,
"end": 63,
"atToken": {
"kind": "AtToken",
"pos": 6,
"end": 7
},
"tagName": {
"kind": "Identifier",
"pos": 7,
"end": 12,
"escapedText": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 34,
"end": 63,
"type": {
"kind": "JSDocTypeLiteral",
"pos": 34,
"end": 63,
"jsDocPropertyTags": [
{
"kind": "JSDocParameterTag",
"pos": 34,
"end": 54,
"atToken": {
"kind": "AtToken",
"pos": 34,
"end": 35
},
"tagName": {
"kind": "Identifier",
"pos": 35,
"end": 40,
"escapedText": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 41,
"end": 49,
"type": {
"kind": "StringKeyword",
"pos": 42,
"end": 48
}
},
"name": {
"kind": "FirstNode",
"pos": 50,
"end": 53,
"left": {
"kind": "Identifier",
"pos": 50,
"end": 51,
"escapedText": "o"
},
"right": {
"kind": "Identifier",
"pos": 52,
"end": 53,
"escapedText": "f"
}
},
"isNameFirst": false,
"isBracketed": false,
"comment": "Doc for f"
}
]
}
},
"name": {
"kind": "Identifier",
"pos": 22,
"end": 23,
"escapedText": "o"
},
"isNameFirst": true,
"isBracketed": false,
"comment": "Doc doc"
},
"length": 1,
"pos": 6,
"end": 63
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 28,
"end": 40,
"atToken": {
"kind": "AtToken",
"pos": 8,
@ -40,6 +40,6 @@
},
"length": 1,
"pos": 8,
"end": 28
"end": 40
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 33,
"end": 45,
"atToken": {
"kind": "AtToken",
"pos": 8,
@ -40,6 +40,6 @@
},
"length": 1,
"pos": 8,
"end": 33
"end": 45
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 7,
"end": 16,
"end": 58,
"atToken": {
"kind": "AtToken",
"pos": 7,
@ -30,6 +30,6 @@
},
"length": 1,
"pos": 7,
"end": 16
"end": 58
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 30,
"end": 55,
"atToken": {
"kind": "AtToken",
"pos": 8,
@ -40,6 +40,6 @@
},
"length": 1,
"pos": 8,
"end": 30
"end": 55
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 31,
"end": 57,
"atToken": {
"kind": "AtToken",
"pos": 8,
@ -40,6 +40,6 @@
},
"length": 1,
"pos": 8,
"end": 31
"end": 57
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 36,
"end": 62,
"atToken": {
"kind": "AtToken",
"pos": 8,
@ -40,6 +40,6 @@
},
"length": 1,
"pos": 8,
"end": 36
"end": 62
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 29,
"end": 42,
"atToken": {
"kind": "AtToken",
"pos": 8,
@ -40,6 +40,6 @@
},
"length": 1,
"pos": 8,
"end": 29
"end": 42
}
}

View File

@ -6,7 +6,7 @@
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 32,
"end": 34,
"atToken": {
"kind": "AtToken",
"pos": 8,