From 0ae9f5e4df228213f656d2393cc7650dfd926eda Mon Sep 17 00:00:00 2001 From: Esteban C Borsani Date: Wed, 31 Dec 2025 21:31:33 -0300 Subject: [PATCH] Add `parseEnum` support for triple quoted string and raw string enum values (#25401) (cherry picked from commit ae8a1739f8f703bff5df56a236887211e5cab2c3) --- lib/std/enumutils.nim | 4 ++-- tests/stdlib/tstrutils.nim | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/std/enumutils.nim b/lib/std/enumutils.nim index 9c338817d3..8bb593d74d 100644 --- a/lib/std/enumutils.nim +++ b/lib/std/enumutils.nim @@ -47,7 +47,7 @@ macro genEnumCaseStmt*(typ: typedesc, argSym: typed, default: typed, of nnkEnumFieldDef: fVal = f[0].strVal case f[1].kind - of nnkStrLit: + of nnkStrLit .. nnkTripleStrLit: fStr = f[1].strVal of nnkTupleConstr: fStr = f[1][1].strVal @@ -57,7 +57,7 @@ macro genEnumCaseStmt*(typ: typedesc, argSym: typed, default: typed, fNum = f[1].intVal else: let fAst = f[0].getImpl - if fAst.kind == nnkStrLit: + if fAst.kind in {nnkStrLit .. nnkTripleStrLit}: fStr = fAst.strVal else: error("Invalid tuple syntax!", f[1]) diff --git a/tests/stdlib/tstrutils.nim b/tests/stdlib/tstrutils.nim index dfa72faf22..d57fa2d8ae 100644 --- a/tests/stdlib/tstrutils.nim +++ b/tests/stdlib/tstrutils.nim @@ -642,6 +642,30 @@ template main() = let myA = CAMPAIGN_TABLE doAssert $parseEnum[Tables](myA) == "wikientries_campaign" + block: + const tripleQuotedStr = """foobar""" + + type MyEnum = enum + a = tripleQuotedStr + b = """bazquz""" + + let myA = tripleQuotedStr + doAssert $parseEnum[MyEnum](myA) == myA + let myB = "bazquz" + doAssert $parseEnum[MyEnum](myB) == myB + + block: + const rawStr = r"foobar" + + type MyEnum = enum + a = rawStr + b = r"bazquz" + + let myA = rawStr + doAssert $parseEnum[MyEnum](myA) == myA + let myB = r"bazquz" + doAssert $parseEnum[MyEnum](myB) == myB + block: # check enum defined in block type Bar = enum