Skip to content

Commit aec134f

Browse files
committed
Add a description method to Trivia
1 parent 6eee38b commit aec134f

File tree

3 files changed

+66
-19
lines changed

3 files changed

+66
-19
lines changed

Sources/SwiftSyntax/Trivia.swift.gyb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,26 @@ extension Trivia: ExpressibleByArrayLiteral {
177177
}
178178
}
179179

180+
extension Trivia: TextOutputStreamable {
181+
/// Prints the provided trivia as they would be written in a source file.
182+
///
183+
/// - Parameter stream: The stream to which to print the trivia.
184+
public func write<Target>(to target: inout Target)
185+
where Target: TextOutputStream {
186+
for piece in pieces {
187+
piece.write(to: &target)
188+
}
189+
}
190+
}
191+
192+
extension Trivia: CustomStringConvertible {
193+
public var description: String {
194+
var description = ""
195+
self.write(to: &description)
196+
return description
197+
}
198+
}
199+
180200
/// Concatenates two collections of `Trivia` into one collection.
181201
public func +(lhs: Trivia, rhs: Trivia) -> Trivia {
182202
return Trivia(pieces: lhs.pieces + rhs.pieces)

Sources/SwiftSyntax/gyb_generated/Trivia.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,26 @@ extension Trivia: ExpressibleByArrayLiteral {
303303
}
304304
}
305305

