[tint][resolver] Tweak diagnostic messages

So that they read easier, and are more similar to other diagnostics.

Change-Id: I9ede3df263acc3abb5c2de1f1e03506eeebbe620
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/160081
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/lang/wgsl/resolver/attribute_validation_test.cc b/src/tint/lang/wgsl/resolver/attribute_validation_test.cc
index 96bbcae..d88daa5 100644
--- a/src/tint/lang/wgsl/resolver/attribute_validation_test.cc
+++ b/src/tint/lang/wgsl/resolver/attribute_validation_test.cc
@@ -254,6 +254,7 @@
             Enable(wgsl::Extension::kChromiumInternalDualSourceBlending);
         }
     }
+
     void EnableRequiredExtensions() {
         for (auto attribute : GetParam().attributes) {
             EnableExtensionIfNecessary(attribute);
@@ -640,7 +641,7 @@
         },
         TestParams{
             {AttributeKind::kBuiltinPosition},
-            R"(1:2 error: @builtin(position) cannot be used in input of compute pipeline stage)",
+            R"(1:2 error: @builtin(position) cannot be used for compute shader input)",
         },
         TestParams{
             {AttributeKind::kDiagnostic},
@@ -819,7 +820,7 @@
         },
         TestParams{
             {AttributeKind::kBuiltinPosition},
-            R"(1:2 error: @builtin(position) cannot be used in input of vertex pipeline stage)",
+            R"(1:2 error: @builtin(position) cannot be used for vertex shader input)",
         },
         TestParams{
             {AttributeKind::kDiagnostic},
@@ -847,7 +848,7 @@
         },
         TestParams{
             {AttributeKind::kInterpolate, AttributeKind::kBuiltinPosition},
-            R"(3:4 error: @builtin(position) cannot be used in input of vertex pipeline stage)",
+            R"(3:4 error: @builtin(position) cannot be used for vertex shader input)",
         },
         TestParams{
             {AttributeKind::kInvariant},
@@ -859,7 +860,7 @@
         },
         TestParams{
             {AttributeKind::kInvariant, AttributeKind::kBuiltinPosition},
-            R"(3:4 error: @builtin(position) cannot be used in input of vertex pipeline stage)",
+            R"(3:4 error: @builtin(position) cannot be used for vertex shader input)",
         },
         TestParams{
             {AttributeKind::kLocation},
@@ -920,7 +921,7 @@
         },
         TestParams{
             {AttributeKind::kBuiltinPosition},
-            R"(1:2 error: @builtin(position) cannot be used in output of compute pipeline stage)",
+            R"(1:2 error: @builtin(position) cannot be used for compute shader output)",
         },
         TestParams{
             {AttributeKind::kDiagnostic},
@@ -936,7 +937,7 @@
         },
         TestParams{
             {AttributeKind::kIndex},
-            R"(1:2 error: @index can only be used as fragment shader output)",
+            R"(1:2 error: @index can only be used for fragment shader output)",
         },
         TestParams{
             {AttributeKind::kInterpolate},
@@ -1002,7 +1003,7 @@
         },
         TestParams{
             {AttributeKind::kBuiltinPosition},
-            R"(1:2 error: @builtin(position) cannot be used in output of fragment pipeline stage)",
+            R"(1:2 error: @builtin(position) cannot be used for fragment shader output)",
         },
         TestParams{
             {AttributeKind::kDiagnostic},
@@ -1126,7 +1127,7 @@
         },
         TestParams{
             {AttributeKind::kIndex},
-            R"(1:2 error: @index can only be used as fragment shader output)",
+            R"(1:2 error: @index can only be used for fragment shader output)",
         },
         TestParams{
             {AttributeKind::kInterpolate},
diff --git a/src/tint/lang/wgsl/resolver/builtins_validation_test.cc b/src/tint/lang/wgsl/resolver/builtins_validation_test.cc
index 1da3470..616161d 100644
--- a/src/tint/lang/wgsl/resolver/builtins_validation_test.cc
+++ b/src/tint/lang/wgsl/resolver/builtins_validation_test.cc
@@ -147,7 +147,7 @@
     } else {
         StringStream err;
         err << "12:34 error: @builtin(" << params.builtin << ")";
-        err << " cannot be used in input of " << params.stage << " pipeline stage";
+        err << " cannot be used for " << params.stage << " shader input";
         EXPECT_FALSE(r()->Resolve());
         EXPECT_EQ(r()->error(), err.str());
     }
@@ -179,9 +179,8 @@
              Location(0_a),
          });
     EXPECT_FALSE(r()->Resolve());
