1
1
// This module tests that the classes generated in out.ts match the CSL API
2
2
// at the method level
3
3
import fs from "node:fs" ;
4
- import { ClassInfo , MethodInfo , ParamInfo , SomeType } from "../test_types" ;
4
+ import { ClassInfo , ClassRename , MethodInfo , ParamInfo , SomeType } from "../test_types" ;
5
5
import grammar , { TypeDefsSemantics } from "./grammar.ohm-bundle"
6
6
import { describe , test } from "@jest/globals" ;
7
7
@@ -134,6 +134,51 @@ semantics.addOperation<string>("attrName()", {
134
134
}
135
135
return classes ;
136
136
}
137
+ // These operations are unrelated to the previous ones. They are only used
138
+ // for parsing renaming exports.
139
+ } ) . addOperation < ClassRename > ( "rename()" , {
140
+ Rename ( originalName , _as , newName ) {
141
+ // console.log("Rename");
142
+ return { originalName : originalName . sourceString , newName : newName . sourceString } ;
143
+ }
144
+ } ) . addOperation < Array < ClassRename > | undefined > ( "renames_maybe()" , {
145
+ OtherExport ( otherExportNode ) {
146
+ // console.log("OtherExport");
147
+ if ( otherExportNode . ctorName == "OtherExport_export_rename" ) {
148
+ return otherExportNode . renames ( ) ;
149
+ } else {
150
+ return undefined ;
151
+ }
152
+ } ,
153
+ Import ( _0 , _1 , _2 , _3 , _4 , _5 , _6 ) {
154
+ // console.log("Import");
155
+ return undefined ;
156
+ } ,
157
+ ClassDecl ( _0 , _1 , _2 , _3 , _4 , _5 , _6 ) {
158
+ // console.log("ClassDecl");
159
+ return undefined
160
+ }
161
+ } ) . addOperation < Array < ClassRename > > ( "renames()" , {
162
+ TopLevel ( topLevelNodes ) {
163
+ // console.log("TopLevel");
164
+ let renames : Array < ClassRename > = [ ] ;
165
+ for ( const node of topLevelNodes . children ) {
166
+ const rename : Array < ClassRename > | undefined = node . renames_maybe ( ) ;
167
+ if ( rename ) {
168
+ renames = renames . concat ( rename ) ;
169
+ }
170
+ }
171
+ return renames ;
172
+ } ,
173
+ OtherExport_export_rename ( _export , _braceOpen , renamesList , _braceClose , _semicolon ) {
174
+ // console.log("OtherExport_export_rename")
175
+ let renames : Array < ClassRename > = [ ] ;
176
+ for ( const renameNode of renamesList . asIteration ( ) . children ) {
177
+ const rename : ClassRename = renameNode . rename ( ) ;
178
+ renames . push ( rename ) ;
179
+ }
180
+ return renames
181
+ } ,
137
182
} ) ;
138
183
139
184
@@ -143,6 +188,8 @@ let cslClassesMap: Map<string, MethodInfo[]> = new Map(cslClasses.map((cls) => [
143
188
console . log ( "Traversing parse tree of CDL type definitions..." ) ;
144
189
const cdlClasses : Array < ClassInfo > = semantics ( cdlMatch ) . classes ( ) ;
145
190
let cdlClassesMap : Map < string , MethodInfo [ ] > = new Map ( cdlClasses . map ( ( cls ) => [ cls . name , cls . methods ] ) )
191
+ console . log ( "Extracting renaming exports from CDL type definitions..." ) ;
192
+ const classRenames : Array < ClassRename > = semantics ( cdlMatch ) . renames ( ) ;
146
193
147
194
// We trace all the classes as parsed
148
195
if ( traceClassInfos ) {
@@ -153,7 +200,17 @@ if (traceClassInfos) {
153
200
}
154
201
}
155
202
}
156
- // First we filter out the ignored classes from clsClassesMap based on the classInfo file.
203
+
204
+ // Before filtering, we rename all classes that are re-exported with a different name
205
+ for ( const rename of classRenames ) {
206
+ const clsValue = cdlClassesMap . get ( rename . originalName )
207
+ if ( clsValue ) {
208
+ cdlClassesMap . delete ( rename . originalName ) ;
209
+ cdlClassesMap . set ( rename . newName , clsValue ) ;
210
+ }
211
+ }
212
+
213
+ // We filter out the ignored classes from clsClassesMap based on the classInfo file.
157
214
// We don't want to fail when checking methods if cdlClassesMap does not contain these classes.
158
215
const classInfo : { ignore : Array < string > } = JSON . parse ( fs . readFileSync ( "csl-types/class-info.json" , "utf-8" ) ) ;
159
216
for ( const cls of classInfo . ignore ) {
0 commit comments