diff --git a/Sources/RegexBuilder/Builder.swift b/Sources/RegexBuilder/Builder.swift index a50f069ec..dfafd3803 100644 --- a/Sources/RegexBuilder/Builder.swift +++ b/Sources/RegexBuilder/Builder.swift @@ -18,8 +18,10 @@ public enum RegexComponentBuilder { .init(node: .empty) } - public static func buildPartialBlock(first: R ) -> R { - first + public static func buildPartialBlock( + first component: R + ) -> Regex { + component.regex } public static func buildExpression(_ regex: R) -> R { diff --git a/Tests/RegexBuilderTests/RegexDSLTests.swift b/Tests/RegexBuilderTests/RegexDSLTests.swift index 5b3914e3b..fc31e575f 100644 --- a/Tests/RegexBuilderTests/RegexDSLTests.swift +++ b/Tests/RegexBuilderTests/RegexDSLTests.swift @@ -1015,7 +1015,7 @@ class RegexDSLTests: XCTestCase { XCTAssertEqual(str.wholeMatch(of: parser)?.1, version) } } - + func testZeroWidthConsumer() throws { struct Trace: CustomConsumingRegexComponent { typealias RegexOutput = Void @@ -1051,6 +1051,26 @@ class RegexDSLTests: XCTestCase { """) } + + func testRegexComponentBuilderResultType() { + // Test that the user can declare a closure or computed property marked with + // `@RegexComponentBuilder` with `Regex` as the result type. + @RegexComponentBuilder + var unaryWithSingleNonRegex: Regex { + OneOrMore("a") + } + @RegexComponentBuilder + var multiComponent: Regex { + OneOrMore("a") + "b" + } + struct MyCustomRegex: RegexComponent { + @RegexComponentBuilder + var regex: Regex { + OneOrMore("a") + } + } + } } extension Unicode.Scalar {