wgsl: Do not require a semicolon after a struct

Don't generate them either, which generated a lot of test churn.

Fixed: tint:1380
Change-Id: I0a7cfdd2ef0ffe8e7fda111fbc57997b36b949e0
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/77165
Auto-Submit: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/docs/origin-trial-changes.md b/docs/origin-trial-changes.md
index cf4e668..a4acf8c 100644
--- a/docs/origin-trial-changes.md
+++ b/docs/origin-trial-changes.md
@@ -19,6 +19,7 @@
 * Added builtins `degrees()` and `radians()` for converting between degrees and radians. [tint:1329](https://crbug.com/tint/1329)
 * `let` arrays and matrices can now be dynamically indexed. [tint:1352](https://crbug.com/tint/1352)
 * Storage and Uniform buffer types no longer have to be structures. [tint:1372](crbug.com/tint/1372)
+* A struct declaration does not have to be followed by a semicolon. [tint:1380](crbug.com/tint/1380)
 
 ### Fixes
 
diff --git a/src/reader/spirv/function_memory_test.cc b/src/reader/spirv/function_memory_test.cc
index f8c8c98..189fdbe 100644
--- a/src/reader/spirv/function_memory_test.cc
+++ b/src/reader/spirv/function_memory_test.cc
@@ -955,7 +955,7 @@
 struct S {
   field0 : u32;
   field1 : RTArr;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> myvar : S;
 )"));
diff --git a/src/reader/spirv/parser_impl_function_decl_test.cc b/src/reader/spirv/parser_impl_function_decl_test.cc
index 47563d1..b3eecc1 100644
--- a/src/reader/spirv/parser_impl_function_decl_test.cc
+++ b/src/reader/spirv/parser_impl_function_decl_test.cc
@@ -126,7 +126,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 )")) << program_ast;
 
   EXPECT_THAT(program_ast, HasSubstr(R"(
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index 5d93620..4c7ab3a 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -473,7 +473,7 @@
 struct main_out {
   [[builtin(position)]]
   gl_Position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -533,7 +533,7 @@
 struct main_out {
   [[builtin(position)]]
   gl_Position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -592,7 +592,7 @@
 struct main_out {
   [[builtin(position)]]
   gl_Position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -651,7 +651,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -709,7 +709,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -767,7 +767,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -803,7 +803,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -1405,7 +1405,7 @@
   field0 : u32;
   field1 : f32;
   field2 : Arr;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> x_1 : S;
 )")) << module_str;
@@ -1435,7 +1435,7 @@
   const auto module_str = test::ToString(p->program());
   EXPECT_THAT(module_str, HasSubstr(R"(struct S {
   field0 : mat3x2<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> myvar : S;
 )")) << module_str;
@@ -1464,7 +1464,7 @@
   const auto module_str = test::ToString(p->program());
   EXPECT_THAT(module_str, HasSubstr(R"(struct S {
   field0 : mat3x2<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> myvar : S;
 )")) << module_str;
@@ -1494,7 +1494,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(struct S {
   [[stride(64), internal(disable_validation__ignore_stride)]]
   field0 : mat3x2<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> myvar : S;
 )")) << module_str;
@@ -1547,7 +1547,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(struct S {
   field0 : f32;
   field1 : f32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> x_1 : S;
 )")) << module_str;
@@ -1576,7 +1576,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(struct S {
   field0 : f32;
   field1 : f32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> x_1 : S;
 )")) << module_str;
@@ -1608,7 +1608,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(struct S {
   field0 : f32;
   field1 : f32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> x_1 : S;
 )")) << module_str;
@@ -2364,7 +2364,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -2401,7 +2401,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -2438,7 +2438,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -2474,7 +2474,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -2511,7 +2511,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -2548,7 +2548,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -2631,7 +2631,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -2689,7 +2689,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] x_1_param : u32) -> main_out {
@@ -2727,7 +2727,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] x_1_param : u32) -> main_out {
@@ -2764,7 +2764,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] x_1_param : u32) -> main_out {
@@ -2800,7 +2800,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] x_1_param : u32) -> main_out {
@@ -2838,7 +2838,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] x_1_param : u32) -> main_out {
@@ -2875,7 +2875,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] x_1_param : u32) -> main_out {
@@ -2960,7 +2960,7 @@
 struct main_out {
   [[builtin(position)]]
   position_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -2998,7 +2998,7 @@
 struct main_out {
   [[builtin(position)]]
   position_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -3035,7 +3035,7 @@
 struct main_out {
   [[builtin(position)]]
   position_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -3095,7 +3095,7 @@
 struct main_out {
   [[builtin(position)]]
   position_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -3133,7 +3133,7 @@
 struct main_out {
   [[builtin(position)]]
   position_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -3170,7 +3170,7 @@
 struct main_out {
   [[builtin(position)]]
   position_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -3734,7 +3734,7 @@
   x_2_1 : u32;
   [[location(6)]]
   x_4_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main([[location(0)]] x_1_param : u32, [[location(30)]] x_3_param : u32) -> main_out {
@@ -3786,7 +3786,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -3836,7 +3836,7 @@
 struct main_out {
   [[builtin(position)]]
   x_4_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
@@ -3962,7 +3962,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -4008,7 +4008,7 @@
 struct main_out {
   [[builtin(sample_mask)]]
   x_1_1 : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -4052,7 +4052,7 @@
 struct main_out {
   [[builtin(frag_depth)]]
   x_1_1 : f32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -4086,7 +4086,7 @@
 struct main_out {
   [[builtin(position)]]
   gl_Position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -4156,7 +4156,7 @@
 struct main_out {
   [[builtin(position)]]
   gl_Position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -4213,7 +4213,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[location(4)]] x_1_param : f32, [[location(5)]] x_1_param_1 : f32, [[location(6)]] x_1_param_2 : f32) -> main_out {
@@ -4271,7 +4271,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[location(9)]] x_1_param : vec4<f32>, [[location(10)]] x_1_param_1 : vec4<f32>) -> main_out {
@@ -4325,7 +4325,7 @@
   const std::string expected = R"(struct Communicators {
   alice : f32;
   bob : vec4<f32>;
-};
+}
 
 var<private> x_1 : Communicators;
 
@@ -4338,7 +4338,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[location(9)]] x_1_param : f32, [[location(10)]] x_1_param_1 : vec4<f32>) -> main_out {
@@ -4397,7 +4397,7 @@
 struct main_out {
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[location(7)]] x_1_param : vec4<f32>, [[location(8)]] x_1_param_1 : vec4<f32>, [[location(9)]] x_1_param_2 : vec4<f32>, [[location(10)]] x_1_param_3 : vec4<f32>) -> main_out {
@@ -4464,7 +4464,7 @@
   x_1_3 : f32;
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -4523,7 +4523,7 @@
   x_1_2 : vec4<f32>;
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -4575,7 +4575,7 @@
   const std::string expected = R"(struct Communicators {
   alice : f32;
   bob : vec4<f32>;
-};
+}
 
 var<private> x_1 : Communicators;
 
@@ -4592,7 +4592,7 @@
   x_1_2 : vec4<f32>;
   [[builtin(position)]]
   x_2_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -4648,7 +4648,7 @@
   const std::string expected = R"(struct Communicators {
   alice : f32;
   bob : vec4<f32>;
-};
+}
 
 var<private> x_1 : Communicators;
 
@@ -4667,7 +4667,7 @@
   x_3_1 : f32;
   [[location(11)]]
   x_3_2 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[location(9)]] x_1_param : f32, [[location(11)]] x_1_param_1 : vec4<f32>) -> main_out {
@@ -4748,7 +4748,7 @@
 struct main_out {
   [[builtin(position)]]
   x_10_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[location(1), interpolate(flat)]] x_1_param : u32, [[location(2), interpolate(flat)]] x_2_param : vec2<u32>, [[location(3), interpolate(flat)]] x_3_param : i32, [[location(4), interpolate(flat)]] x_4_param : vec2<i32>, [[location(5), interpolate(flat)]] x_5_param : f32, [[location(6), interpolate(flat)]] x_6_param : vec2<f32>) -> main_out {
@@ -4845,7 +4845,7 @@
   x_6_1 : vec2<f32>;
   [[builtin(position)]]
   x_10_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
@@ -4889,7 +4889,7 @@
       R"(struct S {
   field0 : f32;
   field1 : f32;
-};
+}
 
 var<private> x_1 : array<f32, 2u>;
 
@@ -5035,7 +5035,7 @@
   field3 : f32;
   field4 : f32;
   field5 : f32;
-};
+}
 
 var<private> x_1 : S;
 
@@ -5134,7 +5134,7 @@
   x_5_1 : f32;
   [[location(6), interpolate(linear, sample)]]
   x_6_1 : f32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
@@ -5192,7 +5192,7 @@
   field3 : f32;
   field4 : f32;
   field5 : f32;
-};
+}
 
 var<private> x_1 : S;
 
@@ -5213,7 +5213,7 @@
   x_1_5 : f32;
   [[location(6), interpolate(linear, sample)]]
   x_1_6 : f32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
diff --git a/src/reader/spirv/parser_impl_named_types_test.cc b/src/reader/spirv/parser_impl_named_types_test.cc
index c9a951c..f593222 100644
--- a/src/reader/spirv/parser_impl_named_types_test.cc
+++ b/src/reader/spirv/parser_impl_named_types_test.cc
@@ -56,7 +56,7 @@
   EXPECT_THAT(test::ToString(p->program()), HasSubstr(R"(struct S {
   field0 : u32;
   field1 : u32;
-};
+}
 
 struct S_1 {
   field0 : u32;
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 719e1b9..cdc9b87 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -349,7 +349,7 @@
 //  | global_variable_decl SEMICLON
 //  | global_constant_decl SEMICOLON
 //  | type_alias SEMICOLON
-//  | struct_decl SEMICOLON
+//  | struct_decl
 //  | function_decl
 Expect<bool> ParserImpl::expect_global_decl() {
   if (match(Token::Type::kSemicolon) || match(Token::Type::kEOF))
@@ -404,9 +404,6 @@
       return Failure::kErrored;
 
     if (str.matched) {
-      if (!expect("struct declaration", Token::Type::kSemicolon))
-        return Failure::kErrored;
-
       builder_.AST().AddTypeDecl(str.value);
       return true;
     }
diff --git a/src/reader/wgsl/parser_impl_error_msg_test.cc b/src/reader/wgsl/parser_impl_error_msg_test.cc
index 6d1ff74..29f5a7e 100644
--- a/src/reader/wgsl/parser_impl_error_msg_test.cc
+++ b/src/reader/wgsl/parser_impl_error_msg_test.cc
@@ -636,13 +636,6 @@
          "       ^\n");
 }
 
-TEST_F(ParserImplErrorTest, GlobalDeclStructDeclMissingSemicolon) {
-  EXPECT("struct S {}",
-         "test.wgsl:1:12 error: expected ';' for struct declaration\n"
-         "struct S {}\n"
-         "           ^\n");
-}
-
 TEST_F(ParserImplErrorTest, GlobalDeclStructDeclMissingLBrace) {
   EXPECT("struct S };",
          "test.wgsl:1:10 error: expected '{' for struct declaration\n"
diff --git a/src/reader/wgsl/parser_impl_global_decl_test.cc b/src/reader/wgsl/parser_impl_global_decl_test.cc
index 175947c..d880e4a 100644
--- a/src/reader/wgsl/parser_impl_global_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_decl_test.cc
@@ -93,7 +93,7 @@
 TEST_F(ParserImplTest, GlobalDecl_TypeAlias_StructIdent) {
   auto p = parser(R"(struct A {
   a : f32;
-};
+}
 type B = A;)");
   p->expect_global_decl();
   p->expect_global_decl();
@@ -150,7 +150,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalDecl_ParsesStruct) {
-  auto p = parser("struct A { b: i32; c: f32;};");
+  auto p = parser("struct A { b: i32; c: f32;}");
   p->expect_global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
@@ -167,7 +167,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalDecl_Struct_WithStride) {
-  auto p = parser("struct A { data: [[stride(4)]] array<f32>; };");
+  auto p = parser("struct A { data: [[stride(4)]] array<f32>; }");
 
   p->expect_global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
@@ -195,7 +195,7 @@
 
 // TODO(crbug.com/tint/1324): DEPRECATED: Remove when [[block]] is removed.
 TEST_F(ParserImplTest, GlobalDecl_Struct_WithDecoration) {
-  auto p = parser("[[block]] struct A { data: f32; };");
+  auto p = parser("[[block]] struct A { data: f32; }");
   p->expect_global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
@@ -212,19 +212,12 @@
 }
 
 TEST_F(ParserImplTest, GlobalDecl_Struct_Invalid) {
-  auto p = parser("A {};");
+  auto p = parser("A {}");
   p->expect_global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:1: unexpected token");
 }
 
-TEST_F(ParserImplTest, GlobalDecl_StructMissing_Semi) {
-  auto p = parser("struct A {}");
-  p->expect_global_decl();
-  ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:12: expected ';' for struct declaration");
-}
-
 }  // namespace
 }  // namespace wgsl
 }  // namespace reader
diff --git a/src/reader/wgsl/parser_impl_primary_expression_test.cc b/src/reader/wgsl/parser_impl_primary_expression_test.cc
index 97fc0d1..868e39b 100644
--- a/src/reader/wgsl/parser_impl_primary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_primary_expression_test.cc
@@ -115,7 +115,7 @@
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_StructConstructor_Empty) {
   auto p = parser(R"(
-  struct S { a : i32; b : f32; };
+  struct S { a : i32; b : f32; }
   S()
   )");
 
@@ -139,7 +139,7 @@
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_StructConstructor_NotEmpty) {
   auto p = parser(R"(
-  struct S { a : i32; b : f32; };
+  struct S { a : i32; b : f32; }
   S(1u, 2.0)
   )");
 
diff --git a/src/reader/wgsl/parser_impl_test.cc b/src/reader/wgsl/parser_impl_test.cc
index 155113d..269cc9b 100644
--- a/src/reader/wgsl/parser_impl_test.cc
+++ b/src/reader/wgsl/parser_impl_test.cc
@@ -37,6 +37,27 @@
   ASSERT_EQ(1u, program.AST().Functions().size());
 }
 
+TEST_F(ParserImplTest, Parses_ExtraSemicolons) {
+  auto p = parser(R"(
+;
+struct S {
+  a : f32;
+};;
+;
+fn foo() -> S {
+  ;
+  return S();;;
+  ;
+};;
+;
+)");
+  ASSERT_TRUE(p->Parse()) << p->error();
+
+  Program program = p->program();
+  ASSERT_EQ(1u, program.AST().Functions().size());
+  ASSERT_EQ(1u, program.AST().TypeDecls().size());
+}
+
 TEST_F(ParserImplTest, HandlesError) {
   auto p = parser(R"(
 fn main() ->  {  // missing return type
diff --git a/src/transform/add_spirv_block_decoration_test.cc b/src/transform/add_spirv_block_decoration_test.cc
index 74e4b33..e504c50 100644
--- a/src/transform/add_spirv_block_decoration_test.cc
+++ b/src/transform/add_spirv_block_decoration_test.cc
@@ -38,7 +38,7 @@
   auto* src = R"(
 struct S {
   f : f32;
-};
+}
 
 var<private> p : S;
 
@@ -59,7 +59,7 @@
 struct S {
   [[location(0)]]
   f : f32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> S {
@@ -87,7 +87,7 @@
 [[internal(spirv_block)]]
 struct u_block {
   inner : f32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u : u_block;
 
@@ -116,7 +116,7 @@
 [[internal(spirv_block)]]
 struct u_block {
   inner : array<vec4<f32>, 4u>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u : u_block;
 
@@ -149,7 +149,7 @@
 [[internal(spirv_block)]]
 struct u_block {
   inner : array<vec4<f32>, 4u>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u : u_block;
 
@@ -182,7 +182,7 @@
 [[internal(spirv_block)]]
 struct S {
   f : f32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u : S;
 
@@ -218,12 +218,12 @@
   auto* expect = R"(
 struct Inner {
   f : f32;
-};
+}
 
 [[internal(spirv_block)]]
 struct Outer {
   i : Inner;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u : Outer;
 
@@ -263,19 +263,19 @@
   auto* expect = R"(
 struct Inner {
   f : f32;
-};
+}
 
 [[internal(spirv_block)]]
 struct Outer {
   i : Inner;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u0 : Outer;
 
 [[internal(spirv_block)]]
 struct u1_block {
   inner : Inner;
-};
+}
 
 [[group(0), binding(1)]] var<uniform> u1 : u1_block;
 
@@ -315,18 +315,18 @@
   auto* expect = R"(
 struct Inner {
   f : f32;
-};
+}
 
 struct Outer {
   i : Inner;
-};
+}
 
 var<private> p : Outer;
 
 [[internal(spirv_block)]]
 struct u_block {
   inner : Inner;
-};
+}
 
 [[group(0), binding(1)]] var<uniform> u : u_block;
 
@@ -371,19 +371,19 @@
   auto* expect = R"(
 struct Inner {
   f : f32;
-};
+}
 
 [[internal(spirv_block)]]
 struct S {
   i : Inner;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u0 : S;
 
 [[internal(spirv_block)]]
 struct u1_block {
   inner : Inner;
-};
+}
 
 [[group(0), binding(1)]] var<uniform> u1 : u1_block;
 
@@ -420,12 +420,12 @@
   auto* expect = R"(
 struct S {
   f : f32;
-};
+}
 
 [[internal(spirv_block)]]
 struct u_block {
   inner : S;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u : u_block;
 
@@ -463,12 +463,12 @@
   auto* expect = R"(
 struct S {
   f : f32;
-};
+}
 
 [[internal(spirv_block)]]
 struct u0_block {
   inner : S;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u0 : u0_block;
 
@@ -516,14 +516,14 @@
   auto* expect = R"(
 struct Inner {
   f : f32;
-};
+}
 
 type MyInner = Inner;
 
 [[internal(spirv_block)]]
 struct Outer {
   i : MyInner;
-};
+}
 
 type MyOuter = Outer;
 
@@ -532,7 +532,7 @@
 [[internal(spirv_block)]]
 struct u1_block {
   inner : Inner;
-};
+}
 
 [[group(0), binding(1)]] var<uniform> u1 : u1_block;
 
