Skip to content

Commit f343f04

Browse files
committed
Resolve AST/Literal conversion issues
1 parent 4508479 commit f343f04

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

Sources/_StringProcessing/LiteralPrinter.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,15 @@ extension String {
609609
}
610610

611611
func escapingConfusableCharacters() -> String {
612-
lazy.map(\.escapingConfusable).joined()
612+
reduce(into: "") { result, ch in
613+
for scalar in ch.unicodeScalars {
614+
if scalar.isPrintableASCII {
615+
result.append(Character(scalar))
616+
} else {
617+
result.append(scalar.escapedString)
618+
}
619+
}
620+
}
613621
}
614622
}
615623

Sources/_StringProcessing/Regex/ASTConversion.swift

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,27 @@ extension AST.Node {
9595
}
9696
}
9797

98+
func appendAtom(_ atom: AST.Atom, to str: inout String) -> Bool {
99+
switch atom.kind {
100+
case .char(let c):
101+
str.append(c)
102+
return true
103+
case .scalar(let s):
104+
str.append(Character(s.value))
105+
return true
106+
case .escaped(let c):
107+
guard let value = c.scalarValue else { return false }
108+
str.append(Character(value))
109+
return true
110+
case .scalarSequence(let seq):
111+
str.append(contentsOf: seq.scalarValues.lazy.map(Character.init))
112+
return true
113+
114+
default:
115+
return false
116+
}
117+
}
118+
98119
switch self {
99120
case .alternation(let v): return v.children
100121
case .concatenation(let v):
@@ -103,9 +124,7 @@ extension AST.Node {
103124
.coalescing(with: "", into: { AST.Node.quote(.init($0, .fake)) }) { str, node in
104125
switch node {
105126
case .atom(let a):
106-
guard let c = a.literalCharacterValue else { return false }
107-
str.append(c)
108-
return true
127+
return appendAtom(a, to: &str)
109128
case .quote(let q):
110129
str += q.literal
111130
return true

0 commit comments

Comments
 (0)