-    EXPECT_EQ(
-        r()->error(),
-        "12:34 error: @builtin(frag_depth) cannot be used in input of fragment pipeline stage");
+    EXPECT_EQ(r()->error(),
+              "12:34 error: @builtin(frag_depth) cannot be used for fragment shader input");
 }
 
 TEST_F(ResolverBuiltinsValidationTest, FragDepthIsInputStruct_Fail) {
@@ -215,9 +214,8 @@
          });
     EXPECT_FALSE(r()->Resolve());
     EXPECT_EQ(r()->error(),
-              "12:34 error: @builtin(frag_depth) cannot be used in input of "
-              "fragment pipeline stage\n"
-              "note: while analyzing entry point 'fragShader'");
+              R"(12:34 error: @builtin(frag_depth) cannot be used for fragment shader input
+note: while analyzing entry point 'fragShader')");
 }
 
 TEST_F(ResolverBuiltinsValidationTest, StructBuiltinInsideEntryPoint_Ignored) {
diff --git a/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc b/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc
index 10acd30..74451cd 100644
--- a/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc
+++ b/src/tint/lang/wgsl/resolver/dual_source_blending_extension_test.cc
@@ -47,9 +47,9 @@
               });
 
     EXPECT_FALSE(r()->Resolve());
-    EXPECT_EQ(r()->error(),
-              "12:34 error: use of '@index' attribute requires enabling extension "
-              "'chromium_internal_dual_source_blending'");
+    EXPECT_EQ(
+        r()->error(),
+        R"(12:34 error: use of @index requires enabling extension 'chromium_internal_dual_source_blending')");
 }
 
 class DualSourceBlendingExtensionTests : public ResolverTest {
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 7c8e2c9..1a2cff8 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -984,8 +984,8 @@
 
     if (is_stage_mismatch) {
         StringStream err;
-        err << "@builtin(" << builtin << ") cannot be used in "
-            << (is_input ? "input of " : "output of ") << stage_name.str() << " pipeline stage";
+        err << "@builtin(" << builtin << ") cannot be used for " << stage_name.str() << " shader "
+            << (is_input ? "input" : "output");
         AddError(err.str(), attr->source);
         return false;
     }
@@ -2214,8 +2214,8 @@
                 [&](const ast::StructMemberSizeAttribute*) {
                     if (!member->Type()->HasCreationFixedFootprint()) {
                         AddError(
-                            "@size can only be applied to members where the member's type size "
-                            "can be fully determined at shader creation time",
+                            "@size can only be applied to members where the member's type size can "
+                            "be fully determined at shader creation time",
                             attr->source);
                         return false;
                     }
@@ -2311,8 +2311,7 @@
                                const std::optional<bool> is_input) const {
     if (!enabled_extensions_.Contains(wgsl::Extension::kChromiumInternalDualSourceBlending)) {
         AddError(
-            "use of '@index' attribute requires enabling extension "
-            "'chromium_internal_dual_source_blending'",
+            "use of @index requires enabling extension 'chromium_internal_dual_source_blending'",
             attr->source);
         return false;
     }
@@ -2321,7 +2320,7 @@
         stage != ast::PipelineStage::kNone && stage != ast::PipelineStage::kFragment;
     bool is_output = is_input.value_or(false);
     if (is_stage_non_fragment || is_output) {
-        AddError(AttrToStr(attr) + " can only be used as fragment shader output", attr->source);
+        AddError(AttrToStr(attr) + " can only be used for fragment shader output", attr->source);
         return false;
     }