@@ -6168,6 +6168,11 @@ namespace ts {
61686168 SavingComments ,
61696169 }
61706170
6171+ const enum PropertyLikeParse {
6172+ Property ,
6173+ Parameter ,
6174+ }
6175+
61716176 export function parseJSDocCommentWorker ( start : number , length : number ) : JSDoc {
61726177 const content = sourceText ;
61736178 start = start || 0 ;
@@ -6347,7 +6352,7 @@ namespace ts {
63476352 case "arg" :
63486353 case "argument" :
63496354 case "param" :
6350- tag = parseParameterOrPropertyTag ( atToken , tagName , /*shouldParseParamTag*/ true ) ;
6355+ tag = parseParameterOrPropertyTag ( atToken , tagName , PropertyLikeParse . Parameter ) ;
63516356 break ;
63526357 case "return" :
63536358 case "returns" :
@@ -6494,9 +6499,9 @@ namespace ts {
64946499 node . kind === SyntaxKind . ArrayType && isObjectOrObjectArrayTypeReference ( ( node as ArrayTypeNode ) . elementType ) ;
64956500 }
64966501
6497- function parseParameterOrPropertyTag ( atToken : AtToken , tagName : Identifier , shouldParseParamTag : true ) : JSDocParameterTag ;
6498- function parseParameterOrPropertyTag ( atToken : AtToken , tagName : Identifier , shouldParseParamTag : false ) : JSDocPropertyTag ;
6499- function parseParameterOrPropertyTag ( atToken : AtToken , tagName : Identifier , shouldParseParamTag : boolean ) : JSDocPropertyLikeTag {
6502+ function parseParameterOrPropertyTag ( atToken : AtToken , tagName : Identifier , target : PropertyLikeParse . Parameter ) : JSDocParameterTag ;
6503+ function parseParameterOrPropertyTag ( atToken : AtToken , tagName : Identifier , target : PropertyLikeParse . Property ) : JSDocPropertyTag ;
6504+ function parseParameterOrPropertyTag ( atToken : AtToken , tagName : Identifier , target : PropertyLikeParse ) : JSDocPropertyLikeTag {
65006505 let typeExpression = tryParseTypeExpression ( ) ;
65016506 skipWhitespace ( ) ;
65026507
@@ -6512,14 +6517,14 @@ namespace ts {
65126517 typeExpression = tryParseTypeExpression ( ) ;
65136518 }
65146519
6515- const result : JSDocPropertyLikeTag = shouldParseParamTag ?
6520+ const result : JSDocPropertyLikeTag = target ?
65166521 < JSDocParameterTag > createNode ( SyntaxKind . JSDocParameterTag , atToken . pos ) :
65176522 < JSDocPropertyTag > createNode ( SyntaxKind . JSDocPropertyTag , atToken . pos ) ;
65186523 if ( typeExpression && isObjectOrObjectArrayTypeReference ( typeExpression . type ) ) {
65196524 let child : JSDocPropertyLikeTag | false ;
65206525 let jsdocTypeLiteral : JSDocTypeLiteral ;
65216526 const start = scanner . getStartPos ( ) ;
6522- while ( child = tryParse ( ( ) => parseChildParameterOrPropertyTag ( /*shouldParseParamTag*/ true , fullName ) ) ) {
6527+ while ( child = tryParse ( ( ) => parseChildParameterOrPropertyTag ( PropertyLikeParse . Parameter , fullName ) ) ) {
65236528 if ( ! jsdocTypeLiteral ) {
65246529 jsdocTypeLiteral = < JSDocTypeLiteral > createNode ( SyntaxKind . JSDocTypeLiteral , start ) ;
65256530 jsdocTypeLiteral . jsDocPropertyTags = [ ] as MutableNodeArray < JSDocPropertyTag > ;
@@ -6616,7 +6621,7 @@ namespace ts {
66166621 let jsdocTypeLiteral : JSDocTypeLiteral ;
66176622 let alreadyHasTypeTag = false ;
66186623 const start = scanner . getStartPos ( ) ;
6619- while ( child = tryParse ( ( ) => parseChildParameterOrPropertyTag ( /*shouldParseParamTag*/ false ) ) ) {
6624+ while ( child = tryParse ( ( ) => parseChildParameterOrPropertyTag ( PropertyLikeParse . Property ) ) ) {
66206625 if ( ! jsdocTypeLiteral ) {
66216626 jsdocTypeLiteral = < JSDocTypeLiteral > createNode ( SyntaxKind . JSDocTypeLiteral , start ) ;
66226627 }
@@ -6679,9 +6684,9 @@ namespace ts {
66796684 return parent . text === name . text ;
66806685 }
66816686
6682- function parseChildParameterOrPropertyTag ( shouldParseParamTag : false ) : JSDocTypeTag | JSDocPropertyTag | false ;
6683- function parseChildParameterOrPropertyTag ( shouldParseParamTag : true , fullName : EntityName ) : JSDocPropertyTag | JSDocParameterTag | false ;
6684- function parseChildParameterOrPropertyTag ( shouldParseParamTag : boolean , fullName ?: EntityName ) : JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
6687+ function parseChildParameterOrPropertyTag ( target : PropertyLikeParse . Property ) : JSDocTypeTag | JSDocPropertyTag | false ;
6688+ function parseChildParameterOrPropertyTag ( target : PropertyLikeParse . Parameter , fullName : EntityName ) : JSDocPropertyTag | JSDocParameterTag | false ;
6689+ function parseChildParameterOrPropertyTag ( target : PropertyLikeParse , fullName ?: EntityName ) : JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
66856690 let resumePos = scanner . getStartPos ( ) ;
66866691 let canParseTag = true ;
66876692 let seenAsterisk = false ;
@@ -6690,7 +6695,7 @@ namespace ts {
66906695 switch ( token ( ) ) {
66916696 case SyntaxKind . AtToken :
66926697 if ( canParseTag ) {
6693- const child = tryParseChildTag ( shouldParseParamTag ) ;
6698+ const child = tryParseChildTag ( target ) ;
66946699 if ( child && child . kind === SyntaxKind . JSDocParameterTag &&
66956700 ( ts . isIdentifier ( child . fullName ) || ! textsEqual ( fullName , child . fullName . left ) ) ) {
66966701 break ;
@@ -6720,7 +6725,7 @@ namespace ts {
67206725 scanner . setTextPos ( resumePos ) ;
67216726 }
67226727
6723- function tryParseChildTag ( shouldParseParamTag : boolean , alreadyHasTypeTag ?: boolean ) : JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
6728+ function tryParseChildTag ( target : PropertyLikeParse , alreadyHasTypeTag ?: boolean ) : JSDocTypeTag | JSDocPropertyTag | JSDocParameterTag | false {
67246729 Debug . assert ( token ( ) === SyntaxKind . AtToken ) ;
67256730 const atToken = < AtToken > createNode ( SyntaxKind . AtToken , scanner . getStartPos ( ) ) ;
67266731 atToken . end = scanner . getTextPos ( ) ;
@@ -6733,14 +6738,14 @@ namespace ts {
67336738 }
67346739 switch ( tagName . text ) {
67356740 case "type" :
6736- return ! alreadyHasTypeTag && ! shouldParseParamTag && parseTypeTag ( atToken , tagName ) ;
6741+ return ! alreadyHasTypeTag && target === PropertyLikeParse . Property && parseTypeTag ( atToken , tagName ) ;
67376742 case "prop" :
67386743 case "property" :
6739- return ! shouldParseParamTag && parseParameterOrPropertyTag ( atToken , tagName , /*shouldParseParamTag*/ false ) ;
6744+ return target === PropertyLikeParse . Property && parseParameterOrPropertyTag ( atToken , tagName , target ) ;
67406745 case "arg" :
67416746 case "argument" :
67426747 case "param" :
6743- return shouldParseParamTag && parseParameterOrPropertyTag ( atToken , tagName , /*shouldParseParamTag*/ true ) ;
6748+ return target === PropertyLikeParse . Parameter && parseParameterOrPropertyTag ( atToken , tagName , target ) ;
67446749 }
67456750 return false ;
67466751 }
0 commit comments