@@ -378,6 +378,70 @@ namespace swift {
378
378
return fixItReplaceChars (Start, End, {});
379
379
}
380
380
};
381
+
382
+ // / \brief Class to track, map, and remap diagnostic severity and fatality
383
+ // /
384
+ class DiagnosticState {
385
+ public:
386
+ // / \brief Describes the current behavior to take with a diagnostic
387
+ enum class Behavior {
388
+ Unspecified,
389
+ Ignore,
390
+ Note,
391
+ Warn,
392
+ Err,
393
+ Fatal,
394
+ };
395
+
396
+ private:
397
+ // / \brief Whether we should continue to emit diagnostics, even after a
398
+ // / fatal error
399
+ bool showDiagnosticsAfterFatalError = false ;
400
+
401
+ // / \brief Whether any error diagnostics have been emitted.
402
+ bool anyErrorOccurred = false ;
403
+
404
+ // / Fatal error tracking
405
+ enum class FatalErrorState {
406
+ None,
407
+ JustEmitted,
408
+ Fatal
409
+ };
410
+
411
+ // / Sticky flag set to \c true when a fatal error is emitted.
412
+ FatalErrorState fatalState = FatalErrorState::None;
413
+
414
+ public:
415
+ DiagnosticState () {}
416
+
417
+ // / \brief Figure out the Behavior for the given diagnostic
418
+ Behavior getBehavior (const Diagnostic &);
419
+
420
+ bool hadAnyError () const { return anyErrorOccurred; }
421
+ bool hasFatalErrorOccurred () const {
422
+ return fatalState != FatalErrorState::None;
423
+ }
424
+
425
+ void setShowDiagnosticsAfterFatalError (bool val = true ) {
426
+ showDiagnosticsAfterFatalError = val;
427
+ }
428
+
429
+ void resetHadAnyError () {
430
+ anyErrorOccurred = false ;
431
+ fatalState = FatalErrorState::None;
432
+ }
433
+
434
+ private:
435
+ // / \returns true if diagnostic is marked as fatal.
436
+ bool isDiagnosticFatal (DiagID ID) const ;
437
+
438
+ // Make the state movable only
439
+ DiagnosticState (const DiagnosticState &) = delete ;
440
+ const DiagnosticState &operator =(const DiagnosticState &) = delete ;
441
+
442
+ DiagnosticState (DiagnosticState &&) = default ;
443
+ DiagnosticState &operator =(DiagnosticState &&) = default ;
444
+ };
381
445
382
446
// / \brief Class responsible for formatting diagnostics and presenting them
383
447
// / to the user.
@@ -390,19 +454,7 @@ namespace swift {
390
454
// / emitting diagnostics.
391
455
SmallVector<DiagnosticConsumer *, 2 > Consumers;
392
456
393
- // / HadAnyError - True if any error diagnostics have been emitted.
394
- bool HadAnyError;
395
-
396
- enum class FatalErrorState {
397
- None,
398
- JustEmitted,
399
- Fatal
400
- };
401
-
402
- // / Sticky flag set to \c true when a fatal error is emitted.
403
- FatalErrorState FatalState = FatalErrorState::None;
404
-
405
- bool ShowDiagnosticsAfterFatalError = false ;
457
+ DiagnosticState state;
406
458
407
459
// / \brief The currently active diagnostic, if there is one.
408
460
Optional<Diagnostic> ActiveDiagnostic;
@@ -424,25 +476,22 @@ namespace swift {
424
476
425
477
public:
426
478
explicit DiagnosticEngine (SourceManager &SourceMgr)
427
- : SourceMgr(SourceMgr), HadAnyError( false ), ActiveDiagnostic() {
479
+ : SourceMgr(SourceMgr), state( ), ActiveDiagnostic() {
428
480
}
429
481
430
482
// / hadAnyError - return true if any *error* diagnostics have been emitted.
431
- bool hadAnyError () const {
432
- return HadAnyError;
433
- }
483
+ bool hadAnyError () const { return state.hadAnyError (); }
434
484
435
485
bool hasFatalErrorOccurred () const {
436
- return FatalState != FatalErrorState::None ;
486
+ return state. hasFatalErrorOccurred () ;
437
487
}
438
488
439
- void setShowDiagnosticsAfterFatalError (bool Val = true ) {
440
- ShowDiagnosticsAfterFatalError = Val ;
489
+ void setShowDiagnosticsAfterFatalError (bool val = true ) {
490
+ state. setShowDiagnosticsAfterFatalError (val) ;
441
491
}
442
492
443
493
void resetHadAnyError () {
444
- HadAnyError = false ;
445
- FatalState = FatalErrorState::None;
494
+ state.resetHadAnyError ();
446
495
}
447
496
448
497
// / \brief Add an additional DiagnosticConsumer to receive diagnostics.
@@ -572,10 +621,7 @@ namespace swift {
572
621
573
622
// / \returns true if diagnostic is marked with PointsToFirstBadToken
574
623
// / option.
575
- bool isDiagnosticPointsToFirstBadToken (DiagID ID) const ;
576
-
577
- // / \returns true if diagnostic is marked as fatal.
578
- bool isDiagnosticFatal (DiagID ID) const ;
624
+ bool isDiagnosticPointsToFirstBadToken (DiagID id) const ;
579
625
580
626
private:
581
627
// / \brief Flush the active diagnostic.
0 commit comments