diff --git a/BUILD.gn b/BUILD.gn
index 39d66df..a8f0c6a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -56,6 +56,12 @@
     defines += [ "TINT_BUILD_WGSL_WRITER=0" ]
   }
 
+  if (tint_build_msl_writer) {
+    defines += [ "TINT_BUILD_MSL_WRITER=1" ]
+  } else {
+    defines += [ "TINT_BUILD_MSL_WRITER=0" ]
+  }
+
   include_dirs = [
     "${tint_root_dir}/",
     "${tint_root_dir}/include/",
@@ -353,6 +359,10 @@
     "src/validator.h",
     "src/validator_impl.cc",
     "src/validator_impl.h",
+    "src/writer/text.cc",
+    "src/writer/text.h",
+    "src/writer/text_generator.cc",
+    "src/writer/text_generator.h",
     "src/writer/writer.cc",
     "src/writer/writer.h",
   ]
@@ -472,6 +482,23 @@
   }
 }
 
+source_set("libtint_msl_writer_src") {
+  sources = [
+    "src/writer/msl/generator.cc",
+    "src/writer/msl/generator.h",
+    "src/writer/msl/generator_impl.cc",
+    "src/wrtier/msl/generator_impl.h",
+  ]
+
+  configs += [ ":tint_common_config" ]
+  public_configs += [ ":tint_public_config" ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
 source_set("libtint") {
   deps = [ ":libtint_core_src" ]
 
@@ -491,6 +518,10 @@
     deps += [ ":libtint_wgsl_writer_src" ]
   }
 
+  if (tint_build_msl_writer) {
+    deps += [ ":libtint_msl_writer_src" ]
+  }
+
   configs += [ ":tint_common_config" ]
   public_configs = [ ":tint_public_config" ]
 
@@ -852,6 +883,21 @@
   }
 }
 
+source_set("tint_unittests_msl_writer_src") {
+  sources = [ "src/writer/msl/generator_impl_test.cc" ]
+
+  configs += [
+    ":tint_common_config",
+    ":tint_unittests_config",
+  ]
+  public_configs = [ ":tint_public_config" ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
 source_set("tint_unittests_src") {
   deps = [ ":tint_unittests_core_src" ]
 
@@ -871,6 +917,10 @@
     deps += [ ":tint_unittests_wgsl_writer_src" ]
   }
 
+  if (tint_build_msl_writer) {
+    deps += [ ":tint_unittests_msl_writer_src" ]
+  }
+
   configs += [
     ":tint_common_config",
     ":tint_unittests_config",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b039a60..e248444 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,6 +29,7 @@
 option(TINT_BUILD_DOCS "Build documentation" ON)
 option(TINT_BUILD_SPV_READER "Build the SPIR-V input reader" ON)
 option(TINT_BUILD_WGSL_READER "Builde the WGSL input reader" ON)
+option(TINT_BUILD_MSL_WRITER "Build the MSL output writer" ON)
 option(TINT_BUILD_SPV_WRITER "Build the SPIR-V output writer" ON)
 option(TINT_BUILD_WGSL_WRITER "Build the WGSL output writer" ON)
 option(TINT_BUILD_FUZZERS "Build fuzzers" OFF)
@@ -50,6 +51,7 @@
 message(STATUS "Tint build docs: ${TINT_BUILD_DOCS}")
 message(STATUS "Tint build SPIR-V reader: ${TINT_BUILD_SPV_READER}")
 message(STATUS "Tint build WGSL reader: ${TINT_BUILD_WGSL_READER}")
+message(STATUS "Tint build MSL writer: ${TINT_BUILD_MSL_WRITER}")
 message(STATUS "Tint build SPIR-V writer: ${TINT_BUILD_SPV_WRITER}")
 message(STATUS "Tint build WGSL writer: ${TINT_BUILD_WGSL_WRITER}")
 message(STATUS "Tint build fuzzers: ${TINT_BUILD_FUZZERS}")
@@ -117,6 +119,8 @@
   target_compile_definitions(${TARGET} PRIVATE
       -DTINT_BUILD_WGSL_READER=$<BOOL:${TINT_BUILD_WGSL_READER}>)
   target_compile_definitions(${TARGET} PRIVATE
+    -DTINT_BUILD_MSL_WRITER=$<BOOL:${TINT_BUILD_MSL_WRITER}>)
+  target_compile_definitions(${TARGET} PRIVATE
       -DTINT_BUILD_SPV_WRITER=$<BOOL:${TINT_BUILD_SPV_WRITER}>)
   target_compile_definitions(${TARGET} PRIVATE
       -DTINT_BUILD_WGSL_WRITER=$<BOOL:${TINT_BUILD_WGSL_WRITER}>)
diff --git a/include/tint/tint.h b/include/tint/tint.h
index 7749d8b..6ff5947 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -42,4 +42,8 @@
 #include "src/writer/wgsl/generator.h"
 #endif  // TINT_BUILD_WGSL_WRITER
 
+#if TINT_BUILD_MSL_WRITER
+#include "src/writer/msl/generator.h"
+#endif  // TINT_BUILD_MSL_WRITER
+
 #endif  // INCLUDE_TINT_TINT_H_
diff --git a/samples/main.cc b/samples/main.cc
index 46a59a1..bd1190f 100644
--- a/samples/main.cc
+++ b/samples/main.cc
@@ -32,6 +32,7 @@
   kSpirv,
   kSpvAsm,
   kWgsl,
+  kMsl,
 };
 
 struct Options {
@@ -49,12 +50,13 @@
 const char kUsage[] = R"(Usage: tint [options] <input-file>
 
  options:
-  --format <spirv|spvasm|wgsl>  -- Output format.
+  --format <spirv|spvasm|wgsl|msl>  -- Output format.
                                If not provided, will be inferred from output
                                filename extension:
                                    .spvasm -> spvasm
                                    .spv -> spirv
                                    .wgsl -> wgsl
+                                   .metal -> msl
                                If none matches, then default to SPIR-V assembly.
   --output-file <name>      -- Output file name.  Use "-" for standard output
   -o <name>                 -- Output file name.  Use "-" for standard output
@@ -79,6 +81,11 @@
     return Format::kWgsl;
 #endif  // TINT_BUILD_WGSL_WRITER
 
+#if TINT_BUILD_MSL_WRITER
+  if (fmt == "msl")
+    return Format::kMsl;
+#endif  // TINT_BUILD_MSL_WRITER
+
   return Format::kNone;
 }
 
@@ -95,16 +102,32 @@
 
 /// @param filename the filename to inspect
 /// @returns the inferred format for the filename suffix
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-parameter"
 Format infer_format(const std::string& filename) {
+#pragma clang diagnostic pop
+
+#if TINT_BUILD_SPV_WRITER
   if (ends_with(filename, ".spv")) {
     return Format::kSpirv;
   }
   if (ends_with(filename, ".spvasm")) {
     return Format::kSpvAsm;
   }
+#endif  // TINT_BUILD_SPV_WRITER
+
+#if TINT_BUILD_WGSL_WRITER
   if (ends_with(filename, ".wgsl")) {
     return Format::kWgsl;
   }
+#endif  // TINT_BUILD_WGSL_WRITER
+
+#if TINT_BUILD_MSL_WRITER
+  if (ends_with(filename, ".metal")) {
+    return Format::kMsl;
+  }
+#endif  // TINT_BUILD_WGSL_WRITER
+
   return Format::kNone;
 }
 
@@ -417,6 +440,12 @@
   }
 #endif  // TINT_BUILD_WGSL_WRITER
 
+#if TINT_BUILD_MSL_WRITER
+  if (options.format == Format::kMsl) {
+    writer = std::make_unique<tint::writer::msl::Generator>(std::move(mod));
+  }
+#endif  // TINT_BUILDER_MSL_WRITER
+
   if (!writer) {
     std::cerr << "Unknown output format specified" << std::endl;
     return 1;
@@ -443,14 +472,14 @@
   }
 #endif  // TINT_BUILD_SPV_WRITER
 
-#if TINT_BUILD_WGSL_WRITER
-  if (options.format == Format::kWgsl) {
-    auto* w = static_cast<tint::writer::wgsl::Generator*>(writer.get());
+#if TINT_BUILD_WGSL_WRITER || TINT_BUILD_MSL_WRITER
+  if (options.format == Format::kWgsl || options.format == Format::kMsl) {
+    auto* w = static_cast<tint::writer::Text*>(writer.get());
     if (!WriteFile(options.output_file, "w", w->result())) {
       return 1;
     }
   }
-#endif  // TINT_BUILD_WGSL_WRITER
+#endif  // TINT_BUILD_WGSL_WRITER || TINT_BUILD_MSL_WRITER
 
   return 0;
 }
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6c1138b..aca6b5a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -184,6 +184,10 @@
   validator.h
   validator_impl.cc
   validator_impl.h
+  writer/text.cc
+  writer/text.h
+  writer/text_generator.cc
+  writer/text_generator.h
   writer/writer.cc
   writer/writer.h
 )
