Skip to content

Commit 5130bf7

Browse files
committed
Introduce RawTokenSyntax(kind:, tokenText:, ...) for a convenient way to create a token without any trivia
This allows the parser to consistently use the `RawSyntaxData.ParsedToken` form for parsed tokens, instead of `RawSyntaxData.MaterializedToken`.
1 parent f0d742e commit 5130bf7

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

Sources/SwiftParser/Expressions.swift

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,8 +1334,7 @@ extension Parser {
13341334
// Collect ".stringSegment" before `\`.
13351335
let segmentToken = RawTokenSyntax(
13361336
kind: .stringSegment,
1337-
text: SyntaxText(rebasing: text[stringLiteralSegmentStart..<slashIndex]),
1338-
leadingTriviaPieces: [], trailingTriviaPieces: [],
1337+
tokenText: SyntaxText(rebasing: text[stringLiteralSegmentStart..<slashIndex]),
13391338
presence: .present,
13401339
arena: self.arena)
13411340
segments.append(RawSyntax(RawStringSegmentSyntax(content: segmentToken, arena: self.arena)))
@@ -1350,8 +1349,7 @@ extension Parser {
13501349
// `\`
13511350
let slashToken = RawTokenSyntax(
13521351
kind: .backslash,
1353-
text: SyntaxText(rebasing: text[slashIndex..<text.index(after: slashIndex)]),
1354-
leadingTriviaPieces: [], trailingTriviaPieces: [],
1352+
tokenText: SyntaxText(rebasing: text[slashIndex..<text.index(after: slashIndex)]),
13551353
presence: .present,
13561354
arena: self.arena)
13571355

@@ -1360,8 +1358,7 @@ extension Parser {
13601358
if !delimiter.isEmpty {
13611359
delim = RawTokenSyntax(
13621360
kind: .rawStringDelimiter,
1363-
text: SyntaxText(rebasing: text[delimiterStart..<contentStart]),
1364-
leadingTriviaPieces: [], trailingTriviaPieces: [],
1361+
tokenText: SyntaxText(rebasing: text[delimiterStart..<contentStart]),
13651362
presence: .present,
13661363
arena: self.arena)
13671364
} else {
@@ -1427,8 +1424,7 @@ extension Parser {
14271424
segments.last!.is(RawExpressionSegmentSyntax.self))
14281425
let segmentToken = RawTokenSyntax(
14291426
kind: .stringSegment,
1430-
text: SyntaxText(rebasing: segment),
1431-
leadingTriviaPieces: [], trailingTriviaPieces: [],
1427+
tokenText: SyntaxText(rebasing: segment),
14321428
presence: .present,
14331429
arena: self.arena)
14341430
segments.append(RawSyntax(RawStringSegmentSyntax(content: segmentToken,

Sources/SwiftSyntax/Raw/RawSyntaxNodeProtocol.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,23 @@ public struct RawTokenSyntax: RawSyntaxNodeProtocol {
133133
self = RawTokenSyntax(raw: raw)
134134
}
135135

136+
/// Creates a `RawTokenSyntax` with `tokenText` as the token text without any
137+
/// trivia, managed by the same `arena`.
138+
public init(
139+
kind: RawTokenKind,
140+
tokenText: SyntaxText,
141+
presence: SourcePresence,
142+
arena: __shared SyntaxArena
143+
) {
144+
self.init(
145+
kind: kind,
146+
wholeText: tokenText,
147+
textRange: 0 ..< tokenText.count,
148+
presence: presence,
149+
arena: arena
150+
)
151+
}
152+
136153
/// Creates a `RawTokenSyntax`. `text` and trivia must be managed by the same
137154
/// `arena`.
138155
public init(

0 commit comments

Comments
 (0)