diff --git a/src/transform/array_length_from_uniform_test.cc b/src/transform/array_length_from_uniform_test.cc
index 77fb0c3..b9139a9 100644
--- a/src/transform/array_length_from_uniform_test.cc
+++ b/src/transform/array_length_from_uniform_test.cc
@@ -63,7 +63,7 @@
   auto* expect = R"(
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
@@ -106,14 +106,14 @@
   auto* expect = R"(
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
 struct SB {
   x : i32;
   arr : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> sb : SB;
 
@@ -149,7 +149,7 @@
   auto* expect = R"(
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
@@ -193,7 +193,7 @@
   auto* expect = R"(
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
@@ -201,7 +201,7 @@
   x : i32;
   y : f32;
   arr : [[stride(64)]] array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> sb : SB;
 
@@ -259,24 +259,24 @@
   auto* expect = R"(
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 2u>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
-};
+}
 
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
-};
+}
 
 struct SB4 {
   x : i32;
   arr4 : array<vec4<f32>>;
-};
+}
 
 [[group(0), binding(2)]] var<storage, read> sb1 : SB1;
 
@@ -348,24 +348,24 @@
   auto* expect = R"(
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
-};
+}
 
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
-};
+}
 
 struct SB4 {
   x : i32;
   arr4 : array<vec4<f32>>;
-};
+}
 
 [[group(0), binding(2)]] var<storage, read> sb1 : SB1;
 
@@ -407,7 +407,7 @@
 struct SB {
   x : i32;
   arr : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> sb : SB;
 
@@ -457,19 +457,19 @@
   auto* expect = R"(
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
-};
+}
 
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
-};
+}
 
 [[group(0), binding(2)]] var<storage, read> sb1 : SB1;
 
diff --git a/src/transform/binding_remapper_test.cc b/src/transform/binding_remapper_test.cc
index 87e205a..de85cb0 100644
--- a/src/transform/binding_remapper_test.cc
+++ b/src/transform/binding_remapper_test.cc
@@ -28,7 +28,7 @@
   auto* src = R"(
 struct S {
   a : f32;
-};
+}
 
 [[group(2), binding(1)]] var<storage, read> a : S;
 
@@ -67,7 +67,7 @@
   auto* expect = R"(
 struct S {
   a : f32;
-};
+}
 
 [[group(1), binding(2)]] var<storage, read> a : S;
 
@@ -111,7 +111,7 @@
   auto* expect = R"(
 struct S {
   a : f32;
-};
+}
 
 [[group(2), binding(1)]] var<storage, write> a : S;
 
@@ -215,7 +215,7 @@
   auto* expect = R"(
 struct S {
   a : f32;
-};
+}
 
 [[group(4), binding(5)]] var<storage, write> a : S;
 
@@ -264,7 +264,7 @@
   auto* expect = R"(
 struct S {
   i : i32;
-};
+}
 
 [[internal(disable_validation__binding_point_collision), group(1), binding(1)]] var<storage, read> a : S;
 
@@ -321,7 +321,7 @@
   auto* expect = R"(
 struct S {
   i : i32;
-};
+}
 
 [[group(1), binding(1)]] var<storage, read> a : S;
 
diff --git a/src/transform/calculate_array_length_test.cc b/src/transform/calculate_array_length_test.cc
index 4b42bf9..83e0ac7 100644
--- a/src/transform/calculate_array_length_test.cc
+++ b/src/transform/calculate_array_length_test.cc
@@ -85,7 +85,7 @@
 struct SB {
   x : i32;
   arr : array<i32>;
-};
+}
 
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB, result : ptr<function, u32>)
@@ -161,7 +161,7 @@
 struct SB {
   x : i32;
   arr : array<i32>;
-};
+}
 
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB, result : ptr<function, u32>)
@@ -235,7 +235,7 @@
   x : i32;
   y : f32;
   arr : [[stride(64)]] array<i32>;
-};
+}
 
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB, result : ptr<function, u32>)
@@ -281,7 +281,7 @@
 struct SB {
   x : i32;
   arr : array<i32>;
-};
+}
 
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB, result : ptr<function, u32>)
@@ -345,7 +345,7 @@
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
-};
+}
 
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB1, result : ptr<function, u32>)
@@ -353,7 +353,7 @@
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
-};
+}
 
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol_3([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB2, result : ptr<function, u32>)
@@ -412,7 +412,7 @@
 struct SB {
   x : i32;
   arr : array<i32>;
-};
+}
 
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB, result : ptr<function, u32>)
diff --git a/src/transform/canonicalize_entry_point_io_test.cc b/src/transform/canonicalize_entry_point_io_test.cc
index e2daa97..3c16ee5 100644
--- a/src/transform/canonicalize_entry_point_io_test.cc
+++ b/src/transform/canonicalize_entry_point_io_test.cc
@@ -121,7 +121,7 @@
   loc1 : f32;
   [[location(2)]]
   loc2 : vec4<u32>;
-};
+}
 
 fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>) {
   var col : f32 = (coord.x * loc1);
@@ -159,7 +159,7 @@
   loc2 : vec4<u32>;
   [[builtin(position)]]
   coord : vec4<f32>;
-};
+}
 
 fn frag_main_inner(loc1 : f32, loc2 : vec4<u32>, coord : vec4<f32>) {
   var col : f32 = (coord.x * loc1);
@@ -195,7 +195,7 @@
 struct tint_symbol_1 {
   [[location(1)]]
   loc1 : f32;
-};
+}
 
 fn frag_main_inner(loc1 : myf32) {
   var x : myf32 = loc1;
@@ -244,12 +244,12 @@
 
 struct FragBuiltins {
   coord : vec4<f32>;
-};
+}
 
 struct FragLocations {
   loc1 : f32;
   loc2 : vec4<u32>;
-};
+}
 
 fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
   var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
@@ -290,12 +290,12 @@
   auto* expect = R"(
 struct FragBuiltins {
   coord : vec4<f32>;
-};
+}
 
 struct FragLocations {
   loc1 : f32;
   loc2 : vec4<u32>;
-};
+}
 
 struct tint_symbol_1 {
   [[location(0)]]
@@ -304,7 +304,7 @@
   loc1 : f32;
   [[location(2)]]
   loc2 : vec4<u32>;
-};
+}
 
 fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
   var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
@@ -345,12 +345,12 @@
   auto* expect = R"(
 struct FragBuiltins {
   coord : vec4<f32>;
-};
+}
 
 struct FragLocations {
   loc1 : f32;
   loc2 : vec4<u32>;
-};
+}
 
 struct tint_symbol_1 {
   [[location(0)]]
@@ -361,7 +361,7 @@
   loc2 : vec4<u32>;
   [[builtin(position)]]
   coord : vec4<f32>;
-};
+}
 
 fn frag_main_inner(loc0 : f32, locations : FragLocations, builtins : FragBuiltins) {
   var col : f32 = ((builtins.coord.x * locations.loc1) + loc0);
@@ -423,7 +423,7 @@
 struct tint_symbol {
   [[builtin(frag_depth)]]
   value : f32;
-};
+}
 
 fn frag_main_inner() -> f32 {
   return 1.0;
@@ -458,7 +458,7 @@
 struct tint_symbol {
   [[builtin(frag_depth)]]
   value : f32;
-};
+}
 
 fn frag_main_inner() -> f32 {
   return 1.0;
@@ -510,7 +510,7 @@
   color : vec4<f32>;
   depth : f32;
   mask : u32;
-};
+}
 
 fn frag_main_inner() -> FragOutput {
   var output : FragOutput;
@@ -560,7 +560,7 @@
   color : vec4<f32>;
   depth : f32;
   mask : u32;
-};
+}
 
 struct tint_symbol {
   [[location(0)]]
@@ -569,7 +569,7 @@
   depth : f32;
   [[builtin(sample_mask)]]
   mask : u32;
-};
+}
 
 fn frag_main_inner() -> FragOutput {
   var output : FragOutput;
@@ -621,7 +621,7 @@
   color : vec4<f32>;
   depth : f32;
   mask : u32;
-};
+}
 
 struct tint_symbol {
   [[location(0)]]
@@ -630,7 +630,7 @@
   depth : f32;
   [[builtin(sample_mask)]]
   mask : u32;
-};
+}
 
 fn frag_main_inner() -> FragOutput {
   var output : FragOutput;
@@ -694,7 +694,7 @@
 struct FragmentInput {
   value : f32;
   mul : f32;
-};
+}
 
 fn foo(x : FragmentInput) -> f32 {
   return (x.value * x.mul);
@@ -754,7 +754,7 @@
 struct FragmentInput {
   value : f32;
   mul : f32;
-};
+}
 
 fn foo(x : FragmentInput) -> f32 {
   return (x.value * x.mul);
@@ -765,7 +765,7 @@
   value : f32;
   [[location(1)]]
   mul : f32;
-};
+}
 
 fn frag_main1_inner(inputs : FragmentInput) {
   var x : f32 = foo(inputs);
@@ -781,7 +781,7 @@
   value : f32;
   [[location(1)]]
   mul : f32;
-};
+}
 
 fn frag_main2_inner(inputs : FragmentInput) {
   var x : f32 = foo(inputs);
@@ -828,7 +828,7 @@
 struct FragmentInput {
   value : f32;
   mul : f32;
-};
+}
 
 fn foo(x : FragmentInput) -> f32 {
   return (x.value * x.mul);
@@ -839,7 +839,7 @@
   value : f32;
   [[location(1)]]
   mul : f32;
-};
+}
 
 fn frag_main1_inner(inputs : FragmentInput) {
   var x : f32 = foo(inputs);
@@ -855,7 +855,7 @@
   value : f32;
   [[location(1)]]
   mul : f32;
-};
+}
 
 fn frag_main2_inner(inputs : FragmentInput) {
   var x : f32 = foo(inputs);
@@ -904,7 +904,7 @@
 struct FragmentInput {
   col1 : f32;
   col2 : f32;
-};
+}
 
 var<private> global_inputs : FragmentInput;
 
@@ -921,7 +921,7 @@
   col1 : f32;
   [[location(1)]]
   col2 : f32;
-};
+}
 
 fn frag_main1_inner(inputs : FragmentInput) {
   global_inputs = inputs;
@@ -978,12 +978,12 @@
 struct FragmentInput {
   col1 : myf32;
   col2 : myf32;
-};
+}
 
 struct FragmentOutput {
   col1 : myf32;
   col2 : myf32;
-};
+}
 
 type MyFragmentInput = FragmentInput;
 
@@ -998,14 +998,14 @@
   col1 : f32;
   [[location(1)]]
   col2 : f32;
-};
+}
 
 struct tint_symbol_2 {
   [[location(0)]]
   col1 : f32;
   [[location(1)]]
   col2 : f32;
-};
+}
 
 fn frag_main_inner(inputs : MyFragmentInput) -> MyFragmentOutput {
   var x : myf32 = foo(inputs);
@@ -1062,12 +1062,12 @@
   loc1 : f32;
   loc2 : f32;
   loc3 : f32;
-};
+}
 
 struct FragmentIn {
   loc1 : f32;
   loc2 : f32;
-};
+}
 
 struct tint_symbol {
   [[location(1), interpolate(flat)]]
@@ -1078,7 +1078,7 @@
   loc3 : f32;
   [[builtin(position)]]
   pos : vec4<f32>;
-};
+}
 
 fn vert_main_inner() -> VertexOut {
   return VertexOut();
@@ -1102,7 +1102,7 @@
   loc2 : f32;
   [[location(3), interpolate(perspective, centroid)]]
   loc3 : f32;
-};
+}
 
 fn frag_main_inner(inputs : FragmentIn, loc3 : f32) {
   let x = ((inputs.loc1 + inputs.loc2) + loc3);
@@ -1200,7 +1200,7 @@
   u : u32;
   vi : vec4<i32>;
   vu : vec4<u32>;
-};
+}
 
 struct VertexOut {
   i : i32;
@@ -1208,14 +1208,14 @@
   vi : vec4<i32>;
   vu : vec4<u32>;
   pos : vec4<f32>;
-};
+}
 
 struct FragmentInterface {
   i : i32;
   u : u32;
   vi : vec4<i32>;
   vu : vec4<u32>;
-};
+}
 
 fn vert_main_inner(in : VertexIn) -> VertexOut {
   return VertexOut(in.i, in.u, in.vi, in.vu, vec4<f32>());
@@ -1273,12 +1273,12 @@
   auto* expect = R"(
 struct VertexOut {
   pos : vec4<f32>;
-};
+}
 
 struct tint_symbol {
   [[builtin(position), invariant]]
   pos : vec4<f32>;
-};
+}
 
 fn main1_inner() -> VertexOut {
   return VertexOut();
@@ -1295,7 +1295,7 @@
 struct tint_symbol_1 {
   [[builtin(position), invariant]]
   value : vec4<f32>;
-};
+}
 
 fn main2_inner() -> vec4<f32> {
   return vec4<f32>();
@@ -1344,12 +1344,12 @@
   coord : vec4<f32>;
   [[align(128)]]
   loc0 : f32;
-};
+}
 
 struct FragmentOutput {
   [[size(16)]]
   value : f32;
-};
+}
 
 struct tint_symbol_1 {
   [[location(0), interpolate(linear, sample)]]
@@ -1358,12 +1358,12 @@
   value : f32;
   [[builtin(position)]]
   coord : vec4<f32>;
-};
+}
 
 struct tint_symbol_2 {
   [[location(1), interpolate(flat)]]
   value : f32;
-};
+}
 
 fn frag_main_inner(inputs : FragmentInput) -> FragmentOutput {
   return FragmentOutput(((inputs.coord.x * inputs.value) + inputs.loc0));
@@ -1422,13 +1422,13 @@
   d : u32;
   a : f32;
   c : i32;
-};
+}
 
 struct FragmentInputExtra {
   d : u32;
   pos : vec4<f32>;
   a : f32;
-};
+}
 
 struct tint_symbol {
   [[location(0)]]
@@ -1441,7 +1441,7 @@
   d : u32;
   [[builtin(position)]]
   pos : vec4<f32>;
-};
+}
 
 fn vert_main_inner() -> VertexOutput {
   return VertexOutput();
@@ -1472,7 +1472,7 @@
   pos : vec4<f32>;
   [[builtin(front_facing)]]
   ff : bool;
-};
+}
 
 fn frag_main_inner(ff : bool, c : i32, inputs : FragmentInputExtra, b : u32) {
 }
@@ -1502,7 +1502,7 @@
 struct tint_symbol_2 {
   [[location(0)]]
   col : f32;
-};
+}
 
 fn tint_symbol_1_inner(col : f32) {
 }
@@ -1532,7 +1532,7 @@
 struct tint_symbol {
   [[builtin(sample_mask)]]
   fixed_sample_mask : u32;
-};
+}
 
 fn frag_main_inner() {
 }
