mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 08:11:30 -06:00
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:
parent
542184a05a
commit
71b39014eb
@ -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;
|
||||
}
|
||||
|
||||
@ -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", () => {
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
"0": {
|
||||
"kind": "JSDocParameterTag",
|
||||
"pos": 8,
|
||||
"end": 32,
|
||||
"end": 34,
|
||||
"atToken": {
|
||||
"kind": "AtToken",
|
||||
"pos": 8,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user