@@ -6611,6 +6611,9 @@ namespace ts {
66116611
66126612 let tag : JSDocTag | undefined ;
66136613 switch ( tagName . escapedText ) {
6614+ case "author" :
6615+ tag = parseAuthorTag ( start , tagName ) ;
6616+ break ;
66146617 case "augments" :
66156618 case "extends" :
66166619 tag = parseAugmentsTag ( start , tagName ) ;
@@ -6874,6 +6877,69 @@ namespace ts {
68746877 return finishNode ( result ) ;
68756878 }
68766879
6880+ function parseAuthorTag ( start : number , tagName : Identifier ) : JSDocAuthorTag {
6881+ const result = < JSDocAuthorTag > createNode ( SyntaxKind . JSDocAuthorTag , start ) ;
6882+ result . tagName = tagName ;
6883+
6884+ const comment = tryParse ( ( ) => tryParseAuthorNameAndEmail ( ) ) ;
6885+
6886+ if ( comment ) {
6887+ result . comment = comment ;
6888+ }
6889+
6890+ return finishNode ( result ) ;
6891+ }
6892+
6893+ function tryParseAuthorNameAndEmail ( ) : string | undefined {
6894+ const comments : string [ ] = [ ] ;
6895+ let seenLessThan = false ;
6896+ let seenGreaterThan = false ;
6897+ let seenAtToken = false ;
6898+ let token = scanner . getToken ( ) ;
6899+
6900+ loop: while ( true ) {
6901+ switch ( token ) {
6902+ case SyntaxKind . Identifier :
6903+ case SyntaxKind . WhitespaceTrivia :
6904+ case SyntaxKind . DotToken :
6905+ comments . push ( scanner . getTokenText ( ) ) ;
6906+ break ;
6907+ case SyntaxKind . LessThanToken :
6908+ if ( seenLessThan || seenAtToken || seenGreaterThan ) {
6909+ return ;
6910+ }
6911+ seenLessThan = true ;
6912+ comments . push ( scanner . getTokenText ( ) ) ;
6913+ break ;
6914+ case SyntaxKind . GreaterThanToken :
6915+ if ( ! seenLessThan || ! seenAtToken || seenGreaterThan ) {
6916+ return ;
6917+ }
6918+
6919+ seenGreaterThan = true ;
6920+ comments . push ( scanner . getTokenText ( ) ) ;
6921+ break loop;
6922+ case SyntaxKind . AtToken :
6923+ if ( seenAtToken || ! seenLessThan || seenGreaterThan ) {
6924+ return ;
6925+ }
6926+
6927+ seenAtToken = true ;
6928+ comments . push ( scanner . getTokenText ( ) ) ;
6929+ break ;
6930+ case SyntaxKind . NewLineTrivia :
6931+ case SyntaxKind . EndOfFileToken :
6932+ break loop;
6933+ }
6934+
6935+ token = nextJSDocToken ( ) ;
6936+ }
6937+
6938+ if ( seenLessThan && seenAtToken && seenGreaterThan ) {
6939+ return comments . length === 0 ? undefined : comments . join ( "" ) ;
6940+ }
6941+ }
6942+
68776943 function parseAugmentsTag ( start : number , tagName : Identifier ) : JSDocAugmentsTag {
68786944 const result = < JSDocAugmentsTag > createNode ( SyntaxKind . JSDocAugmentsTag , start ) ;
68796945 result . tagName = tagName ;
0 commit comments