@@ -481,12 +481,12 @@ namespace ts {
481481 return visitNodes ( cbNode , cbNodes , ( < JSDocFunctionType > node ) . parameters ) ||
482482 visitNode ( cbNode , ( < JSDocFunctionType > node ) . type ) ;
483483 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 ) )
485485 || visitNodes ( cbNode , cbNodes , ( node as JSDoc ) . tags ) ;
486486 case SyntaxKind . JSDocSeeTag :
487487 return visitNode ( cbNode , ( node as JSDocSeeTag ) . tagName ) ||
488488 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 ) ) ;
490490 case SyntaxKind . JSDocNameReference :
491491 return visitNode ( cbNode , ( node as JSDocNameReference ) . name ) ;
492492 case SyntaxKind . JSDocParameterTag :
@@ -495,47 +495,48 @@ namespace ts {
495495 ( ( node as JSDocPropertyLikeTag ) . isNameFirst
496496 ? visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . name ) ||
497497 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 ) )
499499 : visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . typeExpression ) ||
500500 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 ) ) ;
502502 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 ) ) ;
504505 case SyntaxKind . JSDocImplementsTag :
505506 return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
506507 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 ) ) ;
508509 case SyntaxKind . JSDocAugmentsTag :
509510 return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
510511 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 ) ) ;
512513 case SyntaxKind . JSDocTemplateTag :
513514 return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
514515 visitNode ( cbNode , ( < JSDocTemplateTag > node ) . constraint ) ||
515516 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 ) ) ;
517518 case SyntaxKind . JSDocTypedefTag :
518519 return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
519520 ( ( node as JSDocTypedefTag ) . typeExpression &&
520521 ( node as JSDocTypedefTag ) . typeExpression ! . kind === SyntaxKind . JSDocTypeExpression
521522 ? visitNode ( cbNode , ( < JSDocTypedefTag > node ) . typeExpression ) ||
522523 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 ) )
524525 : visitNode ( cbNode , ( < JSDocTypedefTag > node ) . fullName ) ||
525526 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 ) ) ;
527528 case SyntaxKind . JSDocCallbackTag :
528529 return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
529530 visitNode ( cbNode , ( node as JSDocCallbackTag ) . fullName ) ||
530531 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 ) ) ;
532533 case SyntaxKind . JSDocReturnTag :
533534 case SyntaxKind . JSDocTypeTag :
534535 case SyntaxKind . JSDocThisTag :
535536 case SyntaxKind . JSDocEnumTag :
536537 return visitNode ( cbNode , ( node as JSDocTag ) . tagName ) ||
537538 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 ) ) ;
539540 case SyntaxKind . JSDocSignature :
540541 return forEach ( ( < JSDocSignature > node ) . typeParameters , cbNode ) ||
541542 forEach ( ( < JSDocSignature > node ) . parameters , cbNode ) ||
@@ -551,7 +552,7 @@ namespace ts {
551552 case SyntaxKind . JSDocProtectedTag :
552553 case SyntaxKind . JSDocReadonlyTag :
553554 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 ) ) ;
555556 case SyntaxKind . PartiallyEmittedExpression :
556557 return visitNode ( cbNode , ( < PartiallyEmittedExpression > node ) . expression ) ;
557558 }
@@ -7412,6 +7413,7 @@ namespace ts {
74127413 state = JSDocState . SavingComments ;
74137414 const commentEnd = scanner . getStartPos ( ) ;
74147415 const linkStart = scanner . getTextPos ( ) - 1 ;
7416+ // TODO: redo here
74157417 const link = parseJSDocLink ( linkStart ) ;
74167418 if ( link ) {
74177419 if ( ! linkEnd ) {
@@ -7435,12 +7437,12 @@ namespace ts {
74357437 nextTokenJSDoc ( ) ;
74367438 }
74377439 removeTrailingWhitespace ( comments ) ;
7438- if ( comments . length ) {
7440+ if ( parts . length && comments . length ) {
74397441 parts . push ( finishNode ( factory . createJSDocText ( comments . join ( "" ) ) , linkEnd ?? start , commentsPos ) ) ;
74407442 }
74417443 if ( parts . length && tags ) Debug . assertIsDefined ( commentsPos , "having parsed tags implies that the end of the comment span should be set" ) ;
74427444 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 ) ;
74447446 } ) ;
74457447
74467448 function removeLeadingNewlines ( comments : string [ ] ) {
@@ -7588,7 +7590,7 @@ namespace ts {
75887590 return parseTagComments ( margin , indentText . slice ( margin ) ) ;
75897591 }
75907592
7591- function parseTagComments ( indent : number , initialMargin ?: string ) : NodeArray < JSDocText | JSDocLink > | undefined {
7593+ function parseTagComments ( indent : number , initialMargin ?: string ) : string | NodeArray < JSDocText | JSDocLink > | undefined {
75927594 const commentsPos = getNodePos ( ) ;
75937595 let comments : string [ ] = [ ] ;
75947596 const parts : ( JSDocLink | JSDocText ) [ ] = [ ] ;
@@ -7689,12 +7691,15 @@ namespace ts {
76897691
76907692 removeLeadingNewlines ( comments ) ;
76917693 removeTrailingWhitespace ( comments ) ;
7692- if ( comments . length ) {
7693- parts . push ( finishNode ( factory . createJSDocText ( comments . join ( "" ) ) , linkEnd ?? commentsPos ) ) ;
7694- }
76957694 if ( parts . length ) {
7695+ if ( comments . length ) {
7696+ parts . push ( finishNode ( factory . createJSDocText ( comments . join ( "" ) ) , linkEnd ?? commentsPos ) ) ;
7697+ }
76967698 return createNodeArray ( parts , commentsPos , scanner . getTextPos ( ) ) ;
76977699 }
7700+ else if ( comments . length ) {
7701+ return comments . join ( "" ) ;
7702+ }
76987703 }
76997704
77007705 function parseJSDocLink ( start : number ) {
@@ -7858,8 +7863,10 @@ namespace ts {
78587863 if ( ! comments ) {
78597864 commentEnd = scanner . getStartPos ( ) ;
78607865 }
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 ) ;
78637870 }
78647871
78657872 function parseAuthorNameAndEmail ( ) : JSDocText {
@@ -7918,7 +7925,7 @@ namespace ts {
79187925 return node ;
79197926 }
79207927
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 {
79227929 return finishNode ( createTag ( tagName , parseTrailingTagComments ( start , getNodePos ( ) , margin , indentText ) ) , start ) ;
79237930 }
79247931
0 commit comments