mirror of
https://github.com/status-im/nim-confutils.git
synced 2025-01-22 01:50:35 +00:00
Support for the confutils pragmas in the cli
API.
This works around the fact that Nim doesn't support custom pragmas for proc params at the moment by removing them from the AST.
This commit is contained in:
parent
62e53ff1c1
commit
311cf156b8
@ -86,6 +86,12 @@ proc parseCmdArg*(T: type SomeSignedInt, s: TaintedString): T =
|
||||
proc parseCmdArg*(T: type SomeUnsignedInt, s: TaintedString): T =
|
||||
T parseUInt(string s)
|
||||
|
||||
proc parseCmdArg*(T: type SomeFloat, p: TaintedString): T =
|
||||
result = parseFloat(p)
|
||||
|
||||
proc parseCmdArg*(T: type bool, p: TaintedString): T =
|
||||
result = parseBool(p)
|
||||
|
||||
proc parseCmdArg*(T: type enum, s: TaintedString): T =
|
||||
parseEnum[T](string(s))
|
||||
|
||||
@ -331,9 +337,8 @@ proc dispatchImpl(cliProcSym, cliArgs, loadArgs: NimNode): NimNode =
|
||||
# Turn any default parameters into the confutils's `defaultValue` pragma
|
||||
if arg[2].kind != nnkEmpty:
|
||||
if arg[0].kind != nnkPragmaExpr:
|
||||
arg[0] = newTree(nnkPragmaExpr, arg[0])
|
||||
arg[0].add newTree(nnkPragma,
|
||||
newColonExpr(bindSym"defaultValue", arg[2]))
|
||||
arg[0] = newTree(nnkPragmaExpr, arg[0], newTree(nnkPragma))
|
||||
arg[0][1].add newColonExpr(bindSym"defaultValue", arg[2])
|
||||
arg[2] = newEmptyNode()
|
||||
|
||||
configFields.add arg
|
||||
@ -383,5 +388,11 @@ macro cli*(args: varargs[untyped]): untyped =
|
||||
|
||||
# Generate the final code
|
||||
result = newStmtList(cliProc, dispatchImpl(cliProcName, cliProc.params, args))
|
||||
|
||||
# TODO: remove this once Nim supports custom pragmas on proc params
|
||||
for p in cliProc.params:
|
||||
if p.kind == nnkEmpty: continue
|
||||
p[0] = skipPragma p[0]
|
||||
|
||||
debugMacroResult "CLI Code"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user