@@ -411,7 +411,7 @@ namespace ts {
411411 return visitNodes ( cbNode , cbNodes , ( < JSDoc > node ) . tags ) ;
412412 case SyntaxKind . JSDocParameterTag :
413413 case SyntaxKind . JSDocPropertyTag :
414- if ( ( node as JSDocPropertyLikeTag ) . isParameterNameFirst ) {
414+ if ( ( node as JSDocPropertyLikeTag ) . isNameFirst ) {
415415 return visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . fullName ) ||
416416 visitNode ( cbNode , ( < JSDocPropertyLikeTag > node ) . typeExpression ) ;
417417 }
@@ -431,12 +431,10 @@ namespace ts {
431431 if ( ( node as JSDocTypedefTag ) . typeExpression &&
432432 ( node as JSDocTypedefTag ) . typeExpression . kind === SyntaxKind . JSDocTypeExpression ) {
433433 return visitNode ( cbNode , ( < JSDocTypedefTag > node ) . typeExpression ) ||
434- visitNode ( cbNode , ( < JSDocTypedefTag > node ) . fullName ) ||
435- visitNode ( cbNode , ( < JSDocTypedefTag > node ) . name ) ;
434+ visitNode ( cbNode , ( < JSDocTypedefTag > node ) . fullName ) ;
436435 }
437436 else {
438437 return visitNode ( cbNode , ( < JSDocTypedefTag > node ) . fullName ) ||
439- visitNode ( cbNode , ( < JSDocTypedefTag > node ) . name ) ||
440438 visitNode ( cbNode , ( < JSDocTypedefTag > node ) . typeExpression ) ;
441439 }
442440 case SyntaxKind . JSDocTypeLiteral :
@@ -6520,7 +6518,27 @@ namespace ts {
65206518 const result : JSDocPropertyLikeTag = target ?
65216519 < JSDocParameterTag > createNode ( SyntaxKind . JSDocParameterTag , atToken . pos ) :
65226520 < JSDocPropertyTag > createNode ( SyntaxKind . JSDocPropertyTag , atToken . pos ) ;
6521+ const nestedTypeLiteral = parseNestedTypeLiteral ( typeExpression , fullName ) ;
6522+ if ( nestedTypeLiteral ) {
6523+ typeExpression = nestedTypeLiteral ;
6524+ }
6525+ result . atToken = atToken ;
6526+ result . tagName = tagName ;
6527+ result . typeExpression = typeExpression ;
6528+ if ( typeExpression ) {
6529+ result . type = typeExpression . type ;
6530+ }
6531+ result . fullName = postName || preName ;
6532+ result . name = ts . isIdentifier ( result . fullName ) ? result . fullName : result . fullName . right ;
6533+ result . isNameFirst = ! ! nestedTypeLiteral || ( postName ? false : ! ! preName ) ;
6534+ result . isBracketed = isBracketed ;
6535+ return finishNode ( result ) ;
6536+
6537+ }
6538+
6539+ function parseNestedTypeLiteral ( typeExpression : JSDocTypeExpression , fullName : EntityName ) {
65236540 if ( typeExpression && isObjectOrObjectArrayTypeReference ( typeExpression . type ) ) {
6541+ const typeLiteralExpression = < JSDocTypeExpression > createNode ( SyntaxKind . JSDocTypeExpression , scanner . getTokenPos ( ) ) ;
65246542 let child : JSDocPropertyLikeTag | false ;
65256543 let jsdocTypeLiteral : JSDocTypeLiteral ;
65266544 const start = scanner . getStartPos ( ) ;
@@ -6535,21 +6553,10 @@ namespace ts {
65356553 if ( typeExpression . type . kind === SyntaxKind . ArrayType ) {
65366554 jsdocTypeLiteral . isArrayType = true ;
65376555 }
6538- typeExpression . type = finishNode ( jsdocTypeLiteral ) ;
6556+ typeLiteralExpression . type = finishNode ( jsdocTypeLiteral ) ;
6557+ return finishNode ( typeLiteralExpression ) ;
65396558 }
65406559 }
6541- result . atToken = atToken ;
6542- result . tagName = tagName ;
6543- result . typeExpression = typeExpression ;
6544- if ( typeExpression ) {
6545- result . type = typeExpression . type ;
6546- }
6547- result . fullName = postName || preName ;
6548- result . name = ts . isIdentifier ( result . fullName ) ? result . fullName : result . fullName . right ;
6549- result . isParameterNameFirst = postName ? false : ! ! preName ;
6550- result . isBracketed = isBracketed ;
6551- return finishNode ( result ) ;
6552-
65536560 }
65546561
65556562 function parseReturnTag ( atToken : AtToken , tagName : Identifier ) : JSDocReturnTag {
0 commit comments