Skip to content

Commit 2b888c3

Browse files
author
Andy
authored
Consistently pass indent to 'parseTagComments' (#27055)
* Consistently pass indent to 'parseTagComments' * Update baselines
1 parent d3463ce commit 2b888c3

File tree

4 files changed

+17
-21
lines changed

4 files changed

+17
-21
lines changed

src/compiler/parser.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6724,7 +6724,7 @@ namespace ts {
67246724
}
67256725
}
67266726

6727-
function parseParameterOrPropertyTag(atToken: AtToken, tagName: Identifier, target: PropertyLikeParse, indent: number | undefined): JSDocParameterTag | JSDocPropertyTag {
6727+
function parseParameterOrPropertyTag(atToken: AtToken, tagName: Identifier, target: PropertyLikeParse, indent: number): JSDocParameterTag | JSDocPropertyTag {
67286728
let typeExpression = tryParseTypeExpression();
67296729
let isNameFirst = !typeExpression;
67306730
skipWhitespaceOrAsterisk();
@@ -6739,9 +6739,8 @@ namespace ts {
67396739
const result = target === PropertyLikeParse.Property ?
67406740
<JSDocPropertyTag>createNode(SyntaxKind.JSDocPropertyTag, atToken.pos) :
67416741
<JSDocParameterTag>createNode(SyntaxKind.JSDocParameterTag, atToken.pos);
6742-
let comment: string | undefined;
6743-
if (indent !== undefined) comment = parseTagComments(indent + scanner.getStartPos() - atToken.pos);
6744-
const nestedTypeLiteral = target !== PropertyLikeParse.CallbackParameter && parseNestedTypeLiteral(typeExpression, name, target);
6742+
const comment = parseTagComments(indent + scanner.getStartPos() - atToken.pos);
6743+
const nestedTypeLiteral = target !== PropertyLikeParse.CallbackParameter && parseNestedTypeLiteral(typeExpression, name, target, indent);
67456744
if (nestedTypeLiteral) {
67466745
typeExpression = nestedTypeLiteral;
67476746
isNameFirst = true;
@@ -6756,14 +6755,14 @@ namespace ts {
67566755
return finishNode(result);
67576756
}
67586757

6759-
function parseNestedTypeLiteral(typeExpression: JSDocTypeExpression | undefined, name: EntityName, target: PropertyLikeParse) {
6758+
function parseNestedTypeLiteral(typeExpression: JSDocTypeExpression | undefined, name: EntityName, target: PropertyLikeParse, indent: number) {
67606759
if (typeExpression && isObjectOrObjectArrayTypeReference(typeExpression.type)) {
67616760
const typeLiteralExpression = <JSDocTypeExpression>createNode(SyntaxKind.JSDocTypeExpression, scanner.getTokenPos());
67626761
let child: JSDocPropertyLikeTag | JSDocTypeTag | false;
67636762
let jsdocTypeLiteral: JSDocTypeLiteral;
67646763
const start = scanner.getStartPos();
67656764
let children: JSDocPropertyLikeTag[] | undefined;
6766-
while (child = tryParse(() => parseChildParameterOrPropertyTag(target, name))) {
6765+
while (child = tryParse(() => parseChildParameterOrPropertyTag(target, indent, name))) {
67676766
if (child.kind === SyntaxKind.JSDocParameterTag || child.kind === SyntaxKind.JSDocPropertyTag) {
67686767
children = append(children, child);
67696768
}
@@ -6879,7 +6878,7 @@ namespace ts {
68796878
let jsdocTypeLiteral: JSDocTypeLiteral | undefined;
68806879
let childTypeTag: JSDocTypeTag | undefined;
68816880
const start = atToken.pos;
6882-
while (child = tryParse(() => parseChildPropertyTag())) {
6881+
while (child = tryParse(() => parseChildPropertyTag(indent))) {
68836882
if (!jsdocTypeLiteral) {
68846883
jsdocTypeLiteral = <JSDocTypeLiteral>createNode(SyntaxKind.JSDocTypeLiteral, start);
68856884
}
@@ -6945,7 +6944,7 @@ namespace ts {
69456944
const start = scanner.getStartPos();
69466945
const jsdocSignature = createNode(SyntaxKind.JSDocSignature, start) as JSDocSignature;
69476946
jsdocSignature.parameters = [];
6948-
while (child = tryParse(() => parseChildParameterOrPropertyTag(PropertyLikeParse.CallbackParameter) as JSDocParameterTag)) {
6947+
while (child = tryParse(() => parseChildParameterOrPropertyTag(PropertyLikeParse.CallbackParameter, indent) as JSDocParameterTag)) {
69496948
jsdocSignature.parameters = append(jsdocSignature.parameters as MutableNodeArray<JSDocParameterTag>, child);
69506949
}
69516950
const returnTag = tryParse(() => {
@@ -6988,18 +6987,18 @@ namespace ts {
69886987
return a.escapedText === b.escapedText;
69896988
}
69906989

6991-
function parseChildPropertyTag() {
6992-
return parseChildParameterOrPropertyTag(PropertyLikeParse.Property) as JSDocTypeTag | JSDocPropertyTag | false;
6990+
function parseChildPropertyTag(indent: number) {
6991+
return parseChildParameterOrPropertyTag(PropertyLikeParse.Property, indent) as JSDocTypeTag | JSDocPropertyTag | false;
69936992
}
69946993

6995-
function parseChildParameterOrPropertyTag(target: PropertyLikeParse, name?: EntityName): JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
6994+
function parseChildParameterOrPropertyTag(target: PropertyLikeParse, indent: number, name?: EntityName): JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
69966995
let canParseTag = true;
69976996
let seenAsterisk = false;
69986997
while (true) {
69996998
switch (nextJSDocToken()) {
70006999
case SyntaxKind.AtToken:
70017000
if (canParseTag) {
7002-
const child = tryParseChildTag(target);
7001+
const child = tryParseChildTag(target, indent);
70037002
if (child && (child.kind === SyntaxKind.JSDocParameterTag || child.kind === SyntaxKind.JSDocPropertyTag) &&
70047003
target !== PropertyLikeParse.CallbackParameter &&
70057004
name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
@@ -7028,7 +7027,7 @@ namespace ts {
70287027
}
70297028
}
70307029

7031-
function tryParseChildTag(target: PropertyLikeParse): JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
7030+
function tryParseChildTag(target: PropertyLikeParse, indent: number): JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
70327031
Debug.assert(token() === SyntaxKind.AtToken);
70337032
const atToken = <AtToken>createNode(SyntaxKind.AtToken);
70347033
atToken.end = scanner.getTextPos();
@@ -7055,9 +7054,7 @@ namespace ts {
70557054
if (!(target & t)) {
70567055
return false;
70577056
}
7058-
const tag = parseParameterOrPropertyTag(atToken, tagName, target, /*indent*/ undefined);
7059-
tag.comment = parseTagComments(tag.end - tag.pos);
7060-
return tag;
7057+
return parseParameterOrPropertyTag(atToken, tagName, target, indent);
70617058
}
70627059

70637060
function parseTemplateTag(atToken: AtToken, tagName: Identifier): JSDocTemplateTag {

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.Nested @param tags.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
{
3131
"kind": "JSDocParameterTag",
3232
"pos": 34,
33-
"end": 54,
33+
"end": 64,
3434
"atToken": {
3535
"kind": "AtToken",
3636
"pos": 34,

tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.typedefTagWithChildrenTags.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
{
3939
"kind": "JSDocPropertyTag",
4040
"pos": 47,
41-
"end": 72,
41+
"end": 74,
4242
"atToken": {
4343
"kind": "AtToken",
4444
"pos": 47,
@@ -72,7 +72,7 @@
7272
{
7373
"kind": "JSDocPropertyTag",
7474
"pos": 74,
75-
"end": 97,
75+
"end": 100,
7676
"atToken": {
7777
"kind": "AtToken",
7878
"pos": 74,

tests/cases/fourslash/quickInfoPropertyTag.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,4 @@
1212
/////** @type {I} */
1313
////const obj = { /**/x: 10 };
1414

15-
// TODO: GH#21123 There shouldn't be a " " before "More doc"
16-
verify.quickInfoAt("", "(property) x: number", "Doc\n More doc");
15+
verify.quickInfoAt("", "(property) x: number", "Doc\nMore doc");

0 commit comments

Comments
 (0)