@@ -1566,7 +1566,7 @@
 struct tint_symbol {
   [[builtin(sample_mask)]]
   fixed_sample_mask : u32;
-};
+}
 
 fn frag_main_inner() {
   return;
@@ -1601,7 +1601,7 @@
 struct tint_symbol {
   [[builtin(sample_mask)]]
   value : u32;
-};
+}
 
 fn frag_main_inner() -> u32 {
   return 7u;
@@ -1638,7 +1638,7 @@
   value : f32;
   [[builtin(sample_mask)]]
   fixed_sample_mask : u32;
-};
+}
 
 fn frag_main_inner() -> f32 {
   return 1.0;
@@ -1681,7 +1681,7 @@
   depth : f32;
   mask : u32;
   value : f32;
-};
+}
 
 struct tint_symbol {
   [[location(0)]]
@@ -1690,7 +1690,7 @@
   depth : f32;
   [[builtin(sample_mask)]]
   mask : u32;
-};
+}
 
 fn frag_main_inner() -> Output {
   return Output(0.5, 7u, 1.0);
@@ -1733,7 +1733,7 @@
 struct Output {
   depth : f32;
   value : f32;
-};
+}
 
 struct tint_symbol {
   [[location(0)]]
@@ -1742,7 +1742,7 @@
   depth : f32;
   [[builtin(sample_mask)]]
   fixed_sample_mask : u32;
-};
+}
 
 fn frag_main_inner() -> Output {
   return Output(0.5, 1.0);
@@ -1793,7 +1793,7 @@
 struct tint_symbol {
   [[builtin(sample_mask)]]
   value : u32;
-};
+}
 
 fn frag_main1_inner() -> u32 {
   return 7u;
@@ -1812,7 +1812,7 @@
   value : f32;
   [[builtin(sample_mask)]]
   fixed_sample_mask : u32;
-};
+}
 
 fn frag_main2_inner() -> f32 {
   return 1.0;
@@ -1830,7 +1830,7 @@
 struct tint_symbol_2 {
   [[builtin(position)]]
   value : vec4<f32>;
-};
+}
 
 fn vert_main1_inner() -> vec4<f32> {
   return vec4<f32>();
@@ -1874,7 +1874,7 @@
 struct FragOut {
   fixed_sample_mask : vec4<f32>;
   fixed_sample_mask_1 : vec4<f32>;
-};
+}
 
 struct tint_symbol {
   [[location(0)]]
@@ -1883,7 +1883,7 @@
   fixed_sample_mask_1 : vec4<f32>;
   [[builtin(sample_mask)]]
   fixed_sample_mask_2 : u32;
-};
+}
 
 fn frag_main_inner() -> FragOut {
   return FragOut();
@@ -1956,7 +1956,7 @@
   value : vec4<f32>;
   [[builtin(pointsize)]]
   vertex_point_size : f32;
-};
+}
 
 fn vert_main_inner() -> vec4<f32> {
   return vec4<f32>();
@@ -1999,7 +1999,7 @@
 
 struct VertOut {
   pos : vec4<f32>;
-};
+}
 
 fn vert_main_inner() -> VertOut {
   return VertOut();
@@ -2036,14 +2036,14 @@
   auto* expect = R"(
 struct VertOut {
   pos : vec4<f32>;
-};
+}
 
 struct tint_symbol {
   [[builtin(position)]]
   pos : vec4<f32>;
   [[builtin(pointsize)]]
   vertex_point_size : f32;
-};
+}
 
 fn vert_main_inner() -> VertOut {
   return VertOut();
@@ -2112,16 +2112,16 @@
 
 struct VertIn1 {
   collide : f32;
-};
+}
 
 struct VertIn2 {
   collide : f32;
-};
+}
 
 struct VertOut {
   vertex_point_size : f32;
   vertex_point_size_1 : vec4<f32>;
-};
+}
 
 fn vert_main_inner(collide : VertIn1, collide_1 : VertIn2) -> VertOut {
   let x = (collide.collide + collide_1.collide);
@@ -2170,23 +2170,23 @@
   auto* expect = R"(
 struct VertIn1 {
   collide : f32;
-};
+}
 
 struct VertIn2 {
   collide : f32;
-};
+}
 
 struct VertOut {
   vertex_point_size : vec4<f32>;
   vertex_point_size_1 : vec4<f32>;
-};
+}
 
 struct tint_symbol_1 {
   [[location(0)]]
   collide : f32;
   [[location(1)]]
   collide_2 : f32;
-};
+}
 
 struct tint_symbol_2 {
   [[location(0)]]
@@ -2195,7 +2195,7 @@
   vertex_point_size_1 : vec4<f32>;
   [[builtin(pointsize)]]
   vertex_point_size_2 : f32;
-};
+}
 
 fn vert_main_inner(collide : VertIn1, collide_1 : VertIn2) -> VertOut {
   let x = (collide.collide + collide_1.collide);
@@ -2246,23 +2246,23 @@
   auto* expect = R"(
 struct VertIn1 {
   collide : f32;
-};
+}
 
 struct VertIn2 {
   collide : f32;
-};
+}
 
 struct VertOut {
   vertex_point_size : vec4<f32>;
   vertex_point_size_1 : vec4<f32>;
-};
+}
 
 struct tint_symbol_1 {
   [[location(0)]]
   collide : f32;
   [[location(1)]]
   collide_2 : f32;
-};
+}
 
 struct tint_symbol_2 {
   [[location(0)]]
@@ -2271,7 +2271,7 @@
   vertex_point_size_1 : vec4<f32>;
   [[builtin(pointsize)]]
   vertex_point_size_2 : f32;
-};
+}
 
 fn vert_main_inner(collide : VertIn1, collide_1 : VertIn2) -> VertOut {
   let x = (collide.collide + collide_1.collide);
diff --git a/src/transform/decompose_memory_access_test.cc b/src/transform/decompose_memory_access_test.cc
index 046d88c..c28f48e 100644
--- a/src/transform/decompose_memory_access_test.cc
+++ b/src/transform/decompose_memory_access_test.cc
@@ -102,7 +102,7 @@
   t : mat4x3<f32>;
   u : mat4x4<f32>;
   v : array<vec3<f32>, 2>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -298,7 +298,7 @@
   t : mat4x3<f32>;
   u : mat4x4<f32>;
   v : array<vec3<f32>, 2>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ub : UB;
 
@@ -494,7 +494,7 @@
   t : mat4x3<f32>;
   u : mat4x4<f32>;
   v : array<vec3<f32>, 2>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -686,7 +686,7 @@
   t : mat4x3<f32>;
   u : mat4x4<f32>;
   v : array<vec3<f32>, 2>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -844,7 +844,7 @@
   t : mat4x3<f32>;
   u : mat4x4<f32>;
   v : array<vec3<f32>, 2>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1021,19 +1021,19 @@
   a : i32;
   b : vec3<f32>;
   c : i32;
-};
+}
 
 struct S2 {
   a : i32;
   b : [[stride(32)]] array<S1, 3>;
   c : i32;
-};
+}
 
 struct SB {
   [[size(128)]]
   a : i32;
   b : [[stride(256)]] array<S2>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1087,19 +1087,19 @@
   a : i32;
   b : vec3<f32>;
   c : i32;
-};
+}
 
 struct S2 {
   a : i32;
   b : [[stride(32)]] array<S1, 3>;
   c : i32;
-};
+}
 
 struct SB {
   [[size(128)]]
   a : i32;
   b : [[stride(256)]] array<S2>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1164,7 +1164,7 @@
   a : i32;
   b : vec3<f32>;
   c : i32;
-};
+}
 
 type A1 = S1;
 
@@ -1174,7 +1174,7 @@
   a : i32;
   b : A1_Array;
   c : i32;
-};
+}
 
 type A2 = S2;
 
@@ -1184,7 +1184,7 @@
   [[size(128)]]
   a : i32;
   b : A2_Array;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1248,7 +1248,7 @@
   padding : vec4<f32>;
   a : atomic<i32>;
   b : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb : SB;
 
@@ -1356,7 +1356,7 @@
   padding : vec4<f32>;
   a : atomic<i32>;
   b : atomic<u32>;
-};
+}
 
 var<workgroup> w : S;
 
diff --git a/src/transform/decompose_strided_matrix_test.cc b/src/transform/decompose_strided_matrix_test.cc
index 41555dc..db31c62 100644
--- a/src/transform/decompose_strided_matrix_test.cc
+++ b/src/transform/decompose_strided_matrix_test.cc
@@ -91,7 +91,7 @@
   [[size(16)]]
   padding : u32;
   m : [[stride(32)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> s : S;
 
@@ -152,7 +152,7 @@
   [[size(16)]]
   padding : u32;
   m : [[stride(32)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> s : S;
 
@@ -210,7 +210,7 @@
   padding : u32;
   [[stride(8), internal(disable_validation__ignore_stride)]]
   m : mat2x2<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> s : S;
 
@@ -267,7 +267,7 @@
   [[size(8)]]
   padding : u32;
   m : [[stride(32)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> s : S;
 
@@ -328,7 +328,7 @@
   [[size(16)]]
   padding : u32;
   m : [[stride(32)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> s : S;
 
@@ -386,7 +386,7 @@
   [[size(8)]]
   padding : u32;
   m : [[stride(32)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> s : S;
 
@@ -447,7 +447,7 @@
   [[size(8)]]
   padding : u32;
   m : [[stride(32)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> s : S;
 
@@ -519,7 +519,7 @@
   [[size(8)]]
   padding : u32;
   m : [[stride(32)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> s : S;
 
@@ -588,7 +588,7 @@
   padding : u32;
   [[stride(32), internal(disable_validation__ignore_stride)]]
   m : mat2x2<f32>;
-};
+}
 
 var<private> s : S;
 
@@ -646,7 +646,7 @@
   padding : u32;
   [[stride(32), internal(disable_validation__ignore_stride)]]
   m : mat2x2<f32>;
-};
+}
 
 var<private> s : S;
 
diff --git a/src/transform/first_index_offset_test.cc b/src/transform/first_index_offset_test.cc
index 8d537e0..6368d29 100644
--- a/src/transform/first_index_offset_test.cc
+++ b/src/transform/first_index_offset_test.cc
@@ -61,7 +61,7 @@
   auto* expect = R"(
 struct tint_symbol {
   first_vertex_index : u32;
-};
+}
 
 [[binding(1), group(2)]] var<uniform> tint_symbol_1 : tint_symbol;
 
@@ -107,7 +107,7 @@
   auto* expect = R"(
 struct tint_symbol {
   first_instance_index : u32;
-};
+}
 
 [[binding(1), group(7)]] var<uniform> tint_symbol_1 : tint_symbol;
 
@@ -159,7 +159,7 @@
 struct tint_symbol {
   first_vertex_index : u32;
   first_instance_index : u32;
-};
+}
 
 [[binding(1), group(2)]] var<uniform> tint_symbol_1 : tint_symbol;
 
@@ -172,7 +172,7 @@
   instance_idx : u32;
   [[builtin(vertex_index)]]
   vert_idx : u32;
-};
+}
 
 [[stage(vertex)]]
 fn entry(inputs : Inputs) -> [[builtin(position)]] vec4<f32> {
@@ -216,7 +216,7 @@
   auto* expect = R"(
 struct tint_symbol {
   first_vertex_index : u32;
-};
+}
 
 [[binding(1), group(2)]] var<uniform> tint_symbol_1 : tint_symbol;
 
@@ -279,7 +279,7 @@
 struct tint_symbol {
   first_vertex_index : u32;
   first_instance_index : u32;
-};
+}
 
 [[binding(1), group(2)]] var<uniform> tint_symbol_1 : tint_symbol;
 
diff --git a/src/transform/localize_struct_array_assignment_test.cc b/src/transform/localize_struct_array_assignment_test.cc
index 197aa02..2b3b0c9 100644
--- a/src/transform/localize_struct_array_assignment_test.cc
+++ b/src/transform/localize_struct_array_assignment_test.cc
@@ -70,15 +70,15 @@
 [[block]]
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
@@ -132,19 +132,19 @@
 [[block]]
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   a : array<InnerS, 8>;
-};
+}
 
 struct OuterS {
   s2 : S1;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
@@ -196,15 +196,15 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<array<InnerS, 8>, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
@@ -258,19 +258,19 @@
 [[block]]
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   s2 : InnerS;
-};
+}
 
 struct OuterS {
   a1 : array<S1, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
@@ -326,19 +326,19 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   a2 : array<InnerS, 8>;
-};
+}
 
 struct OuterS {
   a1 : array<S1, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
@@ -403,19 +403,19 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   a2 : array<InnerS, 8>;
-};
+}
 
 struct OuterS {
   a1 : array<S1, 8>;
-};
+}
 
 var<private> nextIndex : u32;
 
