================
@@ -652,6 +659,18 @@ int clangTidyMain(int argc, const char **argv) {
     FileName = PathList.front();
 
   const SmallString<256> FilePath = makeAbsolute(FileName);
+
+  std::unique_ptr<llvm::raw_fd_ostream> SarifOS;
+  if (!ExportSarif.empty()) {
+    std::error_code EC;
+    SarifOS = std::make_unique<llvm::raw_fd_ostream>(ExportSarif, EC,
----------------
zeyi2 wrote:

When `ExportSarif == "-"`, this stream writes the SARIF document to stdout, but 
`ErrorReporter` also emits the regular text diagnostics through 
`TextDiagnosticPrinter(llvm::outs())`. This could lead to invalid JSON:

```
./build/bin/clang-tidy 
clang-tools-extra/test/clang-tidy/infrastructure/quiet-flag.cpp 
'-checks=-*,readability-magic-numbers,clang-diagnostic-sign-compare' 
-export-sarif - -- -Wsign-compare > stdout.txt 2> stderr.txt

(head of stdout.txt)
projects/llvm-project-review/clang-tools-extra/test/clang-tidy/infrastructure/quiet-flag.cpp:23:11:
 warning: 42 is a magic number; consider replacing it with a named constant 
[readability-magic-numbers]
   23 |   int x = 42; // trigger 'readability-magic-numbers' with caret: ^
      |           ^
projects/llvm-project-review/clang-tools-extra/test/clang-tidy/infrastructure/quiet-flag.cpp:25:12:
 warning: comparison of integers of different signs: 'int' and 'unsigned int' 
[clang-diagnostic-sign-compare]
   25 |   return x < y; // trigger 'clang-diagnostic-sign-compare' with caret: ^
      |          ~ ^ ~
{
  "$schema": 
"https://docs.oasis-open.org/sarif/sarif/v2.1.0/cos02/schemas/sarif-schema-2.1.0.json";,
  "runs": [
    {
      "artifacts": [
        {

```

We probably need to suppress or redirect the text diagnostics when SARIF owns 
stdout (or reject `-`).

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

Reply via email to