@@ -8,23 +8,35 @@ import {
88
99export function splitCodeIntoClasses (
1010 code : string ,
11- ) : Record < string , { code : string ; modifiers : string [ ] } > {
12- const classes : Record < string , { code : string [ ] ; modifiers : Set < string > } > =
13- { } ;
11+ ) : Record < string , { code : string ; declaration : string } > {
12+ const classes : Record < string , { code : string [ ] ; declaration : string } > = { } ;
1413
1514 let currentClassName : string | null = null ;
1615 for ( const line of getLines ( code ) ) {
1716 const classMatch = line . match (
18- / ^ ( (?: (?: a b s t r a c t | f i n a l | p u b l i c ) \s + ) * ) c l a s s \s + ( \S + ) \s * { / ,
17+ / ^ ( (?: (?: a b s t r a c t | f i n a l | p u b l i c ) \s + ) * ) ( (?: c l a s s | r e c o r d ) \s + ( \S + ) \s * [ { < ] . * ) $ / s ,
1918 ) ;
2019 if ( classMatch != null ) {
2120 invariant ( currentClassName == null , "Top-level class nesting?" ) ;
2221
2322 const modifiers = new Set ( classMatch [ 1 ] . trim ( ) . split ( / \s + / ) ) ;
2423 modifiers . delete ( "public" ) ;
2524
26- currentClassName = classMatch [ 2 ] ;
27- classes [ currentClassName ] = { code : [ ] , modifiers } ;
25+ currentClassName = classMatch [ 3 ] ;
26+ classes [ currentClassName ] = {
27+ code : [ ] ,
28+ declaration : [
29+ ...Array . from ( modifiers ) . sort ( ) ,
30+ classMatch [ 2 ] . replace ( / } ? \n * $ / , "" ) ,
31+ ]
32+ . filter ( Boolean )
33+ . join ( " " ) ,
34+ } ;
35+
36+ if ( / } \n * $ / . test ( line ) ) {
37+ currentClassName = null ;
38+ }
39+
2840 continue ;
2941 }
3042
@@ -44,8 +56,8 @@ export function splitCodeIntoClasses(
4456
4557 invariant ( currentClassName == null , "Unfinished class?" ) ;
4658
47- return mapObjectValues ( classes , ( { code, modifiers } ) => ( {
59+ return mapObjectValues ( classes , ( { code, declaration } ) => ( {
4860 code : code . join ( "" ) . replace ( / ^ \n + / , "" ) . replace ( / \n + $ / , "" ) ,
49- modifiers : Array . from ( modifiers ) ,
61+ declaration ,
5062 } ) ) ;
5163}
0 commit comments