diff --git a/Package.resolved b/Package.resolved index f3cc78c..1283f6e 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,6 +1,15 @@ { "object": { "pins": [ + { + "package": "swift-builders", + "repositoryURL": "https://github.com/davdroman/swift-builders", + "state": { + "branch": null, + "revision": "08d96a63dd74b8efb87987b177bfe762accf279e", + "version": "0.1.0" + } + }, { "package": "SnapshotTesting", "repositoryURL": "https://github.com/pointfreeco/swift-snapshot-testing", diff --git a/Package.swift b/Package.swift index bb569ef..d7d9c5a 100644 --- a/Package.swift +++ b/Package.swift @@ -15,7 +15,9 @@ let package = Package( .library(name: "TextBuilder", targets: ["TextBuilder"]), ], targets: [ - .target(name: "TextBuilder"), + .target(name: "TextBuilder", dependencies: [ + .product(name: "Builders", package: "swift-builders"), + ]), .testTarget( name: "TextBuilderTests", dependencies: [ @@ -31,4 +33,5 @@ let package = Package( package.dependencies = [ .package(name: "SnapshotTesting", url: "https://github.com/pointfreeco/swift-snapshot-testing", from: "1.8.2"), + .package(name: "swift-builders", url: "https://github.com/davdroman/swift-builders", from: "0.1.0"), ] diff --git a/Sources/TextBuilder/TextBuilder.swift b/Sources/TextBuilder/TextBuilder.swift index 7f2d1ca..f89b0ce 100644 --- a/Sources/TextBuilder/TextBuilder.swift +++ b/Sources/TextBuilder/TextBuilder.swift @@ -56,8 +56,4 @@ public struct TextBuilder { public static func buildFinalResult(_ texts: [Text]) -> Text { texts.joined(separator: Text(Separator.separator)) } - - public static func buildFinalResult(_ texts: [Text]) -> [Text] { - texts - } } diff --git a/Sources/TextBuilder/TextBuilderSeparator.swift b/Sources/TextBuilder/TextBuilderSeparator.swift index b8714c2..89ed129 100644 --- a/Sources/TextBuilder/TextBuilderSeparator.swift +++ b/Sources/TextBuilder/TextBuilderSeparator.swift @@ -1,5 +1,3 @@ -import Foundation - public protocol TextBuilderSeparator { associatedtype Separator: StringProtocol static var separator: Separator { get } diff --git a/Sources/TextBuilder/TextExtensions.swift b/Sources/TextBuilder/TextExtensions.swift index 55cfc54..4842107 100644 --- a/Sources/TextBuilder/TextExtensions.swift +++ b/Sources/TextBuilder/TextExtensions.swift @@ -1,3 +1,4 @@ +import Builders import SwiftUI extension StringProtocol { @@ -5,7 +6,6 @@ extension StringProtocol { } extension Sequence where Element == Text { - /// Returns a new `Text` by concatenating the elements of the sequence, /// /// The following example shows how an array of `Text` views can be joined to a @@ -30,16 +30,17 @@ extension Sequence where Element == Text { } } -extension Text { +public typealias TextArrayBuilder = ArrayBuilder +extension Text { /// Creates a combined text view based on the given `content` by inserting /// `separator` text views between each received text component. /// /// - Parameters: /// - separator: The text to use as a separator between received text components. /// By default there is no separator. - /// - content: A text builder that creates text components. - public init(separator: Text = Text(""), @BasicTextBuilder content: () -> [Text]) { + /// - content: A text array builder that creates text components. + public init(separator: Text = Text(""), @TextArrayBuilder content: () -> [Text]) { self = content().joined(separator: separator) } @@ -48,8 +49,8 @@ extension Text { /// /// - Parameters: /// - separator: The string to use as a separator between received text components. - /// - content: A text builder that creates text components. - public init(separator: Separator, @BasicTextBuilder content: () -> [Text]) { + /// - content: A text array builder that creates text components. + public init(separator: Separator, @TextArrayBuilder content: () -> [Text]) { self.init(separator: Text(separator), content: content) } } diff --git a/Tests/TextBuilderTests/TextExtensionsTests.swift b/Tests/TextBuilderTests/TextExtensionsTests.swift index 5bcb434..f82176f 100644 --- a/Tests/TextBuilderTests/TextExtensionsTests.swift +++ b/Tests/TextBuilderTests/TextExtensionsTests.swift @@ -24,31 +24,31 @@ final class TextExtensionsTests: XCTestCase { func testInit_noSeparator() { assertTextSnapshot( - Text(content: basicTextBuilderText) + Text(content: textArrayBuilderText) ) assertTextSnapshot( - Text(separator: Text(""), content: basicTextBuilderText) + Text(separator: Text(""), content: textArrayBuilderText) ) assertTextSnapshot( - Text(separator: "", content: basicTextBuilderText) + Text(separator: "", content: textArrayBuilderText) ) } func testInit_spaceSeparator() { assertTextSnapshot( - Text(separator: Text(" "), content: basicTextBuilderText) + Text(separator: Text(" "), content: textArrayBuilderText) ) assertTextSnapshot( - Text(separator: " ", content: basicTextBuilderText) + Text(separator: " ", content: textArrayBuilderText) ) } func testInit_newlineSeparator() { assertTextSnapshot( - Text(separator: Text("\n"), content: basicTextBuilderText) + Text(separator: Text("\n"), content: textArrayBuilderText) ) assertTextSnapshot( - Text(separator: "\n", content: basicTextBuilderText) + Text(separator: "\n", content: textArrayBuilderText) ) } } @@ -63,8 +63,8 @@ private extension TextExtensionsTests { ] } - @BasicTextBuilder - func basicTextBuilderText() -> [Text] { + @TextArrayBuilder + func textArrayBuilderText() -> [Text] { Text("Lorem").underline().foregroundColor(.blue) Text("ipsum dolor") Text("sit").bold()