Collect imports from schema

This commit is contained in:
Emery Hemingway 2021-09-06 16:16:22 +02:00
parent 460e7596f4
commit 2d64dae0dd
2 changed files with 34 additions and 5 deletions

View File

@ -372,6 +372,22 @@ proc generateProcs(result: var seq[PNode]; name: string; sn: SchemaNode) =
initRecordCall))
else: discard
proc collectRefImports(imports: PNode; sn: SchemaNode) =
case sn.kind
of snkRef:
if sn.refPath.len > 1:
imports.add ident(sn.refPath[0])
else:
for child in sn.items:
collectRefImports(imports, child)
proc collectRefImports(imports: PNode; scm: Schema) =
if scm.embeddedType.contains {'.'}:
let m = split(scm.embeddedType, '.', 1 )[0]
imports.add ident(m)
for _, def in scm.definitions:
collectRefImports(imports, def)
proc generateNimFile*(scm: Schema; path: string) =
var
knownTypes: TypeTable
@ -441,11 +457,11 @@ proc generateNimFile*(scm: Schema; path: string) =
generateProcs(procs, name, def)
for typeDef in knownTypes.values:
typeSection.add typeDef
var
imports = nkImportStmt.newNode.add(
ident"std/typetraits",
ident"preserves")
module = newNode(nkStmtList).add(
var imports = nkImportStmt.newNode.add(
ident"std/typetraits",
ident"preserves")
collectRefImports(imports, scm)
var module = newNode(nkStmtList).add(
imports,
typeSection,
constSection

View File

@ -75,6 +75,19 @@ proc add(a: SchemaNode; b: SchemaNode|seq[SchemaNode]): SchemaNode {.discardable
a.nodes.add b
a
iterator items*(sn: SchemaNode): SchemaNode =
case sn.kind
of snkAny, snkAtom, snkLiteral, snkRef: discard
of snkAlt:
yield sn.altBranch
of snkEmbedded:
yield sn.embed
of snkNamed:
yield sn.pattern
else:
for i in 0..sn.nodes.high:
yield sn.nodes[i]
proc `$`*(n: SchemaNode): string =
case n.kind
of snkOr: