diff --git a/Sources/SwiftParser/Expressions.swift b/Sources/SwiftParser/Expressions.swift index 1811b82bb54..a9b4fb28023 100644 --- a/Sources/SwiftParser/Expressions.swift +++ b/Sources/SwiftParser/Expressions.swift @@ -463,6 +463,8 @@ extension Parser { // - Subscript vs. array or dictionary expression || (self.peek(isAt: .period, .leftParen, .leftSquare) && self.peek().leadingTriviaByteLength == 0 && self.currentToken.trailingTriviaByteLength == 0) + // End of file + || self.peek(isAt: .endOfFile) { break EXPR_PREFIX } diff --git a/Tests/SwiftParserTest/ExpressionTests.swift b/Tests/SwiftParserTest/ExpressionTests.swift index 970959b63a7..ed205b162fc 100644 --- a/Tests/SwiftParserTest/ExpressionTests.swift +++ b/Tests/SwiftParserTest/ExpressionTests.swift @@ -2335,6 +2335,23 @@ final class StatementExpressionTests: ParserTestCase { expression: ArrayExprSyntax(expressions: []) ) ) + + assertParse( + #""" + func f() { + "\(unsafe)" + } + """#, + substructure: DeclReferenceExprSyntax(baseName: .identifier("unsafe")) + ) + + assertParse( + """ + a = 1️⃣unsafe + """, + substructure: DeclReferenceExprSyntax(baseName: .identifier("unsafe")), + substructureAfterMarker: "1️⃣" + ) } func testUnterminatedInterpolationAtEndOfMultilineStringLiteral() {