Skip to content

Commit eb39f3e

Browse files
committed
Add convenience initializer for raw string literals
1 parent 5bc624d commit eb39f3e

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

Sources/SwiftSyntaxBuilder/StringLiteralExprConvenienceInitializers.swift

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,33 @@
1313
import SwiftSyntax
1414

1515
extension StringLiteralExpr {
16-
public init(_ value: String, openQuote: TokenSyntax = .stringQuote, closeQuote: TokenSyntax = .stringQuote) {
16+
/// Creates a string literal, optionally specifying quotes and delimiters.
17+
public init(
18+
openDelimiter: TokenSyntax? = nil,
19+
openQuote: TokenSyntax = .stringQuote,
20+
_ value: String,
21+
closeQuote: TokenSyntax = .stringQuote,
22+
closeDelimiter: TokenSyntax? = nil
23+
) {
1724
let content = TokenSyntax.stringSegment(value)
1825
let segment = StringSegment(content: content)
1926
let segments = StringLiteralSegments([segment])
2027

21-
self.init(openQuote: openQuote,
22-
segments: segments,
23-
closeQuote: closeQuote)
28+
self.init(
29+
openDelimiter: openDelimiter,
30+
openQuote: openQuote,
31+
segments: segments,
32+
closeQuote: closeQuote,
33+
closeDelimiter: closeDelimiter
34+
)
35+
}
36+
37+
/// Creates a raw string literal.
38+
public init(raw value: String) {
39+
self.init(
40+
openDelimiter: .rawStringDelimiter("#"),
41+
value,
42+
closeDelimiter: .rawStringDelimiter("#")
43+
)
2444
}
2545
}

Tests/SwiftSyntaxBuilderTest/StringLiteralTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ final class StringLiteralTests: XCTestCase {
3333
#line: (StringLiteralExpr("asdf"), #"␣"asdf""#),
3434
#line: ("", #"␣"""#),
3535
#line: ("asdf", #"␣"asdf""#),
36+
#line: (StringLiteralExpr(raw: "abc"), "␣#\"abc\"#"),
37+
#line: (StringLiteralExpr(raw: #""quoted""#), "␣#\"\"quoted\"\"#"),
3638
]
3739

3840
for (line, testCase) in testCases {

0 commit comments

Comments
 (0)