@@ -476,15 +476,15 @@
 [[block]]
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
@@ -544,15 +544,15 @@
 [[block]]
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
@@ -584,12 +584,12 @@
 [[block]]
 struct Uniforms {
   i : u32;
-};
+}
 
 [[block]]
 struct OuterS {
   a1 : array<u32, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/src/transform/module_scope_var_to_entry_point_param_test.cc b/src/transform/module_scope_var_to_entry_point_param_test.cc
index 0f7d518..87507ce 100644
--- a/src/transform/module_scope_var_to_entry_point_param_test.cc
+++ b/src/transform/module_scope_var_to_entry_point_param_test.cc
@@ -218,7 +218,7 @@
   auto* expect = R"(
 struct S {
   a : f32;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main([[group(0), binding(0), internal(disable_validation__entry_point_parameter), internal(disable_validation__ignore_storage_class)]] tint_symbol : ptr<uniform, S>, [[group(0), binding(1), internal(disable_validation__entry_point_parameter), internal(disable_validation__ignore_storage_class)]] tint_symbol_1 : ptr<storage, S>) {
@@ -246,7 +246,7 @@
   auto* expect = R"(
 struct tint_symbol_1 {
   arr : array<f32>;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main([[group(0), binding(0), internal(disable_validation__entry_point_parameter), internal(disable_validation__ignore_storage_class)]] tint_symbol : ptr<storage, tint_symbol_1>) {
@@ -275,7 +275,7 @@
   auto* expect = R"(
 struct tint_symbol_1 {
   arr : array<f32>;
-};
+}
 
 type myarray = array<f32>;
 
@@ -308,11 +308,11 @@
   auto* expect = R"(
 struct S {
   f : f32;
-};
+}
 
 struct tint_symbol_1 {
   arr : array<S>;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main([[group(0), binding(0), internal(disable_validation__entry_point_parameter), internal(disable_validation__ignore_storage_class)]] tint_symbol : ptr<storage, tint_symbol_1>) {
@@ -360,7 +360,7 @@
   auto* expect = R"(
 struct S {
   a : f32;
-};
+}
 
 fn no_uses() {
 }
@@ -479,7 +479,7 @@
   auto* expect = R"(
 struct tint_symbol_2 {
   m : mat2x2<f32>;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main([[internal(disable_validation__entry_point_parameter)]] tint_symbol_1 : ptr<workgroup, tint_symbol_2>) {
@@ -512,15 +512,15 @@
   auto* expect = R"(
 struct S1 {
   m : mat2x2<f32>;
-};
+}
 
 struct S2 {
   s : S1;
-};
+}
 
 struct tint_symbol_2 {
   m : array<S2, 4u>;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main([[internal(disable_validation__entry_point_parameter)]] tint_symbol_1 : ptr<workgroup, tint_symbol_2>) {
@@ -556,12 +556,12 @@
   auto* expect = R"(
 struct S {
   m : mat2x2<f32>;
-};
+}
 
 struct tint_symbol_3 {
   a : S;
   b : S;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main([[internal(disable_validation__entry_point_parameter)]] tint_symbol_1 : ptr<workgroup, tint_symbol_3>) {
@@ -602,7 +602,7 @@
   auto* expect = R"(
 struct S {
   a : f32;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main() {
diff --git a/src/transform/multiplanar_external_texture_test.cc b/src/transform/multiplanar_external_texture_test.cc
index 631d76b..e4c1d55 100644
--- a/src/transform/multiplanar_external_texture_test.cc
+++ b/src/transform/multiplanar_external_texture_test.cc
@@ -84,7 +84,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 [[group(0), binding(1)]] var ext_tex_plane_1 : texture_2d<f32>;
 
@@ -128,7 +128,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 [[group(0), binding(2)]] var ext_tex_plane_1 : texture_2d<f32>;
 
@@ -181,7 +181,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 [[group(0), binding(1)]] var ext_tex_plane_1 : texture_2d<f32>;
 
@@ -238,7 +238,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 [[group(0), binding(2)]] var ext_tex_plane_1 : texture_2d<f32>;
 
@@ -311,7 +311,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 [[group(0), binding(4)]] var ext_tex_plane_1 : texture_2d<f32>;
 
@@ -393,7 +393,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp : sampler, coord : vec2<f32>, params : ExternalTextureParams) -> vec4<f32> {
   if ((params.numPlanes == 1u)) {
@@ -459,7 +459,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp : sampler, coord : vec2<f32>, params : ExternalTextureParams) -> vec4<f32> {
   if ((params.numPlanes == 1u)) {
@@ -527,7 +527,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp : sampler, coord : vec2<f32>, params : ExternalTextureParams) -> vec4<f32> {
   if ((params.numPlanes == 1u)) {
@@ -605,7 +605,7 @@
   ug : f32;
   vg : f32;
   ub : f32;
-};
+}
 
 fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp : sampler, coord : vec2<f32>, params : ExternalTextureParams) -> vec4<f32> {
   if ((params.numPlanes == 1u)) {
diff --git a/src/transform/num_workgroups_from_uniform_test.cc b/src/transform/num_workgroups_from_uniform_test.cc
index 9d1b81d..ecb221a 100644
--- a/src/transform/num_workgroups_from_uniform_test.cc
+++ b/src/transform/num_workgroups_from_uniform_test.cc
@@ -68,7 +68,7 @@
   auto* expect = R"(
 struct tint_symbol_2 {
   num_workgroups : vec3<u32>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_3 : tint_symbol_2;
 
@@ -110,13 +110,13 @@
   auto* expect = R"(
 struct tint_symbol_2 {
   num_workgroups : vec3<u32>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_3 : tint_symbol_2;
 
 struct Builtins {
   num_wgs : vec3<u32>;
-};
+}
 
 fn main_inner(in : Builtins) {
   let groups_x = in.num_wgs.x;
@@ -158,7 +158,7 @@
   auto* expect = R"(
 struct tint_symbol_2 {
   num_workgroups : vec3<u32>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_3 : tint_symbol_2;
 
@@ -166,14 +166,14 @@
   gid : vec3<u32>;
   num_wgs : vec3<u32>;
   wgid : vec3<u32>;
-};
+}
 
 struct tint_symbol_1 {
   [[builtin(global_invocation_id)]]
   gid : vec3<u32>;
   [[builtin(workgroup_id)]]
   wgid : vec3<u32>;
-};
+}
 
 fn main_inner(in : Builtins) {
   let groups_x = in.num_wgs.x;
@@ -233,19 +233,19 @@
   auto* expect = R"(
 struct tint_symbol_6 {
   num_workgroups : vec3<u32>;
-};
+}
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_7 : tint_symbol_6;
 
 struct Builtins1 {
   num_wgs : vec3<u32>;
-};
+}
 
 struct Builtins2 {
   gid : vec3<u32>;
   num_wgs : vec3<u32>;
   wgid : vec3<u32>;
-};
+}
 
 fn main1_inner(in : Builtins1) {
   let groups_x = in.num_wgs.x;
@@ -263,7 +263,7 @@
   gid : vec3<u32>;
   [[builtin(workgroup_id)]]
   wgid : vec3<u32>;
-};
+}
 
 fn main2_inner(in : Builtins2) {
   let groups_x = in.num_wgs.x;
@@ -313,14 +313,14 @@
 struct Builtins {
   gid : vec3<u32>;
   wgid : vec3<u32>;
-};
+}
 
 struct tint_symbol_1 {
   [[builtin(global_invocation_id)]]
   gid : vec3<u32>;
   [[builtin(workgroup_id)]]
   wgid : vec3<u32>;
-};
+}
 
 fn main_inner(in : Builtins) {
 }
diff --git a/src/transform/pad_array_elements_test.cc b/src/transform/pad_array_elements_test.cc
index 7483f3f..05ca2da 100644
--- a/src/transform/pad_array_elements_test.cc
+++ b/src/transform/pad_array_elements_test.cc
@@ -52,7 +52,7 @@
 struct tint_padded_array_element {
   [[size(8)]]
   el : i32;
-};
+}
 
 var<private> arr : array<tint_padded_array_element, 4u>;
 )";
@@ -72,11 +72,11 @@
 struct tint_padded_array_element {
   [[size(8)]]
   el : i32;
-};
+}
 
 struct S {
   rta : array<tint_padded_array_element>;
-};
+}
 )";
 
   auto got = Run<PadArrayElements>(src);
@@ -97,7 +97,7 @@
 struct tint_padded_array_element {
   [[size(16)]]
   el : i32;
-};
+}
 
 fn f() {
   var arr : array<tint_padded_array_element, 4u>;
@@ -122,7 +122,7 @@
 struct tint_padded_array_element {
   [[size(12)]]
   el : i32;
-};
+}
 
 fn f(a : array<tint_padded_array_element, 4u>) -> i32 {
   return a[2].el;
@@ -175,7 +175,7 @@
 struct tint_padded_array_element {
   [[size(16)]]
   el : i32;
-};
+}
 
 type Array = array<tint_padded_array_element, 4u>;
 
@@ -207,24 +207,24 @@
 struct tint_padded_array_element {
   [[size(8)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_1 {
   [[size(8)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_2 {
   [[size(12)]]
   el : i32;
-};
+}
 
 struct S {
   a : array<tint_padded_array_element, 4u>;
   b : array<tint_padded_array_element_1, 8u>;
   c : array<tint_padded_array_element, 4u>;
   d : array<tint_padded_array_element_2, 8u>;
-};
+}
 )";
 
   auto got = Run<PadArrayElements>(src);
@@ -244,38 +244,38 @@
 struct tint_padded_array_element {
   [[size(512)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_2 {
   [[size(32)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_1 {
   [[size(512)]]
   el : array<tint_padded_array_element_2, 4u>;
-};
+}
 
 struct tint_padded_array_element_5 {
   [[size(8)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_4 {
   [[size(64)]]
   el : array<tint_padded_array_element_5, 4u>;
-};
+}
 
 struct tint_padded_array_element_3 {
   [[size(512)]]
   el : array<tint_padded_array_element_4, 4u>;
-};
+}
 
 struct S {
   a : array<tint_padded_array_element, 4u>;
   b : array<tint_padded_array_element_1, 4u>;
   c : array<tint_padded_array_element_3, 4u>;
-};
+}
 )";
 
   auto got = Run<PadArrayElements>(src);
@@ -299,38 +299,38 @@
 struct tint_padded_array_element {
   [[size(512)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_2 {
   [[size(32)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_1 {
   [[size(512)]]
   el : array<tint_padded_array_element_2, 4u>;
-};
+}
 
 struct tint_padded_array_element_5 {
   [[size(8)]]
   el : i32;
-};
+}
 
 struct tint_padded_array_element_4 {
   [[size(64)]]
   el : array<tint_padded_array_element_5, 4u>;
-};
+}
 
 struct tint_padded_array_element_3 {
   [[size(512)]]
   el : array<tint_padded_array_element_4, 4u>;
-};
+}
 
 struct S {
   a : array<tint_padded_array_element, 4u>;
   b : array<tint_padded_array_element_1, 4u>;
   c : array<tint_padded_array_element_3, 4u>;
-};
+}
 
 fn f(s : S) -> i32 {
   return ((s.a[2].el + s.b[1].el[2].el) + s.c[3].el[1].el[2].el);
@@ -365,7 +365,7 @@
 struct tint_padded_array_element {
   [[size(8)]]
   el : i32;
-};
+}
 
 type T1 = array<tint_padded_array_element, 1u>;
 
@@ -374,7 +374,7 @@
 struct tint_padded_array_element_1 {
   [[size(8)]]
   el : i32;
-};
+}
 
 fn f1(a : array<tint_padded_array_element_1, 2u>) {
 }
@@ -384,7 +384,7 @@
 struct tint_padded_array_element_2 {
   [[size(8)]]
   el : i32;
-};
+}
 
 fn f2() {
   var v : array<tint_padded_array_element_2, 3u>;
diff --git a/src/transform/promote_initializers_to_const_var_test.cc b/src/transform/promote_initializers_to_const_var_test.cc
index b32d153..8e2dc25 100644
--- a/src/transform/promote_initializers_to_const_var_test.cc
+++ b/src/transform/promote_initializers_to_const_var_test.cc
@@ -67,7 +67,7 @@
   a : i32;
   b : f32;
   c : vec3<f32>;
-};
+}
 
 fn f() {
   let tint_symbol = S(1, 2.0, vec3<f32>());
@@ -126,7 +126,7 @@
   a : i32;
   b : f32;
   c : vec3<f32>;
-};
+}
 
 fn f() {
   var insert_after = 1;
@@ -288,17 +288,17 @@
   auto* expect = R"(
 struct S1 {
   a : i32;
-};
+}
 
 struct S2 {
   a : i32;
   b : S1;
   c : i32;
-};
+}
 
 struct S3 {
   a : S2;
-};
+}
 
 fn f() {
   let tint_symbol = S1(2);
@@ -331,11 +331,11 @@
   auto* expect = R"(
 struct S1 {
   a : i32;
-};
+}
 
 struct S2 {
   a : array<S1, 3u>;
-};
+}
 
 fn f() {
   let tint_symbol = S1(1);
@@ -358,7 +358,7 @@
   a : i32;
   b : f32;
   c : i32;
-};
+}
 
 fn f() {
   var local_arr = array<f32, 4u>(0.0, 1.0, 2.0, 3.0);
diff --git a/src/transform/remove_phonies_test.cc b/src/transform/remove_phonies_test.cc
index 837e34c..6d6c86d 100644
--- a/src/transform/remove_phonies_test.cc
+++ b/src/transform/remove_phonies_test.cc
@@ -204,7 +204,7 @@
   auto* expect = R"(
 struct S {
   arr : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> s : S;
 
diff --git a/src/transform/robustness_test.cc b/src/transform/robustness_test.cc
index 4c0025e..a471381 100644
--- a/src/transform/robustness_test.cc
+++ b/src/transform/robustness_test.cc
@@ -630,7 +630,7 @@
 struct S {
   a : f32;
   b : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> s : S;
 
@@ -794,7 +794,7 @@
 struct S {
   a : f32;
   b : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> s : S;
 
@@ -874,7 +874,7 @@
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> s : S;
 
@@ -882,7 +882,7 @@
 
 struct U {
   a : UArr;
-};
+}
 
 [[group(1), binding(0)]] var<uniform> u : U;
 
@@ -937,7 +937,7 @@
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> s : S;
 
@@ -945,7 +945,7 @@
 
 struct U {
   a : UArr;
-};
+}
 
 [[group(1), binding(0)]] var<uniform> u : U;
 
@@ -1002,7 +1002,7 @@
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> s : S;
 
@@ -1010,7 +1010,7 @@
 
 struct U {
   a : UArr;
-};
+}
 
 [[group(1), binding(0)]] var<uniform> u : U;
 
@@ -1067,7 +1067,7 @@
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> s : S;
 
@@ -1075,7 +1075,7 @@
 
 struct U {
   a : UArr;
-};
+}
 
 [[group(1), binding(0)]] var<uniform> u : U;
 
diff --git a/src/transform/simplify_pointers_test.cc b/src/transform/simplify_pointers_test.cc
index 0fdf806..6b55d32 100644
--- a/src/transform/simplify_pointers_test.cc
+++ b/src/transform/simplify_pointers_test.cc
@@ -168,7 +168,7 @@
   auto* expect = R"(
 struct S {
   i : i32;
-};
+}
 
 fn arr() {
   var a : array<S, 2>;
@@ -325,11 +325,11 @@
 
 struct Inner {
   a : array<i32, 2>;
-};
+}
 
 struct Outer {
   a : array<Inner, 2>;
-};
+}
 
 fn f() {
   var arr : array<Outer, 2>;
diff --git a/src/transform/unshadow_test.cc b/src/transform/unshadow_test.cc
index 2a4cbed..ddba826 100644
--- a/src/transform/unshadow_test.cc
+++ b/src/transform/unshadow_test.cc
@@ -102,7 +102,7 @@
   auto* expect = R"(
 struct a {
   m : i32;
-};
+}
 
 fn X() {
   var a_1 = true;
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index b43d4a4..10b8ee8 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -109,7 +109,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> [[builtin(position)]] vec4<f32> {
@@ -138,7 +138,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -176,7 +176,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -214,7 +214,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(5)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -257,14 +257,14 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
 struct Inputs {
   [[location(0)]]
   var_a : f32;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] tint_pulling_vertex_index : u32) -> [[builtin(position)]] vec4<f32> {
@@ -305,7 +305,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -365,7 +365,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -376,7 +376,7 @@
   custom_vertex_index : u32;
   [[builtin(instance_index)]]
   custom_instance_index : u32;
-};
+}
 
 struct Inputs {
   [[location(0)]]
@@ -387,7 +387,7 @@
   custom_vertex_index : u32;
   [[builtin(instance_index)]]
   custom_instance_index : u32;
-};
+}
 
 [[stage(vertex)]]
 fn main(tint_symbol_1 : tint_symbol) -> [[builtin(position)]] vec4<f32> {
@@ -447,7 +447,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -458,14 +458,14 @@
   var_a : f32;
   [[location(1)]]
   var_b : f32;
-};
+}
 
 struct Indices {
   [[builtin(vertex_index)]]
   custom_vertex_index : u32;
   [[builtin(instance_index)]]
   custom_instance_index : u32;
-};
+}
 
 [[stage(vertex)]]
 fn main(indices : Indices) -> [[builtin(position)]] vec4<f32> {
@@ -514,7 +514,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -559,7 +559,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -615,7 +615,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data_1 : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0_1 : TintVertexData;
 
@@ -692,7 +692,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -852,7 +852,7 @@
       R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
@@ -1011,7 +1011,7 @@
   auto* expect = R"(
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
-};
+}
 
 [[binding(0), group(4)]] var<storage, read> tint_pulling_vertex_buffer_0 : TintVertexData;
 
diff --git a/src/transform/wrap_arrays_in_structs_test.cc b/src/transform/wrap_arrays_in_structs_test.cc
index a93f995..21aa7c8 100644
--- a/src/transform/wrap_arrays_in_structs_test.cc
+++ b/src/transform/wrap_arrays_in_structs_test.cc
@@ -41,7 +41,7 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 4u>;
-};
+}
 
 var<private> arr : tint_array_wrapper;
 )";
@@ -61,7 +61,7 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 4u>;
-};
+}
 
 fn f() {
   var arr : tint_array_wrapper;
@@ -83,7 +83,7 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 4u>;
-};
+}
 
 fn f(a : tint_array_wrapper) -> i32 {
   return a.arr[2];
@@ -104,7 +104,7 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 4u>;
-};
+}
 
 fn f() -> tint_array_wrapper {
   return tint_array_wrapper(array<i32, 4u>(1, 2, 3, 4));
@@ -133,13 +133,13 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 2u>;
-};
+}
 
 type Inner = tint_array_wrapper;
 
 struct tint_array_wrapper_1 {
   arr : array<tint_array_wrapper, 2u>;
-};
+}
 
 type Array = tint_array_wrapper_1;
 
@@ -169,17 +169,17 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 4u>;
-};
+}
 
 struct tint_array_wrapper_1 {
   arr : array<i32, 8u>;
-};
+}
 
 struct S {
   a : tint_array_wrapper;
   b : tint_array_wrapper_1;
   c : tint_array_wrapper;
-};
+}
 )";
 
   auto got = Run<WrapArraysInStructs>(src);
@@ -198,21 +198,21 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 4u>;
-};
+}
 
 struct tint_array_wrapper_1 {
   arr : array<tint_array_wrapper, 4u>;
-};
+}
 
 struct tint_array_wrapper_2 {
   arr : array<tint_array_wrapper_1, 4u>;
-};
+}
 
 struct S {
   a : tint_array_wrapper;
   b : tint_array_wrapper_1;
   c : tint_array_wrapper_2;
-};
+}
 )";
 
   auto got = Run<WrapArraysInStructs>(src);
@@ -235,21 +235,21 @@
   auto* expect = R"(
 struct tint_array_wrapper {
   arr : array<i32, 4u>;
-};
+}
 
 struct tint_array_wrapper_1 {
   arr : array<tint_array_wrapper, 4u>;
-};
+}
 
 struct tint_array_wrapper_2 {
   arr : array<tint_array_wrapper_1, 4u>;
-};
+}
 
 struct S {
   a : tint_array_wrapper;
   b : tint_array_wrapper_1;
   c : tint_array_wrapper_2;
-};
+}
 
 fn f(s : S) -> i32 {
   return ((s.a.arr[2] + s.b.arr[1].arr[2]) + s.c.arr[3].arr[1].arr[2]);
@@ -283,7 +283,7 @@
 
 struct tint_array_wrapper {
   arr : array<i32, 1u>;
-};
+}
 
 type T1 = tint_array_wrapper;
 
@@ -291,7 +291,7 @@
 
 struct tint_array_wrapper_1 {
   arr : array<i32, 2u>;
-};
+}
 
 fn f1(a : tint_array_wrapper_1) {
 }
@@ -300,7 +300,7 @@
 
 struct tint_array_wrapper_2 {
   arr : array<i32, 3u>;
-};
+}
 
 fn f2() {
   var v : tint_array_wrapper_2;
diff --git a/src/transform/zero_init_workgroup_memory_test.cc b/src/transform/zero_init_workgroup_memory_test.cc
index f76e3a7..166036e 100644
--- a/src/transform/zero_init_workgroup_memory_test.cc
+++ b/src/transform/zero_init_workgroup_memory_test.cc
@@ -118,7 +118,7 @@
 struct Params {
   [[builtin(local_invocation_index)]]
   local_idx : u32;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn f(params : Params) {
@@ -187,7 +187,7 @@
 struct S {
   x : i32;
   y : array<i32, 8>;
-};
+}
 
 var<workgroup> a : i32;
 
@@ -251,7 +251,7 @@
 struct S {
   x : i32;
   y : array<i32, 8>;
-};
+}
 
 var<workgroup> a : i32;
 
@@ -318,7 +318,7 @@
 struct S {
   x : i32;
   y : array<i32, 8>;
-};
+}
 
 var<workgroup> a : i32;
 
@@ -389,7 +389,7 @@
   x : array<array<i32, 8>, 10>;
   y : array<i32, 8>;
   z : array<array<array<i32, 8>, 10>, 20>;
-};
+}
 
 var<workgroup> a : i32;
 
@@ -473,7 +473,7 @@
 struct S {
   x : i32;
   y : array<i32, 8>;
-};
+}
 
 var<workgroup> a : i32;
 
@@ -546,7 +546,7 @@
 struct S {
   x : i32;
   y : array<i32, 8>;
-};
+}
 
 var<workgroup> a : i32;
 
@@ -711,7 +711,7 @@
   b : f32;
   u : atomic<u32>;
   c : u32;
-};
+}
 
 var<workgroup> w : S;
 
@@ -786,7 +786,7 @@
   b : f32;
   u : atomic<u32>;
   c : u32;
-};
+}
 
 var<workgroup> w : array<S, 4>;
 
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index a4c3ed9..1295c76 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -573,7 +573,7 @@
   }
   decrement_indent();
 
-  line() << "};";
+  line() << "}";
   return true;
 }
 
diff --git a/src/writer/wgsl/generator_impl_alias_type_test.cc b/src/writer/wgsl/generator_impl_alias_type_test.cc
index 754849d..f1a2f47 100644
--- a/src/writer/wgsl/generator_impl_alias_type_test.cc
+++ b/src/writer/wgsl/generator_impl_alias_type_test.cc
@@ -46,7 +46,7 @@
   EXPECT_EQ(gen.result(), R"(struct A {
   a : f32;
   b : i32;
-};
+}
 type B = A;
 )");
 }
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index 89dd681..3aebf94 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -213,7 +213,7 @@
   EXPECT_EQ(gen.result(), R"([[block]]
 struct Data {
   d : f32;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> data : Data;
 
diff --git a/src/writer/wgsl/generator_impl_global_decl_test.cc b/src/writer/wgsl/generator_impl_global_decl_test.cc
index 3859db4..e22a75e 100644
--- a/src/writer/wgsl/generator_impl_global_decl_test.cc
+++ b/src/writer/wgsl/generator_impl_global_decl_test.cc
@@ -79,7 +79,7 @@
 
   struct S0 {
     a : i32;
-  };
+  }
 
   fn func() -> f32 {
     return a0;
@@ -89,7 +89,7 @@
 
   struct S1 {
     a : i32;
-  };
+  }
 
   [[stage(compute), workgroup_size(1)]]
   fn main() {
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index 236c1b1..dd1355e 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -168,7 +168,7 @@
   [[size(4)]]
   padding_1 : u32;
   b : f32;
-};
+}
 )");
 }
 
@@ -189,7 +189,7 @@
   [[size(4)]]
   padding_1 : u32;
   tint_2_padding : f32;
-};
+}
 )");
 }
 
@@ -207,7 +207,7 @@
   a : i32;
   [[align(16)]]
   b : f32;
-};
+}
 )");
 }
 
@@ -225,7 +225,7 @@
   a : i32;
   [[size(32)]]
   b : f32;
-};
+}
 )");
 }
 
@@ -245,7 +245,7 @@
   a : i32;
   [[align(8)]]
   b : f32;
-};
+}
 )");
 }
 
@@ -269,7 +269,7 @@
   a : u32;
   [[location(2)]]
   b : f32;
-};
+}
 )");
 }
 
diff --git a/test/array/assign_to_function_var.wgsl.expected.wgsl b/test/array/assign_to_function_var.wgsl.expected.wgsl
index 8d3a0c0..3951d85 100644
--- a/test/array/assign_to_function_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_function_var.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
 
 struct S {
   arr : ArrayType;
-};
+}
 
 var<private> src_private : ArrayType;
 
diff --git a/test/array/assign_to_private_var.wgsl.expected.wgsl b/test/array/assign_to_private_var.wgsl.expected.wgsl
index c5e4e1f..56f7ba5 100644
--- a/test/array/assign_to_private_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_private_var.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
 
 struct S {
   arr : ArrayType;
-};
+}
 
 var<private> src_private : ArrayType;
 
diff --git a/test/array/assign_to_storage_var.wgsl.expected.wgsl b/test/array/assign_to_storage_var.wgsl.expected.wgsl
index cb0b54b..dce03ab 100644
--- a/test/array/assign_to_storage_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_storage_var.wgsl.expected.wgsl
@@ -2,11 +2,11 @@
 
 struct S {
   arr : ArrayType;
-};
+}
 
 struct S_nested {
   arr : array<array<array<i32, 2>, 3>, 4>;
-};
+}
 
 var<private> src_private : ArrayType;
 
diff --git a/test/array/assign_to_subexpr.wgsl.expected.wgsl b/test/array/assign_to_subexpr.wgsl.expected.wgsl
index 6ab4099..6d1ab68 100644
--- a/test/array/assign_to_subexpr.wgsl.expected.wgsl
+++ b/test/array/assign_to_subexpr.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
 
 struct S {
   arr : array<i32, 4>;
-};
+}
 
 fn foo() {
   let src : ArrayType = ArrayType();
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.wgsl b/test/array/assign_to_workgroup_var.wgsl.expected.wgsl
index 0d3b5a3..a5a27e3 100644
--- a/test/array/assign_to_workgroup_var.wgsl.expected.wgsl
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.wgsl
@@ -2,7 +2,7 @@
 
 struct S {
   arr : ArrayType;
-};
+}
 
 var<private> src_private : ArrayType;
 
diff --git a/test/benchmark/particles.wgsl.expected.wgsl b/test/benchmark/particles.wgsl.expected.wgsl
index 856f496..0ab3f50 100644
--- a/test/benchmark/particles.wgsl.expected.wgsl
+++ b/test/benchmark/particles.wgsl.expected.wgsl
@@ -10,7 +10,7 @@
   modelViewProjectionMatrix : mat4x4<f32>;
   right : vec3<f32>;
   up : vec3<f32>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> render_params : RenderParams;
 
@@ -21,7 +21,7 @@
   color : vec4<f32>;
   [[location(2)]]
   quad_pos : vec2<f32>;
-};
+}
 
 struct VertexOutput {
   [[builtin(position)]]
@@ -30,7 +30,7 @@
   color : vec4<f32>;
   [[location(1)]]
   quad_pos : vec2<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vs_main(in : VertexInput) -> VertexOutput {
@@ -53,18 +53,18 @@
 struct SimulationParams {
   deltaTime : f32;
   seed : vec4<f32>;
-};
+}
 
 struct Particle {
   position : vec3<f32>;
   lifetime : f32;
   color : vec4<f32>;
   velocity : vec3<f32>;
-};
+}
 
 struct Particles {
   particles : array<Particle>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> sim_params : SimulationParams;
 
@@ -104,11 +104,11 @@
 
 struct UBO {
   width : u32;
-};
+}
 
 struct Buffer {
   weights : array<f32>;
-};
+}
 
 [[binding(3), group(0)]] var<uniform> ubo : UBO;
 
diff --git a/test/benchmark/simple_compute.wgsl.expected.wgsl b/test/benchmark/simple_compute.wgsl.expected.wgsl
index ac98410..a83b28f 100644
--- a/test/benchmark/simple_compute.wgsl.expected.wgsl
+++ b/test/benchmark/simple_compute.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB {
   data : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> buffer : SB;
 
diff --git a/test/benchmark/simple_fragment.wgsl.expected.wgsl b/test/benchmark/simple_fragment.wgsl.expected.wgsl
index 1f4225e..7236de2 100644
--- a/test/benchmark/simple_fragment.wgsl.expected.wgsl
+++ b/test/benchmark/simple_fragment.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
 struct Input {
   [[location(0)]]
   color : vec4<f32>;
-};
+}
 
 struct Output {
   [[location(0)]]
   color : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main(in : Input) -> Output {
diff --git a/test/benchmark/simple_vertex.wgsl.expected.wgsl b/test/benchmark/simple_vertex.wgsl.expected.wgsl
index 7bc18b1..fdce23e 100644
--- a/test/benchmark/simple_vertex.wgsl.expected.wgsl
+++ b/test/benchmark/simple_vertex.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
 struct Input {
   [[location(0)]]
   position : vec4<f32>;
-};
+}
 
 struct Output {
   [[builtin(position)]]
   position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main(in : Input) -> Output {
diff --git a/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl b/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl
index 0363eda..bd24ab0 100644
--- a/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl
+++ b/test/buffer/storage/dynamic_index/read.wgsl.expected.wgsl
@@ -8,11 +8,11 @@
   g : mat2x3<f32>;
   h : mat3x2<f32>;
   i : [[stride(16)]] array<vec4<i32>, 4>;
-};
+}
 
 struct S {
   arr : array<Inner>;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read> s : S;
 
diff --git a/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl b/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl
index db3497d..b015519 100644
--- a/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl
+++ b/test/buffer/storage/dynamic_index/write.wgsl.expected.wgsl
@@ -8,11 +8,11 @@
   g : mat2x3<f32>;
   h : mat3x2<f32>;
   i : [[stride(16)]] array<vec4<i32>, 4>;
-};
+}
 
 struct S {
   arr : array<Inner>;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> s : S;
 
diff --git a/test/buffer/storage/static_index/read.wgsl.expected.wgsl b/test/buffer/storage/static_index/read.wgsl.expected.wgsl
index 8a9f17c..56187c5 100644
--- a/test/buffer/storage/static_index/read.wgsl.expected.wgsl
+++ b/test/buffer/storage/static_index/read.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct Inner {
   x : i32;
-};
+}
 
 struct S {
   a : vec3<i32>;
@@ -13,7 +13,7 @@
   h : mat3x2<f32>;
   i : Inner;
   j : [[stride(16)]] array<Inner, 4>;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read> s : S;
 
diff --git a/test/buffer/storage/static_index/write.wgsl.expected.wgsl b/test/buffer/storage/static_index/write.wgsl.expected.wgsl
index b4c8329..46cdde8 100644
--- a/test/buffer/storage/static_index/write.wgsl.expected.wgsl
+++ b/test/buffer/storage/static_index/write.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct Inner {
   x : i32;
-};
+}
 
 struct S {
   a : vec3<i32>;
@@ -13,7 +13,7 @@
   h : mat3x2<f32>;
   i : Inner;
   j : [[stride(16)]] array<Inner, 4>;
-};
+}
 
 [[binding(0), group(0)]] var<storage, write> s : S;
 
diff --git a/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl b/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl
index 418c67d..2aca9cd 100644
--- a/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/runtime_array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   f : f32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> in : array<S>;
 
diff --git a/test/buffer/storage/types/struct.wgsl.expected.wgsl b/test/buffer/storage/types/struct.wgsl.expected.wgsl
index f86c26b..dd840d4 100644
--- a/test/buffer/storage/types/struct.wgsl.expected.wgsl
+++ b/test/buffer/storage/types/struct.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct Inner {
   f : f32;
-};
+}
 
 struct S {
   inner : Inner;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> in : S;
 
diff --git a/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl b/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl
index b5279f6..0dc8fdf 100644
--- a/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl
+++ b/test/buffer/uniform/dynamic_index/read.wgsl.expected.wgsl
@@ -12,11 +12,11 @@
   j : mat3x2<f32>;
   [[align(16)]]
   k : [[stride(16)]] array<vec4<i32>, 4>;
-};
+}
 
 struct S {
   arr : array<Inner, 8>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> s : S;
 
diff --git a/test/buffer/uniform/static_index/read.wgsl.expected.wgsl b/test/buffer/uniform/static_index/read.wgsl.expected.wgsl
index 99c50f1..f43ae3b 100644
--- a/test/buffer/uniform/static_index/read.wgsl.expected.wgsl
+++ b/test/buffer/uniform/static_index/read.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct Inner {
   x : i32;
-};
+}
 
 struct S {
   a : vec3<i32>;
@@ -17,7 +17,7 @@
   k : Inner;
   [[align(16)]]
   l : [[stride(16)]] array<Inner, 4>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> s : S;
 
diff --git a/test/buffer/uniform/types/struct.wgsl.expected.wgsl b/test/buffer/uniform/types/struct.wgsl.expected.wgsl
index fed4de3..0e74bf8 100644
--- a/test/buffer/uniform/types/struct.wgsl.expected.wgsl
+++ b/test/buffer/uniform/types/struct.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct Inner {
   f : f32;
-};
+}
 
 struct S {
   inner : Inner;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> u : S;
 
diff --git a/test/bug/chromium/1251009.wgsl.expected.wgsl b/test/bug/chromium/1251009.wgsl.expected.wgsl
index 5de6e50..c82715d 100644
--- a/test/bug/chromium/1251009.wgsl.expected.wgsl
+++ b/test/bug/chromium/1251009.wgsl.expected.wgsl
@@ -3,14 +3,14 @@
   vertex_index : u32;
   [[location(0)]]
   loc0 : i32;
-};
+}
 
 struct VertexInputs1 {
   [[location(2)]]
   loc1 : u32;
   [[location(3)]]
   loc3 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main(inputs0 : VertexInputs0, [[location(1)]] loc1 : u32, [[builtin(instance_index)]] instance_index : u32, inputs1 : VertexInputs1) -> [[builtin(position)]] vec4<f32> {
diff --git a/test/bug/chromium/1273230.wgsl.expected.wgsl b/test/bug/chromium/1273230.wgsl.expected.wgsl
index 4e2d55b..4708e0b 100644
--- a/test/bug/chromium/1273230.wgsl.expected.wgsl
+++ b/test/bug/chromium/1273230.wgsl.expected.wgsl
@@ -36,7 +36,7 @@
   pad2 : u32;
   bbMin : vec3<f32>;
   bbMax : vec3<f32>;
-};
+}
 
 struct Dbg {
   offsetCounter : atomic<u32>;
@@ -51,27 +51,27 @@
   value_f32_1 : f32;
   value_f32_2 : f32;
   value_f32_3 : f32;
-};
+}
 
 struct F32s {
   values : [[stride(4)]] array<f32>;
-};
+}
 
 struct U32s {
   values : [[stride(4)]] array<u32>;
-};
+}
 
 struct I32s {
   values : [[stride(4)]] array<i32>;
-};
+}
 
 struct AU32s {
   values : [[stride(4)]] array<atomic<u32>>;
-};
+}
 
 struct AI32s {
   values : [[stride(4)]] array<atomic<i32>>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/chromium/1273451.wgsl.expected.wgsl b/test/bug/chromium/1273451.wgsl.expected.wgsl
index 2289c10..d12f298 100644
--- a/test/bug/chromium/1273451.wgsl.expected.wgsl
+++ b/test/bug/chromium/1273451.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct A {
   a : i32;
-};
+}
 
 struct B {
   b : i32;
-};
+}
 
 fn f(a : A) -> B {
   return B();
diff --git a/test/bug/dawn/947.wgsl.expected.wgsl b/test/bug/dawn/947.wgsl.expected.wgsl
index b417862..a7e4f69 100644
--- a/test/bug/dawn/947.wgsl.expected.wgsl
+++ b/test/bug/dawn/947.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   u_scale : vec2<f32>;
   u_offset : vec2<f32>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
 
@@ -10,7 +10,7 @@
   texcoords : vec2<f32>;
   [[builtin(position)]]
   position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vs_main([[builtin(vertex_index)]] VertexIndex : u32) -> VertexOutputs {
diff --git a/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl
index 85f665b..9487d56 100644
--- a/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/function.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl
index 4a1fecc..352b5e2 100644
--- a/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/private.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl
index 76cf15c..5445952 100644
--- a/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/storage.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(2)]] var<storage, read_write> result : Result;
 
 struct SSBO {
   data : array<i32, 4>;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> ssbo : SSBO;
 
diff --git a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl
index cd2664a..d0f1e72 100644
--- a/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/uniform.wgsl.expected.wgsl
@@ -1,13 +1,13 @@
 struct UBO {
   data : [[stride(16)]] array<i32, 4>;
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(2)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl
index edca39d..80a812d 100644
--- a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl
index dc84c69..18b069c 100644
--- a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl
index d560432..57c8a26 100644
--- a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl
index 36ef547..7544006 100644
--- a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl
index 5a820ac..fd99ff2 100644
--- a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl
index 9e51589..b3d0217 100644
--- a/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/storage.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(2)]] var<storage, read_write> result : Result;
 
 struct SSBO {
   data : array<i32, 4>;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> ssbo : SSBO;
 
diff --git a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl
index 4874b2a..7c122d1 100644
--- a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl
+++ b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.wgsl
@@ -1,16 +1,16 @@
 struct UBO {
   dynamic_idx : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> ubo : UBO;
 
 struct S {
   data : array<i32, 64>;
-};
+}
 
 struct Result {
   out : i32;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl
index 239e359..818e3b4 100644
--- a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl
+++ b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.wgsl
@@ -1,17 +1,17 @@
 struct Simulation {
   i : u32;
-};
+}
 
 struct Particle {
   position : array<vec3<f32>, 8>;
   lifetime : f32;
   color : vec4<f32>;
   velocity : vec3<f32>;
-};
+}
 
 struct Particles {
   p : array<Particle>;
-};
+}
 
 [[group(1), binding(3)]] var<storage, read> particles : Particles;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl
index c201538..3b201de 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_x.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl
index 11e2eae..8b37003 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_xy.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl
index d8c4481..031f689 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_scalar_y.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl
index ffabd7b..4dc3783 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/local_assign_vector.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl
index 86f180d..bc312b2 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_x.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl
index 99e8629..f706b60 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_xy.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl
index d8c4481..031f689 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_scalar_y.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl
index 856e7d3..b1c7255 100644
--- a/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl
+++ b/test/bug/fxc/matrix_assignment_dynamic_index/module_assign_vector.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/tint/1046.wgsl.expected.wgsl b/test/bug/tint/1046.wgsl.expected.wgsl
index 310472c..d67947b 100644
--- a/test/bug/tint/1046.wgsl.expected.wgsl
+++ b/test/bug/tint/1046.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct PointLight {
   position : vec4<f32>;
-};
+}
 
 struct PointLights {
   values : [[stride(16)]] array<PointLight>;
-};
+}
 
 struct Uniforms {
   worldView : mat4x4<f32>;
@@ -12,7 +12,7 @@
   numPointLights : u32;
   color_source : u32;
   color : vec4<f32>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
 
@@ -33,12 +33,12 @@
   uv : vec2<f32>;
   [[location(3)]]
   color : vec4<f32>;
-};
+}
 
 struct FragmentOutput {
   [[location(0)]]
   color : vec4<f32>;
-};
+}
 
 fn getColor(fragment : FragmentInput) -> vec4<f32> {
   var color : vec4<f32>;
diff --git a/test/bug/tint/1076.wgsl.expected.wgsl b/test/bug/tint/1076.wgsl.expected.wgsl
index 311d625..8a91c08 100644
--- a/test/bug/tint/1076.wgsl.expected.wgsl
+++ b/test/bug/tint/1076.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   a : f32;
   [[builtin(sample_mask)]]
   mask : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main(in : FragIn, [[location(1)]] b : f32) -> FragIn {
diff --git a/test/bug/tint/1088.spvasm.expected.wgsl b/test/bug/tint/1088.spvasm.expected.wgsl
index d5d5076..d31ca16 100644
--- a/test/bug/tint/1088.spvasm.expected.wgsl
+++ b/test/bug/tint/1088.spvasm.expected.wgsl
@@ -9,7 +9,7 @@
   padding : u32;
   test2 : Arr;
   test : Arr_1;
-};
+}
 
 var<private> position : vec3<f32>;
 
