inspector: Use diagnostic lists

Instead of concatenating to a string

Change-Id: Ib70bba2b0dbf9fcb04a232e0e78d3b576ab3ba88
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/59203
Auto-Submit: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 07e942a..1003e0f 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -563,12 +563,13 @@
 ast::Function* Inspector::FindEntryPointByName(const std::string& name) {
   auto* func = program_->AST().Functions().Find(program_->Symbols().Get(name));
   if (!func) {
-    error_ += name + " was not found!";
+    diagnostics_.add_error(diag::System::Inspector, name + " was not found!");
     return nullptr;
   }
 
   if (!func->IsEntryPoint()) {
-    error_ += name + " is not an entry point!";
+    diagnostics_.add_error(diag::System::Inspector,
+                           name + " is not an entry point!");
     return nullptr;
   }
 
diff --git a/src/inspector/inspector.h b/src/inspector/inspector.h
index a386a10..9ed9648 100644
--- a/src/inspector/inspector.h
+++ b/src/inspector/inspector.h
@@ -43,9 +43,9 @@
   ~Inspector();
 
   /// @returns error messages from the Inspector
-  const std::string& error() { return error_; }
+  std::string error() { return diagnostics_.str(); }
   /// @returns true if an error was encountered
-  bool has_error() const { return !error_.empty(); }
+  bool has_error() const { return diagnostics_.contains_errors(); }
 
   /// @returns vector of entry point information
   std::vector<EntryPoint> GetEntryPoints();
@@ -139,7 +139,7 @@
 
  private:
   const Program* program_;
-  std::string error_;
+  diag::List diagnostics_;
   std::unique_ptr<
       std::unordered_map<std::string, UniqueVector<SamplerTexturePair>>>
       sampler_targets_;