Skip to content

Commit 60bd837

Browse files
committed
Default the trivia parameters to empty array for RawTokenSyntax(kind:, text:, ...)
Also if the trivias are empty use `RawSyntax.parsedToken()`. This allows the parser to consistently use the `RawSyntaxData.ParsedToken` form for parsed tokens, instead of `RawSyntaxData.MaterializedToken`.
1 parent f0d742e commit 60bd837

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

Sources/SwiftParser/Expressions.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,7 +1335,6 @@ extension Parser {
13351335
let segmentToken = RawTokenSyntax(
13361336
kind: .stringSegment,
13371337
text: SyntaxText(rebasing: text[stringLiteralSegmentStart..<slashIndex]),
1338-
leadingTriviaPieces: [], trailingTriviaPieces: [],
13391338
presence: .present,
13401339
arena: self.arena)
13411340
segments.append(RawSyntax(RawStringSegmentSyntax(content: segmentToken, arena: self.arena)))
@@ -1351,7 +1350,6 @@ extension Parser {
13511350
let slashToken = RawTokenSyntax(
13521351
kind: .backslash,
13531352
text: SyntaxText(rebasing: text[slashIndex..<text.index(after: slashIndex)]),
1354-
leadingTriviaPieces: [], trailingTriviaPieces: [],
13551353
presence: .present,
13561354
arena: self.arena)
13571355

@@ -1361,7 +1359,6 @@ extension Parser {
13611359
delim = RawTokenSyntax(
13621360
kind: .rawStringDelimiter,
13631361
text: SyntaxText(rebasing: text[delimiterStart..<contentStart]),
1364-
leadingTriviaPieces: [], trailingTriviaPieces: [],
13651362
presence: .present,
13661363
arena: self.arena)
13671364
} else {
@@ -1428,7 +1425,6 @@ extension Parser {
14281425
let segmentToken = RawTokenSyntax(
14291426
kind: .stringSegment,
14301427
text: SyntaxText(rebasing: segment),
1431-
leadingTriviaPieces: [], trailingTriviaPieces: [],
14321428
presence: .present,
14331429
arena: self.arena)
14341430
segments.append(RawSyntax(RawStringSegmentSyntax(content: segmentToken,

Sources/SwiftSyntax/Raw/RawSyntaxNodeProtocol.swift

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,37 @@ public struct RawTokenSyntax: RawSyntaxNodeProtocol {
138138
public init(
139139
kind: RawTokenKind,
140140
text: SyntaxText,
141+
leadingTriviaPieces: [RawTriviaPiece] = [],
142+
trailingTriviaPieces: [RawTriviaPiece] = [],
143+
presence: SourcePresence,
144+
arena: __shared SyntaxArena
145+
) {
146+
if leadingTriviaPieces.isEmpty && trailingTriviaPieces.isEmpty {
147+
// Create it via `RawSyntax.parsedToken()`.
148+
self.init(
149+
kind: kind,
150+
wholeText: text,
151+
textRange: 0 ..< text.count,
152+
presence: presence,
153+
arena: arena
154+
)
155+
} else {
156+
// Create it via `RawSyntax.makeMaterializedToken()`.
157+
self.init(
158+
materialized: kind,
159+
text: text,
160+
leadingTriviaPieces: leadingTriviaPieces,
161+
trailingTriviaPieces: trailingTriviaPieces,
162+
presence: presence,
163+
arena: arena
164+
)
165+
}
166+
}
167+
168+
/// Creates a `MaterializedToken`. Trivia must be managed by the same `arena`.
169+
fileprivate init(
170+
materialized kind: RawTokenKind,
171+
text: SyntaxText,
141172
leadingTriviaPieces: [RawTriviaPiece],
142173
trailingTriviaPieces: [RawTriviaPiece],
143174
presence: SourcePresence,
@@ -167,8 +198,11 @@ public struct RawTokenSyntax: RawSyntaxNodeProtocol {
167198
text: SyntaxText? = nil,
168199
arena: __shared SyntaxArena
169200
) {
201+
// FIXME: Allow creating a `RawSyntax.parsedToken()` with a string literal
202+
// for text. Currently it asserts that the string buffer is not contained
203+
// within the `arena`.
170204
self.init(
171-
kind: kind,
205+
materialized: kind,
172206
text: text ?? kind.defaultText ?? "",
173207
leadingTriviaPieces: [],
174208
trailingTriviaPieces: [],

0 commit comments

Comments
 (0)