@@ -53,7 +53,7 @@
   gl_Position : vec4<f32>;
   [[location(0)]]
   vUV_1 : vec2<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[location(0)]] position_param : vec3<f32>, [[location(2)]] uv_param : vec2<f32>, [[location(1)]] normal_param : vec3<f32>) -> main_out {
diff --git a/test/bug/tint/1113.wgsl.expected.wgsl b/test/bug/tint/1113.wgsl.expected.wgsl
index f8db09d..ce45595 100644
--- a/test/bug/tint/1113.wgsl.expected.wgsl
+++ b/test/bug/tint/1113.wgsl.expected.wgsl
@@ -5,7 +5,7 @@
   pad2 : u32;
   bbMin : vec3<f32>;
   bbMax : vec3<f32>;
-};
+}
 
 struct Dbg {
   offsetCounter : atomic<u32>;
@@ -20,27 +20,27 @@
   value_f32_1 : f32;
   value_f32_2 : f32;
   value_f32_3 : f32;
-};
+}
 
 struct F32s {
   values : [[stride(4)]] array<f32>;
-};
+}
 
 struct U32s {
   values : [[stride(4)]] array<u32>;
-};
+}
 
 struct I32s {
   values : [[stride(4)]] array<i32>;
-};
+}
 
 struct AU32s {
   values : [[stride(4)]] array<atomic<u32>>;
-};
+}
 
 struct AI32s {
   values : [[stride(4)]] array<atomic<i32>>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/tint/1121.wgsl.expected.wgsl b/test/bug/tint/1121.wgsl.expected.wgsl
index 4f28ea4..2620967 100644
--- a/test/bug/tint/1121.wgsl.expected.wgsl
+++ b/test/bug/tint/1121.wgsl.expected.wgsl
@@ -2,22 +2,22 @@
   position : vec4<f32>;
   color : vec3<f32>;
   radius : f32;
-};
+}
 
 struct LightsBuffer {
   lights : array<LightData>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> lightsBuffer : LightsBuffer;
 
 struct TileLightIdData {
   count : atomic<u32>;
   lightId : array<u32, 64>;
-};
+}
 
 struct Tiles {
   data : array<TileLightIdData, 4>;
-};
+}
 
 [[group(1), binding(0)]] var<storage, read_write> tileLightId : Tiles;
 
@@ -28,7 +28,7 @@
   tileCountY : u32;
   numTileLightSlot : u32;
   tileSize : u32;
-};
+}
 
 [[group(2), binding(0)]] var<uniform> config : Config;
 
@@ -38,7 +38,7 @@
   viewMatrix : mat4x4<f32>;
   projectionMatrix : mat4x4<f32>;
   fullScreenSize : vec4<f32>;
-};
+}
 
 [[group(3), binding(0)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/bug/tint/1136.wgsl.expected.wgsl b/test/bug/tint/1136.wgsl.expected.wgsl
index b23fded..7bf2195 100644
--- a/test/bug/tint/1136.wgsl.expected.wgsl
+++ b/test/bug/tint/1136.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct Buffer {
   data : u32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> buffer : Buffer;
 
diff --git a/test/bug/tint/221.wgsl.expected.wgsl b/test/bug/tint/221.wgsl.expected.wgsl
index de43263..6173b61 100644
--- a/test/bug/tint/221.wgsl.expected.wgsl
+++ b/test/bug/tint/221.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
 struct Buf {
   count : u32;
   data : Arr;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> b : Buf;
 
diff --git a/test/bug/tint/294.wgsl.expected.wgsl b/test/bug/tint/294.wgsl.expected.wgsl
index 7cb8698..f4c1358 100644
--- a/test/bug/tint/294.wgsl.expected.wgsl
+++ b/test/bug/tint/294.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct Light {
   position : vec3<f32>;
   colour : vec3<f32>;
-};
+}
 
 struct Lights {
   light : [[stride(32)]] array<Light>;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read> lights : Lights;
diff --git a/test/bug/tint/369.wgsl.expected.wgsl b/test/bug/tint/369.wgsl.expected.wgsl
index 7f45473..f4192a7 100644
--- a/test/bug/tint/369.wgsl.expected.wgsl
+++ b/test/bug/tint/369.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   m : mat2x2<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage> SSBO : S;
 
diff --git a/test/bug/tint/403.wgsl.expected.wgsl b/test/bug/tint/403.wgsl.expected.wgsl
index 6e1ae44..2fa1f18 100644
--- a/test/bug/tint/403.wgsl.expected.wgsl
+++ b/test/bug/tint/403.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct vertexUniformBuffer1 {
   transform1 : mat2x2<f32>;
-};
+}
 
 struct vertexUniformBuffer2 {
   transform2 : mat2x2<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> x_20 : vertexUniformBuffer1;
 
diff --git a/test/bug/tint/492.wgsl.expected.wgsl b/test/bug/tint/492.wgsl.expected.wgsl
index 3b56c94..6563f70 100644
--- a/test/bug/tint/492.wgsl.expected.wgsl
+++ b/test/bug/tint/492.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : i32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> buf : S;
 
diff --git a/test/bug/tint/534.wgsl.expected.wgsl b/test/bug/tint/534.wgsl.expected.wgsl
index 7604745..bc45f8a 100644
--- a/test/bug/tint/534.wgsl.expected.wgsl
+++ b/test/bug/tint/534.wgsl.expected.wgsl
@@ -3,11 +3,11 @@
   isFloat16 : u32;
   isRGB10A2Unorm : u32;
   channelCount : u32;
-};
+}
 
 struct OutputBuf {
   result : [[stride(4)]] array<u32>;
-};
+}
 
 [[group(0), binding(0)]] var src : texture_2d<f32>;
 
diff --git a/test/bug/tint/744.wgsl.expected.wgsl b/test/bug/tint/744.wgsl.expected.wgsl
index 27c747d..001dd88 100644
--- a/test/bug/tint/744.wgsl.expected.wgsl
+++ b/test/bug/tint/744.wgsl.expected.wgsl
@@ -2,11 +2,11 @@
   aShape : vec2<u32>;
   bShape : vec2<u32>;
   outShape : vec2<u32>;
-};
+}
 
 struct Matrix {
   numbers : array<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> firstMatrix : Matrix;
 
diff --git a/test/bug/tint/749.spvasm.expected.wgsl b/test/bug/tint/749.spvasm.expected.wgsl
index 741a6ca..59e1920 100644
--- a/test/bug/tint/749.spvasm.expected.wgsl
+++ b/test/bug/tint/749.spvasm.expected.wgsl
@@ -1,10 +1,10 @@
 struct QuicksortObject {
   numbers : array<i32, 10u>;
-};
+}
 
 struct buf0 {
   resolution : vec2<f32>;
-};
+}
 
 var<private> obj : QuicksortObject;
 
@@ -1476,7 +1476,7 @@
 struct main_out {
   [[location(0)]]
   x_GLF_color_1 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
diff --git a/test/bug/tint/757.wgsl.expected.wgsl b/test/bug/tint/757.wgsl.expected.wgsl
index 2407fea..b19bb0c 100644
--- a/test/bug/tint/757.wgsl.expected.wgsl
+++ b/test/bug/tint/757.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct Constants {
   level : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> constants : Constants;
 
@@ -8,7 +8,7 @@
 
 struct Result {
   values : [[stride(4)]] array<f32>;
-};
+}
 
 [[group(0), binding(3)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/tint/824.wgsl.expected.wgsl b/test/bug/tint/824.wgsl.expected.wgsl
index 6d051de..2c795fe 100644
--- a/test/bug/tint/824.wgsl.expected.wgsl
+++ b/test/bug/tint/824.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   Position : vec4<f32>;
   [[location(0)]]
   color : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main([[builtin(vertex_index)]] VertexIndex : u32, [[builtin(instance_index)]] InstanceIndex : u32) -> Output {
diff --git a/test/bug/tint/827.wgsl.expected.wgsl b/test/bug/tint/827.wgsl.expected.wgsl
index 48baf0c..af06757 100644
--- a/test/bug/tint/827.wgsl.expected.wgsl
+++ b/test/bug/tint/827.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct Result {
   values : array<f32>;
-};
+}
 
 let width : u32 = 128u;
 
diff --git a/test/bug/tint/870.spvasm.expected.wgsl b/test/bug/tint/870.spvasm.expected.wgsl
index 9d03c58..73a04d4 100644
--- a/test/bug/tint/870.spvasm.expected.wgsl
+++ b/test/bug/tint/870.spvasm.expected.wgsl
@@ -5,11 +5,11 @@
   offset : vec4<f32>;
   essence : i32;
   orientation : Arr;
-};
+}
 
 struct x_B4_BuildInformation {
   passthru : sspp962805860buildInformationS;
-};
+}
 
 [[group(0), binding(2)]] var<storage, read> sspp962805860buildInformation : x_B4_BuildInformation;
 
diff --git a/test/bug/tint/913.wgsl.expected.wgsl b/test/bug/tint/913.wgsl.expected.wgsl
index ecc1c2b..322d0b1 100644
--- a/test/bug/tint/913.wgsl.expected.wgsl
+++ b/test/bug/tint/913.wgsl.expected.wgsl
@@ -4,11 +4,11 @@
   srcCopyOrigin : vec2<u32>;
   dstCopyOrigin : vec2<u32>;
   copySize : vec2<u32>;
-};
+}
 
 struct OutputBuf {
   result : array<u32>;
-};
+}
 
 [[group(0), binding(0)]] var src : texture_2d<f32>;
 
diff --git a/test/bug/tint/914.wgsl.expected.wgsl b/test/bug/tint/914.wgsl.expected.wgsl
index 6b42dac..bfa7c61 100644
--- a/test/bug/tint/914.wgsl.expected.wgsl
+++ b/test/bug/tint/914.wgsl.expected.wgsl
@@ -2,11 +2,11 @@
   dimAOuter : u32;
   dimInner : u32;
   dimBOuter : u32;
-};
+}
 
 struct Matrix {
   numbers : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> firstMatrix : Matrix;
 
diff --git a/test/bug/tint/922.wgsl.expected.wgsl b/test/bug/tint/922.wgsl.expected.wgsl
index 6e637c7..82929da 100644
--- a/test/bug/tint/922.wgsl.expected.wgsl
+++ b/test/bug/tint/922.wgsl.expected.wgsl
@@ -3,31 +3,31 @@
   my : vec4<f32>;
   mz : vec4<f32>;
   mw : vec4<f32>;
-};
+}
 
 struct Mat4x3_ {
   mx : vec4<f32>;
   my : vec4<f32>;
   mz : vec4<f32>;
-};
+}
 
 struct Mat4x2_ {
   mx : vec4<f32>;
   my : vec4<f32>;
-};
+}
 
 struct ub_SceneParams {
   u_Projection : Mat4x4_;
-};
+}
 
 struct ub_MaterialParams {
   u_TexMtx : [[stride(32)]] array<Mat4x2_, 1>;
   u_Misc0_ : vec4<f32>;
-};
+}
 
 struct ub_PacketParams {
   u_PosMtx : [[stride(48)]] array<Mat4x3_, 32>;
-};
+}
 
 struct VertexOutput {
   [[location(0)]]
@@ -36,7 +36,7 @@
   v_TexCoord : vec2<f32>;
   [[builtin(position)]]
   member : vec4<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> global : ub_SceneParams;
 
diff --git a/test/bug/tint/926.wgsl.expected.wgsl b/test/bug/tint/926.wgsl.expected.wgsl
index b21aa73..978979b 100644
--- a/test/bug/tint/926.wgsl.expected.wgsl
+++ b/test/bug/tint/926.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct DrawIndirectArgs {
   vertexCount : atomic<u32>;
-};
+}
 
 [[group(0), binding(5)]] var<storage, read_write> drawOut : DrawIndirectArgs;
 
diff --git a/test/bug/tint/942.wgsl.expected.wgsl b/test/bug/tint/942.wgsl.expected.wgsl
index 327b5aa..827326f 100644
--- a/test/bug/tint/942.wgsl.expected.wgsl
+++ b/test/bug/tint/942.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Params {
   filterDim : u32;
   blockDim : u32;
-};
+}
 
 [[group(0), binding(0)]] var samp : sampler;
 
@@ -13,7 +13,7 @@
 
 struct Flip {
   value : u32;
-};
+}
 
 [[group(1), binding(3)]] var<uniform> flip : Flip;
 
diff --git a/test/bug/tint/943.spvasm.expected.wgsl b/test/bug/tint/943.spvasm.expected.wgsl
index ab6b376..04699dd 100644
--- a/test/bug/tint/943.spvasm.expected.wgsl
+++ b/test/bug/tint/943.spvasm.expected.wgsl
@@ -12,7 +12,7 @@
   [[size(4)]]
   padding_3 : u32;
   outShapeStrides : vec2<i32>;
-};
+}
 
 type RTArr = [[stride(4)]] array<f32>;
 
@@ -20,17 +20,17 @@
 
 struct ssbOut {
   result : RTArr_1;
-};
+}
 
 type RTArr_2 = [[stride(4)]] array<f32>;
 
 struct ssbA {
   A : RTArr_1;
-};
+}
 
 struct ssbB {
   B : RTArr_1;
-};
+}
 
 var<private> dimAOuter_1 : i32;
 
diff --git a/test/bug/tint/948.wgsl.expected.wgsl b/test/bug/tint/948.wgsl.expected.wgsl
index 4fe5b0c..d6a66db 100644
--- a/test/bug/tint/948.wgsl.expected.wgsl
+++ b/test/bug/tint/948.wgsl.expected.wgsl
@@ -9,7 +9,7 @@
   stageScale : f32;
   spriteCount : f32;
   colorMul : vec3<f32>;
-};
+}
 
 [[group(2), binding(9)]] var<uniform> x_20 : LeftOver;
 
@@ -213,7 +213,7 @@
 struct main_out {
   [[location(0)]]
   glFragColor_1 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main([[location(2)]] tUV_param : vec2<f32>, [[location(5)]] tileID_1_param : vec2<f32>, [[location(4)]] levelUnits_param : vec2<f32>, [[location(3)]] stageUnits_1_param : vec2<f32>, [[location(0)]] vPosition_param : vec3<f32>, [[location(1)]] vUV_param : vec2<f32>) -> main_out {
diff --git a/test/bug/tint/949.wgsl.expected.wgsl b/test/bug/tint/949.wgsl.expected.wgsl
index 68602e1..8bbc807 100644
--- a/test/bug/tint/949.wgsl.expected.wgsl
+++ b/test/bug/tint/949.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct lightingInfo {
   diffuse : vec3<f32>;
   specular : vec3<f32>;
-};
+}
 
 struct LeftOver {
   u_World : mat4x4<f32>;
@@ -15,7 +15,7 @@
   [[size(4)]]
   padding_1 : u32;
   tangentSpaceParameter0 : vec2<f32>;
-};
+}
 
 struct Light0 {
   vLightData : vec4<f32>;
@@ -26,7 +26,7 @@
   padding_2 : u32;
   shadowsInfo : vec4<f32>;
   depthValues : vec2<f32>;
-};
+}
 
 var<private> u_Float : f32;
 
@@ -438,7 +438,7 @@
 struct main_out {
   [[location(0)]]
   glFragColor_1 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main([[location(1)]] vMainuv_param : vec2<f32>, [[location(0)]] v_output1_param : vec4<f32>, [[builtin(front_facing)]] gl_FrontFacing_param : bool, [[location(3)]] v_uv_param : vec2<f32>, [[location(2)]] v_output2_param : vec4<f32>) -> main_out {
diff --git a/test/bug/tint/951.spvasm.expected.wgsl b/test/bug/tint/951.spvasm.expected.wgsl
index 2440aa7..f80adea 100644
--- a/test/bug/tint/951.spvasm.expected.wgsl
+++ b/test/bug/tint/951.spvasm.expected.wgsl
@@ -4,11 +4,11 @@
 
 struct ssbOut {
   result : RTArr_1;
-};
+}
 
 struct ssbA {
   A : RTArr_1;
-};
+}
 
 struct Uniforms {
   NAN : f32;
@@ -16,7 +16,7 @@
   outShape : i32;
   outShapeStrides : i32;
   size : i32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> x_16 : ssbOut;
 
diff --git a/test/bug/tint/959.wgsl.expected.wgsl b/test/bug/tint/959.wgsl.expected.wgsl
index 6a440f7..4e4ecf0 100644
--- a/test/bug/tint/959.wgsl.expected.wgsl
+++ b/test/bug/tint/959.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : f32;
-};
+}
 
 [[group(0), binding(0)]] var<storage> b0 : S;
 
diff --git a/test/bug/tint/977.spvasm.expected.wgsl b/test/bug/tint/977.spvasm.expected.wgsl
index 711260b..69bc7aa 100644
--- a/test/bug/tint/977.spvasm.expected.wgsl
+++ b/test/bug/tint/977.spvasm.expected.wgsl
@@ -4,23 +4,23 @@
 
 struct ResultMatrix {
   numbers : RTArr_1;
-};
+}
 
 type RTArr_2 = [[stride(4)]] array<f32>;
 
 struct FirstMatrix {
   numbers : RTArr_1;
-};
+}
 
 struct SecondMatrix {
   numbers : RTArr_1;
-};
+}
 
 struct Uniforms {
   NAN : f32;
   sizeA : i32;
   sizeB : i32;
-};
+}
 
 var<private> gl_GlobalInvocationID : vec3<u32>;
 
diff --git a/test/bug/tint/978.wgsl.expected.wgsl b/test/bug/tint/978.wgsl.expected.wgsl
index a912004..b73a26e 100644
--- a/test/bug/tint/978.wgsl.expected.wgsl
+++ b/test/bug/tint/978.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
 struct FragmentInput {
   [[location(2)]]
   vUv : vec2<f32>;
-};
+}
 
 struct FragmentOutput {
   [[location(0)]]
   color : vec4<f32>;
-};
+}
 
 [[binding(5), group(1)]] var depthMap : texture_depth_2d;
 
