[tint] Use diag::List::str()

Instead of explicitly creating a formatter.

Change-Id: I437bf58fbc3187edb91bd2b48091a984db6368cd
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/143380
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/core/type/test_helper.h b/src/tint/lang/core/type/test_helper.h
index a1f67c5..3917b5d 100644
--- a/src/tint/lang/core/type/test_helper.h
+++ b/src/tint/lang/core/type/test_helper.h
@@ -29,10 +29,8 @@
     /// Builds and returns the program. Must only be called once per test
     /// @return the built program
     Program Build() {
-        diag::Formatter formatter;
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << formatter.format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         return Program(std::move(*this));
     }
diff --git a/src/tint/lang/glsl/writer/ast_printer/test_helper.h b/src/tint/lang/glsl/writer/ast_printer/test_helper.h
index 95f8a73..d7e28fb 100644
--- a/src/tint/lang/glsl/writer/ast_printer/test_helper.h
+++ b/src/tint/lang/glsl/writer/ast_printer/test_helper.h
@@ -52,13 +52,10 @@
             return *gen_;
         }
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << diag::Formatter().format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] {
-            ASSERT_TRUE(program->IsValid()) << diag::Formatter().format(program->Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
         gen_ = std::make_unique<ASTPrinter>(program.get(), version);
         return *gen_;
     }
@@ -75,18 +72,16 @@
         if (gen_) {
             return *gen_;
         }
-        diag::Formatter formatter;
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << formatter.format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] { ASSERT_TRUE(program->IsValid()) << formatter.format(program->Diagnostics()); }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
 
         auto sanitized_result = Sanitize(program.get(), options, /* entry_point */ "");
         [&] {
             ASSERT_TRUE(sanitized_result.program.IsValid())
-                << formatter.format(sanitized_result.program.Diagnostics());
+                << sanitized_result.program.Diagnostics().str();
         }();
 
         *program = std::move(sanitized_result.program);
diff --git a/src/tint/lang/hlsl/writer/ast_printer/test_helper.h b/src/tint/lang/hlsl/writer/ast_printer/test_helper.h
index c7d6ecb..3eb5c90 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/test_helper.h
+++ b/src/tint/lang/hlsl/writer/ast_printer/test_helper.h
@@ -51,13 +51,10 @@
             return *gen_;
         }
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << diag::Formatter().format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] {
-            ASSERT_TRUE(program->IsValid()) << diag::Formatter().format(program->Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
         gen_ = std::make_unique<ASTPrinter>(program.get());
         return *gen_;
     }
@@ -72,18 +69,16 @@
         if (gen_) {
             return *gen_;
         }
-        diag::Formatter formatter;
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << formatter.format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] { ASSERT_TRUE(program->IsValid()) << formatter.format(program->Diagnostics()); }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
 
         auto sanitized_result = Sanitize(program.get(), options);
         [&] {
             ASSERT_TRUE(sanitized_result.program.IsValid())
-                << formatter.format(sanitized_result.program.Diagnostics());
+                << sanitized_result.program.Diagnostics().str();
         }();
 
         ast::transform::Manager transform_manager;
@@ -94,7 +89,7 @@
             /* preserve_unicode */ true);
         transform_manager.Add<tint::ast::transform::Renamer>();
         auto result = transform_manager.Run(&sanitized_result.program, transform_data, outputs);
-        [&] { ASSERT_TRUE(result.IsValid()) << formatter.format(result.Diagnostics()); }();
+        [&] { ASSERT_TRUE(result.IsValid()) << result.Diagnostics().str(); }();
         *program = std::move(result);
         gen_ = std::make_unique<ASTPrinter>(program.get());
         return *gen_;
diff --git a/src/tint/lang/msl/writer/ast_printer/test_helper.h b/src/tint/lang/msl/writer/ast_printer/test_helper.h
index e8b3ebc..70dadf5 100644
--- a/src/tint/lang/msl/writer/ast_printer/test_helper.h
+++ b/src/tint/lang/msl/writer/ast_printer/test_helper.h
@@ -49,13 +49,10 @@
             return *gen_;
         }
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << diag::Formatter().format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] {
-            ASSERT_TRUE(program->IsValid()) << diag::Formatter().format(program->Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
         gen_ = std::make_unique<ASTPrinter>(program.get());
         return *gen_;
     }
@@ -71,19 +68,13 @@
             return *gen_;
         }
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << diag::Formatter().format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] {
-            ASSERT_TRUE(program->IsValid()) << diag::Formatter().format(program->Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
 
         auto result = Sanitize(program.get(), options);
-        [&] {
-            ASSERT_TRUE(result.program.IsValid())
-                << diag::Formatter().format(result.program.Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(result.program.IsValid()) << result.program.Diagnostics().str(); }();
         *program = std::move(result.program);
         gen_ = std::make_unique<ASTPrinter>(program.get());
         return *gen_;
diff --git a/src/tint/lang/spirv/reader/ast_parser/parser_test.cc b/src/tint/lang/spirv/reader/ast_parser/parser_test.cc
index fb89ec5..ef18b0f 100644
--- a/src/tint/lang/spirv/reader/ast_parser/parser_test.cc
+++ b/src/tint/lang/spirv/reader/ast_parser/parser_test.cc
@@ -26,9 +26,9 @@
 TEST_F(ParserTest, DataEmpty) {
     std::vector<uint32_t> data;
     auto program = Parse(data);
-    auto errs = diag::Formatter().format(program.Diagnostics());
+    auto errs = program.Diagnostics().str();
     ASSERT_FALSE(program.IsValid()) << errs;
-    EXPECT_EQ(errs, "error: line:0: Invalid SPIR-V magic number.\n");
+    EXPECT_EQ(errs, "error: line:0: Invalid SPIR-V magic number.");
 }
 
 constexpr auto kShaderWithNonUniformDerivative = R"(
@@ -63,7 +63,7 @@
     Options options;
     options.allow_non_uniform_derivatives = false;
     auto program = Parse(spv, options);
-    auto errs = diag::Formatter().format(program.Diagnostics());
+    auto errs = program.Diagnostics().str();
     EXPECT_FALSE(program.IsValid()) << errs;
     EXPECT_THAT(errs, ::testing::HasSubstr("'dpdx' must only be called from uniform control flow"));
 }
@@ -73,7 +73,7 @@
     Options options;
     options.allow_non_uniform_derivatives = true;
     auto program = Parse(spv, options);
-    auto errs = diag::Formatter().format(program.Diagnostics());
+    auto errs = program.Diagnostics().str();
     EXPECT_TRUE(program.IsValid()) << errs;
     EXPECT_EQ(program.Diagnostics().count(), 0u) << errs;
 }
diff --git a/src/tint/lang/spirv/writer/ast_printer/test_helper.h b/src/tint/lang/spirv/writer/ast_printer/test_helper.h
index 80ea25b..869b650 100644
--- a/src/tint/lang/spirv/writer/ast_printer/test_helper.h
+++ b/src/tint/lang/spirv/writer/ast_printer/test_helper.h
@@ -50,13 +50,10 @@
             return *spirv_builder;
         }
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << diag::Formatter().format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] {
-            ASSERT_TRUE(program->IsValid()) << diag::Formatter().format(program->Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
         spirv_builder = std::make_unique<Builder>(program.get());
         return *spirv_builder;
     }
@@ -72,18 +69,12 @@
             return *spirv_builder;
         }
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << diag::Formatter().format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         program = std::make_unique<Program>(std::move(*this));
-        [&] {
-            ASSERT_TRUE(program->IsValid()) << diag::Formatter().format(program->Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
         auto result = Sanitize(program.get(), options);
-        [&] {
-            ASSERT_TRUE(result.program.IsValid())
-                << diag::Formatter().format(result.program.Diagnostics());
-        }();
+        [&] { ASSERT_TRUE(result.program.IsValid()) << result.program.Diagnostics().str(); }();
         *program = std::move(result.program);
         spirv_builder = std::make_unique<Builder>(program.get());
         return *spirv_builder;
diff --git a/src/tint/lang/wgsl/ast/module_clone_test.cc b/src/tint/lang/wgsl/ast/module_clone_test.cc
index 701c353..a1d16ff 100644
--- a/src/tint/lang/wgsl/ast/module_clone_test.cc
+++ b/src/tint/lang/wgsl/ast/module_clone_test.cc
@@ -124,12 +124,12 @@
     // Parse the wgsl, create the src program
     auto src = wgsl::reader::Parse(&file);
 
-    ASSERT_TRUE(src.IsValid()) << diag::Formatter().format(src.Diagnostics());
+    ASSERT_TRUE(src.IsValid()) << src.Diagnostics().str();
 
     // Clone the src program to dst
     Program dst(src.Clone());
 
-    ASSERT_TRUE(dst.IsValid()) << diag::Formatter().format(dst.Diagnostics());
+    ASSERT_TRUE(dst.IsValid()) << dst.Diagnostics().str();
 
     // Expect the printed strings to match
     EXPECT_EQ(Program::printer(&src), Program::printer(&dst));
diff --git a/src/tint/lang/wgsl/ast/transform/test_helper.h b/src/tint/lang/wgsl/ast/transform/test_helper.h
index ed5a220..31bb6c3 100644
--- a/src/tint/lang/wgsl/ast/transform/test_helper.h
+++ b/src/tint/lang/wgsl/ast/transform/test_helper.h
@@ -32,11 +32,8 @@
 /// @returns the output program as a WGSL string, or an error string if the
 /// program is not valid.
 inline std::string str(const Program& program) {
-    diag::Formatter::Style style;
-    style.print_newline_at_end = false;
-
     if (!program.IsValid()) {
-        return diag::Formatter(style).format(program.Diagnostics());
+        return program.Diagnostics().str();
     }
 
     wgsl::writer::Options options;
diff --git a/src/tint/lang/wgsl/inspector/test_inspector_builder.cc b/src/tint/lang/wgsl/inspector/test_inspector_builder.cc
index 6b657b3..4327c5e 100644
--- a/src/tint/lang/wgsl/inspector/test_inspector_builder.cc
+++ b/src/tint/lang/wgsl/inspector/test_inspector_builder.cc
@@ -353,9 +353,7 @@
         return *inspector_;
     }
     program_ = std::make_unique<Program>(std::move(*this));
-    [&] {
-        ASSERT_TRUE(program_->IsValid()) << diag::Formatter().format(program_->Diagnostics());
-    }();
+    [&] { ASSERT_TRUE(program_->IsValid()) << program_->Diagnostics().str(); }();
     inspector_ = std::make_unique<Inspector>(program_.get());
     return *inspector_;
 }
diff --git a/src/tint/lang/wgsl/inspector/test_inspector_runner.cc b/src/tint/lang/wgsl/inspector/test_inspector_runner.cc
index e8e56eb..5f2754c 100644
--- a/src/tint/lang/wgsl/inspector/test_inspector_runner.cc
+++ b/src/tint/lang/wgsl/inspector/test_inspector_runner.cc
@@ -26,9 +26,7 @@
 
     file_ = std::make_unique<Source::File>("test", shader);
     program_ = std::make_unique<Program>(wgsl::reader::Parse(file_.get()));
-    [&] {
-        ASSERT_TRUE(program_->IsValid()) << diag::Formatter().format(program_->Diagnostics());
-    }();
+    [&] { ASSERT_TRUE(program_->IsValid()) << program_->Diagnostics().str(); }();
     inspector_ = std::make_unique<Inspector>(program_.get());
     return *inspector_;
 }