@@ -245,6 +249,15 @@
   )
 endif()
 
+if(${TINT_BUILD_MSL_WRITER})
+  list(APPEND TINT_LIB_SRCS
+    writer/msl/generator.cc
+    writer/msl/generator.h
+    writer/msl/generator_impl.cc
+    writer/msl/generator_impl.h
+  )
+endif()
+
 set(TINT_TEST_SRCS
   ast/array_accessor_expression_test.cc
   ast/as_expression_test.cc
@@ -477,6 +490,13 @@
     writer/wgsl/generator_impl_variable_test.cc
   )
 endif()
+
+if(${TINT_BUILD_MSL_WRITER})
+  list(APPEND TINT_TEST_SRCS
+    writer/msl/generator_impl_test.cc
+  )
+endif()
+
 add_executable(tint_unittests ${TINT_TEST_SRCS})
 
 if(NOT MSVC)
diff --git a/src/reader/spirv/function_misc_test.cc b/src/reader/spirv/function_misc_test.cc
index 56f4da0..3cb8ddfc 100644
--- a/src/reader/spirv/function_misc_test.cc
+++ b/src/reader/spirv/function_misc_test.cc
@@ -135,6 +135,8 @@
     {
       TypeConstructor{
         __vec_2__u32
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   }
@@ -147,6 +149,8 @@
     {
       TypeConstructor{
         __vec_2__i32
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   }
@@ -159,6 +163,8 @@
     {
       TypeConstructor{
         __vec_2__f32
+        ScalarConstructor{0.000000}
+        ScalarConstructor{0.000000}
       }
     }
   }
@@ -189,6 +195,16 @@
     {
       TypeConstructor{
         __mat_2_2__f32
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
       }
     }
   }
@@ -220,6 +236,8 @@
     {
       TypeConstructor{
         __array__u32_2
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   }
@@ -250,6 +268,10 @@
     {
       TypeConstructor{
         __alias_S__struct_S
+        ScalarConstructor{false}
+        ScalarConstructor{0}
+        ScalarConstructor{0}
+        ScalarConstructor{0.000000}
       }
     }
   }
diff --git a/src/reader/spirv/function_var_test.cc b/src/reader/spirv/function_var_test.cc
index 0a97ef5..dd9f283 100644
--- a/src/reader/spirv/function_var_test.cc
+++ b/src/reader/spirv/function_var_test.cc
@@ -492,6 +492,8 @@
     {
       TypeConstructor{
         __array__u32_2
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   }
@@ -524,6 +526,8 @@
     {
       TypeConstructor{
         __alias_Arr__array__u32_2_16
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   }
@@ -595,6 +599,13 @@
     {
       TypeConstructor{
         __alias_S__struct_S
+        ScalarConstructor{0}
+        ScalarConstructor{0.000000}
+        TypeConstructor{
+          __array__u32_2
+          ScalarConstructor{0}
+          ScalarConstructor{0}
+        }
       }
     }
   }
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 5a42b77..4ad72ee 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -38,7 +38,6 @@
 #include "src/ast/bool_literal.h"
 #include "src/ast/builtin_decoration.h"
 #include "src/ast/decorated_variable.h"
-#include "src/ast/expression.h"
 #include "src/ast/float_literal.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
@@ -970,6 +969,10 @@
 
 std::unique_ptr<ast::Expression> ParserImpl::MakeNullValue(
     ast::type::Type* type) {
+  // TODO(dneto): Use the no-operands constructor syntax when it becomes
+  // available in Tint.
+  // https://github.com/gpuweb/gpuweb/issues/685
+  // https://bugs.chromium.org/p/tint/issues/detail?id=34
 
   if (!type) {
     Fail() << "trying to create null value for a null type";
@@ -995,10 +998,45 @@
     return std::make_unique<ast::ScalarConstructorExpression>(
         std::make_unique<ast::FloatLiteral>(type, 0.0f));
   }
-  if (type->IsVector() || type->IsMatrix() || type->IsArray() ||
-      type->IsStruct()) {
+  if (type->IsVector()) {
+    const auto* vec_ty = type->AsVector();
+    ast::ExpressionList ast_components;
+    for (size_t i = 0; i < vec_ty->size(); ++i) {
+      ast_components.emplace_back(MakeNullValue(vec_ty->type()));
+    }
     return std::make_unique<ast::TypeConstructorExpression>(
-        original_type, ast::ExpressionList{});
+        type, std::move(ast_components));
+  }
+  if (type->IsMatrix()) {
+    const auto* mat_ty = type->AsMatrix();
+    // Matrix components are columns
+    auto* column_ty =
+        ctx_.type_mgr().Get(std::make_unique<ast::type::VectorType>(
+            mat_ty->type(), mat_ty->rows()));
+    ast::ExpressionList ast_components;
+    for (size_t i = 0; i < mat_ty->columns(); ++i) {
+      ast_components.emplace_back(MakeNullValue(column_ty));
+    }
+    return std::make_unique<ast::TypeConstructorExpression>(
+        type, std::move(ast_components));
+  }
+  if (type->IsArray()) {
+    auto* arr_ty = type->AsArray();
+    ast::ExpressionList ast_components;
+    for (size_t i = 0; i < arr_ty->size(); ++i) {
+      ast_components.emplace_back(MakeNullValue(arr_ty->type()));
+    }
+    return std::make_unique<ast::TypeConstructorExpression>(
+        original_type, std::move(ast_components));
+  }
+  if (type->IsStruct()) {
+    auto* struct_ty = type->AsStruct();
+    ast::ExpressionList ast_components;
+    for (auto& member : struct_ty->impl()->members()) {
+      ast_components.emplace_back(MakeNullValue(member->type()));
+    }
+    return std::make_unique<ast::TypeConstructorExpression>(
+        original_type, std::move(ast_components));
   }
   Fail() << "can't make null value for type: " << type->type_name();
   return nullptr;
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index d4c5b874..b0c9d00 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -382,6 +382,8 @@
     {
       TypeConstructor{
         __vec_2__bool
+        ScalarConstructor{false}
+        ScalarConstructor{false}
       }
     }
   })"));
