@@ -100,7 +100,7 @@ fileprivate func emitDiagnosticParts(
100100}
101101
102102/// Emit the given diagnostic via the diagnostic engine.
103- func emitDiagnostic(
103+ public func emitDiagnostic(
104104 diagnosticEngine: BridgedDiagnosticEngine ,
105105 sourceFileBuffer: UnsafeBufferPointer < UInt8 > ,
106106 sourceFileBufferOffset: Int = 0 ,
@@ -146,7 +146,7 @@ func emitDiagnostic(
146146}
147147
148148extension DiagnosticSeverity {
149- var bridged : BridgedDiagnosticSeverity {
149+ public var bridged : BridgedDiagnosticSeverity {
150150 switch self {
151151 case . error: return . error
152152 case . note: return . note
@@ -159,141 +159,6 @@ extension DiagnosticSeverity {
159159 }
160160}
161161
162- extension SourceManager {
163- private func diagnoseSingle< Node: SyntaxProtocol > (
164- message: String ,
165- severity: DiagnosticSeverity ,
166- node: Node ,
167- position: AbsolutePosition ,
168- highlights: [ Syntax ] = [ ] ,
169- fixItChanges: [ FixIt . Change ] = [ ]
170- ) {
171- // Map severity
172- let bridgedSeverity = severity. bridged
173-
174- // Emit the diagnostic
175- var mutableMessage = message
176- let diag = mutableMessage. withBridgedString { bridgedMessage in
177- BridgedDiagnostic (
178- at: bridgedSourceLoc ( for: node, at: position) ,
179- message: bridgedMessage,
180- severity: bridgedSeverity,
181- engine: bridgedDiagEngine
182- )
183- }
184-
185- // Emit highlights
186- for highlight in highlights {
187- diag. highlight (
188- start: bridgedSourceLoc ( for: highlight, at: highlight. positionAfterSkippingLeadingTrivia) ,
189- end: bridgedSourceLoc ( for: highlight, at: highlight. endPositionBeforeTrailingTrivia)
190- )
191- }
192-
193- // Emit changes for a Fix-It.
194- for change in fixItChanges {
195- let replaceStartLoc : BridgedSourceLoc
196- let replaceEndLoc : BridgedSourceLoc
197- var newText : String
198-
199- switch change {
200- case . replace( let oldNode, let newNode) :
201- replaceStartLoc = bridgedSourceLoc (
202- for: oldNode,
203- at: oldNode. positionAfterSkippingLeadingTrivia
204- )
205- replaceEndLoc = bridgedSourceLoc (
206- for: oldNode,
207- at: oldNode. endPositionBeforeTrailingTrivia
208- )
209- newText = newNode. description
210-
211- case . replaceLeadingTrivia( let oldToken, let newTrivia) :
212- replaceStartLoc = bridgedSourceLoc ( for: oldToken)
213- replaceEndLoc = bridgedSourceLoc (
214- for: oldToken,
215- at: oldToken. positionAfterSkippingLeadingTrivia
216- )
217- newText = newTrivia. description
218-
219- case . replaceTrailingTrivia( let oldToken, let newTrivia) :
220- replaceStartLoc = bridgedSourceLoc (
221- for: oldToken,
222- at: oldToken. endPositionBeforeTrailingTrivia
223- )
224- replaceEndLoc = bridgedSourceLoc (
225- for: oldToken,
226- at: oldToken. endPosition
227- )
228- newText = newTrivia. description
229-
230- case . replaceChild( let replacingChildData) :
231- let replacementRange = replacingChildData. replacementRange
232- replaceStartLoc = bridgedSourceLoc (
233- for: replacingChildData. parent,
234- at: replacementRange. lowerBound
235- )
236- replaceEndLoc = bridgedSourceLoc (
237- for: replacingChildData. parent,
238- at: replacementRange. upperBound
239- )
240- newText = replacingChildData. newChild. description
241-
242- #if RESILIENT_SWIFT_SYNTAX
243- @unknown default :
244- fatalError ( )
245- #endif
246- }
247-
248- newText. withBridgedString { bridgedMessage in
249- diag. fixItReplace (
250- start: replaceStartLoc,
251- end: replaceEndLoc,
252- replacement: bridgedMessage
253- )
254- }
255- }
256-
257- diag. finish ( ) ;
258- }
259-
260- /// Emit a diagnostic via the C++ diagnostic engine.
261- func diagnose(
262- diagnostic: Diagnostic ,
263- messageSuffix: String ? = nil
264- ) {
265- // Emit the main diagnostic.
266- diagnoseSingle (
267- message: diagnostic. diagMessage. message + ( messageSuffix ?? " " ) ,
268- severity: diagnostic. diagMessage. severity,
269- node: diagnostic. node,
270- position: diagnostic. position,
271- highlights: diagnostic. highlights
272- )
273-
274- // Emit Fix-Its.
275- for fixIt in diagnostic. fixIts {
276- diagnoseSingle (
277- message: fixIt. message. message,
278- severity: . note,
279- node: diagnostic. node,
280- position: diagnostic. position,
281- fixItChanges: fixIt. changes
282- )
283- }
284-
285- // Emit any notes as follow-ons.
286- for note in diagnostic. notes {
287- diagnoseSingle (
288- message: note. message,
289- severity: . note,
290- node: note. node,
291- position: note. position
292- )
293- }
294- }
295- }
296-
297162struct QueuedDiagnostics {
298163 var grouped : GroupedDiagnostics = GroupedDiagnostics ( )
299164
0 commit comments