diff --git a/src/tint/lang/wgsl/resolver/const_eval_binary_op_test.cc b/src/tint/lang/wgsl/resolver/const_eval_binary_op_test.cc
index a40b11d..bca5f9c 100644
--- a/src/tint/lang/wgsl/resolver/const_eval_binary_op_test.cc
+++ b/src/tint/lang/wgsl/resolver/const_eval_binary_op_test.cc
@@ -2198,9 +2198,7 @@
     auto program = wgsl::reader::Parse(file.get());
     EXPECT_FALSE(program.IsValid());
 
-    diag::Formatter::Style style;
-    style.print_newline_at_end = false;
-    auto error = diag::Formatter(style).format(program.Diagnostics());
+    auto error = program.Diagnostics().str();
     EXPECT_EQ(error, R"(test:3:31 error: value cannot be represented as 'i32'
 const result = (one == 0) && (1111111111111111111111111111111i == 0);
                               ^
@@ -2219,9 +2217,7 @@
     auto program = wgsl::reader::Parse(file.get());
     EXPECT_FALSE(program.IsValid());
 
-    diag::Formatter::Style style;
-    style.print_newline_at_end = false;
-    auto error = diag::Formatter(style).format(program.Diagnostics());
+    auto error = program.Diagnostics().str();
     EXPECT_EQ(error, R"(test:3:31 error: value cannot be represented as 'i32'
 const result = (one == 1) || (1111111111111111111111111111111i == 0);
                               ^
@@ -2431,7 +2427,7 @@
     if (should_pass) {
         diag::Formatter::Style style;
         style.print_newline_at_end = false;
-        auto error = diag::Formatter(style).format(program.Diagnostics());
+        auto error = program.Diagnostics().str();
 
         EXPECT_TRUE(program.IsValid()) << error;
     } else {
diff --git a/src/tint/lang/wgsl/resolver/const_eval_runtime_semantics_test.cc b/src/tint/lang/wgsl/resolver/const_eval_runtime_semantics_test.cc
index 3caf048..6414eb6 100644
--- a/src/tint/lang/wgsl/resolver/const_eval_runtime_semantics_test.cc
+++ b/src/tint/lang/wgsl/resolver/const_eval_runtime_semantics_test.cc
@@ -31,12 +31,7 @@
     ConstEval const_eval;
 
     /// @returns the contents of the diagnostics list as a string
-    std::string error() {
-        diag::Formatter::Style style{};
-        style.print_newline_at_end = false;
-        diag::Formatter formatter{style};
-        return formatter.format(Diagnostics());
-    }
+    std::string error() { return Diagnostics().str(); }
 };
 
 TEST_F(ResolverConstEvalRuntimeSemanticsTest, Add_AInt_Overflow) {
diff --git a/src/tint/lang/wgsl/resolver/uniformity_test.cc b/src/tint/lang/wgsl/resolver/uniformity_test.cc
index 8977062..3478d2f 100644
--- a/src/tint/lang/wgsl/resolver/uniformity_test.cc
+++ b/src/tint/lang/wgsl/resolver/uniformity_test.cc
@@ -37,9 +37,7 @@
     /// @param program the program
     /// @param should_pass true if `builder` program should pass the analysis, otherwise false
     void RunTest(Program&& program, bool should_pass) {
-        diag::Formatter::Style style;
-        style.print_newline_at_end = false;
-        error_ = diag::Formatter(style).format(program.Diagnostics());
+        error_ = program.Diagnostics().str();
 
         bool valid = program.IsValid();
         if (should_pass) {
diff --git a/src/tint/lang/wgsl/sem/test_helper.h b/src/tint/lang/wgsl/sem/test_helper.h
index 2c80446..0e0ad7a 100644
--- a/src/tint/lang/wgsl/sem/test_helper.h
+++ b/src/tint/lang/wgsl/sem/test_helper.h
@@ -29,10 +29,8 @@
     /// Builds and returns the program. Must only be called once per test
     /// @return the built program
     Program Build() {
-        diag::Formatter formatter;
         [&] {
-            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n"
-                                   << formatter.format(Diagnostics());
+            ASSERT_TRUE(IsValid()) << "Builder program is not valid\n" << Diagnostics().str();
         }();
         return Program(std::move(*this));
     }
diff --git a/src/tint/lang/wgsl/writer/ast_printer/test_helper.h b/src/tint/lang/wgsl/writer/ast_printer/test_helper.h
index 8cafa9c..aeba391 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/test_helper.h
+++ b/src/tint/lang/wgsl/writer/ast_printer/test_helper.h
@@ -41,8 +41,7 @@
             return *gen_;
         }
         program = std::make_unique<Program>(std::move(*this));
-        diag::Formatter formatter;
-        [&] { ASSERT_TRUE(program->IsValid()) << formatter.format(program->Diagnostics()); }();
+        [&] { ASSERT_TRUE(program->IsValid()) << program->Diagnostics().str(); }();
         gen_ = std::make_unique<ASTPrinter>(program.get());
         return *gen_;
     }