|
11 | 11 | //===----------------------------------------------------------------------===//
|
12 | 12 |
|
13 | 13 | import SwiftDiagnostics
|
14 |
| -import SwiftSyntax |
| 14 | +@_spi(RawSyntax) import SwiftSyntax |
15 | 15 |
|
16 | 16 | let diagnosticDomain: String = "SwiftParser"
|
17 | 17 |
|
@@ -126,22 +126,27 @@ public struct MissingTokenError: ParserError {
|
126 | 126 | public let missingToken: TokenSyntax
|
127 | 127 |
|
128 | 128 | public var message: String {
|
129 |
| - guard let parent = missingToken.parent, let parentTypeName = parent.nodeTypeNameForDiagnostics() else { |
130 |
| - return "Expected '\(missingToken.text)'" |
| 129 | + var message = "Expected" |
| 130 | + if missingToken.text.isEmpty { |
| 131 | + message += " \(missingToken.tokenKind.decomposeToRaw().rawKind.nameForDiagnostics)" |
| 132 | + } else { |
| 133 | + message += " '\(missingToken.text)'" |
131 | 134 | }
|
132 |
| - switch missingToken.tokenKind { |
133 |
| - case .leftAngle, .leftBrace, .leftParen, .leftSquareBracket: |
134 |
| - if parent.children(viewMode: .fixedUp).first?.as(TokenSyntax.self) == missingToken { |
135 |
| - return "Expected '\(missingToken.text)' to start \(parentTypeName)" |
136 |
| - } |
137 |
| - case .rightAngle, .rightBrace, .rightParen, .rightSquareBracket: |
138 |
| - if parent.children(viewMode: .fixedUp).last?.as(TokenSyntax.self) == missingToken { |
139 |
| - return "Expected '\(missingToken.text)' to end \(parentTypeName)" |
| 135 | + if let parent = missingToken.parent, let parentTypeName = parent.nodeTypeNameForDiagnostics() { |
| 136 | + switch missingToken.tokenKind { |
| 137 | + case .leftAngle, .leftBrace, .leftParen, .leftSquareBracket: |
| 138 | + if parent.children(viewMode: .fixedUp).first?.as(TokenSyntax.self) == missingToken { |
| 139 | + message += " to start \(parentTypeName)" |
| 140 | + } |
| 141 | + case .rightAngle, .rightBrace, .rightParen, .rightSquareBracket: |
| 142 | + if parent.children(viewMode: .fixedUp).last?.as(TokenSyntax.self) == missingToken { |
| 143 | + message += " to end \(parentTypeName)" |
| 144 | + } |
| 145 | + default: |
| 146 | + message += " in \(parentTypeName)" |
140 | 147 | }
|
141 |
| - default: |
142 |
| - break |
143 | 148 | }
|
144 |
| - return "Expected '\(missingToken.text)' in \(parentTypeName)" |
| 149 | + return message |
145 | 150 | }
|
146 | 151 | }
|
147 | 152 |
|
|
0 commit comments