diff --git a/test/bug/tint/980.wgsl.expected.wgsl b/test/bug/tint/980.wgsl.expected.wgsl
index 1af06ba..b74a7cb 100644
--- a/test/bug/tint/980.wgsl.expected.wgsl
+++ b/test/bug/tint/980.wgsl.expected.wgsl
@@ -7,7 +7,7 @@
 struct S {
   v : vec3<f32>;
   i : u32;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> io : S;
 
diff --git a/test/bug/tint/993.wgsl.expected.wgsl b/test/bug/tint/993.wgsl.expected.wgsl
index 588ebed..12eb2ae 100644
--- a/test/bug/tint/993.wgsl.expected.wgsl
+++ b/test/bug/tint/993.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct Constants {
   zero : u32;
-};
+}
 
 [[group(1), binding(0)]] var<uniform> constants : Constants;
 
 struct Result {
   value : u32;
-};
+}
 
 [[group(1), binding(1)]] var<storage, write> result : Result;
 
 struct TestData {
   data : array<atomic<i32>, 3>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> s : TestData;
 
diff --git a/test/bug/tint/998.wgsl.expected.wgsl b/test/bug/tint/998.wgsl.expected.wgsl
index f6e3471..e7abd6d 100644
--- a/test/bug/tint/998.wgsl.expected.wgsl
+++ b/test/bug/tint/998.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct Constants {
   zero : u32;
-};
+}
 
 [[group(1), binding(0)]] var<uniform> constants : Constants;
 
 struct Result {
   value : u32;
-};
+}
 
 [[group(1), binding(1)]] var<storage, write> result : Result;
 
 struct S {
   data : array<u32, 3>;
-};
+}
 
 var<private> s : S;
 
diff --git a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl
index ae7c935..adb8e74 100644
--- a/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/mat3x2-vec3/f32.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct S {
   matrix : mat3x2<f32>;
   vector : vec3<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> data : S;
 
diff --git a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl
index 67be8b6..461d0c7 100644
--- a/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/mat3x3-vec3/f32.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct S {
   matrix : mat3x3<f32>;
   vector : vec3<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> data : S;
 
diff --git a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl
index 884e94c..10e087f 100644
--- a/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-mat3x3/f32.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct S {
   matrix : mat3x3<f32>;
   vector : vec3<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> data : S;
 
diff --git a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl
index 36c0fe4..223240f 100644
--- a/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl
+++ b/test/expressions/binary/mul/vec3-mat4x3/f32.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct S {
   matrix : mat4x3<f32>;
   vector : vec3<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> data : S;
 
diff --git a/test/expressions/literals/-inf.spvasm.expected.wgsl b/test/expressions/literals/-inf.spvasm.expected.wgsl
index 3e916f6..60e7281 100644
--- a/test/expressions/literals/-inf.spvasm.expected.wgsl
+++ b/test/expressions/literals/-inf.spvasm.expected.wgsl
@@ -8,7 +8,7 @@
 struct main_out {
   [[location(0)]]
   out_var_SV_TARGET_1 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
diff --git a/test/expressions/literals/inf.spvasm.expected.wgsl b/test/expressions/literals/inf.spvasm.expected.wgsl
index c4dd750..0389b98 100644
--- a/test/expressions/literals/inf.spvasm.expected.wgsl
+++ b/test/expressions/literals/inf.spvasm.expected.wgsl
@@ -8,7 +8,7 @@
 struct main_out {
   [[location(0)]]
   out_var_SV_TARGET_1 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
diff --git a/test/expressions/literals/nan.spvasm.expected.wgsl b/test/expressions/literals/nan.spvasm.expected.wgsl
index a72149c..816c89e 100644
--- a/test/expressions/literals/nan.spvasm.expected.wgsl
+++ b/test/expressions/literals/nan.spvasm.expected.wgsl
@@ -8,7 +8,7 @@
 struct main_out {
   [[location(0)]]
   out_var_SV_TARGET_1 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> main_out {
diff --git a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
index 6a0255b..727788b 100644
--- a/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> U : S;
 
diff --git a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
index 9220cb8..dffd20c 100644
--- a/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> U : S;
 
diff --git a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
index e77660c..36bf160 100644
--- a/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/packed_vec3/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> U : S;
 
diff --git a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.wgsl
index cef93bb..b3862ad 100644
--- a/test/expressions/swizzle/read/vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/vec3/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<f32>;
-};
+}
 
 var<private> P : S;
 
diff --git a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.wgsl
index 9b440ce..72b0026 100644
--- a/test/expressions/swizzle/read/vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/vec3/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<i32>;
-};
+}
 
 var<private> P : S;
 
diff --git a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.wgsl
index 390ba90..1756e99 100644
--- a/test/expressions/swizzle/read/vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/read/vec3/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<u32>;
-};
+}
 
 var<private> P : S;
 
diff --git a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
index 35bcaa3..84f2ef9 100644
--- a/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> U : S;
 
diff --git a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
index 75986e1..a017589 100644
--- a/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> U : S;
 
diff --git a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
index 8db4caf..b9c4866 100644
--- a/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/packed_vec3/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> U : S;
 
diff --git a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.wgsl b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.wgsl
index 83e6e31..9eab0b0 100644
--- a/test/expressions/swizzle/write/vec3/f32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/vec3/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<f32>;
-};
+}
 
 var<private> P : S;
 
diff --git a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.wgsl b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.wgsl
index 0c055df..bd00bb3 100644
--- a/test/expressions/swizzle/write/vec3/i32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/vec3/i32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<i32>;
-};
+}
 
 var<private> P : S;
 
diff --git a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.wgsl b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.wgsl
index 301f985..0323375 100644
--- a/test/expressions/swizzle/write/vec3/u32.wgsl.expected.wgsl
+++ b/test/expressions/swizzle/write/vec3/u32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   v : vec3<u32>;
-};
+}
 
 var<private> P : S;
 
diff --git a/test/expressions/zero_init/array/struct.wgsl.expected.wgsl b/test/expressions/zero_init/array/struct.wgsl.expected.wgsl
index 939e93b..c864d0f 100644
--- a/test/expressions/zero_init/array/struct.wgsl.expected.wgsl
+++ b/test/expressions/zero_init/array/struct.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   u : u32;
   f : f32;
   b : bool;
