diff --git a/Sources/_StringProcessing/PrintAsPattern.swift b/Sources/_StringProcessing/PrintAsPattern.swift index 953df6882..61eb54ca8 100644 --- a/Sources/_StringProcessing/PrintAsPattern.swift +++ b/Sources/_StringProcessing/PrintAsPattern.swift @@ -518,6 +518,14 @@ extension PrettyPrinter { } else { output(base.0) } + + case let .characterClass(cc): + if wrap { + output("One(\(cc._patternBase))") + } else { + output(cc._patternBase) + } + default: print(" // TODO: Atom \(a)") } diff --git a/Tests/RegexTests/RenderDSLTests.swift b/Tests/RegexTests/RenderDSLTests.swift index c38ff0663..fbfbee616 100644 --- a/Tests/RegexTests/RenderDSLTests.swift +++ b/Tests/RegexTests/RenderDSLTests.swift @@ -276,4 +276,40 @@ extension RenderDSLTests { } """#) } + + func testCharacterClass() throws { + try testConversion(#"[abc]+"#, #""" + Regex { + OneOrMore(.anyOf("abc")) + } + """#) + + try testConversion(#"[[:whitespace:]]"#, #""" + Regex { + One(.whitespace) + } + """#) + + try testConversion(#"[\b\w]+"#, #""" + Regex { + OneOrMore { + CharacterClass( + .anyOf("\u{8}"), + .word + ) + } + } + """#) + + try testConversion(#"[abc\sd]+"#, #""" + Regex { + OneOrMore { + CharacterClass( + .anyOf("abcd"), + .whitespace + ) + } + } + """#) + } }