================
@@ -7,108 +7,228 @@
 
//===----------------------------------------------------------------------===//
 
 #include "clang/Frontend/SARIFDiagnostic.h"
-#include "clang/Basic/CharInfo.h"
+#include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/DiagnosticOptions.h"
-#include "clang/Basic/FileManager.h"
+#include "clang/Basic/DiagnosticSema.h"
 #include "clang/Basic/Sarif.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Lex/Lexer.h"
 #include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/ADT/StringExtras.h"
+#include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/ConvertUTF.h"
 #include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/ErrorOr.h"
 #include "llvm/Support/Locale.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/raw_ostream.h"
 #include <algorithm>
 #include <string>
 
 namespace clang {
 
+// In sarif mode,
+// a diagnostics 'group' have 1 top-level error/warning and several sub-level
+// notes. For example:
+//
+// error: static assertion failed.
+//   note: in instantiation of 'cat::meow'.
+//     note: because concept 'paper_tiger' would be invalid.
+// error: invalid operands to binary expression 'cat::meow' and 'dog::wolf'.
+//   note: candidate function not viable.
+//     note: no known conversion from 'tiger::meooooow' to 'cat::meow'
+//   note: candidate function ignored.
+//     note: constraints not satisfied.
+//   note: ... (candidates)
+//     note: ... (reasons)
+//   note: too many candidates.
+// error: too many errors occured, stopping now.
+
 SARIFDiagnostic::SARIFDiagnostic(raw_ostream &OS, const LangOptions &LangOpts,
                                  DiagnosticOptions &DiagOpts,
                                  SarifDocumentWriter *Writer)
-    : DiagnosticRenderer(LangOpts, DiagOpts), Writer(Writer) {}
+    : DiagnosticRenderer(LangOpts, DiagOpts),
+      Root(Node::Result(), Node::Option{&LangOpts, &DiagOpts},
+           /*Nesting=*/-1), // The root does not represents a diagnostic.
+      Current(&Root), Writer(Writer) {
+  // Don't print 'X warnings and Y errors generated'.
+  DiagOpts.ShowCarets = false;
----------------
anonymouspc wrote:

Thanks! This is fixed in commit a6b6052748c5c8b9fb0d987566e4a582edf66514.
Now,
- `CompilerInstance::printDiagnosticsStats()` is moved into `virtual 
DiagnosticConsumer::PrintDiagnosticsStats()`
  - The default/base-class implement keeps same with the original one (print "X 
warnings and Y errors generated")
  - The `SARIFDiagnosticPrinter` overrided this function by **creating a new 
sarif entry called `<sarif>.runs.invocations.toolExecutionNotifications`** 
(according to 
[sarif-standard](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html)).

https://github.com/llvm/llvm-project/pull/174106
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to