@@ -162,6 +162,8 @@ proc getLegacyConstantName(oldName: string): string =
162162 renamed = oldName
163163 result = renamed.snakeToCamel ()
164164
165+ template helper (body:untyped ):untyped = body
166+
165167macro renameEnumFields (enumdef : untyped ): untyped =
166168 if enumdef.kind != nnkTypeDef:
167169 raise newException (Exception , " generateDeprecatedEnumConst macro can only be used on enum type definitions" )
@@ -170,7 +172,7 @@ macro renameEnumFields(enumdef : untyped): untyped =
170172 let enumTypeShortName = enumTypeName.toSeq.map (x => (if (x in {'A' .. 'Z' }): $ x else : " " )).join (" " ).toLowerAscii ()
171173
172174 # generate enum defs
173- result = nnkTypeDef.newTree (
175+ var renamedEnumDef = nnkTypeDef.newTree (
174176 nnkPostfix.newTree (
175177 newIdentNode (" *" ),
176178 newIdentNode (enumTypeName)
@@ -184,54 +186,93 @@ macro renameEnumFields(enumdef : untyped): untyped =
184186 if enumFieldNode.kind == nnkEmpty:
185187 continue
186188 elif enumFieldNode.kind == nnkEnumFieldDef:
187- result [2 ].add (
189+ renamedEnumDef [2 ].add (
188190 nnkEnumFieldDef.newTree (
189191 newIdentNode (enumFieldNode[0 ].strVal.renameEnumFieldName (enumTypeShortName)),
190192 enumFieldNode[1 ]
191193 )
192194 )
193195 elif enumFieldNode.kind == nnkIdent:
194- result [2 ].add (
196+ renamedEnumDef [2 ].add (
195197 newIdentNode (enumFieldNode.strVal.renameEnumFieldName (enumTypeShortName))
196198 )
197199 else :
198200 raise newException (Exception , " generateDeprecatedEnumConst macro can only be used on enum type definitions" )
199201
202+ echo " \n\n " & " =" .repeat (50 )
200203 echo " [WebUI] Renaming Enum Definition:"
204+ echo " # Original Enum Def:"
201205 echo " =" .repeat (50 )
202206 echo enumdef.repr
203207 echo " =" .repeat (50 )
204- echo result .repr
205- echo " _" .repeat (50 )
206-
207-
208- # # generate legacy constants
209- # var constStmt = nnkStmtList.newTree(
210- # nnkConstSection.newTree(
211- # )
212- # )
213- # for enumFieldNode in enumdef[2]:
214- # var constName, enumFieldName: string
215- # if enumFieldNode.kind == nnkEmpty:
216- # continue
217- # elif enumFieldNode.kind == nnkEnumFieldDef:
218- # constName = enumFieldNode[0].strVal.getLegacyConstantName()
219- # enumFieldName = enumFieldNode[0].strVal.renameEnumFieldName(enumTypeShortName)
220- # elif enumFieldNode.kind == nnkIdent:
221- # constName = enumFieldNode.strVal.getLegacyConstantName()
222- # enumFieldName = enumFieldNode.strVal.renameEnumFieldName(enumTypeShortName)
208+ echo " # Renamed Enum Def:"
209+ echo renamedEnumDef.repr
210+ echo " =" .repeat (50 )
211+ echo " # Generated procs to mimic legacy constants:"
212+
213+ renamedEnumDef[0 ][1 ] = (enumTypeName & " Helper" ).newIdentNode ()
214+
215+ var statements = nnkStmtList.newTree (
216+ nnkTypeSection.newTree (
217+ renamedEnumDef
218+ )
219+ )
220+
221+ # add procs to mimic legacy constants
222+ for enumFieldNode in enumdef[2 ]:
223+ var constName, enumFieldName: string
224+ if enumFieldNode.kind == nnkEmpty:
225+ continue
226+ elif enumFieldNode.kind == nnkEnumFieldDef:
227+ constName = enumFieldNode[0 ].strVal.getLegacyConstantName ()
228+ enumFieldName = enumFieldNode[0 ].strVal.renameEnumFieldName (enumTypeShortName)
229+ elif enumFieldNode.kind == nnkIdent:
230+ constName = enumFieldNode.strVal.getLegacyConstantName ()
231+ enumFieldName = enumFieldNode.strVal.renameEnumFieldName (enumTypeShortName)
232+
233+ statements.add (
234+ nnkProcDef.newTree (
235+ nnkPostfix.newTree (
236+ newIdentNode (" *" ),
237+ newIdentNode (constName)
238+ ),
239+ newEmptyNode (),
240+ newEmptyNode (),
241+ nnkFormalParams.newTree (
242+ newIdentNode (enumTypeName & " Helper" )
243+ ),
244+ nnkPragma.newTree (
245+ newIdentNode (" inline" ),
246+ newIdentNode (" deprecated" )
247+ ),
248+ newEmptyNode (),
249+ nnkStmtList.newTree (
250+ nnkDotExpr.newTree (
251+ newIdentNode (enumTypeName & " Helper" ),
252+ newIdentNode (enumFieldName)
253+ )
254+ )
255+ )
256+ )
223257
224- # constStmt[0].add(
225- # nnkConstDef.newTree(
226- # nnkPostfix.newTree(
227- # newIdentNode("*"),
228- # newIdentNode(constName)
229- # ),
230- # newEmptyNode(),
231- # nnkDotExpr.newTree(
232- # newIdentNode(enumTypeName),
233- # newIdentNode(enumFieldName)
234- # )
235- # )
236- # )
258+ echo statements[^ 1 ].repr
259+
260+ echo " *" .repeat (50 )
261+
262+ statements.add (
263+ (enumTypeName & " Helper" ).newIdentNode ()
264+ )
265+
266+ result = nnkTypeDef.newTree (
267+ nnkPostfix.newTree (
268+ newIdentNode (" *" ),
269+ newIdentNode (enumTypeName)
270+ ),
271+ newEmptyNode (),
272+ nnkCall.newTree (
273+ newIdentNode (" helper" ),
274+ statements
275+ )
276+ )
237277
278+ # echo result
0 commit comments