306+
extension Trivia: TextOutputStreamable {
307+
/// Prints the provided trivia as they would be written in a source file.
308+
///
309+
/// - Parameter stream: The stream to which to print the trivia.
310+
public func write<Target>(to target: inout Target)
311+
where Target: TextOutputStream {
312+
for piece in pieces {
313+
piece.write(to: &target)
314+
}
315+
}
316+
}
317+
318+
extension Trivia: CustomStringConvertible {
319+
public var description: String {
320+
var description = ""
321+
self.write(to: &description)
322+
return description
323+
}
324+
}
325+
306326
/// Concatenates two collections of `Trivia` into one collection.
307327
public func +(lhs: Trivia, rhs: Trivia) -> Trivia {
308328
return Trivia(pieces: lhs.pieces + rhs.pieces)

Tests/SwiftSyntaxTest/CustomReflectableTests.swift

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import XCTest
22
import SwiftSyntax
33

4+
private extension String {
5+
// This implementation is really slow; to use it outside a test it should be optimized.
6+
func trimmingTrailingWhitespace() -> String {
7+
return self.replacingOccurrences(of: "[ ]+\\n", with: "\n", options: .regularExpression)
8+
}
9+
}
10+
411

512
public class CustomReflectableTests: XCTestCase {
613

@@ -23,9 +30,9 @@ public class CustomReflectableTests: XCTestCase {
2330
expectedDumped: """
2431
▿ SwiftSyntax.TokenSyntax
2532
- text: "associatedtype"
26-
▿ leadingTrivia: SwiftSyntax.Trivia
33+
▿ leadingTrivia:
2734
- pieces: 0 elements
28-
▿ trailingTrivia: SwiftSyntax.Trivia
35+
▿ trailingTrivia:
2936
- pieces: 0 elements
3037
- tokenKind: SwiftSyntax.TokenKind.associatedtypeKeyword
3138
@@ -48,16 +55,16 @@ public class CustomReflectableTests: XCTestCase {
4855
▿ SwiftSyntax.TokenSequence
4956
▿ SwiftSyntax.TokenSyntax
5057
- text: "["
51-
▿ leadingTrivia: SwiftSyntax.Trivia
58+
▿ leadingTrivia:
5259
- pieces: 0 elements
53-
▿ trailingTrivia: SwiftSyntax.Trivia
60+
▿ trailingTrivia:
5461
- pieces: 0 elements
5562
- tokenKind: SwiftSyntax.TokenKind.leftSquareBracket
5663
▿ SwiftSyntax.TokenSyntax
5764
- text: "]"
58-
▿ leadingTrivia: SwiftSyntax.Trivia
65+
▿ leadingTrivia:
5966
- pieces: 0 elements
60-
▿ trailingTrivia: SwiftSyntax.Trivia
67+
▿ trailingTrivia:
6168
- pieces: 0 elements
6269
- tokenKind: SwiftSyntax.TokenKind.rightSquareBracket
6370
@@ -81,16 +88,16 @@ public class CustomReflectableTests: XCTestCase {
8188
▿ SwiftSyntax.ReversedTokenSequence
8289
▿ SwiftSyntax.TokenSyntax
8390
- text: "]"
84-
▿ leadingTrivia: SwiftSyntax.Trivia
91+
▿ leadingTrivia:
8592
- pieces: 0 elements
86-
▿ trailingTrivia: SwiftSyntax.Trivia
93+
▿ trailingTrivia:
8794
- pieces: 0 elements
8895
- tokenKind: SwiftSyntax.TokenKind.rightSquareBracket
8996
▿ SwiftSyntax.TokenSyntax
9097
- text: "["
91-
▿ leadingTrivia: SwiftSyntax.Trivia
98+
▿ leadingTrivia:
9299
- pieces: 0 elements
93-
▿ trailingTrivia: SwiftSyntax.Trivia
100+
▿ trailingTrivia:
94101
- pieces: 0 elements
95102
- tokenKind: SwiftSyntax.TokenKind.leftSquareBracket
96103
@@ -125,9 +132,9 @@ public class CustomReflectableTests: XCTestCase {
125132
▿ expression: SwiftSyntax.IntegerLiteralExprSyntax
126133
▿ digits: SwiftSyntax.TokenSyntax
127134
- text: "1"
128-
▿ leadingTrivia: SwiftSyntax.Trivia
135+
▿ leadingTrivia:
129136
- pieces: 0 elements
130-
▿ trailingTrivia: SwiftSyntax.Trivia
137+
▿ trailingTrivia:
131138
- pieces: 0 elements
132139
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
133140
- integerLiteral: "1"
@@ -138,9 +145,9 @@ public class CustomReflectableTests: XCTestCase {
138145
▿ expression: SwiftSyntax.IntegerLiteralExprSyntax
139146
▿ digits: SwiftSyntax.TokenSyntax
140147
- text: "2"
141-
▿ leadingTrivia: SwiftSyntax.Trivia
148+
▿ leadingTrivia:
142149
- pieces: 0 elements
143-
▿ trailingTrivia: SwiftSyntax.Trivia
150+
▿ trailingTrivia:
144151
- pieces: 0 elements
145152
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
146153
- integerLiteral: "2"
@@ -178,9 +185,9 @@ public class CustomReflectableTests: XCTestCase {
178185
▿ expression: SwiftSyntax.IntegerLiteralExprSyntax
179186
▿ digits: SwiftSyntax.TokenSyntax
180187
- text: "1"
181-
▿ leadingTrivia: SwiftSyntax.Trivia
188+
▿ leadingTrivia:
182189
- pieces: 0 elements
183-
▿ trailingTrivia: SwiftSyntax.Trivia
190+
▿ trailingTrivia:
184191
- pieces: 0 elements
185192
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
186193
- integerLiteral: "1"
@@ -191,9 +198,9 @@ public class CustomReflectableTests: XCTestCase {
191198
▿ expression: SwiftSyntax.IntegerLiteralExprSyntax
192199
▿ digits: SwiftSyntax.TokenSyntax
193200
- text: "2"
194-
▿ leadingTrivia: SwiftSyntax.Trivia
201+
▿ leadingTrivia:
195202
- pieces: 0 elements
196-
▿ trailingTrivia: SwiftSyntax.Trivia
203+
▿ trailingTrivia:
197204
- pieces: 0 elements
198205
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
199206
- integerLiteral: "2"
@@ -206,7 +213,7 @@ public class CustomReflectableTests: XCTestCase {
206213
testCases.forEach { keyAndValue in
207214
let (key: line, value: testCase) = keyAndValue
208215
let actualDumped = dumped(testCase.syntax)
209-
XCTAssertEqual(testCase.expectedDumped, actualDumped, line: line)
216+
XCTAssertEqual(testCase.expectedDumped.trimmingTrailingWhitespace(), actualDumped.trimmingTrailingWhitespace(), line: line)
210217
}
211218
}
212219

0 commit comments

Comments
 (0)