Skip to content

Commit 4f8f67a

Browse files
authored
Remove the last SPI use of _RegexParser symbols (#416)
PatternConverter uses one last AST-based API defined in _StringProcessing, which is technically not allowed but not problematic b/c PatternConverter also imports _RegexParser. However, this can have compile-time problems later on, so this changes the entry point for PatternConverter to just use an Any parameter that is checked at runtime to actually be AST.
1 parent 4f1e0ee commit 4f8f67a

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

Sources/PatternConverter/PatternConverter.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ struct PatternConverter: ParsableCommand {
7070

7171
print()
7272
if !skipDSL {
73-
let render = ast.renderAsBuilderDSL(
73+
let render = renderAsBuilderDSL(
74+
ast: ast,
7475
maxTopDownLevels: topDownConversionLimit,
7576
minBottomUpLevels: bottomUpConversionLimit
7677
)

Sources/_StringProcessing/PrintAsPattern.swift

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,26 @@
1717
// incremental conversion, such that leaves remain
1818
// as canonical regex literals.
1919

20+
/// Renders an AST tree as a Pattern DSL.
21+
///
22+
/// - Parameters:
23+
/// - ast: A `_RegexParser.AST` instance.
24+
/// - maxTopDownLevels: The number of levels down from the root of the tree
25+
/// to perform conversion. `nil` means no limit.
26+
/// - minBottomUpLevels: The number of levels up from the leaves of the tree
27+
/// to perform conversion. `nil` means no limit.
28+
/// - Returns: A string representation of `ast` in the `RegexBuilder` syntax.
2029
@_spi(PatternConverter)
21-
extension AST {
22-
/// Renders as a Pattern DSL.
23-
@_spi(PatternConverter)
24-
public func renderAsBuilderDSL(
25-
maxTopDownLevels: Int? = nil,
26-
minBottomUpLevels: Int? = nil
27-
) -> String {
28-
var printer = PrettyPrinter(
29-
maxTopDownLevels: maxTopDownLevels,
30-
minBottomUpLevels: minBottomUpLevels)
31-
printer.printAsPattern(self)
32-
return printer.finish()
33-
}
30+
public func renderAsBuilderDSL(
31+
ast: Any,
32+
maxTopDownLevels: Int? = nil,
33+
minBottomUpLevels: Int? = nil
34+
) -> String {
35+
var printer = PrettyPrinter(
36+
maxTopDownLevels: maxTopDownLevels,
37+
minBottomUpLevels: minBottomUpLevels)
38+
printer.printAsPattern(ast as! AST)
39+
return printer.finish()
3440
}
3541

3642
extension PrettyPrinter {

0 commit comments

Comments
 (0)