@@ -49,7 +49,7 @@ export function parseRoxygenCommentsOfNode(node: RNode<ParentInformation>, idMap
4949 attachedTo : cur ?. info . id ,
5050 requestNode : node . info . id ,
5151 range : [
52- ...mergeRanges ( ... comments . map ( c => c . location ) ) ,
52+ ...mergeRanges ( comments . map ( c => c . location ) ) ,
5353 comments . find ( c => c . info . file ) ?. info . file
5454 ]
5555 } ;
@@ -75,7 +75,10 @@ export function parseRoxygenComment(commentText: readonly string[]): RoxygenTag[
7575 tags : [ ] ,
7676 idx : 0
7777 } ;
78- val ( state , [ KnownRoxygenTags . Text ] ) ;
78+ let tag = val ( state , [ KnownRoxygenTags . Text ] ) ;
79+ while ( tag ) {
80+ tag = parseRoxygenTag ( state , tag ) ;
81+ }
7982 return state . tags ;
8083}
8184
@@ -116,7 +119,7 @@ function addTag(state: RoxygenParseContext, tag: RoxygenTag): void {
116119 state . tags . push ( tag ) ;
117120}
118121
119- function val ( state : RoxygenParseContext , tagName : TagLine , lineToVal : ( lines : readonly string [ ] ) => unknown | undefined = l => l . join ( '\n' ) . trim ( ) ) : void {
122+ function val ( state : RoxygenParseContext , tagName : TagLine , lineToVal : ( lines : readonly string [ ] ) => unknown | undefined = l => l . join ( '\n' ) . trim ( ) ) : TagLine | undefined {
120123 const [ lines , nextTag ] = collectUntilNextTag ( state ) ;
121124
122125 if ( tagName [ 1 ] ) {
@@ -141,26 +144,26 @@ function val(state: RoxygenParseContext, tagName: TagLine, lineToVal: (lines: re
141144 }
142145
143146 }
144- parseRoxygenTag ( state , nextTag ) ;
147+ return nextTag ;
145148}
146149
147- const spaceVals = ( s : RoxygenParseContext , t : TagLine ) : void => val ( s , t , l => splitAtEscapeSensitive ( l . join ( ' ' ) ) ) ;
148- const flagVal = ( s : RoxygenParseContext , t : TagLine ) : void => val ( s , t , ( ) => undefined ) ;
150+ const spaceVals = ( s : RoxygenParseContext , t : TagLine ) : TagLine | undefined => val ( s , t , l => splitAtEscapeSensitive ( l . join ( ' ' ) ) ) ;
151+ const flagVal = ( s : RoxygenParseContext , t : TagLine ) : TagLine | undefined => val ( s , t , ( ) => undefined ) ;
149152
150- const section = ( s : RoxygenParseContext , t : TagLine ) : void => val ( s , t , l => {
153+ const section = ( s : RoxygenParseContext , t : TagLine ) : TagLine | undefined => val ( s , t , l => {
151154 return { title : l [ 0 ] . trim ( ) , content : l . slice ( 1 ) . join ( '\n' ) . trim ( ) } ;
152155} ) ;
153156
154- export const firstAndRest = ( firstName : string , secondName : string ) => ( s : RoxygenParseContext , t : TagLine ) : void => val ( s , t , l => {
157+ export const firstAndRest = ( firstName : string , secondName : string ) => ( s : RoxygenParseContext , t : TagLine ) : TagLine | undefined => val ( s , t , l => {
155158 const vals = splitAtEscapeSensitive ( l . join ( '\n' ) ) ;
156159 return { [ firstName ] : vals [ 0 ] , [ secondName ] : vals . slice ( 1 ) . join ( ' ' ) . trim ( ) } ;
157160} ) ;
158- const firstAndArrayRest = ( firstName : string , secondName : string ) => ( s : RoxygenParseContext , t : TagLine ) : void => val ( s , t , l => {
161+ const firstAndArrayRest = ( firstName : string , secondName : string ) => ( s : RoxygenParseContext , t : TagLine ) : TagLine | undefined => val ( s , t , l => {
159162 const vals = splitAtEscapeSensitive ( l . join ( '\n' ) ) ;
160163 return { [ firstName ] : vals [ 0 ] , [ secondName ] : vals . slice ( 1 ) } ;
161164} ) ;
162165
163- const asNumber = ( s : RoxygenParseContext , t : TagLine ) : void => val ( s , t , l => {
166+ const asNumber = ( s : RoxygenParseContext , t : TagLine ) : TagLine | undefined => val ( s , t , l => {
164167 const num = Number ( l . join ( ' ' ) . trim ( ) ) ;
165168 return Number . isNaN ( num ) ? undefined : num ;
166169} ) ;
@@ -225,12 +228,13 @@ const TagMap = {
225228 tag : t [ 0 ] ,
226229 content : l . join ( ' ' )
227230 } ) )
228- } as const satisfies Record < KnownRoxygenTags , ( state : RoxygenParseContext , tagName : TagLine ) => void > ;
231+ } as const satisfies Record < KnownRoxygenTags , ( state : RoxygenParseContext , tagName : TagLine ) => TagLine | undefined > ;
229232
230- function parseRoxygenTag ( state : RoxygenParseContext , tagName : TagLine | undefined ) : void {
233+ /** returns the next tag */
234+ function parseRoxygenTag ( state : RoxygenParseContext , tagName : TagLine | undefined ) : TagLine | undefined {
231235 if ( tagName === undefined ) {
232- return ;
236+ return undefined ;
233237 }
234238 const parser = TagMap [ tagName [ 0 ] as KnownRoxygenTags ] ?? val ;
235- parser ( state , tagName ) ;
239+ return parser ( state , tagName ) ;
236240}
0 commit comments