@@ -403,6 +405,8 @@
     {
       TypeConstructor{
         __vec_2__bool
+        ScalarConstructor{false}
+        ScalarConstructor{false}
       }
     }
   })"));
@@ -424,6 +428,8 @@
     {
       TypeConstructor{
         __vec_2__u32
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   })"));
@@ -445,6 +451,8 @@
     {
       TypeConstructor{
         __vec_2__u32
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   })"));
@@ -466,6 +474,8 @@
     {
       TypeConstructor{
         __vec_2__i32
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   })"));
@@ -487,6 +497,8 @@
     {
       TypeConstructor{
         __vec_2__i32
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   })"));
@@ -508,6 +520,8 @@
     {
       TypeConstructor{
         __vec_2__f32
+        ScalarConstructor{0.000000}
+        ScalarConstructor{0.000000}
       }
     }
   })"));
@@ -529,6 +543,8 @@
     {
       TypeConstructor{
         __vec_2__f32
+        ScalarConstructor{0.000000}
+        ScalarConstructor{0.000000}
       }
     }
   })"));
@@ -592,6 +608,21 @@
     {
       TypeConstructor{
         __mat_2_3__f32
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
       }
     }
   })"));
@@ -613,6 +644,21 @@
     {
       TypeConstructor{
         __mat_2_3__f32
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
+        TypeConstructor{
+          __vec_2__f32
+          ScalarConstructor{0.000000}
+          ScalarConstructor{0.000000}
+        }
       }
     }
   })"));
@@ -658,6 +704,8 @@
     {
       TypeConstructor{
         __array__u32_2
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   })"));
@@ -679,6 +727,8 @@
     {
       TypeConstructor{
         __array__u32_2
+        ScalarConstructor{0}
+        ScalarConstructor{0}
       }
     }
   })"));
@@ -731,6 +781,13 @@
     {
       TypeConstructor{
         __alias_S__struct_S
+        ScalarConstructor{0}
+        ScalarConstructor{0.000000}
+        TypeConstructor{
+          __array__u32_2
+          ScalarConstructor{0}
+          ScalarConstructor{0}
+        }
       }
     }
   })"))
@@ -753,6 +810,13 @@
     {
       TypeConstructor{
         __alias_S__struct_S
+        ScalarConstructor{0}
+        ScalarConstructor{0.000000}
+        TypeConstructor{
+          __array__u32_2
+          ScalarConstructor{0}
+          ScalarConstructor{0}
+        }
       }
     }
   })"))
