@@ -426,16 +426,20 @@ extension Parser {
426
426
// MARK: - Parse string literals
427
427
428
428
extension Parser {
429
- /// Consumes a raw string delimiter that has the same number of `#` as `openDelimiter`.
430
- private mutating func parseStringDelimiter( openDelimiter: RawTokenSyntax ? ) -> ( unexpectedBeforeCheckedDelimiter: RawUnexpectedNodesSyntax ? , checkedDelimiter: RawTokenSyntax ? ) {
429
+ /// Consumes a raw string or extended regex delimiter that has the same
430
+ /// number of `#` as `openDelimiter`.
431
+ mutating func parsePoundDelimiter(
432
+ _ kind: RawTokenKind ,
433
+ matching openDelimiter: RawTokenSyntax ?
434
+ ) -> ( unexpectedBeforeCheckedDelimiter: RawUnexpectedNodesSyntax ? , checkedDelimiter: RawTokenSyntax ? ) {
431
435
// Check for leadingTriviaText == "" so we don't consume the leading raw
432
436
// string delimiter of an upcoming string literal, e.g. in
433
437
// ```
434
438
// "normal literal"
435
439
// #"raw literal"#
436
440
// ```
437
441
let delimiter : RawTokenSyntax ?
438
- if self . at ( . rawStringDelimiter ) && self . currentToken. leadingTriviaText == " " {
442
+ if self . at ( TokenSpec ( kind ) ) && self . currentToken. leadingTriviaText == " " {
439
443
delimiter = self . consumeAnyToken ( )
440
444
} else {
441
445
delimiter = nil
@@ -445,14 +449,14 @@ extension Parser {
445
449
case ( nil , nil ) :
446
450
return ( nil , nil )
447
451
case ( let open? , nil ) :
448
- return ( nil , missingToken ( . rawStringDelimiter , text: open. tokenText) )
452
+ return ( nil , missingToken ( kind , text: open. tokenText) )
449
453
case ( nil , . some) :
450
454
return ( RawUnexpectedNodesSyntax ( [ delimiter] , arena: self . arena) , nil )
451
455
case ( let open? , let close? ) :
452
456
if open. tokenText == close. tokenText {
453
457
return ( nil , close)
454
458
} else {
455
- return ( RawUnexpectedNodesSyntax ( [ delimiter] , arena: self . arena) , missingToken ( . rawStringDelimiter , text: open. tokenText) )
459
+ return ( RawUnexpectedNodesSyntax ( [ delimiter] , arena: self . arena) , missingToken ( kind , text: open. tokenText) )
456
460
}
457
461
}
458
462
}
@@ -482,7 +486,7 @@ extension Parser {
482
486
if let stringSegment = self . consume ( if: . stringSegment) {
483
487
segments. append ( . stringSegment( RawStringSegmentSyntax ( content: stringSegment, arena: self . arena) ) )
484
488
} else if let backslash = self . consume ( if: . backslash) {
485
- let ( unexpectedBeforeDelimiter, delimiter) = self . parseStringDelimiter ( openDelimiter : openDelimiter)
489
+ let ( unexpectedBeforeDelimiter, delimiter) = self . parsePoundDelimiter ( . rawStringDelimiter , matching : openDelimiter)
486
490
let leftParen = self . expectWithoutRecoveryOrLeadingTrivia ( . leftParen)
487
491
let expressions = RawTupleExprElementListSyntax ( elements: self . parseArgumentListElements ( pattern: . none) , arena: self . arena)
488
492
@@ -546,7 +550,7 @@ extension Parser {
546
550
closeQuote = self . expectWithoutRecoveryOrLeadingTrivia ( TokenSpec ( openQuote. tokenKind) )
547
551
}
548
552
549
- let ( unexpectedBeforeCloseDelimiter, closeDelimiter) = self . parseStringDelimiter ( openDelimiter : openDelimiter)
553
+ let ( unexpectedBeforeCloseDelimiter, closeDelimiter) = self . parsePoundDelimiter ( . rawStringDelimiter , matching : openDelimiter)
550
554
551
555
if openQuote. tokenKind == . multilineStringQuote, !openQuote. isMissing, !closeQuote. isMissing {
552
556
let postProcessed = postProcessMultilineStringLiteral ( rawStringDelimitersToken: openDelimiter, openQuote: openQuote, segments: segments, closeQuote: closeQuote)
0 commit comments