-};
+}
 
 fn f() {
   var v = array<S, 4>();
diff --git a/test/expressions/zero_init/struct/array.wgsl.expected.wgsl b/test/expressions/zero_init/struct/array.wgsl.expected.wgsl
index 522939f..97b1cce 100644
--- a/test/expressions/zero_init/struct/array.wgsl.expected.wgsl
+++ b/test/expressions/zero_init/struct/array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : array<f32, 4>;
-};
+}
 
 fn f() {
   var v = S();
diff --git a/test/expressions/zero_init/struct/scalar.wgsl.expected.wgsl b/test/expressions/zero_init/struct/scalar.wgsl.expected.wgsl
index 0da534f..cd48ab4 100644
--- a/test/expressions/zero_init/struct/scalar.wgsl.expected.wgsl
+++ b/test/expressions/zero_init/struct/scalar.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   u : u32;
   f : f32;
   b : bool;
-};
+}
 
 fn f() {
   var v = S();
diff --git a/test/identifiers/underscore/double/struct.wgsl.expected.wgsl b/test/identifiers/underscore/double/struct.wgsl.expected.wgsl
index 2a008b6..ad84d66 100644
--- a/test/identifiers/underscore/double/struct.wgsl.expected.wgsl
+++ b/test/identifiers/underscore/double/struct.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct a {
   b : i32;
-};
+}
 
 struct a__ {
   b__ : i32;
-};
+}
 
 fn f() {
   let c = a__();
diff --git a/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.wgsl b/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.wgsl
index 6565fc1..a995390 100644
--- a/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.wgsl
+++ b/test/identifiers/underscore/prefix/lower/struct.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct a {
   b : i32;
-};
+}
 
 struct _a {
   _b : i32;
-};
+}
 
 fn f() {
   let c = _a();
diff --git a/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.wgsl b/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.wgsl
index 243f368..97a6d4c 100644
--- a/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.wgsl
+++ b/test/identifiers/underscore/prefix/upper/struct.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct A {
   B : i32;
-};
+}
 
 struct _A {
   _B : i32;
-};
+}
 
 fn f() {
   let c = _A();
diff --git a/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl
index 0448ef6..1dcc7b1 100644
--- a/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/complex_via_let.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> G : S;
 
diff --git a/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl b/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl
index 1db02f4..5489c10 100644
--- a/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/deprecated.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> G : S;
 
diff --git a/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl b/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl
index 72d32ba..9b7d049 100644
--- a/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/simple.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> G : S;
 
diff --git a/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl b/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl
index 163a302..13663f0 100644
--- a/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/via_let.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> G : S;
 
diff --git a/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl
index d4255df..7b07952 100644
--- a/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl
+++ b/test/intrinsics/arrayLength/via_let_complex.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read> G : S;
 
diff --git a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl
index a3c1031..645da49 100644
--- a/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/1588cd.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RO {
   arg_0 : array<i32>;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
 
diff --git a/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl
index 6d43b63..f1d33c2 100644
--- a/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/61b1c7.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : array<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl
index 1e5ca7a..85468b4 100644
--- a/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/a0f5ca.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RO {
   arg_0 : array<f32>;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
 
diff --git a/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl
index e0afa3c..65a2077 100644
--- a/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/cdd123.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : array<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl
index 84f74eb..8930be0 100644
--- a/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/cfca0a.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RO {
   arg_0 : array<u32>;
-};
+}
 
 [[group(0), binding(1)]] var<storage, read> sb_ro : SB_RO;
 
diff --git a/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl
index 7b7f49c..5b85130 100644
--- a/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/arrayLength/eb510f.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : array<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
index ad75b16..432caa9 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
index acbf6ff..5bc41ca 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
index 026499f..c0be5bc 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
index 7f6b09e..c63138b 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
index 990942e..eed9b1f 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
index 985e3bd..ea4899a 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
index 293aaad..9970c9b 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
index 58c2ae3..511c02b 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
index 3b643bb..b0f3f7d 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
index 6155c41..a4b878b 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
index e2dd9eb..3f36fbc 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
index a59e10a..d1c9bea 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
index f4da3b5..ef74988 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
index 91b08cc..1e1fb28 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
index 2f15ddd..a483962 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
index dd150f6..57de392 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
index fc0ae3b..9f19d43 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
index e038d50..803cb0d 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl
index e94eefc..1059294 100644
--- a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl
index ca53ef6..26c3cbe 100644
--- a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
index c9a6544..e0ef7e7 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<u32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
index 010c089..6840482 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SB_RW {
   arg_0 : atomic<i32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
 
diff --git a/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl b/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl
index ab69868..e58a70c 100644
--- a/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl
+++ b/test/intrinsics/ignore/runtime_array.wgsl.expected.wgsl
@@ -4,7 +4,7 @@
 
 struct S {
   arr : array<i32>;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> s : S;
 
diff --git a/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl b/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl
index 34817fc..0f2f5e9 100644
--- a/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl
+++ b/test/intrinsics/ignore/storage_buffer.wgsl.expected.wgsl
@@ -8,7 +8,7 @@
 
 struct S {
   i : i32;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> s : S;
 
diff --git a/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl
index 2d8a109..72a1efe 100644
--- a/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl
+++ b/test/intrinsics/ignore/uniform_buffer.wgsl.expected.wgsl
@@ -8,7 +8,7 @@
 
 struct S {
   i : i32;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> u : S;
 
diff --git a/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl
index 0dbdb01..d7e9e8b 100644
--- a/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl
+++ b/test/intrinsics/textureDimensions/depth_ms.spvasm.expected.wgsl
@@ -23,7 +23,7 @@
 struct vertex_main_out {
   [[builtin(position)]]
   tint_symbol_1_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vertex_main() -> vertex_main_out {
diff --git a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl
index c308490..13f9223 100644
--- a/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl
+++ b/test/intrinsics/textureLoad/depth_ms.spvasm.expected.wgsl
@@ -23,7 +23,7 @@
 struct vertex_main_out {
   [[builtin(position)]]
   tint_symbol_1_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vertex_main() -> vertex_main_out {
diff --git a/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl
index ac6cc99..bafa3a8 100644
--- a/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl
+++ b/test/intrinsics/textureNumSamples/depth_ms.spvasm.expected.wgsl
@@ -23,7 +23,7 @@
 struct vertex_main_out {
   [[builtin(position)]]
   tint_symbol_1_1 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vertex_main() -> vertex_main_out {
diff --git a/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl b/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl
index 0df98b4..9933db6 100644
--- a/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl
+++ b/test/layout/storage/mat2x2/f32.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct SSBO {
   m : mat2x2<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
 
diff --git a/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl b/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl
index d2d8b02..ffb157a 100644
--- a/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl
+++ b/test/layout/storage/mat2x2/stride/16.spvasm.expected.wgsl
@@ -1,6 +1,6 @@
 struct SSBO {
   m : [[stride(16)]] array<vec2<f32>, 2u>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
 
diff --git a/test/let/global/global.wgsl.expected.wgsl b/test/let/global/global.wgsl.expected.wgsl
index 126f25c..68c5ae5 100644
--- a/test/let/global/global.wgsl.expected.wgsl
+++ b/test/let/global/global.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct MyStruct {
   f1 : f32;
-};
+}
 
 type MyArray = array<f32, 10>;
 
diff --git a/test/let/inferred/function.wgsl.expected.wgsl b/test/let/inferred/function.wgsl.expected.wgsl
index 03d68ef..4f5b69a 100644
--- a/test/let/inferred/function.wgsl.expected.wgsl
+++ b/test/let/inferred/function.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct MyStruct {
   f1 : f32;
-};
+}
 
 type MyArray = array<f32, 10>;
 
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl b/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
index 8771732..67eba57 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 var<private> V : S;
 
diff --git a/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl b/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl
index 074fe80..d0b3e34 100644
--- a/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/global/struct_field.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 var<private> V : S;
 
diff --git a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl
index 13f8743..3111c5f 100644
--- a/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/ptr_storage.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : i32;
-};
+}
 
 [[group(0), binding(0)]] var<storage, read_write> v : S;
 
diff --git a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl
index 9ce5c52..b6f8628 100644
--- a/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/ptr_uniform.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : i32;
-};
+}
 
 [[group(0), binding(0)]] var<uniform> v : S;
 
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl b/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
index aa20b42..ea14750 100644
--- a/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 fn main_1() {
   var i : i32;
diff --git a/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl b/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl
index 18aca63..7bbcb5a 100644
--- a/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl
+++ b/test/ptr_ref/load/local/struct_field.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main() {
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl b/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
index c217a5f..e70b574 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 var<private> V : S;
 
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl b/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
index d628330..b3b95df 100644
--- a/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 fn main_1() {
   var V : S;
diff --git a/test/samples/compute_boids.wgsl.expected.wgsl b/test/samples/compute_boids.wgsl.expected.wgsl
index 8fd0a19..394631c 100644
--- a/test/samples/compute_boids.wgsl.expected.wgsl
+++ b/test/samples/compute_boids.wgsl.expected.wgsl
@@ -13,7 +13,7 @@
 struct Particle {
   pos : vec2<f32>;
   vel : vec2<f32>;
-};
+}
 
 struct SimParams {
   deltaT : f32;
@@ -23,11 +23,11 @@
   rule1Scale : f32;
   rule2Scale : f32;
   rule3Scale : f32;
-};
+}
 
 struct Particles {
   particles : array<Particle, 5>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> params : SimParams;
 
diff --git a/test/samples/cube.wgsl.expected.wgsl b/test/samples/cube.wgsl.expected.wgsl
index 29109a6..a764703 100644
--- a/test/samples/cube.wgsl.expected.wgsl
+++ b/test/samples/cube.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct Uniforms {
   modelViewProjectionMatrix : mat4x4<f32>;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> uniforms : Uniforms;
 
@@ -9,14 +9,14 @@
   cur_position : vec4<f32>;
   [[location(1)]]
   color : vec4<f32>;
-};
+}
 
 struct VertexOutput {
   [[location(0)]]
   vtxFragColor : vec4<f32>;
   [[builtin(position)]]
   Position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vtx_main(input : VertexInput) -> VertexOutput {
diff --git a/test/samples/simple_vertex.spvasm.expected.wgsl b/test/samples/simple_vertex.spvasm.expected.wgsl
index 45b705f..372bb24 100644
--- a/test/samples/simple_vertex.spvasm.expected.wgsl
+++ b/test/samples/simple_vertex.spvasm.expected.wgsl
@@ -8,7 +8,7 @@
 struct main_out {
   [[builtin(position)]]
   gl_Position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> main_out {
diff --git a/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl b/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl
index 23d354a..c3830ee 100644
--- a/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/compute_input_builtins_struct.wgsl.expected.wgsl
@@ -9,7 +9,7 @@
   workgroup_id : vec3<u32>;
   [[builtin(num_workgroups)]]
   num_workgroups : vec3<u32>;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main(inputs : ComputeInputs) {
diff --git a/test/shader_io/compute_input_mixed.wgsl.expected.wgsl b/test/shader_io/compute_input_mixed.wgsl.expected.wgsl
index bb7428c..369ae7f 100644
--- a/test/shader_io/compute_input_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/compute_input_mixed.wgsl.expected.wgsl
@@ -1,12 +1,12 @@
 struct ComputeInputs0 {
   [[builtin(local_invocation_id)]]
   local_invocation_id : vec3<u32>;
-};
+}
 
 struct ComputeInputs1 {
   [[builtin(workgroup_id)]]
   workgroup_id : vec3<u32>;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main(inputs0 : ComputeInputs0, [[builtin(local_invocation_index)]] local_invocation_index : u32, [[builtin(global_invocation_id)]] global_invocation_id : vec3<u32>, inputs1 : ComputeInputs1) {
diff --git a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl
index 0cf1aeb..79ec5fd 100644
--- a/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_builtins_struct.wgsl.expected.wgsl
@@ -7,7 +7,7 @@
   sample_index : u32;
   [[builtin(sample_mask)]]
   sample_mask : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main(inputs : FragmentInputs) {
diff --git a/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl b/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl
index 4fa7de4..5179ec9 100644
--- a/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_locations_struct.wgsl.expected.wgsl
@@ -7,7 +7,7 @@
   loc2 : f32;
   [[location(3)]]
   loc3 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main(inputs : FragmentInputs) {
diff --git a/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl b/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl
index a6f21f1..bca1e79 100644
--- a/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_input_mixed.wgsl.expected.wgsl
@@ -3,14 +3,14 @@
   position : vec4<f32>;
   [[location(0), interpolate(flat)]]
   loc0 : i32;
-};
+}
 
 struct FragmentInputs1 {
   [[location(3)]]
   loc3 : vec4<f32>;
   [[builtin(sample_mask)]]
   sample_mask : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main(inputs0 : FragmentInputs0, [[builtin(front_facing)]] front_facing : bool, [[location(1), interpolate(flat)]] loc1 : u32, [[builtin(sample_index)]] sample_index : u32, inputs1 : FragmentInputs1, [[location(2)]] loc2 : f32) {
diff --git a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl
index 6617a26..e87f857 100644
--- a/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_builtins_struct.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   frag_depth : f32;
   [[builtin(sample_mask)]]
   sample_mask : u32;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> FragmentOutputs {
diff --git a/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl b/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl
index 879805c..da4e7cf 100644
--- a/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_locations_struct.wgsl.expected.wgsl
@@ -7,7 +7,7 @@
   loc2 : f32;
   [[location(3)]]
   loc3 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> FragmentOutputs {
diff --git a/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl b/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl
index 3fb401c..8069265 100644
--- a/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/fragment_output_mixed.wgsl.expected.wgsl
@@ -11,7 +11,7 @@
   sample_mask : u32;
   [[location(3)]]
   loc3 : vec4<f32>;
-};
+}
 
 [[stage(fragment)]]
 fn main() -> FragmentOutputs {
diff --git a/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl b/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl
index b90c09b..20a8106 100644
--- a/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl
+++ b/test/shader_io/interpolate_input_struct.wgsl.expected.wgsl
@@ -15,7 +15,7 @@
   linear_centroid : f32;
   [[location(7), interpolate(linear, sample)]]
   linear_sample : f32;
-};
+}
 
 [[stage(fragment)]]
 fn main(in : In) {
diff --git a/test/shader_io/interpolate_integers.wgsl.expected.wgsl b/test/shader_io/interpolate_integers.wgsl.expected.wgsl
index 9b3eee2..afabf7c 100644
--- a/test/shader_io/interpolate_integers.wgsl.expected.wgsl
+++ b/test/shader_io/interpolate_integers.wgsl.expected.wgsl
@@ -9,7 +9,7 @@
   vu : vec4<u32>;
   [[builtin(position)]]
   pos : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vert_main() -> Interface {
diff --git a/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl b/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl
index fad2030..bcf8177 100644
--- a/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl
+++ b/test/shader_io/interpolate_return_struct.wgsl.expected.wgsl
@@ -17,7 +17,7 @@
   linear_centroid : f32;
   [[location(7), interpolate(linear, sample)]]
   linear_sample : f32;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> Out {
diff --git a/test/shader_io/invariant_struct_member.wgsl.expected.wgsl b/test/shader_io/invariant_struct_member.wgsl.expected.wgsl
index 03d9193..503a0ba 100644
--- a/test/shader_io/invariant_struct_member.wgsl.expected.wgsl
+++ b/test/shader_io/invariant_struct_member.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct Out {
   [[builtin(position), invariant]]
   pos : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> Out {
diff --git a/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl b/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl
index 67a91d6..343afdd 100644
--- a/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl
+++ b/test/shader_io/shared_struct_different_stages.wgsl.expected.wgsl
@@ -5,7 +5,7 @@
   col2 : f32;
   [[builtin(position)]]
   pos : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn vert_main() -> Interface {
diff --git a/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl b/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl
index c282cd6..034d5e1 100644
--- a/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl
+++ b/test/shader_io/shared_struct_helper_function.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   pos : vec4<f32>;
   [[location(0), interpolate(flat)]]
   loc0 : i32;
-};
+}
 
 fn foo(x : f32) -> VertexOutput {
   return VertexOutput(vec4<f32>(x, x, x, 1.0), 42);
diff --git a/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl
index 971ff7b..7872704 100644
--- a/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl
+++ b/test/shader_io/shared_struct_storage_buffer.wgsl.expected.wgsl
@@ -5,7 +5,7 @@
   u : u32;
   [[align(128), builtin(position)]]
   v : vec4<f32>;
-};
+}
 
 [[group(0), binding(0)]] var<storage, write> output : S;
 
diff --git a/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl
index f63100d..7d885b4 100644
--- a/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_builtins_struct.wgsl.expected.wgsl
@@ -3,7 +3,7 @@
   vertex_index : u32;
   [[builtin(instance_index)]]
   instance_index : u32;
-};
+}
 
 [[stage(vertex)]]
 fn main(inputs : VertexInputs) -> [[builtin(position)]] vec4<f32> {
diff --git a/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl b/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl
index 28d40aa..7b7c1b0 100644
--- a/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_locations_struct.wgsl.expected.wgsl
@@ -7,7 +7,7 @@
   loc2 : f32;
   [[location(3)]]
   loc3 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main(inputs : VertexInputs) -> [[builtin(position)]] vec4<f32> {
diff --git a/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl b/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl
index 0cd61f6..81a6507 100644
--- a/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_input_mixed.wgsl.expected.wgsl
@@ -3,14 +3,14 @@
   vertex_index : u32;
   [[location(0)]]
   loc0 : i32;
-};
+}
 
 struct VertexInputs1 {
   [[location(2)]]
   loc2 : f32;
   [[location(3)]]
   loc3 : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main(inputs0 : VertexInputs0, [[location(1)]] loc1 : u32, [[builtin(instance_index)]] instance_index : u32, inputs1 : VertexInputs1) -> [[builtin(position)]] vec4<f32> {
diff --git a/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl
index 77d3b51..744325c 100644
--- a/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_output_builtins_struct.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct VertexOutputs {
   [[builtin(position)]]
   position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> VertexOutputs {
diff --git a/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl b/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl
index f1c6c7c..a3df42d 100644
--- a/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl
+++ b/test/shader_io/vertex_output_locations_struct.wgsl.expected.wgsl
@@ -9,7 +9,7 @@
   loc3 : vec4<f32>;
   [[builtin(position)]]
   position : vec4<f32>;
-};
+}
 
 [[stage(vertex)]]
 fn main() -> VertexOutputs {
diff --git a/test/shadowing/function/var.wgsl.expected.wgsl b/test/shadowing/function/var.wgsl.expected.wgsl
index feea3e6..eff3fc5 100644
--- a/test/shadowing/function/var.wgsl.expected.wgsl
+++ b/test/shadowing/function/var.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct a {
   a : i32;
-};
+}
 
 fn f() {
   {
diff --git a/test/shadowing/struct/let.wgsl.expected.wgsl b/test/shadowing/struct/let.wgsl.expected.wgsl
index 4425a83..1c889fa 100644
--- a/test/shadowing/struct/let.wgsl.expected.wgsl
+++ b/test/shadowing/struct/let.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct a {
   a : i32;
-};
+}
 
 fn f() {
   {
diff --git a/test/shadowing/struct/param.wgsl.expected.wgsl b/test/shadowing/struct/param.wgsl.expected.wgsl
index 2cb3206..62184f1 100644
--- a/test/shadowing/struct/param.wgsl.expected.wgsl
+++ b/test/shadowing/struct/param.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct a {
   a : i32;
-};
+}
 
 fn f(a : a) {
   let b = a;
diff --git a/test/shadowing/struct/var.wgsl.expected.wgsl b/test/shadowing/struct/var.wgsl.expected.wgsl
index feea3e6..eff3fc5 100644
--- a/test/shadowing/struct/var.wgsl.expected.wgsl
+++ b/test/shadowing/struct/var.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct a {
   a : i32;
-};
+}
 
 fn f() {
   {
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl
index a459951..f6394af 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl
index ac653ea..85d01c6 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl
index 5c08a50..6d4ee1c 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl
index 06620e8..7ae55be 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   a2 : array<InnerS, 8>;
-};
+}
 
 struct OuterS {
   a1 : array<S1, 8>;
-};
+}
 
 var<private> nextIndex : u32;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl
index 9a967aa..22548cc 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl
index db81a61..555cf5d 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<array<InnerS, 8>, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl
index d8a6c91..cae1e5d 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   s2 : InnerS;
-};
+}
 
 struct OuterS {
   a1 : array<S1, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl
index 9efd02b..6969d94 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   a2 : array<InnerS, 8>;
-};
+}
 
 struct OuterS {
   a1 : array<S1, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl
index 4eae479..c08a5f8 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl
index a6925a9..c53b90d 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
 struct Uniforms {
   i : u32;
   j : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   a2 : array<InnerS, 8>;
-};
+}
 
 struct OuterS {
   a1 : array<S1>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl
index 62a9bbb..aeb5f1b 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct OuterS {
   m1 : mat2x4<f32>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl
index dcf1542..55091c5 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.wgsl
@@ -1,15 +1,15 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
   a2 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl
index daa4a12..f2ebffe 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.wgsl
@@ -1,18 +1,18 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct S1 {
   a : array<InnerS, 8>;
-};
+}
 
 struct OuterS {
   s2 : S1;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl
index f478089..da718cf 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct OuterS {
   v1 : vec3<f32>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl
index 75951e5..928e38d 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.wgsl
@@ -1,10 +1,10 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct OuterS {
   a1 : array<u32, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl
index 3752e4a..f65b285 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl
index 9a80feb..86b031a 100644
--- a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.wgsl
@@ -1,14 +1,14 @@
 struct Uniforms {
   i : u32;
-};
+}
 
 struct InnerS {
   v : i32;
-};
+}
 
 struct OuterS {
   a1 : array<InnerS, 8>;
-};
+}
 
 [[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
 
diff --git a/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl
index 6cd06e9..0952e9d 100644
--- a/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/addr_of_non_constructable.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   arr : array<i32>;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> s : S;
 
diff --git a/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl
index 02446cd..b6c7441 100644
--- a/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/addr_of_runtime_array.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   arr : array<i32>;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> s : S;
 
diff --git a/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl b/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl
index 3a83d4d..c4caa99 100644
--- a/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/storage_buffer.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 [[binding(0), group(0)]] var<storage, read_write> s : S;
 
diff --git a/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl b/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl
index 7a04f48..3ef1045 100644
--- a/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl
+++ b/test/statements/assign/phony/uniform_buffer.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 [[binding(0), group(0)]] var<uniform> u : S;
 
diff --git a/test/statements/for/condition/struct_ctor.wgsl.expected.wgsl b/test/statements/for/condition/struct_ctor.wgsl.expected.wgsl
index dd9b9c5..45b0bea 100644
--- a/test/statements/for/condition/struct_ctor.wgsl.expected.wgsl
+++ b/test/statements/for/condition/struct_ctor.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 fn f() {
   var i : i32;
diff --git a/test/statements/for/continuing/struct_ctor.wgsl.expected.wgsl b/test/statements/for/continuing/struct_ctor.wgsl.expected.wgsl
index 7baa234..392153b 100644
--- a/test/statements/for/continuing/struct_ctor.wgsl.expected.wgsl
+++ b/test/statements/for/continuing/struct_ctor.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 fn f() {
   for(var i = 0; false; i = (i + S(1).i)) {
diff --git a/test/statements/for/initializer/struct_ctor.wgsl.expected.wgsl b/test/statements/for/initializer/struct_ctor.wgsl.expected.wgsl
index 312aad5..eb6a570 100644
--- a/test/statements/for/initializer/struct_ctor.wgsl.expected.wgsl
+++ b/test/statements/for/initializer/struct_ctor.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   i : i32;
-};
+}
 
 fn f() {
   for(var i : i32 = S(1).i; false; ) {
diff --git a/test/struct/type_constructor.wgsl.expected.wgsl b/test/struct/type_constructor.wgsl.expected.wgsl
index 5722576..c526e3f 100644
--- a/test/struct/type_constructor.wgsl.expected.wgsl
+++ b/test/struct/type_constructor.wgsl.expected.wgsl
@@ -3,22 +3,22 @@
   b : i32;
   c : i32;
   d : i32;
-};
+}
 
 struct S2 {
   e : i32;
   f : S1;
-};
+}
 
 struct S3 {
   g : i32;
   h : S1;
   i : S2;
-};
+}
 
 struct T {
   a : array<i32, 2>;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main() {
diff --git a/test/types/function_scope_declarations.wgsl.expected.wgsl b/test/types/function_scope_declarations.wgsl.expected.wgsl
index 4f1194c..3845786 100644
--- a/test/types/function_scope_declarations.wgsl.expected.wgsl
+++ b/test/types/function_scope_declarations.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : f32;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main() {
diff --git a/test/types/module_scope_let.wgsl.expected.wgsl b/test/types/module_scope_let.wgsl.expected.wgsl
index 7243c5c..be35814 100644
--- a/test/types/module_scope_let.wgsl.expected.wgsl
+++ b/test/types/module_scope_let.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : f32;
-};
+}
 
 let bool_let : bool = bool();
 
diff --git a/test/types/module_scope_var.wgsl.expected.wgsl b/test/types/module_scope_var.wgsl.expected.wgsl
index 0b4bd73..55f4e0a 100644
--- a/test/types/module_scope_var.wgsl.expected.wgsl
+++ b/test/types/module_scope_var.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : f32;
-};
+}
 
 var<private> bool_var : bool;
 
diff --git a/test/types/module_scope_var_initializers.wgsl.expected.wgsl b/test/types/module_scope_var_initializers.wgsl.expected.wgsl
index fa0ef75..d9dcf61 100644
--- a/test/types/module_scope_var_initializers.wgsl.expected.wgsl
+++ b/test/types/module_scope_var_initializers.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : f32;
-};
+}
 
 var<private> bool_var : bool = bool();
 
diff --git a/test/types/parameters.wgsl.expected.wgsl b/test/types/parameters.wgsl.expected.wgsl
index 87bb564..2720ce3 100644
--- a/test/types/parameters.wgsl.expected.wgsl
+++ b/test/types/parameters.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : f32;
-};
+}
 
 fn foo(param_bool : bool, param_i32 : i32, param_u32 : u32, param_f32 : f32, param_v2i32 : vec2<i32>, param_v3u32 : vec3<u32>, param_v4f32 : vec4<f32>, param_m2x3 : mat2x3<f32>, param_arr : array<f32, 4>, param_struct : S, param_ptr_f32 : ptr<function, f32>, param_ptr_vec : ptr<function, vec4<f32>>, param_ptr_arr : ptr<function, array<f32, 4>>) {
 }
diff --git a/test/types/return_types.wgsl.expected.wgsl b/test/types/return_types.wgsl.expected.wgsl
index 517b684..d34a095 100644
--- a/test/types/return_types.wgsl.expected.wgsl
+++ b/test/types/return_types.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S {
   a : f32;
-};
+}
 
 fn ret_bool() -> bool {
   return bool();
diff --git a/test/types/struct_members.wgsl.expected.wgsl b/test/types/struct_members.wgsl.expected.wgsl
index 2bd0f33..7ff178c 100644
--- a/test/types/struct_members.wgsl.expected.wgsl
+++ b/test/types/struct_members.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct S_inner {
   a : f32;
-};
+}
 
 struct S {
   member_bool : bool;
@@ -13,7 +13,7 @@
   member_m2x3 : mat2x3<f32>;
   member_arr : array<f32, 4>;
   member_struct : S_inner;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main() {
diff --git a/test/var/inferred/function.wgsl.expected.wgsl b/test/var/inferred/function.wgsl.expected.wgsl
index 4614108..2c8b7ab 100644
--- a/test/var/inferred/function.wgsl.expected.wgsl
+++ b/test/var/inferred/function.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 struct MyStruct {
   f1 : f32;
-};
+}
 
 type MyArray = array<f32, 10>;
 
diff --git a/test/var/initialization/function/struct.wgsl.expected.wgsl b/test/var/initialization/function/struct.wgsl.expected.wgsl
index 57bf9a7..538187c 100644
--- a/test/var/initialization/function/struct.wgsl.expected.wgsl
+++ b/test/var/initialization/function/struct.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct S {
   a : i32;
   b : f32;
-};
+}
 
 [[stage(compute), workgroup_size(1)]]
 fn main() {
diff --git a/test/var/initialization/private/struct.wgsl.expected.wgsl b/test/var/initialization/private/struct.wgsl.expected.wgsl
index 3a0a381..a91da6a 100644
--- a/test/var/initialization/private/struct.wgsl.expected.wgsl
+++ b/test/var/initialization/private/struct.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct S {
   a : i32;
   b : f32;
-};
+}
 
 var<private> v : S;
 
diff --git a/test/var/initialization/workgroup/struct.wgsl.expected.wgsl b/test/var/initialization/workgroup/struct.wgsl.expected.wgsl
index 7b2e10e..b67e95a 100644
--- a/test/var/initialization/workgroup/struct.wgsl.expected.wgsl
+++ b/test/var/initialization/workgroup/struct.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 struct S {
   a : i32;
   b : f32;
-};
+}
 
 var<workgroup> v : S;