From d58c03370e5057346c3acfccda5c417788805087 Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Fri, 19 Jul 2024 15:12:17 +0200 Subject: [PATCH] fix rendering of do inside call inside infix (fixes #69) (#79) --- src/phrenderer.nim | 6 +++++- tests/after/a00empty.nim | 4 +++- tests/after/a00empty.nim.nph.yaml | 27 +++++++++++++++++++++++++++ tests/before/a00empty.nim | 2 ++ tests/before/a00empty.nim.nph.yaml | 27 +++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/phrenderer.nim b/src/phrenderer.nim index 9304443..f5599d9 100644 --- a/src/phrenderer.nim +++ b/src/phrenderer.nim @@ -1753,7 +1753,11 @@ proc gsub(g: var TOutput, n: PNode, flags: SubFlags, extra: int) = if nNext.kind == nkPrefix or (opr != nil and phrenderer.isKeyword(opr)): optSpace(g) - if nNext.kind == nkInfix: + if nNext.kind == nkInfix or ( + # This is a special case for a do statement, which needs an extra set of parens + nNext.kind == nkCall and nNext.len >= 2 and nNext[1].kind == nkStmtList and + nNext[1].len >= 1 and nNext[1][^1].kind == nkCall + ): put(g, tkParLe, "(") gsub(g, n[1]) put(g, tkParRi, ")") diff --git a/tests/after/a00empty.nim b/tests/after/a00empty.nim index 8b13789..94b0bb1 100644 --- a/tests/after/a00empty.nim +++ b/tests/after/a00empty.nim @@ -1 +1,3 @@ - +check not (compiles do: + result: + int8 = 6) diff --git a/tests/after/a00empty.nim.nph.yaml b/tests/after/a00empty.nim.nph.yaml index f792449..195415c 100644 --- a/tests/after/a00empty.nim.nph.yaml +++ b/tests/after/a00empty.nim.nph.yaml @@ -1 +1,28 @@ kind: "nkStmtList" +sons: + - kind: "nkCommand" + sons: + - kind: "nkIdent" + ident: "check" + - kind: "nkPrefix" + sons: + - kind: "nkIdent" + ident: "not" + - kind: "nkCall" + sons: + - kind: "nkIdent" + ident: "compiles" + - kind: "nkStmtList" + sons: + - kind: "nkCall" + sons: + - kind: "nkIdent" + ident: "result" + - kind: "nkStmtList" + sons: + - kind: "nkAsgn" + sons: + - kind: "nkIdent" + ident: "int8" + - kind: "nkIntLit" + intVal: 6 diff --git a/tests/before/a00empty.nim b/tests/before/a00empty.nim index e69de29..7ae3224 100644 --- a/tests/before/a00empty.nim +++ b/tests/before/a00empty.nim @@ -0,0 +1,2 @@ +check not (compiles do: + result: int8 = 6) diff --git a/tests/before/a00empty.nim.nph.yaml b/tests/before/a00empty.nim.nph.yaml index f792449..195415c 100644 --- a/tests/before/a00empty.nim.nph.yaml +++ b/tests/before/a00empty.nim.nph.yaml @@ -1 +1,28 @@ kind: "nkStmtList" +sons: + - kind: "nkCommand" + sons: + - kind: "nkIdent" + ident: "check" + - kind: "nkPrefix" + sons: + - kind: "nkIdent" + ident: "not" + - kind: "nkCall" + sons: + - kind: "nkIdent" + ident: "compiles" + - kind: "nkStmtList" + sons: + - kind: "nkCall" + sons: + - kind: "nkIdent" + ident: "result" + - kind: "nkStmtList" + sons: + - kind: "nkAsgn" + sons: + - kind: "nkIdent" + ident: "int8" + - kind: "nkIntLit" + intVal: 6