@@ -481,12 +481,12 @@ namespace ts {
481
481
return visitNodes ( cbNode , cbNodes , ( < JSDocFunctionType > node ) . parameters ) ||
482
482
visitNode ( cbNode , ( < JSDocFunctionType > node ) . type ) ;
483
483
case SyntaxKind . JSDocComment :
484
- return visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment )
484
+ return ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) )
485
485
|| visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . tags ) ;
486
486
case SyntaxKind . JSDocSeeTag :
487
487
return visitNode ( cbNode , ( node as JSDocSeeTag ) . tagName ) ||
488
488
visitNode ( cbNode , ( node as JSDocSeeTag ) . name ) ||
489
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
489
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
490
490
case SyntaxKind . JSDocNameReference :
491
491
return visitNode ( cbNode , ( node as JSDocNameReference ) . name ) ;
492
492
case SyntaxKind . JSDocParameterTag :
@@ -495,47 +495,48 @@ namespace ts {
495
495
( ( node as JSDocPropertyLikeTag ) . isNameFirst
496
496
? visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . name ) ||
497
497
visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . typeExpression ) ||
498
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment )
498
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) )
499
499
: visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . typeExpression ) ||
500
500
visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . name ) ) ||
501
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
501
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
502
502
case SyntaxKind . JSDocAuthorTag :
503
- return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ;
503
+ return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
504
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
504
505
case SyntaxKind . JSDocImplementsTag :
505
506
return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
506
507
visitNode ( cbNode , ( < JSDocImplementsTag > node ) . class ) ||
507
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
508
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
508
509
case SyntaxKind . JSDocAugmentsTag :
509
510
return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
510
511
visitNode ( cbNode , ( < JSDocAugmentsTag > node ) . class ) ||
511
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
512
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
512
513
case SyntaxKind . JSDocTemplateTag :
513
514
return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
514
515
visitNode ( cbNode , ( < JSDocTemplateTag > node ) . constraint ) ||
515
516
visitNodes ( cbNode , cbNodes , ( < JSDocTemplateTag > node ) . typeParameters ) ||
516
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
517
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
517
518
case SyntaxKind . JSDocTypedefTag :
518
519
return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
519
520
( ( node as JSDocTypedefTag ) . typeExpression &&
520
521
( node as JSDocTypedefTag ) . typeExpression ! . kind === SyntaxKind . JSDocTypeExpression
521
522
? visitNode ( cbNode , ( < JSDocTypedefTag > node ) . typeExpression ) ||
522
523
visitNode ( cbNode , ( < JSDocTypedefTag > node ) . fullName ) ||
523
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment )
524
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) )
524
525
: visitNode ( cbNode , ( < JSDocTypedefTag > node ) . fullName ) ||
525
526
visitNode ( cbNode , ( < JSDocTypedefTag > node ) . typeExpression ) ) ||
526
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
527
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
527
528
case SyntaxKind . JSDocCallbackTag :
528
529
return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
529
530
visitNode ( cbNode , ( node as JSDocCallbackTag ) . fullName ) ||
530
531
visitNode ( cbNode , ( node as JSDocCallbackTag ) . typeExpression ) ||
531
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
532
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
532
533
case SyntaxKind . JSDocReturnTag :
533
534
case SyntaxKind . JSDocTypeTag :
534
535
case SyntaxKind . JSDocThisTag :
535
536
case SyntaxKind . JSDocEnumTag :
536
537
return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
537
538
visitNode ( cbNode , ( node as JSDocReturnTag | JSDocTypeTag | JSDocThisTag | JSDocEnumTag ) . typeExpression ) ||
538
- visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
539
+ ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
539
540
case SyntaxKind . JSDocSignature :
540
541
return forEach ( ( < JSDocSignature > node ) . typeParameters , cbNode ) ||
541
542
forEach ( ( < JSDocSignature > node ) . parameters , cbNode ) ||
@@ -551,7 +552,7 @@ namespace ts {
551
552
case SyntaxKind . JSDocProtectedTag :
552
553
case SyntaxKind . JSDocReadonlyTag :
553
554
return visitNode ( cbNode , ( node as JSDocTag ) . tagName )
554
- || visitNodes ( cbNode , cbNodes , ( node as JSDocTag ) . comment ) ;
555
+ || ( typeof ( node as JSDoc ) . comment === "string" ? undefined : visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . comment as NodeArray < JSDocText | JSDocLink > | undefined ) ) ;
555
556
case SyntaxKind . PartiallyEmittedExpression :
556
557
return visitNode ( cbNode , ( < PartiallyEmittedExpression > node ) . expression ) ;
557
558
}
@@ -7412,6 +7413,7 @@ namespace ts {
7412
7413
state = JSDocState . SavingComments ;
7413
7414
const commentEnd = scanner . getStartPos ( ) ;
7414
7415
const linkStart = scanner . getTextPos ( ) - 1 ;
7416
+ // TODO: redo here
7415
7417
const link = parseJSDocLink ( linkStart ) ;
7416
7418
if ( link ) {
7417
7419
if ( ! linkEnd ) {
@@ -7435,12 +7437,12 @@ namespace ts {
7435
7437
nextTokenJSDoc ( ) ;
7436
7438
}
7437
7439
removeTrailingWhitespace ( comments ) ;
7438
- if ( comments . length ) {
7440
+ if ( parts . length && comments . length ) {
7439
7441
parts . push ( finishNode ( factory . createJSDocText ( comments . join ( "" ) ) , linkEnd ?? start , commentsPos ) ) ;
7440
7442
}
7441
7443
if ( parts . length && tags ) Debug . assertIsDefined ( commentsPos , "having parsed tags implies that the end of the comment span should be set" ) ;
7442
7444
const tagsArray = tags && createNodeArray ( tags , tagsPos , tagsEnd ) ;
7443
- return finishNode ( factory . createJSDocComment ( parts . length ? createNodeArray ( parts , start , commentsPos ) : undefined , tagsArray ) , start , end ) ;
7445
+ return finishNode ( factory . createJSDocComment ( parts . length ? createNodeArray ( parts , start , commentsPos ) : comments . length ? comments . join ( "" ) : undefined , tagsArray ) , start , end ) ;
7444
7446
} ) ;
7445
7447
7446
7448
function removeLeadingNewlines ( comments : string [ ] ) {
@@ -7588,7 +7590,7 @@ namespace ts {
7588
7590
return parseTagComments ( margin , indentText . slice ( margin ) ) ;
7589
7591
}
7590
7592
7591
- function parseTagComments ( indent : number , initialMargin ?: string ) : NodeArray < JSDocText | JSDocLink > | undefined {
7593
+ function parseTagComments ( indent : number , initialMargin ?: string ) : string | NodeArray < JSDocText | JSDocLink > | undefined {
7592
7594
const commentsPos = getNodePos ( ) ;
7593
7595
let comments : string [ ] = [ ] ;
7594
7596
const parts : ( JSDocLink | JSDocText ) [ ] = [ ] ;
@@ -7689,12 +7691,15 @@ namespace ts {
7689
7691
7690
7692
removeLeadingNewlines ( comments ) ;
7691
7693
removeTrailingWhitespace ( comments ) ;
7692
- if ( comments . length ) {
7693
- parts . push ( finishNode ( factory . createJSDocText ( comments . join ( "" ) ) , linkEnd ?? commentsPos ) ) ;
7694
- }
7695
7694
if ( parts . length ) {
7695
+ if ( comments . length ) {
7696
+ parts . push ( finishNode ( factory . createJSDocText ( comments . join ( "" ) ) , linkEnd ?? commentsPos ) ) ;
7697
+ }
7696
7698
return createNodeArray ( parts , commentsPos , scanner . getTextPos ( ) ) ;
7697
7699
}
7700
+ else if ( comments . length ) {
7701
+ return comments . join ( "" ) ;
7702
+ }
7698
7703
}
7699
7704
7700
7705
function parseJSDocLink ( start : number ) {
@@ -7858,8 +7863,10 @@ namespace ts {
7858
7863
if ( ! comments ) {
7859
7864
commentEnd = scanner . getStartPos ( ) ;
7860
7865
}
7861
- const allParts = concatenate ( [ finishNode ( textOnly , commentStart , commentEnd ) ] , comments ) as ( JSDocText | JSDocLink ) [ ] ; // cast away readonly
7862
- return finishNode ( factory . createJSDocAuthorTag ( tagName , createNodeArray ( allParts , commentStart ) ) , start ) ;
7866
+ const allParts = typeof comments !== "string"
7867
+ ? createNodeArray ( concatenate ( [ finishNode ( textOnly , commentStart , commentEnd ) ] , comments ) as ( JSDocText | JSDocLink ) [ ] , commentStart ) // cast away readonly
7868
+ : textOnly . text + comments ;
7869
+ return finishNode ( factory . createJSDocAuthorTag ( tagName , allParts ) , start ) ;
7863
7870
}
7864
7871
7865
7872
function parseAuthorNameAndEmail ( ) : JSDocText {
@@ -7918,7 +7925,7 @@ namespace ts {
7918
7925
return node ;
7919
7926
}
7920
7927
7921
- function parseSimpleTag ( start : number , createTag : ( tagName : Identifier | undefined , comment ?: NodeArray < JSDocText | JSDocLink > ) => JSDocTag , tagName : Identifier , margin : number , indentText : string ) : JSDocTag {
7928
+ function parseSimpleTag ( start : number , createTag : ( tagName : Identifier | undefined , comment ?: string | NodeArray < JSDocText | JSDocLink > ) => JSDocTag , tagName : Identifier , margin : number , indentText : string ) : JSDocTag {
7922
7929
return finishNode ( createTag ( tagName , parseTrailingTagComments ( start , getNodePos ( ) , margin , indentText ) ) , start ) ;
7923
7930
}
7924
7931
0 commit comments