aaron.ballman marked 4 inline comments as done.
aaron.ballman added inline comments.


================
Comment at: lib/StaticAnalyzer/Core/SarifDiagnostics.cpp:129
+  unsigned Index = 0;
+  for (const json::Value &File : Files) {
+    if (const json::Object *Obj = File.getAsObject()) {
----------------
NoQ wrote:
> This sounds like `find_if` to me.
The problem is: we need the `Index`. It felt a bit weird to have 
`llvm::find_if()` (a const operation) also mutating a locally-captured 
variable. WDYT?


================
Comment at: lib/StaticAnalyzer/Core/SarifDiagnostics.cpp:143
+  // that an empty file lists always causes a file to be added.
+  if (Files.empty() || Index == Files.size())
+    Files.push_back(createFile(FE));
----------------
NoQ wrote:
> I suspect that the LHS of `||` implies the RHS of `||` and is therefore 
> redundant.
Nope, this is needed for a boundary condition. In the case where `Files` is 
empty, we don't loop over anything in the range-based for loop, and so `Index` 
is zero, which means `Index == Files.size()`. On the other end of that 
boundary, if `Files` is nonempty but `FE` hasn't been added to it yet, you'll 
loop over the entire list of `Files` in the range-based for loop, which also 
triggers `Index == Files.size()`.


================
Comment at: lib/StaticAnalyzer/Core/SarifDiagnostics.cpp:289
+    if (P.second) {
+      RuleMapping[RuleID] = Rules.size(); // Maps RuleID to an Array Index.
+      Rules.push_back(createRule(*D));
----------------
NoQ wrote:
> Aha, ok, so now instead of an alphabetical order we have the order in which 
> reports of the respective checkers are squeezed into the consumer. Which is 
> probably deterministic, so it's fine. I just enjoy talking to myself on 
> phabricator sometimes.
Yes, this should be deterministic -- good thought to check!


================
Comment at: lib/StaticAnalyzer/Core/SarifDiagnostics.cpp:318
 void SarifDiagnostics::FlushDiagnosticsImpl(
     std::vector<const PathDiagnostic *> &Diags, FilesMade *) {
   // We currently overwrite the file if it already exists. However, it may be
----------------
NoQ wrote:
> I wonder why we didn't mark `Diags` as `const &` in this callback.
It would be a nice refactoring for someday. :-)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55707/new/

https://reviews.llvm.org/D55707



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to