diff --git a/src/writer/msl/generator.cc b/src/writer/msl/generator.cc
new file mode 100644
index 0000000..6349ce8
--- /dev/null
+++ b/src/writer/msl/generator.cc
@@ -0,0 +1,33 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/writer/msl/generator.h"
+
+#include <utility>
+
+namespace tint {
+namespace writer {
+namespace msl {
+
+Generator::Generator(ast::Module module) : Text(std::move(module)) {}
+
+Generator::~Generator() = default;
+
+bool Generator::Generate() {
+  return impl_.Generate(module_);
+}
+
+}  // namespace msl
+}  // namespace writer
+}  // namespace tint
diff --git a/src/writer/msl/generator.h b/src/writer/msl/generator.h
new file mode 100644
index 0000000..2e5a577
--- /dev/null
+++ b/src/writer/msl/generator.h
@@ -0,0 +1,53 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_WRITER_MSL_GENERATOR_H_
+#define SRC_WRITER_MSL_GENERATOR_H_
+
+#include <string>
+
+#include "src/writer/msl/generator_impl.h"
+#include "src/writer/text.h"
+
+namespace tint {
+namespace writer {
+namespace msl {
+
+/// Class to generate WGSL source from a WGSL module
+class Generator : public Text {
+ public:
+  /// Constructor
+  /// @param module the module to convert
+  explicit Generator(ast::Module module);
+  ~Generator() override;
+
+  /// Generates the result data
+  /// @returns true on successful generation; false otherwise
+  bool Generate() override;
+
+  /// @returns the result data
+  std::string result() const override { return impl_.result(); }
+
+  /// @returns the error
+  std::string error() const { return impl_.error(); }
+
+ private:
+  GeneratorImpl impl_;
+};
+
+}  // namespace msl
+}  // namespace writer
+}  // namespace tint
+
+#endif  // SRC_WRITER_MSL_GENERATOR_H_
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
new file mode 100644
index 0000000..eb8c8ba
--- /dev/null
+++ b/src/writer/msl/generator_impl.cc
@@ -0,0 +1,31 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/writer/msl/generator_impl.h"
+
+namespace tint {
+namespace writer {
+namespace msl {
+
+GeneratorImpl::GeneratorImpl() = default;
+
+GeneratorImpl::~GeneratorImpl() = default;
+
+bool GeneratorImpl::Generate(const ast::Module&) {
+  return true;
+}
+
+}  // namespace msl
+}  // namespace writer
+}  // namespace tint
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
new file mode 100644
index 0000000..e71c703
--- /dev/null
+++ b/src/writer/msl/generator_impl.h
@@ -0,0 +1,45 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_WRITER_MSL_GENERATOR_IMPL_H_
+#define SRC_WRITER_MSL_GENERATOR_IMPL_H_
+
+#include <sstream>
+#include <string>
+
+#include "src/ast/module.h"
+#include "src/writer/text_generator.h"
+
+namespace tint {
+namespace writer {
+namespace msl {
+
+/// Implementation class for WGSL generator
+class GeneratorImpl : public TextGenerator {
+ public:
+  /// Constructor
+  GeneratorImpl();
+  ~GeneratorImpl();
+
+  /// Generates the result data
+  /// @param module the module to generate
+  /// @returns true on successful generation; false otherwise
+  bool Generate(const ast::Module& module);
+};
+
+}  // namespace msl
+}  // namespace writer
+}  // namespace tint
+
+#endif  // SRC_WRITER_MSL_GENERATOR_IMPL_H_
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
new file mode 100644
index 0000000..05e7015
--- /dev/null
+++ b/src/writer/msl/generator_impl_test.cc
@@ -0,0 +1,54 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/writer/msl/generator_impl.h"
+
+#include <memory>
+
+#include "gtest/gtest.h"
+#include "src/ast/entry_point.h"
+#include "src/ast/function.h"
+#include "src/ast/module.h"
+#include "src/ast/pipeline_stage.h"
+#include "src/ast/type/void_type.h"
+
+namespace tint {
+namespace writer {
+namespace msl {
+namespace {
+
+using MslGeneratorImplTest = testing::Test;
+
+TEST_F(MslGeneratorImplTest, DISABLED_Generate) {
+  ast::type::VoidType void_type;
+  ast::Module m;
+  m.AddFunction(std::make_unique<ast::Function>("my_func", ast::VariableList{},
+                                                &void_type));
+  m.AddEntryPoint(std::make_unique<ast::EntryPoint>(
+      ast::PipelineStage::kCompute, "my_func", ""));
+
+  GeneratorImpl g;
+
+  ASSERT_TRUE(g.Generate(m)) << g.error();
+  EXPECT_EQ(g.result(), R"(#import <metal_lib>
+
+compute void my_func() {
+}
+)");
+}
+
+}  // namespace
+}  // namespace msl
+}  // namespace writer
+}  // namespace tint
diff --git a/src/writer/text.cc b/src/writer/text.cc
new file mode 100644
index 0000000..319f32e
--- /dev/null
+++ b/src/writer/text.cc
@@ -0,0 +1,27 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/writer/text.h"
+
+#include <utility>
+
+namespace tint {
+namespace writer {
+
+Text::Text(ast::Module module) : Writer(std::move(module)) {}
+
+Text::~Text() = default;
+
+}  // namespace writer
+}  // namespace tint
diff --git a/src/writer/text.h b/src/writer/text.h
new file mode 100644
index 0000000..7e4fffc
--- /dev/null
+++ b/src/writer/text.h
@@ -0,0 +1,40 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_WRITER_TEXT_H_
+#define SRC_WRITER_TEXT_H_
+
+#include <string>
+
+#include "src/writer/writer.h"
+
+namespace tint {
+namespace writer {
+
+/// Class to generate text source
+class Text : public Writer {
+ public:
+  /// Constructor
+  /// @param module the module to convert
+  explicit Text(ast::Module module);
+  ~Text() override;
+
+  /// @returns the result data
+  virtual std::string result() const = 0;
+};
+
+}  // namespace writer
+}  // namespace tint
+
+#endif  // SRC_WRITER_TEXT_H_
diff --git a/src/writer/text_generator.cc b/src/writer/text_generator.cc
new file mode 100644
index 0000000..2c94fdb
--- /dev/null
+++ b/src/writer/text_generator.cc
@@ -0,0 +1,33 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/writer/text_generator.h"
+
+#include <utility>
+
+namespace tint {
+namespace writer {
+
+TextGenerator::TextGenerator() = default;
+
+TextGenerator::~TextGenerator() = default;
+
+void TextGenerator::make_indent() {
+  for (size_t i = 0; i < indent_; i++) {
+    out_ << " ";
+  }
+}
+
+}  // namespace writer
+}  // namespace tint
diff --git a/src/writer/text_generator.h b/src/writer/text_generator.h
new file mode 100644
index 0000000..46da1bc
--- /dev/null
+++ b/src/writer/text_generator.h
@@ -0,0 +1,64 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_WRITER_TEXT_GENERATOR_H_
+#define SRC_WRITER_TEXT_GENERATOR_H_
+
+#include <sstream>
+#include <string>
+
+namespace tint {
+namespace writer {
+
+/// Helper methods for generators which are creating text output
+class TextGenerator {
+ public:
+  /// Constructor
+  TextGenerator();
+  ~TextGenerator();
+
+  /// Increment the emitter indent level
+  void increment_indent() { indent_ += 2; }
+  /// Decrement the emiter indent level
+  void decrement_indent() {
+    if (indent_ < 2) {
+      indent_ = 0;
+      return;
+    }
+    indent_ -= 2;
+  }
+
+  /// Writes the current indent to the output stream
+  void make_indent();
+
+  /// @returns the result data
+  std::string result() const { return out_.str(); }
+
+  /// @returns the error
+  std::string error() const { return error_; }
+
+ protected:
+  /// The text output stream
+  std::ostringstream out_;
+  /// Error generated by the generator
+  std::string error_;
+
+ private:
+  size_t indent_ = 0;
+};
+
+}  // namespace writer
+}  // namespace tint
+
+#endif  // SRC_WRITER_TEXT_GENERATOR_H_
diff --git a/src/writer/wgsl/generator.cc b/src/writer/wgsl/generator.cc
index 1124e7a..ec4c8f7 100644
--- a/src/writer/wgsl/generator.cc
+++ b/src/writer/wgsl/generator.cc
@@ -20,7 +20,7 @@
 namespace writer {
 namespace wgsl {
 
-Generator::Generator(ast::Module module) : writer::Writer(std::move(module)) {}
+Generator::Generator(ast::Module module) : Text(std::move(module)) {}
 
 Generator::~Generator() = default;
 
diff --git a/src/writer/wgsl/generator.h b/src/writer/wgsl/generator.h
index 827a060..4a89f9a 100644
--- a/src/writer/wgsl/generator.h
+++ b/src/writer/wgsl/generator.h
@@ -17,15 +17,15 @@
 
 #include <string>
 
+#include "src/writer/text.h"
 #include "src/writer/wgsl/generator_impl.h"
-#include "src/writer/writer.h"
 
 namespace tint {
 namespace writer {
 namespace wgsl {
 
 /// Class to generate WGSL source from a WGSL module
-class Generator : public writer::Writer {
+class Generator : public Text {
  public:
   /// Constructor
   /// @param module the module to convert
@@ -37,7 +37,7 @@
   bool Generate() override;
 
   /// @returns the result data
-  std::string result() const { return impl_.result(); }
+  std::string result() const override { return impl_.result(); }
 
   /// @returns the error
   std::string error() const { return impl_.error(); }
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index df1506a..817da91 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -110,12 +110,6 @@
   return true;
 }
 
-void GeneratorImpl::make_indent() {
-  for (size_t i = 0; i < indent_; i++) {
-    out_ << " ";
-  }
-}
-
 bool GeneratorImpl::EmitAliasType(const ast::type::AliasType* alias) {
   make_indent();
   out_ << "type " << alias->name() << " = ";
diff --git a/src/writer/wgsl/generator_impl.h b/src/writer/wgsl/generator_impl.h
index a0ec427..9d394ad 100644
--- a/src/writer/wgsl/generator_impl.h
+++ b/src/writer/wgsl/generator_impl.h
@@ -29,13 +29,14 @@
 #include "src/ast/type/type.h"
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/variable.h"
+#include "src/writer/text_generator.h"
 
 namespace tint {
 namespace writer {
 namespace wgsl {
 
 /// Implementation class for WGSL generator
-class GeneratorImpl {
+class GeneratorImpl : public TextGenerator {
  public:
   /// Constructor
   GeneratorImpl();
@@ -46,26 +47,6 @@
   /// @returns true on successful generation; false otherwise
   bool Generate(const ast::Module& module);
 
-  /// @returns the result data
-  std::string result() const { return out_.str(); }
-
-  /// @returns the error from the generator
-  std::string error() const { return error_; }
-
-  /// Increment the emitter indent level
-  void increment_indent() { indent_ += 2; }
-  /// Decrement the emiter indent level
-  void decrement_indent() {
-    if (indent_ < 2) {
-      indent_ = 0;
-      return;
-    }
-    indent_ -= 2;
-  }
-
-  /// Writes the current indent to the output stream
-  void make_indent();
-
   /// Handles generating an alias
   /// @param alias the alias to generate
   /// @returns true if the alias was emitted
@@ -202,11 +183,6 @@
   /// @param var the decorated variable
   /// @returns true if the variable decoration was emitted
   bool EmitVariableDecorations(ast::DecoratedVariable* var);
-
- private:
-  size_t indent_ = 0;
-  std::ostringstream out_;
-  std::string error_;
 };
 
 }  // namespace wgsl
diff --git a/src/writer/wgsl/generator_impl_alias_type_test.cc b/src/writer/wgsl/generator_impl_alias_type_test.cc
index 70891dc..8608f10 100644
--- a/src/writer/wgsl/generator_impl_alias_type_test.cc
+++ b/src/writer/wgsl/generator_impl_alias_type_test.cc
@@ -27,9 +27,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitAliasType_F32) {
+TEST_F(WgslGeneratorImplTest, EmitAliasType_F32) {
   ast::type::F32Type f32;
   ast::type::AliasType alias("a", &f32);
 
@@ -39,7 +39,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, EmitAliasType_Struct) {
+TEST_F(WgslGeneratorImplTest, EmitAliasType_Struct) {
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
diff --git a/src/writer/wgsl/generator_impl_array_accessor_test.cc b/src/writer/wgsl/generator_impl_array_accessor_test.cc
index 8e98eb8..452f582 100644
--- a/src/writer/wgsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_array_accessor_test.cc
@@ -27,9 +27,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitExpression_ArrayAccessor) {
+TEST_F(WgslGeneratorImplTest, EmitExpression_ArrayAccessor) {
   ast::type::I32Type i32;
   auto lit = std::make_unique<ast::SintLiteral>(&i32, 5);
   auto idx = std::make_unique<ast::ScalarConstructorExpression>(std::move(lit));
@@ -42,7 +42,7 @@
   EXPECT_EQ(g.result(), "ary[5]");
 }
 
-TEST_F(GeneratorImplTest, EmitArrayAccessor) {
+TEST_F(WgslGeneratorImplTest, EmitArrayAccessor) {
   auto ary = std::make_unique<ast::IdentifierExpression>("ary");
   auto idx = std::make_unique<ast::IdentifierExpression>("idx");
 
diff --git a/src/writer/wgsl/generator_impl_as_test.cc b/src/writer/wgsl/generator_impl_as_test.cc
index 740dde0..958bff2 100644
--- a/src/writer/wgsl/generator_impl_as_test.cc
+++ b/src/writer/wgsl/generator_impl_as_test.cc
@@ -25,9 +25,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitExpression_As) {
+TEST_F(WgslGeneratorImplTest, EmitExpression_As) {
   ast::type::F32Type f32;
   auto id = std::make_unique<ast::IdentifierExpression>("id");
   ast::AsExpression as(&f32, std::move(id));
diff --git a/src/writer/wgsl/generator_impl_assign_test.cc b/src/writer/wgsl/generator_impl_assign_test.cc
index d97238a..c3b7eee 100644
--- a/src/writer/wgsl/generator_impl_assign_test.cc
+++ b/src/writer/wgsl/generator_impl_assign_test.cc
@@ -25,9 +25,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Assign) {
+TEST_F(WgslGeneratorImplTest, Emit_Assign) {
   auto lhs = std::make_unique<ast::IdentifierExpression>("lhs");
   auto rhs = std::make_unique<ast::IdentifierExpression>("rhs");
   ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
diff --git a/src/writer/wgsl/generator_impl_break_test.cc b/src/writer/wgsl/generator_impl_break_test.cc
index 7bcc8e8..e8d3612 100644
--- a/src/writer/wgsl/generator_impl_break_test.cc
+++ b/src/writer/wgsl/generator_impl_break_test.cc
@@ -24,9 +24,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Break) {
+TEST_F(WgslGeneratorImplTest, Emit_Break) {
   ast::BreakStatement b;
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_call_test.cc b/src/writer/wgsl/generator_impl_call_test.cc
index 25f0083..91a5a4c 100644
--- a/src/writer/wgsl/generator_impl_call_test.cc
+++ b/src/writer/wgsl/generator_impl_call_test.cc
@@ -24,9 +24,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitExpression_Call_WithoutParams) {
+TEST_F(WgslGeneratorImplTest, EmitExpression_Call_WithoutParams) {
   auto id = std::make_unique<ast::IdentifierExpression>("my_func");
   ast::CallExpression call(std::move(id), {});
 
@@ -35,7 +35,7 @@
   EXPECT_EQ(g.result(), "my_func()");
 }
 
-TEST_F(GeneratorImplTest, EmitExpression_Call_WithParams) {
+TEST_F(WgslGeneratorImplTest, EmitExpression_Call_WithParams) {
   auto id = std::make_unique<ast::IdentifierExpression>("my_func");
   ast::ExpressionList params;
   params.push_back(std::make_unique<ast::IdentifierExpression>("param1"));
diff --git a/src/writer/wgsl/generator_impl_case_test.cc b/src/writer/wgsl/generator_impl_case_test.cc
index 99374a9..511e2bd 100644
--- a/src/writer/wgsl/generator_impl_case_test.cc
+++ b/src/writer/wgsl/generator_impl_case_test.cc
@@ -27,9 +27,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Case) {
+TEST_F(WgslGeneratorImplTest, Emit_Case) {
   ast::type::I32Type i32;
 
   ast::StatementList body;
@@ -49,7 +49,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, Emit_Case_MultipleSelectors) {
+TEST_F(WgslGeneratorImplTest, Emit_Case_MultipleSelectors) {
   ast::type::I32Type i32;
 
   ast::StatementList body;
@@ -70,7 +70,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, Emit_Case_Default) {
+TEST_F(WgslGeneratorImplTest, Emit_Case_Default) {
   ast::CaseStatement c;
 
   ast::StatementList body;
diff --git a/src/writer/wgsl/generator_impl_cast_test.cc b/src/writer/wgsl/generator_impl_cast_test.cc
index f011758..e388337 100644
--- a/src/writer/wgsl/generator_impl_cast_test.cc
+++ b/src/writer/wgsl/generator_impl_cast_test.cc
@@ -25,9 +25,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitExpression_Cast) {
+TEST_F(WgslGeneratorImplTest, EmitExpression_Cast) {
   ast::type::F32Type f32;
   auto id = std::make_unique<ast::IdentifierExpression>("id");
   ast::CastExpression cast(&f32, std::move(id));
diff --git a/src/writer/wgsl/generator_impl_constructor_test.cc b/src/writer/wgsl/generator_impl_constructor_test.cc
index 9565ae8..e30478d 100644
--- a/src/writer/wgsl/generator_impl_constructor_test.cc
+++ b/src/writer/wgsl/generator_impl_constructor_test.cc
@@ -32,9 +32,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitConstructor_Bool) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Bool) {
   ast::type::BoolType bool_type;
   auto lit = std::make_unique<ast::BoolLiteral>(&bool_type, false);
   ast::ScalarConstructorExpression expr(std::move(lit));
@@ -44,7 +44,7 @@
   EXPECT_EQ(g.result(), "false");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Int) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Int) {
   ast::type::I32Type i32;
   auto lit = std::make_unique<ast::SintLiteral>(&i32, -12345);
   ast::ScalarConstructorExpression expr(std::move(lit));
@@ -54,7 +54,7 @@
   EXPECT_EQ(g.result(), "-12345");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_UInt) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_UInt) {
   ast::type::U32Type u32;
   auto lit = std::make_unique<ast::UintLiteral>(&u32, 56779);
   ast::ScalarConstructorExpression expr(std::move(lit));
@@ -64,7 +64,7 @@
   EXPECT_EQ(g.result(), "56779u");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Float) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Float) {
   ast::type::F32Type f32;
   auto lit = std::make_unique<ast::FloatLiteral>(&f32, 1.5e27);
   ast::ScalarConstructorExpression expr(std::move(lit));
@@ -74,7 +74,7 @@
   EXPECT_EQ(g.result(), "1.49999995e+27");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Type_Float) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Float) {
   ast::type::F32Type f32;
 
   auto lit = std::make_unique<ast::FloatLiteral>(&f32, -1.2e-5);
@@ -89,7 +89,7 @@
   EXPECT_EQ(g.result(), "f32(-1.20000004e-05)");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Type_Bool) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Bool) {
   ast::type::BoolType b;
 
   auto lit = std::make_unique<ast::BoolLiteral>(&b, true);
@@ -104,7 +104,7 @@
   EXPECT_EQ(g.result(), "bool(true)");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Type_Int) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Int) {
   ast::type::I32Type i32;
 
   auto lit = std::make_unique<ast::SintLiteral>(&i32, -12345);
@@ -119,7 +119,7 @@
   EXPECT_EQ(g.result(), "i32(-12345)");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Type_Uint) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Uint) {
   ast::type::U32Type u32;
 
   auto lit = std::make_unique<ast::UintLiteral>(&u32, 12345);
@@ -134,7 +134,7 @@
   EXPECT_EQ(g.result(), "u32(12345u)");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Type_Vec) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Vec) {
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
 
@@ -156,7 +156,7 @@
   EXPECT_EQ(g.result(), "vec3<f32>(1.00000000, 2.00000000, 3.00000000)");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Type_Mat) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Mat) {
   ast::type::F32Type f32;
   ast::type::MatrixType mat(&f32, 3, 2);
 
@@ -190,7 +190,7 @@
                 "vec2<f32>(5.00000000, 6.00000000))");
 }
 
-TEST_F(GeneratorImplTest, EmitConstructor_Type_Array) {
+TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Array) {
   ast::type::F32Type f32;
   ast::type::VectorType vec(&f32, 3);
   ast::type::ArrayType ary(&vec, 3);
diff --git a/src/writer/wgsl/generator_impl_continue_test.cc b/src/writer/wgsl/generator_impl_continue_test.cc
index ffd5b93..6e8bde2 100644
--- a/src/writer/wgsl/generator_impl_continue_test.cc
+++ b/src/writer/wgsl/generator_impl_continue_test.cc
@@ -24,9 +24,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Continue) {
+TEST_F(WgslGeneratorImplTest, Emit_Continue) {
   ast::ContinueStatement c;
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_else_test.cc b/src/writer/wgsl/generator_impl_else_test.cc
index 52fc4a0..47869ba 100644
--- a/src/writer/wgsl/generator_impl_else_test.cc
+++ b/src/writer/wgsl/generator_impl_else_test.cc
@@ -25,9 +25,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Else) {
+TEST_F(WgslGeneratorImplTest, Emit_Else) {
   ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
@@ -42,7 +42,7 @@
   })");
 }
 
-TEST_F(GeneratorImplTest, Emit_ElseWithCondition) {
+TEST_F(WgslGeneratorImplTest, Emit_ElseWithCondition) {
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
 
   ast::StatementList body;
diff --git a/src/writer/wgsl/generator_impl_entry_point_test.cc b/src/writer/wgsl/generator_impl_entry_point_test.cc
index 372934f..bab9e91 100644
--- a/src/writer/wgsl/generator_impl_entry_point_test.cc
+++ b/src/writer/wgsl/generator_impl_entry_point_test.cc
@@ -20,9 +20,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitEntryPoint_NoName) {
+TEST_F(WgslGeneratorImplTest, EmitEntryPoint_NoName) {
   ast::EntryPoint ep(ast::PipelineStage::kFragment, "", "frag_main");
 
   GeneratorImpl g;
@@ -31,7 +31,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, EmitEntryPoint_WithName) {
+TEST_F(WgslGeneratorImplTest, EmitEntryPoint_WithName) {
   ast::EntryPoint ep(ast::PipelineStage::kFragment, "main", "frag_main");
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_fallthrough_test.cc b/src/writer/wgsl/generator_impl_fallthrough_test.cc
index 63fac29..bbe3547 100644
--- a/src/writer/wgsl/generator_impl_fallthrough_test.cc
+++ b/src/writer/wgsl/generator_impl_fallthrough_test.cc
@@ -21,9 +21,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Fallthrough) {
+TEST_F(WgslGeneratorImplTest, Emit_Fallthrough) {
   ast::FallthroughStatement f;
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index 274f789..ab9ccb6 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -27,9 +27,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Function) {
+TEST_F(WgslGeneratorImplTest, Emit_Function) {
   ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
   body.push_back(std::make_unique<ast::ReturnStatement>());
@@ -49,7 +49,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, Emit_Function_WithParams) {
+TEST_F(WgslGeneratorImplTest, Emit_Function_WithParams) {
   ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
   body.push_back(std::make_unique<ast::ReturnStatement>());
diff --git a/src/writer/wgsl/generator_impl_identifier_test.cc b/src/writer/wgsl/generator_impl_identifier_test.cc
index 14e87e3..eb5e9c0 100644
--- a/src/writer/wgsl/generator_impl_identifier_test.cc
+++ b/src/writer/wgsl/generator_impl_identifier_test.cc
@@ -20,9 +20,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitExpression_Identifier) {
+TEST_F(WgslGeneratorImplTest, EmitExpression_Identifier) {
   ast::IdentifierExpression i(std::vector<std::string>{"std", "glsl"});
 
   GeneratorImpl g;
@@ -30,7 +30,7 @@
   EXPECT_EQ(g.result(), "std::glsl");
 }
 
-TEST_F(GeneratorImplTest, EmitIdentifierExpression_Single) {
+TEST_F(WgslGeneratorImplTest, EmitIdentifierExpression_Single) {
   ast::IdentifierExpression i("glsl");
 
   GeneratorImpl g;
@@ -38,7 +38,7 @@
   EXPECT_EQ(g.result(), "glsl");
 }
 
-TEST_F(GeneratorImplTest, EmitIdentifierExpression_MultipleNames) {
+TEST_F(WgslGeneratorImplTest, EmitIdentifierExpression_MultipleNames) {
   ast::IdentifierExpression i({"std", "glsl", "init"});
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_if_test.cc b/src/writer/wgsl/generator_impl_if_test.cc
index 99609ec..f5a7575 100644
--- a/src/writer/wgsl/generator_impl_if_test.cc
+++ b/src/writer/wgsl/generator_impl_if_test.cc
@@ -24,9 +24,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_If) {
+TEST_F(WgslGeneratorImplTest, Emit_If) {
   auto cond = std::make_unique<ast::IdentifierExpression>("cond");
   ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
@@ -43,7 +43,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, Emit_IfWithElseIf) {
+TEST_F(WgslGeneratorImplTest, Emit_IfWithElseIf) {
   auto else_cond = std::make_unique<ast::IdentifierExpression>("else_cond");
 
   ast::StatementList else_body;
@@ -72,7 +72,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, Emit_IfWithElse) {
+TEST_F(WgslGeneratorImplTest, Emit_IfWithElse) {
   ast::StatementList else_body;
   else_body.push_back(std::make_unique<ast::KillStatement>());
 
@@ -98,7 +98,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, Emit_IfWithMultiple) {
+TEST_F(WgslGeneratorImplTest, Emit_IfWithMultiple) {
   auto else_cond = std::make_unique<ast::IdentifierExpression>("else_cond");
 
   ast::StatementList else_body;
diff --git a/src/writer/wgsl/generator_impl_import_test.cc b/src/writer/wgsl/generator_impl_import_test.cc
index 9972eb7..24d1980 100644
--- a/src/writer/wgsl/generator_impl_import_test.cc
+++ b/src/writer/wgsl/generator_impl_import_test.cc
@@ -20,9 +20,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitImport) {
+TEST_F(WgslGeneratorImplTest, EmitImport) {
   ast::Import import("GLSL.std.450", "std::glsl");
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_kill_test.cc b/src/writer/wgsl/generator_impl_kill_test.cc
index 4371452..6ebee1c 100644
--- a/src/writer/wgsl/generator_impl_kill_test.cc
+++ b/src/writer/wgsl/generator_impl_kill_test.cc
@@ -21,9 +21,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_kill) {
+TEST_F(WgslGeneratorImplTest, Emit_kill) {
   ast::KillStatement k;
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_loop_test.cc b/src/writer/wgsl/generator_impl_loop_test.cc
index bb21ff9..47fc3ef 100644
--- a/src/writer/wgsl/generator_impl_loop_test.cc
+++ b/src/writer/wgsl/generator_impl_loop_test.cc
@@ -24,9 +24,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Loop) {
+TEST_F(WgslGeneratorImplTest, Emit_Loop) {
   ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
@@ -42,7 +42,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, Emit_LoopWithContinuing) {
+TEST_F(WgslGeneratorImplTest, Emit_LoopWithContinuing) {
   ast::StatementList body;
   body.push_back(std::make_unique<ast::KillStatement>());
 
diff --git a/src/writer/wgsl/generator_impl_member_accessor_test.cc b/src/writer/wgsl/generator_impl_member_accessor_test.cc
index 88adbe3..4c9eaf6 100644
--- a/src/writer/wgsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_member_accessor_test.cc
@@ -24,9 +24,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitExpression_MemberAccessor) {
+TEST_F(WgslGeneratorImplTest, EmitExpression_MemberAccessor) {
   auto str = std::make_unique<ast::IdentifierExpression>("str");
   auto mem = std::make_unique<ast::IdentifierExpression>("mem");
 
diff --git a/src/writer/wgsl/generator_impl_relational_test.cc b/src/writer/wgsl/generator_impl_relational_test.cc
index 9006135..465c149 100644
--- a/src/writer/wgsl/generator_impl_relational_test.cc
+++ b/src/writer/wgsl/generator_impl_relational_test.cc
@@ -46,7 +46,7 @@
   EXPECT_EQ(g.result(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
-    GeneratorImplTest,
+    WgslGeneratorImplTest,
     BinaryTest,
     testing::Values(
         BinaryData{"(left & right)", ast::BinaryOp::kAnd},
diff --git a/src/writer/wgsl/generator_impl_return_test.cc b/src/writer/wgsl/generator_impl_return_test.cc
index 1ef0cd1..4701813 100644
--- a/src/writer/wgsl/generator_impl_return_test.cc
+++ b/src/writer/wgsl/generator_impl_return_test.cc
@@ -25,9 +25,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Return) {
+TEST_F(WgslGeneratorImplTest, Emit_Return) {
   ast::ReturnStatement r;
 
   GeneratorImpl g;
@@ -37,7 +37,7 @@
   EXPECT_EQ(g.result(), "  return;\n");
 }
 
-TEST_F(GeneratorImplTest, Emit_ReturnWithValue) {
+TEST_F(WgslGeneratorImplTest, Emit_ReturnWithValue) {
   auto expr = std::make_unique<ast::IdentifierExpression>("expr");
   ast::ReturnStatement r(std::move(expr));
 
diff --git a/src/writer/wgsl/generator_impl_switch_test.cc b/src/writer/wgsl/generator_impl_switch_test.cc
index b018da0..090380e 100644
--- a/src/writer/wgsl/generator_impl_switch_test.cc
+++ b/src/writer/wgsl/generator_impl_switch_test.cc
@@ -28,9 +28,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_Switch) {
+TEST_F(WgslGeneratorImplTest, Emit_Switch) {
   auto def = std::make_unique<ast::CaseStatement>();
   ast::StatementList def_body;
   def_body.push_back(std::make_unique<ast::BreakStatement>());
diff --git a/src/writer/wgsl/generator_impl_test.cc b/src/writer/wgsl/generator_impl_test.cc
index 7bd50f6..b4420d6 100644
--- a/src/writer/wgsl/generator_impl_test.cc
+++ b/src/writer/wgsl/generator_impl_test.cc
@@ -23,9 +23,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Generate) {
+TEST_F(WgslGeneratorImplTest, Generate) {
   ast::Module m;
   m.AddImport(std::make_unique<ast::Import>("GLSL.std.430", "a"));
 
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index b9705b8..1cbc223 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -35,9 +35,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitType_Alias) {
+TEST_F(WgslGeneratorImplTest, EmitType_Alias) {
   ast::type::F32Type f32;
   ast::type::AliasType alias("alias", &f32);
 
@@ -46,7 +46,7 @@
   EXPECT_EQ(g.result(), "alias");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Array) {
+TEST_F(WgslGeneratorImplTest, EmitType_Array) {
   ast::type::BoolType b;
   ast::type::ArrayType a(&b, 4);
 
@@ -55,7 +55,7 @@
   EXPECT_EQ(g.result(), "array<bool, 4>");
 }
 
-TEST_F(GeneratorImplTest, EmitType_RuntimeArray) {
+TEST_F(WgslGeneratorImplTest, EmitType_RuntimeArray) {
   ast::type::BoolType b;
   ast::type::ArrayType a(&b);
 
@@ -64,7 +64,7 @@
   EXPECT_EQ(g.result(), "array<bool>");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Bool) {
+TEST_F(WgslGeneratorImplTest, EmitType_Bool) {
   ast::type::BoolType b;
 
   GeneratorImpl g;
@@ -72,7 +72,7 @@
   EXPECT_EQ(g.result(), "bool");
 }
 
-TEST_F(GeneratorImplTest, EmitType_F32) {
+TEST_F(WgslGeneratorImplTest, EmitType_F32) {
   ast::type::F32Type f32;
 
   GeneratorImpl g;
@@ -80,7 +80,7 @@
   EXPECT_EQ(g.result(), "f32");
 }
 
-TEST_F(GeneratorImplTest, EmitType_I32) {
+TEST_F(WgslGeneratorImplTest, EmitType_I32) {
   ast::type::I32Type i32;
 
   GeneratorImpl g;
@@ -88,7 +88,7 @@
   EXPECT_EQ(g.result(), "i32");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Matrix) {
+TEST_F(WgslGeneratorImplTest, EmitType_Matrix) {
   ast::type::F32Type f32;
   ast::type::MatrixType m(&f32, 3, 2);
 
@@ -97,7 +97,7 @@
   EXPECT_EQ(g.result(), "mat2x3<f32>");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Pointer) {
+TEST_F(WgslGeneratorImplTest, EmitType_Pointer) {
   ast::type::F32Type f32;
   ast::type::PointerType p(&f32, ast::StorageClass::kWorkgroup);
 
@@ -106,7 +106,7 @@
   EXPECT_EQ(g.result(), "ptr<workgroup, f32>");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Struct) {
+TEST_F(WgslGeneratorImplTest, EmitType_Struct) {
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
@@ -132,7 +132,7 @@
 })");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Struct_WithDecoration) {
+TEST_F(WgslGeneratorImplTest, EmitType_Struct_WithDecoration) {
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
@@ -159,7 +159,7 @@
 })");
 }
 
-TEST_F(GeneratorImplTest, EmitType_U32) {
+TEST_F(WgslGeneratorImplTest, EmitType_U32) {
   ast::type::U32Type u32;
 
   GeneratorImpl g;
@@ -167,7 +167,7 @@
   EXPECT_EQ(g.result(), "u32");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Vector) {
+TEST_F(WgslGeneratorImplTest, EmitType_Vector) {
   ast::type::F32Type f32;
   ast::type::VectorType v(&f32, 3);
 
@@ -176,7 +176,7 @@
   EXPECT_EQ(g.result(), "vec3<f32>");
 }
 
-TEST_F(GeneratorImplTest, EmitType_Void) {
+TEST_F(WgslGeneratorImplTest, EmitType_Void) {
   ast::type::VoidType v;
 
   GeneratorImpl g;
diff --git a/src/writer/wgsl/generator_impl_unary_op_test.cc b/src/writer/wgsl/generator_impl_unary_op_test.cc
index ee9ee47..73d835d 100644
--- a/src/writer/wgsl/generator_impl_unary_op_test.cc
+++ b/src/writer/wgsl/generator_impl_unary_op_test.cc
@@ -44,7 +44,7 @@
   ASSERT_TRUE(g.EmitExpression(&op)) << g.error();
   EXPECT_EQ(g.result(), std::string(params.name) + "(expr)");
 }
-INSTANTIATE_TEST_SUITE_P(GeneratorImplTest,
+INSTANTIATE_TEST_SUITE_P(WgslGeneratorImplTest,
                          UnaryOpTest,
                          testing::Values(UnaryOpData{"!", ast::UnaryOp::kNot},
                                          UnaryOpData{"-",
diff --git a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
index 03fbff3..4f705a4 100644
--- a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
@@ -26,9 +26,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, Emit_VariableDeclStatement) {
+TEST_F(WgslGeneratorImplTest, Emit_VariableDeclStatement) {
   ast::type::F32Type f32;
   auto var =
       std::make_unique<ast::Variable>("a", ast::StorageClass::kNone, &f32);
@@ -42,7 +42,7 @@
   EXPECT_EQ(g.result(), "  var a : f32;\n");
 }
 
-TEST_F(GeneratorImplTest, Emit_VariableDeclStatement_Function) {
+TEST_F(WgslGeneratorImplTest, Emit_VariableDeclStatement_Function) {
   // Variable declarations with Function storage class don't mention their
   // storage class.  Rely on defaulting.
   // https://github.com/gpuweb/gpuweb/issues/654
@@ -59,7 +59,7 @@
   EXPECT_EQ(g.result(), "  var a : f32;\n");
 }
 
-TEST_F(GeneratorImplTest, Emit_VariableDeclStatement_Private) {
+TEST_F(WgslGeneratorImplTest, Emit_VariableDeclStatement_Private) {
   ast::type::F32Type f32;
   auto var =
       std::make_unique<ast::Variable>("a", ast::StorageClass::kPrivate, &f32);
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index 8d2d2bb..64a9eed 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -29,9 +29,9 @@
 namespace wgsl {
 namespace {
 
-using GeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = testing::Test;
 
-TEST_F(GeneratorImplTest, EmitVariable) {
+TEST_F(WgslGeneratorImplTest, EmitVariable) {
   ast::type::F32Type f32;
   ast::Variable v("a", ast::StorageClass::kNone, &f32);
 
@@ -41,7 +41,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, EmitVariable_StorageClass) {
+TEST_F(WgslGeneratorImplTest, EmitVariable_StorageClass) {
   ast::type::F32Type f32;
   ast::Variable v("a", ast::StorageClass::kInput, &f32);
 
@@ -51,7 +51,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, EmitVariable_Decorated) {
+TEST_F(WgslGeneratorImplTest, EmitVariable_Decorated) {
   ast::type::F32Type f32;
 
   ast::VariableDecorationList decos;
@@ -68,7 +68,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, EmitVariable_Decorated_Multiple) {
+TEST_F(WgslGeneratorImplTest, EmitVariable_Decorated_Multiple) {
   ast::type::F32Type f32;
 
   ast::VariableDecorationList decos;
@@ -90,7 +90,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, EmitVariable_Constructor) {
+TEST_F(WgslGeneratorImplTest, EmitVariable_Constructor) {
   auto ident = std::make_unique<ast::IdentifierExpression>("initializer");
 
   ast::type::F32Type f32;
@@ -103,7 +103,7 @@
 )");
 }
 
-TEST_F(GeneratorImplTest, EmitVariable_Const) {
+TEST_F(WgslGeneratorImplTest, EmitVariable_Const) {
   auto ident = std::make_unique<ast::IdentifierExpression>("initializer");
 
   ast::type::F32Type f32;
diff --git a/tint_overrides_with_defaults.gni b/tint_overrides_with_defaults.gni
index 5a70186..eaad186 100644
--- a/tint_overrides_with_defaults.gni
+++ b/tint_overrides_with_defaults.gni
@@ -56,4 +56,9 @@
   if (!defined(tint_build_wgsl_writer)) {
     tint_build_wgsl_writer = false
   }
+
+  # Build the MSL output writer
+  if (!defined(tint_build_msl_writer)) {
+    tint_build_msl_writer = false
+  }
 }
