Collect imports from schema
This commit is contained in:
parent
460e7596f4
commit
2d64dae0dd
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue