@@ -97,7 +97,7 @@ class Documentation {
9797 */
9898 copyDocsFromSuperclasses ( errors ) {
9999 for ( const [ name , clazz ] of this . classes . entries ( ) ) {
100- clazz . validateOrder ( errors , clazz ) ;
100+ clazz . sortMembers ( ) ;
101101
102102 if ( ! clazz . extends || [ 'EventEmitter' , 'Error' , 'Exception' , 'RuntimeException' ] . includes ( clazz . extends ) )
103103 continue ;
@@ -317,48 +317,17 @@ class Documentation {
317317 this . membersArray = membersArray ;
318318 }
319319
320- validateOrder ( errors , cls ) {
321- const members = this . membersArray ;
322- // Events should go first.
323- let eventIndex = 0 ;
324- for ( ; eventIndex < members . length && members [ eventIndex ] . kind === 'event' ; ++ eventIndex ) ;
325- for ( ; eventIndex < members . length && members [ eventIndex ] . kind !== 'event' ; ++ eventIndex ) ;
326- if ( eventIndex < members . length )
327- errors . push ( `Events should go first. Event '${ members [ eventIndex ] . name } ' in class ${ cls . name } breaks order` ) ;
328-
329- // Constructor should be right after events and before all other members.
330- const constructorIndex = members . findIndex ( member => member . kind === 'method' && member . name === 'constructor' ) ;
331- if ( constructorIndex > 0 && members [ constructorIndex - 1 ] . kind !== 'event' )
332- errors . push ( `Constructor of ${ cls . name } should go before other methods` ) ;
333-
334- // Events should be sorted alphabetically.
335- for ( let i = 0 ; i < members . length - 1 ; ++ i ) {
336- const member1 = this . membersArray [ i ] ;
337- const member2 = this . membersArray [ i + 1 ] ;
338- if ( member1 . kind !== 'event' || member2 . kind !== 'event' )
339- continue ;
340- if ( member1 . name . localeCompare ( member2 . name , 'en' , { sensitivity : 'base' } ) > 0 )
341- errors . push ( `Event '${ member1 . name } ' in class ${ this . name } breaks alphabetic ordering of events` ) ;
320+ sortMembers ( ) {
321+ /**
322+ * @param {Member } member
323+ */
324+ function sortKey ( member ) {
325+ return { 'event' : 'a' , 'method' : 'b' , 'property' : 'c' } [ member . kind ] + member . alias ;
342326 }
343327
344- // All other members should be sorted alphabetically.
345- for ( let i = 0 ; i < members . length - 1 ; ++ i ) {
346- const member1 = this . membersArray [ i ] ;
347- const member2 = this . membersArray [ i + 1 ] ;
348- if ( member1 . kind === 'event' || member2 . kind === 'event' )
349- continue ;
350- if ( member1 . kind === 'method' && member1 . name === 'constructor' )
351- continue ;
352- if ( member1 . name . replace ( / ^ \$ + / , '$' ) . localeCompare ( member2 . name . replace ( / ^ \$ + / , '$' ) , 'en' , { sensitivity : 'base' } ) > 0 ) {
353- let memberName1 = `${ this . name } .${ member1 . name } ` ;
354- if ( member1 . kind === 'method' )
355- memberName1 += '()' ;
356- let memberName2 = `${ this . name } .${ member2 . name } ` ;
357- if ( member2 . kind === 'method' )
358- memberName2 += '()' ;
359- errors . push ( `Bad alphabetic ordering of ${ this . name } members: ${ memberName1 } should go after ${ memberName2 } ` ) ;
360- }
361- }
328+ this . membersArray . sort ( ( m1 , m2 ) => {
329+ return sortKey ( m1 ) . localeCompare ( sortKey ( m2 ) , 'en' , { sensitivity : 'base' } ) ;
330+ } ) ;
362331 }
363332
364333 /**
0 commit comments