give a deprecate warning when using newPar to construct tuple expressions (#20312)

* error/deprecate when using `newPar` to construct tuple expressions

* Update lib/core/macros.nim

* fixes
This commit is contained in:
ringabout
2022-09-07 03:38:08 +08:00
committed by GitHub
parent 5d947bb791
commit b2c5f6f3c8
2 changed files with 8 additions and 3 deletions

View File

@@ -1073,7 +1073,12 @@ proc newStmtList*(stmts: varargs[NimNode]): NimNode =
## Create a new statement list.
result = newNimNode(nnkStmtList).add(stmts)
proc newPar*(exprs: varargs[NimNode]): NimNode =
proc newPar*(exprs: NimNode): NimNode =
## Create a new parentheses-enclosed expression.
newNimNode(nnkPar).add(exprs)
proc newPar*(exprs: varargs[NimNode]): NimNode {.deprecated:
"don't use newPar/nnkPar to construct tuple expressions; use nnkTupleConstr instead".} =
## Create a new parentheses-enclosed expression.
newNimNode(nnkPar).add(exprs)

View File

@@ -512,7 +512,7 @@ macro scanTuple*(input: untyped; pattern: static[string]; matcherTypes: varargs[
inc userMatches
else: discard
inc p
result.add newPar(newCall(ident("scanf"), input, newStrLitNode(pattern)))
result.add nnkTupleConstr.newTree(newCall(ident("scanf"), input, newStrLitNode(pattern)))
for arg in arguments:
result[^1][0].add arg
result[^1].add arg
@@ -588,7 +588,7 @@ macro scanp*(input, idx: typed; pattern: varargs[untyped]): bool =
action
# (x) a # bind action a to (x)
if it[0].kind == nnkPar and it.len == 2:
if it[0].kind in {nnkPar, nnkTupleConstr} and it.len == 2:
result = atm(it[0], input, idx, placeholder(it[1], input, idx))
elif it.kind == nnkInfix and it[0].eqIdent"->":
# bind matching to some action: